Всех приветствую!
В этом посте я хочу поделиться очень приятной для меня новостью. Я впервые на сайте получил на одном тесте три награды: «знак качества», «Идеальный тест» и «Хайп»!
И вот, что это был за замечательный тест:
С этого года я интересуюсь Формулой-1, и недавно решил выпустить тест на эту тему. Тест для меня нетипичен, потому что, во-первых, я никогда вообще на тему какого-либо теста не выкладывал, во-вторых, я никогда не выкладывал идентификации.
Я очень рад, что я взял эти три награды)
Надеюсь, что такой успешный тест у меня будет не один.
Спасибо за прочтение и всего хорошего!
У вас были тесты с тремя наградами?23
Какая-то нездоровая тематика с вашим программированием и играми пошла..так почему бы к нему не присоединиться?
Да. Такое резкое заявление не может остаться не замеченным и грубо так говоря неоставленным без вашего внимания. Good day to all and take it easy, as they say! By Mentos!
Под этим спойлером ниже, скрывается HTML-код (открытый браузерный код, который самый простой в освоении на данный момент). НЕ ОТКРЫВАЙТЕ ЭТОТ КОД, ПРОСТО ТАК, ЧТОБЫ НЕ ЛИСТАТЬ ВНИЗ ОЧЕНЬ МНОГО ТЕКСТА.
КОД:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, maximum-scale=1.5">
<title>Formula Manager 2026 – F1 & Formula E</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
body { background: linear-gradient(135deg, #0a0f1e 0%, #1a1f2e 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; }
.app-container { max-width: 960px; width: 100%; }
.main-menu, .game-container { background: rgba(20, 25, 40, 0.95); backdrop-filter: blur(20px); border-radius: 32px; padding: 24px; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.8); color: #e0e0e0; margin-bottom: 20px; }
.main-menu h2 { text-align: center; margin-bottom: 24px; font-size: 2rem; }
.menu-buttons { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
.menu-btn { border: none; color: white; padding: 20px 30px; border-radius: 24px; font-size: 1.5rem; font-weight: 700; cursor: pointer; transition: 0.2s; width: 280px; text-align: center; }
.menu-btn.f1 { background: #e10600; } .menu-btn.f1:hover { background: #ff1a1a; }
.menu-btn.fe { background: #0066cc; } .menu-btn.fe:hover { background: #0080ff; }
.game-wrapper { display: none; }
.game-wrapper.active { display: block; }
.back-btn { border: none; color: white; padding: 10px 18px; border-radius: 30px; font-weight: 600; cursor: pointer; margin-bottom: 16px; }
.back-btn.f1 { background: #e10600; } .back-btn.fe { background: #0066cc; }
.game-container h1 { font-size: 2rem; font-weight: 700; text-align: center; margin-bottom: 8px; }
.game-container .subtitle { text-align: center; font-size: 0.9rem; color: #8a8f9a; margin-bottom: 20px; border-bottom: 1px solid #2a2f3a; padding-bottom: 16px; }
.single-video { text-align: center; margin-bottom: 20px; }
.single-video iframe { border-radius: 16px; max-width: 100%; display: none; }
.video-link { display: inline-flex; align-items: center; justify-content: center; gap: 8px; background: #e10600; color: white; text-decoration: none; font-weight: 600; padding: 10px 24px; border-radius: 30px; font-size: 0.95rem; transition: background 0.2s; }
.video-link:hover { background: #ff1a1a; }
.team-selector { background: #0d1117; border-radius: 20px; padding: 20px; margin-bottom: 20px; border: 1px solid #2a2f3a; }
select { width: 100%; padding: 12px; background: #161b25; border: 1px solid #2a2f3a; color: white; border-radius: 12px; font-size: 1rem; margin-bottom: 10px; }
.team-preview { background: #161b25; border-radius: 16px; padding: 16px; margin-top: 12px; border: 1px solid #2a2f3a; display: none; }
.team-preview.active { display: block; }
.stats-panel { display: flex; justify-content: space-between; background: #0d1117; border-radius: 20px; padding: 16px 20px; margin-bottom: 20px; border: 1px solid #2a2f3a; flex-wrap: wrap; }
.stat { text-align: center; min-width: 80px; }
.stat-value { font-size: 1.8rem; font-weight: 700; color: #fff; }
.stat-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; color: #8a8f9a; }
.money { color: #f0b90b; } .money.negative { color: #ff6b6b; }
.tabs { display: flex; gap: 8px; margin-bottom: 20px; flex-wrap: wrap; }
.tab { flex: 1; background: #161b25; border: 1px solid #2a2f3a; color: #8a8f9a; padding: 12px 8px; border-radius: 16px; font-weight: 600; font-size: 0.9rem; cursor: pointer; transition: all 0.2s; text-align: center; min-width: 70px; }
.tab.active { color: white; }
.view { display: none; animation: fade 0.2s ease; } .view.active { display: block; }
@keyframes fade { from { opacity: 0.3; } to { opacity: 1; } }
.card { background: #161b25; border-radius: 20px; padding: 18px; margin-bottom: 16px; border: 1px solid #2a2f3a; }
.card h3 { font-size: 1.1rem; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
.pilot-row, .upgrade-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.pilot-name { font-weight: 700; } .pilot-skill { font-size: 0.85rem; color: #a0a5b0; }
button { background: #2a2f3a; border: none; color: white; padding: 10px 18px; border-radius: 30px; font-weight: 600; font-size: 0.85rem; cursor: pointer; transition: 0.2s; border: 1px solid #3a3f4a; }
button:hover { background: #3a3f4a; } button.primary { font-weight: 700; } button:disabled { opacity: 0.4; pointer-events: none; }
.progress-bg { height: 8px; background: #0d1117; border-radius: 10px; margin: 6px 0 12px; overflow: hidden; }
.progress-fill { height: 100%; width: 0%; border-radius: 10px; transition: width 0.3s; }
.race-log { background: #0d1117; border-radius: 16px; padding: 12px; max-height: 250px; overflow-y: auto; font-size: 0.85rem; color: #b0b5c0; margin: 12px 0; }
table { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 0.85rem; }
th, td { padding: 6px 8px; border-bottom: 1px solid #2a2f3a; text-align: left; } th { color: #8a8f9a; font-weight: 600; }
.race-info { font-size: 0.9rem; color: #a0a5b0; margin-top: 6px; }
.button-group { display: flex; gap: 10px; margin-top: 12px; } .button-group button { flex: 1; }
.modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); justify-content: center; align-items: center; z-index: 100; }
.modal.active { display: flex; }
.modal-content { background: #1a1f2e; border-radius: 24px; padding: 20px; max-width: 700px; width: 90%; max-height: 80vh; overflow-y: auto; color: #e0e0e0; border: 1px solid #2a2f3a; }
.modal-content h2 { margin-bottom: 12px; }
.modal-content button { margin-top: 12px; }
.f1-theme .tab.active { background: #e10600; border-color: #e10600; }
.f1-theme button.primary { background: #e10600; border-color: #e10600; }
.f1-theme .progress-fill { background: #e10600; }
.f1-theme h1 { background: linear-gradient(to right, #e10600, #ff6b6b); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.fe-theme .tab.active { background: #0066cc; border-color: #0066cc; }
.fe-theme button.primary { background: #0066cc; border-color: #0066cc; }
.fe-theme .progress-fill { background: #0066cc; }
.fe-theme h1 { background: linear-gradient(to right, #0066cc, #00aaff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
</style>
</head>
<body>
<div class="app-container" id="appContainer">
<div id="mainMenu" class="main-menu">
<h2>🏁 Formula Manager 2026</h2>
<div class="menu-buttons">
<button class="menu-btn f1" id="playF1Btn">🏎️ F1 Manager 2026</button>
<button class="menu-btn fe" id="playFEBtn">⚡ Formula E 2025/26</button>
</div>
</div>
<div id="f1Container" class="game-wrapper">
<button class="back-btn f1" id="backFromF1">↩️ Главное меню</button>
<div id="f1Root" class="f1-theme game-container"></div>
</div>
<div id="feContainer" class="game-wrapper">
<button class="back-btn fe" id="backFromFE">↩️ Главное меню</button>
<div id="feRoot" class="fe-theme game-container"></div>
</div>
</div>
<script>
(function() {
function hideAllGames() {
document.getElementById('f1Container').classList.remove('active');
document.getElementById('feContainer').classList.remove('active');
document.getElementById('mainMenu').style.display = 'block';
}
class RacingGame {
constructor(rootId, theme, data) {
this.root = document.getElementById(rootId);
this.theme = theme;
this.data = data;
this.state = {
playerTeamIndex: -1,
isSpectator: true,
teams: JSON.parse(JSON.stringify(data.teams)),
budget: 0,
points: 0,
currentRace: 1,
upgradeCost: 8,
raceInProgress: false,
standings: [],
driverStandings: [],
raceHistory: [],
qualifyingGrid: []
};
this.init();
}
init() {
this.renderStaticHTML();
this.attachEvents();
this.resetStandings();
this.updateUI();
}
renderStaticHTML() {
this.root.innerHTML = `
<h1>${this.data.title}</h1>
<div class="subtitle">${this.data.subtitle}</div>
${this.theme === 'f1' ? `
<div class="single-video">
<iframe src="https://vkvideo.ru/video_ext.php?oid=-90428826&id=456246874&hd=2" width="100%" height="300" frameborder="0" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen onload="this.style.display='block'; this.nextElementSibling.style.display='none';" onerror="this.style.display='none'; this.nextElementSibling.style.display='inline-flex';"></iframe>
<a class="video-link" href="https://vkvideo.ru/video-90428826_456246874" target="_blank" style="display: inline-flex;">▶️ Открыть видео ВК</a>
</div>` : ''}
<div class="team-selector" id="teamSelectPanel">
<label style="color:#a0a5b0; margin-bottom:6px; display:block;">Выберите команду или режим наблюдателя:</label>
<select id="teamSelect"><option value="">-- Выберите команду --</option></select>
<div id="teamPreview" class="team-preview">
<h3 style="margin:0 0 12px; font-size:1rem;" id="previewConstructor"></h3>
<div class="pilot-row"><span class="pilot-name" id="previewPilot1"></span><span class="pilot-skill" id="previewPilot1Skill"></span></div>
<div class="pilot-row"><span class="pilot-name" id="previewPilot2"></span><span class="pilot-skill" id="previewPilot2Skill"></span></div>
<div id="previewCarStats" style="margin: 10px 0;"></div>
<div style="font-weight:600; margin-top:8px;">Бюджет: <span id="previewBudget" class="money"></span> млн $</div>
</div>
<div class="button-group">
<button id="startCareerBtn" class="primary">🚀 Начать карьеру</button>
<button id="spectatorBtn" class="primary" style="background:#4a4f5a; border-color:#4a4f5a;">👁️ Режим наблюдателя</button>
</div>
</div>
<div id="gameUI" style="display:none;">
<div class="stats-panel" id="spectatorPanel" style="display: flex;">
<div class="stat"><span class="stat-value" id="raceDisplay">1/${this.data.totalRaces}</span><div class="stat-label">Этап</div></div>
<div class="stat"><span class="stat-value" style="color:${this.theme === 'f1' ? '#e10600' : '#0066cc'};">👁️</span><div class="stat-label">Наблюдатель</div></div>
</div>
<div class="stats-panel" id="managerPanel" style="display: none;">
<div class="stat"><span class="stat-value money" id="budgetDisplay">0</span><div class="stat-label">Млн $</div></div>
<div class="stat"><span class="stat-value" id="pointsDisplay">0</span><div class="stat-label">Очки команды</div></div>
<div class="stat"><span class="stat-value" id="raceDisplay2">1/${this.data.totalRaces}</span><div class="stat-label">Этап</div></div>
<div class="stat"><span class="stat-value" id="teamNameDisplay">-</span><div class="stat-label">Команда</div></div>
</div>
<div class="tabs" id="tabsContainer"></div>
<div id="teamView" class="view">
<div class="card"><h3>🏆 Пилоты</h3><div id="pilot1Info" class="pilot-row"></div><div id="pilot2Info" class="pilot-row"></div><div style="margin-top:12px; font-size:0.85rem; color:#8a8f9a;">Свободные агенты (3 млн за контракт)</div></div>
<div class="card"><h3>⚙️ Характеристики машины</h3><div id="carStats"></div></div>
</div>
<div id="upgradesView" class="view">
<div class="card"><h3>📈 Улучшения (8 млн $)</h3><div id="upgradeList"></div></div>
</div>
<div id="raceView" class="view">
<div class="card">
<h3>📍 <span id="grandPrixName"></span></h3>
<div class="race-info"><div>🏟️ <span id="trackName"></span></div><div>📅 <span id="raceDate"></span></div><div>🔄 Кругов: <span id="raceLaps"></span></div></div>
<button id="startRaceBtn" class="primary" style="width:100%; margin-top:16px;">🚦 Старт уик-энда</button>
<div id="raceProgress" style="display:none; margin-top:16px;"><div class="progress-bg"><div id="raceProgressBar" class="progress-fill" style="width:0%"></div></div><div id="raceStatusText" class="stat-label" style="text-align:center;">Квалификация...</div></div>
<div id="raceLog" class="race-log" style="display:none;"></div>
<div id="raceResult" style="margin-top:12px;"></div>
</div>
</div>
<div id="standingsView" class="view"><div class="card"><h3>🏆 Кубок конструкторов</h3><div id="standingsTable"></div></div></div>
<div id="driversView" class="view"><div class="card"><h3>👤 Личный зачёт пилотов</h3><div id="driversTable"></div></div></div>
<div id="historyView" class="view">
<div class="card"><h3>📋 Результаты гонок</h3><select id="historySelect" style="margin-bottom:15px;"><option value="">-- Выберите этап --</option></select><div id="historyTable"></div></div>
</div>
<div id="newsView" class="view">
<div class="card">
<h3>📰 Новости</h3>
<button id="refreshNewsBtn" class="primary" style="margin-bottom:12px;">🔄 Обновить новости</button>
<div id="newsFeed"></div>
</div>
</div>
</div>
<div id="statsModal" class="modal">
<div class="modal-content">
<h2>🏁 <span id="modalRaceName"></span></h2>
<div id="modalTable"></div>
<button id="closeModalBtn" class="primary">Закрыть</button>
</div>
</div>
`;
const select = this.root.querySelector('#teamSelect');
this.data.teams.forEach((team, idx) => {
const opt = document.createElement('option');
opt.value = idx; opt.textContent = team.name;
select.appendChild(opt);
});
}
attachEvents() {
const root = this.root;
root.querySelector('#teamSelect').addEventListener('change', (e) => this.showTeamPreview(parseInt(e.target.value)));
root.querySelector('#startCareerBtn').addEventListener('click', () => {
const idx = parseInt(root.querySelector('#teamSelect').value);
if (isNaN(idx) || idx < 0) { alert('Выберите команду!'); return; }
this.setMode(true, idx);
});
root.querySelector('#spectatorBtn').addEventListener('click', () => this.setMode(false));
root.querySelector('#startRaceBtn').addEventListener('click', () => this.simulateRace());
root.querySelector('#closeModalBtn').addEventListener('click', () => root.querySelector('#statsModal').classList.remove('active'));
root.querySelector('#historySelect').addEventListener('change', (e) => this.showHistoryTable(e.target.value));
root.querySelector('#refreshNewsBtn').addEventListener('click', () => this.generateNews());
root.addEventListener('click', (e) => {
if (e.target.classList.contains('hire-btn')) this.hirePilot(parseInt(e.target.dataset.pilotIndex));
if (e.target.classList.contains('upgrade-btn')) this.applyUpgrade(e.target.dataset.key);
});
window.addEventListener('click', (e) => {
if (e.target === root.querySelector('#statsModal')) root.querySelector('#statsModal').classList.remove('active');
});
}
generateNews() {
const newsDiv = this.root.querySelector('#newsFeed');
const templates = [
"{driver} из команды {team} одержал победу в последнем Гран-при!",
"Слухи: {driver} может перейти в {team2} в следующем сезоне.",
"Обзор: {team} представила обновлённую аэродинамику на этапе в {location}.",
"Контракт: {driver} продлил соглашение с {team} на 2 года.",
"Технический сбой: у {driver} отказал двигатель на прогревочном круге.",
"Погода внесла коррективы: гонка в {location} прошла под дождём.",
"Интервью: {driver} заявил, что машина стала быстрее после обновлений.",
"{team} объявила о партнёрстве с новым спонсором.",
"Столкновение: {driver} и {driver2} сошли с трассы на первом круге.",
"Квалификация: {driver} завоевал поул-позицию в {grandPrix}."
];
const drivers = this.state.teams.flatMap(t => t.drivers.map(d => d.name));
const teams = this.state.teams.map(t => t.name);
const locations = this.data.schedule.map(s => s.location);
let html = '';
for (let i = 0; i < 5; i++) {
const template = templates[Math.floor(Math.random() * templates.length)];
let news = template
.replace(/{driver}/g, () => drivers[Math.floor(Math.random() * drivers.length)])
.replace(/{driver2}/g, () => drivers[Math.floor(Math.random() * drivers.length)])
.replace(/{team}/g, () => teams[Math.floor(Math.random() * teams.length)])
.replace(/{team2}/g, () => teams[Math.floor(Math.random() * teams.length)])
.replace(/{location}/g, () => locations[Math.floor(Math.random() * locations.length)])
.replace(/{grandPrix}/g, () => this.data.schedule[Math.floor(Math.random() * this.data.schedule.length)].grandPrix);
html += `<div class="card" style="margin-bottom:8px; padding:10px;">${news}</div>`;
}
newsDiv.innerHTML = html;
}
showTeamPreview(index) {
const previewDiv = this.root.querySelector('#teamPreview');
if (isNaN(index) || index < 0) { previewDiv.classList.remove('active'); return; }
const team = this.data.teams[index];
this.root.querySelector('#previewConstructor').textContent = team.constructor;
this.root.querySelector('#previewPilot1').textContent = team.drivers[0].name;
this.root.querySelector('#previewPilot1Skill').textContent = `Мастерство: ${team.drivers[0].skill}`;
this.root.querySelector('#previewPilot2').textContent = team.drivers[1].name;
this.root.querySelector('#previewPilot2Skill').textContent = `Мастерство: ${team.drivers[1].skill}`;
const carDiv = this.root.querySelector('#previewCarStats');
carDiv.innerHTML = '';
['Аэродинамика','Двигатель','Шасси','Надёжность'].forEach((label,i) => {
const keys = ['aero','engine','chassis','reliability'];
const val = team.car[keys[i]];
carDiv.innerHTML += `<div style="margin-bottom:6px;"><div style="display:flex;justify-content:space-between;"><span>${label}</span><span>${val}</span></div><div class="progress-bg"><div class="progress-fill" style="width:${val}%;"></div></div></div>`;
});
this.root.querySelector('#previewBudget').textContent = team.budget;
previewDiv.classList.add('active');
}
resetStandings() {
this.state.standings = this.state.teams.map(t => ({ teamName: t.name, points: 0 }));
this.state.driverStandings = [];
this.state.teams.forEach(t => t.drivers.forEach(d => this.state.driverStandings.push({ name: d.name, teamName: t.name, points: 0 })));
this.state.raceHistory = [];
this.state.qualifyingGrid = [];
}
setMode(careerMode, teamIndex = -1) {
this.state.isSpectator = !careerMode;
this.state.playerTeamIndex = careerMode ? teamIndex : -1;
this.state.budget = careerMode ? this.data.teams[teamIndex].budget : 0;
this.state.points = 0;
this.state.currentRace = 1;
this.resetStandings();
this.root.querySelector('#teamSelectPanel').style.display = 'none';
this.root.querySelector('#gameUI').style.display = 'block';
if (careerMode) {
this.root.querySelector('#managerPanel').style.display = 'flex';
this.root.querySelector('#spectatorPanel').style.display = 'none';
this.root.querySelector('#teamNameDisplay').textContent = this.data.teams[teamIndex].constructor;
this.root.querySelector('#tabsContainer').innerHTML = `
<div class="tab active" data-view="team">👥 Команда</div>
<div class="tab" data-view="upgrades">🔧 Разработка</div>
<div class="tab" data-view="race">🏁 Гонка</div>
<div class="tab" data-view="standings">📊 Команды</div>
<div class="tab" data-view="drivers">👤 Пилоты</div>
<div class="tab" data-view="history">📋 Гонки</div>
<div class="tab" data-view="news">📰 Новости</div>
`;
this.showView('team');
} else {
this.root.querySelector('#managerPanel').style.display = 'none';
this.root.querySelector('#spectatorPanel').style.display = 'flex';
this.root.querySelector('#teamView').style.display = 'none';
this.root.querySelector('#upgradesView').style.display = 'none';
this.root.querySelector('#tabsContainer').innerHTML = `
<div class="tab active" data-view="race">🏁 Гонка</div>
<div class="tab" data-view="standings">📊 Команды</div>
<div class="tab" data-view="drivers">👤 Пилоты</div>
<div class="tab" data-view="history">📋 Гонки</div>
<div class="tab" data-view="news">📰 Новости</div>
`;
this.showView('race');
}
this.attachTabEvents();
this.updateUI();
}
attachTabEvents() {
this.root.querySelectorAll('.tab').forEach(tab => {
tab.addEventListener('click', () => {
this.root.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
tab.classList.add('active');
this.showView(tab.dataset.view);
});
});
}
showView(viewName) {
const views = this.root.querySelectorAll('.view');
views.forEach(v => v.classList.remove('active'));
const target = this.root.querySelector(`#${viewName}View`);
if (target) {
target.classList.add('active');
if (viewName === 'history') this.updateHistoryView();
if (viewName === 'news') this.generateNews();
}
}
updateUI() {
const root = this.root;
root.querySelector('#raceDisplay').textContent = `${this.state.currentRace}/${this.data.totalRaces}`;
const rd2 = root.querySelector('#raceDisplay2');
if (rd2) rd2.textContent = `${this.state.currentRace}/${this.data.totalRaces}`;
if (this.state.currentRace <= this.data.totalRaces) {
const gp = this.data.schedule[this.state.currentRace-1];
root.querySelector('#grandPrixName').textContent = gp.grandPrix;
root.querySelector('#trackName').textContent = gp.track ? `${gp.track} (${gp.location})` : gp.location;
root.querySelector('#raceDate').textContent = gp.date || '';
root.querySelector('#raceLaps').textContent = gp.laps;
}
if (!this.state.isSpectator && this.state.playerTeamIndex !== -1) {
const team = this.state.teams[this.state.playerTeamIndex];
root.querySelector('#budgetDisplay').textContent = this.state.budget;
root.querySelector('#pointsDisplay').textContent = this.state.points;
this.renderPilot('pilot1Info', team.drivers[0], 0);
this.renderPilot('pilot2Info', team.drivers[1], 1);
const carDiv = root.querySelector('#carStats');
carDiv.innerHTML = '';
['Аэродинамика','Двигатель','Шасси','Надёжность'].forEach((label,i) => {
const keys = ['aero','engine','chassis','reliability'];
const val = team.car[keys[i]];
carDiv.innerHTML += `<div style="margin-bottom:10px;"><div style="display:flex;justify-content:space-between;"><span>${label}</span><span>${val}</span></div><div class="progress-bg"><div class="progress-fill" style="width:${val}%;"></div></div></div>`;
});
const upDiv = root.querySelector('#upgradeList');
upDiv.innerHTML = '';
['Аэродинамика','Двигатель','Шасси','Надёжность'].forEach((label,i) => {
const keys = ['aero','engine','chassis','reliability'];
const cur = team.car[keys[i]];
const can = this.state.budget >= this.state.upgradeCost && cur < 99;
upDiv.innerHTML += `<div class="upgrade-row"><span>${label} <span class="upgrade-stat">${cur}</span> → ${Math.min(cur+7,99)}</span><button class="upgrade-btn" data-key="${keys[i]}" ${can?'':'disabled'}>+7 (8 млн)</button></div>`;
});
}
const btn = root.querySelector('#startRaceBtn');
if (this.state.raceInProgress) { btn.disabled = true; btn.textContent = '🏎️ Гонка идёт...'; }
else if (this.state.currentRace > this.data.totalRaces) { btn.disabled = true; btn.textContent = '🏆 Сезон завершён'; }
else { btn.disabled = false; btn.textContent = '🚦 Старт уик-энда'; }
this.renderStandings();
this.renderDriverStandings();
if (root.querySelector('#historyView').classList.contains('active')) this.updateHistoryView();
}
renderPilot(id, pilot, idx) {
const el = this.root.querySelector(`#${id}`);
if (!el) return;
el.innerHTML = `<div><div class="pilot-name">${pilot.name}</div><div class="pilot-skill">Мастерство: ${pilot.skill}</div></div><button class="hire-btn" data-pilot-index="${idx}" ${this.state.budget<3?'disabled':''}>🔄 Нанять (3 млн)</button>`;
}
renderStandings() {
const sorted = [...this.state.standings].sort((a,b) => b.points - a.points);
let html = '<table><tr><th>#</th><th>Команда</th><th>Очки</th></tr>';
sorted.forEach((s,i) => html += `<tr><td>${i+1}</td><td>${s.teamName}</td><td>${s.points}</td></tr>`);
this.root.querySelector('#standingsTable').innerHTML = html + '</table>';
}
renderDriverStandings() {
const sorted = [...this.state.driverStandings].sort((a,b) => b.points - a.points);
let html = '<table><tr><th>#</th><th>Пилот</th><th>Команда</th><th>Очки</th></tr>';
sorted.forEach((d,i) => html += `<tr><td>${i+1}</td><td>${d.name}</td><td>${d.teamName}</td><td>${d.points}</td></tr>`);
this.root.querySelector('#driversTable').innerHTML = html + '</table>';
}
updateHistoryView() {
const select = this.root.querySelector('#historySelect');
const tableDiv = this.root.querySelector('#historyTable');
select.innerHTML = '<option value="">-- Выберите этап --</option>';
this.state.raceHistory.forEach((race, index) => {
const option = document.createElement('option');
option.value = index; option.textContent = race.grandPrix;
select.appendChild(option);
});
if (this.state.raceHistory.length > 0) {
select.value = this.state.raceHistory.length - 1;
this.showHistoryTable(this.state.raceHistory.length - 1);
} else {
tableDiv.innerHTML = '<p style="color:#8a8f9a;">Нет завершённых гонок.</p>';
}
}
showHistoryTable(index) {
const tableDiv = this.root.querySelector('#historyTable');
if (this.state.raceHistory[index]) {
const race = this.state.raceHistory[index];
let html = `<p style="margin-bottom:8px; font-weight:600;">🏁 ${race.grandPrix}</p>`;
html += `<table><tr><th>#</th><th>Пилот</th><th>Команда</th><th>Старт</th><th>Финиш</th></tr>`;
race.results.forEach((r, i) => {
const start = r.startPosition || '–';
const finish = r.dnf ? '💔 DNF' : `P${r.position}`;
html += `<tr><td>${i+1}</td><td>${r.name}</td><td>${r.team}</td><td>${start}</td><td>${finish}</td></tr>`;
});
html += '</table>';
tableDiv.innerHTML = html;
}
}
runQualifying() {
const drivers = [];
this.state.teams.forEach(team => {
team.drivers.forEach(driver => {
drivers.push({ name: driver.name, skill: driver.skill, team: team.name, car: team.car });
});
});
const getPace = d => {
const carAvg = (d.car.aero + d.car.engine + d.car.chassis) / 3;
return d.skill * 0.65 + carAvg * 0.35;
};
const attempt = d => getPace(d) + (Math.random() * 1.2 - 0.6);
const q1 = drivers.map(d => ({ ...d, time: attempt(d) })).sort((a,b) => b.time - a.time);
const q1Eliminated = q1.slice(17);
const q2Participants = q1.slice(0, 17);
const q2 = q2Participants.map(d => ({ ...d, time: attempt(d) })).sort((a,b) => b.time - a.time);
const q2Eliminated = q2.slice(11);
const q3Participants = q2.slice(0, 11);
const q3 = q3Participants.map(d => ({ ...d, time: attempt(d) })).sort((a,b) => b.time - a.time);
const grid = [];
q3.forEach((d, i) => grid.push({ name: d.name, team: d.team, gridPos: i+1 }));
q2Eliminated.forEach((d, i) => grid.push({ name: d.name, team: d.team, gridPos: 12 + i }));
q1Eliminated.forEach((d, i) => grid.push({ name: d.name, team: d.team, gridPos: 18 + i }));
return grid;
}
simulateRace() {
if (this.state.raceInProgress || this.state.currentRace > this.data.totalRaces) return;
this.state.raceInProgress = true;
this.updateUI();
const root = this.root;
const logEl = root.querySelector('#raceLog');
const bar = root.querySelector('#raceProgressBar');
const status = root.querySelector('#raceStatusText');
root.querySelector('#raceProgress').style.display = 'block';
logEl.style.display = 'block';
logEl.innerHTML = '';
root.querySelector('#raceResult').innerHTML = '';
bar.style.width = '0%';
status.textContent = 'Квалификация...';
const log = msg => {
const div = document.createElement('div');
div.textContent = '🔹 ' + msg;
logEl.appendChild(div);
logEl.scrollTop = logEl.scrollHeight;
};
const grid = this.runQualifying();
this.state.qualifyingGrid = grid;
log('📋 Стартовая решётка:');
grid.forEach(d => log(`${d.gridPos}. ${d.name} (${d.team})`));
const allDrivers = grid.map(g => {
const team = this.state.teams.find(t => t.name === g.team);
const driver = team.drivers.find(d => d.name === g.name);
return {
name: g.name, skill: driver?.skill || 80,
teamName: g.team,
teamIdx: this.state.teams.findIndex(t => t.name === g.team),
car: team?.car,
startPosition: g.gridPos,
position: 0, dnf: false
};
});
allDrivers.forEach(d => d.power = d.skill * 0.55 + (d.car.aero + d.car.engine + d.car.chassis)/3 * 0.45);
const totalLaps = this.data.schedule[this.state.currentRace-1].laps;
let lap = 0;
log(`🚥 ${this.data.schedule[this.state.currentRace-1].grandPrix} стартовал! (${totalLaps} кругов)`);
const interval = setInterval(() => {
lap++;
bar.style.width = (lap/totalLaps*100)+'%';
status.textContent = `Круг ${lap}/${totalLaps}`;
allDrivers.forEach(d => {
if (d.dnf) return;
if (Math.random() < Math.max(0, (100 - d.car.reliability)/100) * 0.025) {
d.dnf = true;
log(`💥 ${d.name} (${d.teamName}) сошёл!`);
}
});
const active = allDrivers.filter(d => !d.dnf);
active.sort((a,b) => (b.power + Math.random()*10) - (a.power + Math.random()*10));
active.forEach((d, idx) => d.position = idx+1);
if (lap >= totalLaps) {
clearInterval(interval);
this.finishRace(allDrivers, log);
}
}, 120);
}
finishRace(allDrivers, log) {
this.state.raceInProgress = false;
this.root.querySelector('#raceStatusText').textContent = '🏁 Финиш!';
const raceResultData = allDrivers.map(d => ({
name: d.name, team: d.teamName,
startPosition: d.startPosition,
position: d.position, dnf: d.dnf
})).sort((a,b) => a.position - b.position);
this.state.raceHistory.push({
grandPrix: this.data.schedule[this.state.currentRace-1].grandPrix,
results: raceResultData
});
const pointsTable = [25,18,15,12,10,8,6,4,2,1];
const teamPts = {};
allDrivers.forEach(d => { if (!d.dnf && d.position <= 10) teamPts[d.teamIdx] = (teamPts[d.teamIdx]||0) + pointsTable[d.position-1]; });
for (const [idx, pts] of Object.entries(teamPts)) {
const i = parseInt(idx);
const stand = this.state.standings.find(s => s.teamName === this.state.teams[i].name);
if (stand) stand.points += pts;
if (!this.state.isSpectator && i === this.state.playerTeamIndex) this.state.points += pts;
}
allDrivers.forEach(d => {
if (!d.dnf && d.position <= 10) {
const entry = this.state.driverStandings.find(ds => ds.name === d.name && ds.teamName === d.teamName);
if (entry) entry.points += pointsTable[d.position-1];
else this.state.driverStandings.push({ name: d.name, teamName: d.teamName, points: pointsTable[d.position-1] });
}
});
if (!this.state.isSpectator && this.state.playerTeamIndex !== -1) {
const myDrivers = allDrivers.filter(d => d.teamIdx === this.state.playerTeamIndex);
let prize = 5; myDrivers.forEach(d => { if (!d.dnf && d.position <= 10) prize += (11 - d.position); });
this.state.budget += prize; this.state.budget -= this.state.teams[this.state.playerTeamIndex].drivers.length * 1;
log(`💰 Призовые: +${prize} млн | Зарплаты: -${this.state.teams[this.state.playerTeamIndex].drivers.length} млн`);
}
this.state.currentRace++;
this.updateUI();
this.showStatsModal(this.state.qualifyingGrid, raceResultData);
}
showStatsModal(grid, raceResults) {
const root = this.root;
root.querySelector('#modalRaceName').textContent = this.data.schedule[this.state.currentRace-2]?.grandPrix || 'Последняя гонка';
let html = '<h3>📋 Стартовая решётка</h3><table><tr><th>#</th><th>Пилот</th><th>Команда</th></tr>';
grid.forEach(d => html += `<tr><td>${d.gridPos}</td><td>${d.name}</td><td>${d.team}</td></tr>`);
html += '</table><br><h3>🏁 Результаты гонки</h3>';
html += '<table><tr><th>#</th><th>Пилот</th><th>Команда</th><th>Старт</th><th>Финиш</th></tr>';
raceResults.forEach((r, i) => {
const start = r.startPosition || '–';
const finish = r.dnf ? '💔 DNF' : `P${r.position}`;
html += `<tr><td>${i+1}</td><td>${r.name}</td><td>${r.team}</td><td>${start}</td><td>${finish}</td></tr>`;
});
html += '</table>';
root.querySelector('#modalTable').innerHTML = html;
root.querySelector('#statsModal').classList.add('active');
}
hirePilot(index) {
if (this.state.raceInProgress || this.state.budget < 3 || this.state.playerTeamIndex === -1 || this.state.isSpectator) return;
const newDriver = this.data.freeAgents[Math.floor(Math.random()*this.data.freeAgents.length)];
this.state.budget -= 3;
const team = this.state.teams[this.state.playerTeamIndex];
const oldName = team.drivers[index].name;
this.state.driverStandings = this.state.driverStandings.filter(d => !(d.name === oldName && d.teamName === team.name));
this.state.driverStandings.push({ name: newDriver.name, teamName: team.name, points: 0 });
team.drivers[index] = { name: newDriver.name, skill: newDriver.skill };
this.updateUI();
}
applyUpgrade(key) {
if (this.state.raceInProgress || this.state.budget < this.state.upgradeCost || this.state.playerTeamIndex === -1 || this.state.isSpectator) return;
const team = this.state.teams[this.state.playerTeamIndex];
if (team.car[key] >= 99) return;
this.state.budget -= this.state.upgradeCost;
team.car[key] = Math.min(99, team.car[key]+7);
this.updateUI();
}
}
const f1Data = {
title: '🏎️ F1 MANAGER 2026',
subtitle: 'Классическая симуляция · Gucci Lamborghini · Календарь 2026',
totalRaces: 24,
teams: [
{ name: "BWT Alpine F1 Team", constructor: "Alpine", drivers: [{ name: "Пьер Гасли", skill: 87 }, { name: "Франко Колапинто", skill: 84 }], car: { aero: 80, engine: 78, chassis: 77, reliability: 80 }, budget: 52 },
{ name: "Aston Martin Aramco Honda", constructor: "Aston Martin", drivers: [{ name: "Фернандо Алонсо", skill: 88 }, { name: "Лэнс Стролл", skill: 79 }], car: { aero: 70, engine: 72, chassis: 70, reliability: 72 }, budget: 45 },
{ name: "Audi Revolut F1 Team", constructor: "Audi", drivers: [{ name: "Габриэль Бортолето", skill: 83 }, { name: "Нико Хюлькенберг", skill: 86 }], car: { aero: 72, engine: 70, chassis: 70, reliability: 74 }, budget: 46 },
{ name: "Cadillac Formula 1 Team", constructor: "Cadillac", drivers: [{ name: "Серхио Перес", skill: 84 }, { name: "Валттери Боттас", skill: 86 }], car: { aero: 71, engine: 73, chassis: 70, reliability: 73 }, budget: 44 },
{ name: "Scuderia Ferrari HP", constructor: "Ferrari", drivers: [{ name: "Шарль Леклер", skill: 91 }, { name: "Льюис Хэмилтон", skill: 94 }], car: { aero: 93, engine: 92, chassis: 91, reliability: 88 }, budget: 65 },
{ name: "TGR Haas F1 Team", constructor: "Haas", drivers: [{ name: "Эстебан Окон", skill: 81 }, { name: "Оливер Берман", skill: 79 }], car: { aero: 70, engine: 72, chassis: 68, reliability: 73 }, budget: 42 },
{ name: "McLaren Mastercard Formula 1 Team", constructor: "McLaren", drivers: [{ name: "Ландо Норрис", skill: 92 }, { name: "Оскар Пиастри", skill: 90 }], car: { aero: 91, engine: 90, chassis: 90, reliability: 86 }, budget: 62 },
{ name: "Mercedes-AMG Petronas F1 Team", constructor: "Mercedes", drivers: [{ name: "Джордж Расселл", skill: 93 }, { name: "Кими Антонелли", skill: 90 }], car: { aero: 94, engine: 94, chassis: 93, reliability: 90 }, budget: 68 },
{ name: "Gucci Lamborghini F1 Team", constructor: "Lamborghini", drivers: [{ name: "Лиам Лоусон", skill: 85 }, { name: "Никола Цолов", skill: 81 }], car: { aero: 79, engine: 77, chassis: 76, reliability: 79 }, budget: 50 },
{ name: "Oracle Red Bull Racing", constructor: "Red Bull Racing", drivers: [{ name: "Макс Ферстаппен", skill: 95 }, { name: "Изак Хаджар", skill: 88 }], car: { aero: 90, engine: 91, chassis: 89, reliability: 87 }, budget: 64 },
{ name: "Atlassian Williams F1 Team", constructor: "Williams", drivers: [{ name: "Александр Албон", skill: 82 }, { name: "Карлос Сайнс-мл.", skill: 83 }], car: { aero: 73, engine: 74, chassis: 72, reliability: 75 }, budget: 44 }
],
schedule: [
{ country: "🇦🇺", grandPrix: "Гран-при Австралии", location: "Мельбурн", track: "Альберт-Парк", date: "16 марта", laps: 58 },
{ country: "🇨🇳", grandPrix: "Гран-при Китая", location: "Шанхай", track: "Международный автодром Шанхая", date: "23 марта", laps: 56 },
{ country: "🇯🇵", grandPrix: "Гран-при Японии", location: "Судзука", track: "Судзука", date: "6 апреля", laps: 53 },
{ country: "🇧🇭", grandPrix: "Гран-при Бахрейна", location: "Сахир", track: "Международный автодром Бахрейна", date: "13 апреля", laps: 57 },
{ country: "🇸🇦", grandPrix: "Гран-при Саудовской Аравии", location: "Джидда", track: "Городская трасса Джидда", date: "20 апреля", laps: 50 },
{ country: "🇺🇸", grandPrix: "Гран-при Майами", location: "Майами", track: "Международный автодром Майами", date: "4 мая", laps: 57 },
{ country: "🇮🇹", grandPrix: "Гран-при Эмилии-Романьи", location: "Имола", track: "Автодром Энцо и Дино Феррари", date: "18 мая", laps: 63 },
{ country: "🇲🇨", grandPrix: "Гран-при Монако", location: "Монте-Карло", track: "Городская трасса Монте-Карло", date: "25 мая", laps: 78 },
{ country: "🇪🇸", grandPrix: "Гран-при Испании", location: "Монмело", track: "Барселона-Каталунья", date: "1 июня", laps: 66 },
{ country: "🇨🇦", grandPrix: "Гран-при Канады", location: "Монреаль", track: "Автодром имени Жиля Вильнёва", date: "15 июня", laps: 70 },
{ country: "🇦🇹", grandPrix: "Гран-при Австрии", location: "Шпильберг", track: "Ред Булл Ринг", date: "29 июня", laps: 71 },
{ country: "🇬🇧", grandPrix: "Гран-при Великобритании", location: "Силверстон", track: "Сильверстоун", date: "6 июля", laps: 52 },
{ country: "🇧🇪", grandPrix: "Гран-при Бельгии", location: "Спа", track: "Спа-Франкоршам", date: "27 июля", laps: 44 },
{ country: "🇭🇺", grandPrix: "Гран-при Венгрии", location: "Будапешт", track: "Хунгароринг", date: "3 августа", laps: 70 },
{ country: "🇳🇱", grandPrix: "Гран-при Нидерландов", location: "Зандворт", track: "Зандворт", date: "31 августа", laps: 72 },
{ country: "🇮🇹", grandPrix: "Гран-при Италии", location: "Монца", track: "Монца", date: "7 сентября", laps: 53 },
{ country: "🇦🇿", grandPrix: "Гран-при Азербайджана", location: "Баку", track: "Городская трасса Баку", date: "21 сентября", laps: 51 },
{ country: "🇸🇬", grandPrix: "Гран-при Сингапура", location: "Сингапур", track: "Марина-Бей", date: "5 октября", laps: 62 },
{ country: "🇺🇸", grandPrix: "Гран-при США", location: "Остин", track: "Трасса Америк", date: "19 октября", laps: 56 },
{ country: "🇲🇽", grandPrix: "Гран-при Мехико", location: "Мехико", track: "Автодром имени братьев Родригес", date: "26 октября", laps: 71 },
{ country: "🇧🇷", grandPrix: "Гран-при Сан-Паулу", location: "Сан-Паулу", track: "Интерлагос", date: "9 ноября", laps: 71 },
{ country: "🇺🇸", grandPrix: "Гран-при Лас-Вегаса", location: "Лас-Вегас", track: "Городская трасса Лас-Вегас", date: "22 ноября", laps: 50 },
{ country: "🇶🇦", grandPrix: "Гран-при Катара", location: "Лусаил", track: "Международный автодром Лусаил", date: "30 ноября", laps: 57 },
{ country: "🇦🇪", grandPrix: "Гран-при Абу-Даби", location: "Абу-Даби", track: "Яс Марина", date: "7 декабря", laps: 58 }
],
freeAgents: [
{ name: "Даниэль Риккардо", skill: 80 }, { name: "Мик Шумахер", skill: 77 },
{ name: "Роберт Шварцман", skill: 76 }, { name: "Тео Пуршер", skill: 75 }, { name: "Джек Дуэн", skill: 74 }
]
};
const feData = {
title: '⚡ FORMULA E MANAGER 2025/26',
subtitle: 'Синие тона · Реальные команды и пилоты · 16 этапов',
totalRaces: 16,
teams: [
{ name: "Jaguar TCS Racing", constructor: "Jaguar", drivers: [{ name: "Митч Эванс", skill: 95 }, { name: "Антониу Феликс да Кошта", skill: 92 }], car: { aero: 90, engine: 92, chassis: 91, reliability: 88 }, budget: 58 },
{ name: "Porsche Formula E Team", constructor: "Porsche", drivers: [{ name: "Паскаль Верляйн", skill: 96 }, { name: "Нико Мюллер", skill: 90 }], car: { aero: 91, engine: 93, chassis: 92, reliability: 87 }, budget: 60 },
{ name: "Mahindra Racing", constructor: "Mahindra", drivers: [{ name: "Эдоардо Мортара", skill: 89 }, { name: "Ник де Врис", skill: 90 }], car: { aero: 88, engine: 87, chassis: 89, reliability: 86 }, budget: 55 },
{ name: "Andretti Formula E", constructor: "Andretti", drivers: [{ name: "Джейк Деннис", skill: 91 }, { name: "Фелипе Другович", skill: 89 }], car: { aero: 89, engine: 88, chassis: 88, reliability: 85 }, budget: 56 },
{ name: "Nissan Formula E Team", constructor: "Nissan", drivers: [{ name: "Оливер Роуленд", skill: 92 }, { name: "Норман Нато", skill: 78 }], car: { aero: 87, engine: 89, chassis: 86, reliability: 84 }, budget: 54 },
{ name: "Envision Racing", constructor: "Envision", drivers: [{ name: "Себастьен Буэми", skill: 86 }, { name: "Джоэль Эрикссон", skill: 82 }], car: { aero: 82, engine: 83, chassis: 81, reliability: 82 }, budget: 50 },
{ name: "Citroën Racing", constructor: "Citroën", drivers: [{ name: "Ник Кэссиди", skill: 84 }, { name: "Жан-Эрик Вернь", skill: 84 }], car: { aero: 84, engine: 85, chassis: 84, reliability: 83 }, budget: 52 },
{ name: "Cupra Kiro", constructor: "Cupra Kiro", drivers: [{ name: "Хосеп-Мария Марти", skill: 83 }, { name: "Дэн Тиктум", skill: 75 }], car: { aero: 79, engine: 80, chassis: 78, reliability: 79 }, budget: 48 },
{ name: "DS Penske", constructor: "DS Penske", drivers: [{ name: "Тейлор Барнард", skill: 75 }, { name: "Максимилиан Гюнтер", skill: 75 }], car: { aero: 75, engine: 76, chassis: 74, reliability: 77 }, budget: 46 },
{ name: "Lola Yamaha ABT Formula E Team", constructor: "Lola Yamaha ABT", drivers: [{ name: "Лукас ди Грасси", skill: 78 }, { name: "Зейн Мэлони", skill: 72 }], car: { aero: 74, engine: 78, chassis: 73, reliability: 76 }, budget: 45 }
],
schedule: [
{ country: "🇲🇽", grandPrix: "Mexico City E-Prix", location: "Мехико", laps: 36 },
{ country: "🇸🇦", grandPrix: "Diriyah E-Prix", location: "Джидда", laps: 37 },
{ country: "🇧🇷", grandPrix: "São Paulo E-Prix", location: "Сан-Паулу", laps: 34 },
{ country: "🇩🇪", grandPrix: "Berlin E-Prix", location: "Берлин", laps: 40 },
{ country: "🇲🇨", grandPrix: "Monaco E-Prix", location: "Монте-Карло", laps: 29 },
{ country: "🇨🇳", grandPrix: "Shanghai E-Prix", location: "Шанхай", laps: 32 },
{ country: "🇮🇹", grandPrix: "Rome E-Prix", location: "Рим", laps: 27 },
{ country: "🇬🇧", grandPrix: "London E-Prix", location: "Лондон", laps: 35 },
{ country: "🇺🇸", grandPrix: "New York E-Prix", location: "Нью-Йорк", laps: 38 },
{ country: "🇫🇷", grandPrix: "Paris E-Prix", location: "Париж", laps: 31 },
{ country: "🇰🇷", grandPrix: "Seoul E-Prix", location: "Сеул", laps: 33 },
{ country: "🇮🇩", grandPrix: "Jakarta E-Prix", location: "Джакарта", laps: 30 },
{ country: "🇿🇦", grandPrix: "Cape Town E-Prix", location: "Кейптаун", laps: 32 },
{ country: "🇦🇷", grandPrix: "Buenos Aires E-Prix", location: "Буэнос-Айрес", laps: 34 },
{ country: "🇯🇵", grandPrix: "Tokyo E-Prix", location: "Токио", laps: 35 },
{ country: "🇦🇺", grandPrix: "Sydney E-Prix", location: "Сидней", laps: 33 }
],
freeAgents: [
{ name: "Стоффель Вандорн", skill: 82 }, { name: "Робин Фряйнс", skill: 79 },
{ name: "Андре Лоттерер", skill: 77 }
]
};
let f1Game, feGame;
document.getElementById('playF1Btn').addEventListener('click', () => {
document.getElementById('mainMenu').style.display = 'none';
document.getElementById('f1Container').classList.add('active');
if (!f1Game) f1Game = new RacingGame('f1Root', 'f1', f1Data);
});
document.getElementById('playFEBtn').addEventListener('click', () => {
document.getElementById('mainMenu').style.display = 'none';
document.getElementById('feContainer').classList.add('active');
if (!feGame) feGame = new RacingGame('feRoot', 'fe', feData);
});
document.getElementById('backFromF1').addEventListener('click', hideAllGames);
document.getElementById('backFromFE').addEventListener('click', hideAllGames);
})();
</script>
</body>
</html>
Инструкция по открытию игры:

Также я жду фидбека по поводу самой игры и возможным предложениям по самой игре. Буду рад услышать.
Десяток скриншотов по самой игре:









СЕГОДНЯ!
Я!
ЗАСУНУ ТОП-22!
В ГОНКУ
И УЗНАЮ!
КТО ИЗ НИХ ЕЁ ВЫИГРАЕТ!
Good evening everyone, and take it easy, as they say! И как вы уже поняли из названия, я взял ники топ-22 пикуко и переместил их в гоночную игру, чтобы узнать победителя Гонки и узнать лучшего из лучших на Pikuco в гонке. И гарантирую.. конец вас удивит. Давайте НА-ЧИ-НАТЬ!
А "НА-ЧИ-НАТЬ" мы будем с выбора трассы, их напомню всего 24, а те трассы, которые не входят в общий пул трасс, около 35+. Поэтому, для этого дела, я использовал рандомайзер!

Крутим...

Азербайджан!
Городская трасса в Баку, одна из самых моих любимых трасс, с длинными прямыми на первом секторе, извилистыми поворотами на втором и немного опасными шпильками на третьем секторе, на которых надо вылетать на скорости. В принципе, выбором я доволен.
Вы зададитесь вопросом: "А в командах кто?" Соответственно, чтобы ответить на ваш вопрос, я заранее, представляю вам команды!
FERRARI
В результате длительного вопроса, о том как называтся будет одна из самых главных команд в F1, совет директоров принял решение, главным спонсором команды станет
RED CATS — esPIO, Искушение .
Из-за ультиматума главного пилота команды кота Гарфилда, тэг Red Bull, неожиданно превратился в RED CATS.
MERSEDES-AIIR — Rakuzan.Inej, SKLTN .
Как, тэг от сквада Pikuco, переместился на название немецкого гиганта-бренда, до сих пор остаётся одной из самых главных загадок XXI века...
ALPINE G.O.A.T — Vox Ink, Pusheen
Смотря на пилотов японского бренда аббревиатура G.O.A.T, полностью оправдана.
McLaren Pikuco.com — VEROYATNOST9, жена Зоро .
И тут админ рекламу кома засунул..
AUDI BOBR TEAM — БобрДобр, Folk Chip .
К Бизнесу Александра вопросов нет. Все таки ТОП-10 пикуко, может позволить себе выкупить команду у Казино.
Semechki MARTIN — PRO, Antonymayer .
Ну это вообще, ни в какую логику не лезет. Откуда у бабушек со всей России, нашлись деньги, для покупки одной из команд Формулы 1?
KLUBNIKPORN HASS — Lazy Stasy, MuxaJl4uk .
Вопросов к названию не имеется. 😁
Racing Tigers — Kinofil, privetstas .
Многих не устроило то, что Red Bull превратился в RED CATS, особенно младшую команду Red Bull, в ответ, фарм-клуб Racing Bulls превратился в Racing Tigers.
WOLODYA — Dancer Disco, MrMainstream .
Где то в параллельной вселенной..
Admin Team — Kolyajvoy, evnsx .
Если и тут результатов не будет, пойду, заварю дошик. (Ц) - admin
18 июля. 2026 года. +29°C. Ясно. 13:00.
Если убрать пару моментов в квалификации, за которые можно зацепиться, то квалификация была бы одной из самых скучных. Однако, они были.
Первую половину гонки Глюконат лидировал в квалификации за свою "Феррари", первым выехав из боксов и не имея трафика(машин на пути во время квалификации), занял 1 место.

Глюконат на своем лучшем круге
Однако на 11 минуте произошла авария Folk Chip не справившись с управлением и задев evnsx улетел на гравий, выбив себя из гонки. Однако, выдав единственное время, он не оказался последним.

Folk Chip задевает Kolyajvoy и покидает квалификацию
По прошествии половины квалификации БобрДобр, несмотря на трафик, выбивает лучший результат в 1 и 3 секторах, тем самым обгоняя Гошу и занимает первое строчку и как окажется поул и первое место на старте.
Больше событий не было.

Результаты квалификации.
Единственными, кому не хватило времени, чтобы выбить "чистое" время без трафика, оказались MrMainstream и Evreu, ну в отличие от партнёров 🙂.
19 июля. 2026 года. +21°C. Ливень. 15:00

СТАРТ!
На первом и втором повороте, уже сменился лидер, вместо Бобра, им стал Глюконат. А Folk Chip и privetstas прыгают на 4(!) позиции вверх и по прошествию первого круга, получилась небольшая странность FERRARI-SPARTAK занимали первые места, с начала и конца.
По прошествии 3 круга, стало понятно, кто за кем будет двигаться. Глюконат, Dancer Disco, БобрДобр из Топ-3 оторвались от всех и занялись своей гонкой. А VEROYATNOST9 занимающий 12 место возглавил свою группу из 10 человек, дав команде "Админа" оторваться на 4 секунды.

Kinofil атакует Антона
На 4 круге дождь вдруг закончился.
И все полетели на пит-стоп.. ну почти всё. БобрДобр, Rakuzan.Inej, privetstas и RED CATS(esPIO, Искушение) остались, чтобы переобуться на следующем круге. Посмотрим, чья стратегия будет лучше.
И..тех кто остались на следующий круг сохранили свои позиции! Кроме Искушение все продолжили гонку на тех позициях, которые они получили на 5 круге. Для того же Глюконата и Дансера ситуация патовая: они пересели на софт(самые мягкие шины) увереные в том, что они улетят в закат и компенсируют время на следующий пит-стоп, который будет скоро (в отличие от тех кто на Hard'e(самые жёсткие шины)), благодаря мягким шинам, а так они будут тратить силы на обгоны, тем самым сильнее убивая шины и проигрывая по времени и в стратегии в гонке.

Бобран (уже БобрДобр) на пит-стопе
Да, не только они пересели на Soft. Лидеры гонки БобрДобр и Rakuzan.Inej "улетают в закат" и начинают борьбу за 1 место.
После первой трети гонки, таблица выглядела так:
1 БобрДобр ➖ 0 🔴
2 Rakuzan.Inej 🔺3 🔴
3 privetstas 🔺5 ⚪
4 Dancer Disko 🔻1 🔴
5 esPIO 🔺2 ⚪
6 Искушение ➖ 0 🔴
7 Глюконат 🔻 6 🔴
8 SKLTN 🔻4 ⚪
9 🟣 PRO ➖ 0 🔴
10 Kolyajivoy 🔺4 ⚪
11 VEROYATNOST9 🔺4 ⚪
12 Kinofil 🔻2 ⚪
13 evnsx ➖ 0 ⚪
14 Folk Chip 🔺6 ⚪
15 MrMainstream 🔺4 ⚪
16 жена Зоро 🔻 4 🔴
17 Lazy Stacy 🔺1 ⚪
18 Antonymayer 🔻7 ⚪
19 Pusheen 🔺3 ⚪
20 Evreu 🔻2 ⚪
21 MuxauJl4uk 🔻4 ⚪
22 Vox Ink 🔻1 ⚪
На 9 и 10 круге НИКТО не поменял свои позиции и не происходило абсолютно ничего, ну если не считать небольшой занос на шпильке от Вероятности, который в кадр не попал.
На 11 круге, те кто были на Soft, начали заежать на свой 2 пит-стоп, чтобы сменить шины. Dancer Disco потерявший 2 строчку, решил не крутить велосипед и взял Hard до конца гонки, а вот Глюконат..взял третий софт! Конечно, абсурд, для лидера гонки, кидать себя в конец пелетона, ради того, чтобы улететь в конце гонки в лидеры, но хватит ли скорости Soft'y, чтобы наверстать то время, потерянное в гонке? Скоро узнаем.
Позже на 12 круг на пит-стоп заехал и Ракузан за новым Hard'om. А тот же Глюконат уже начал реализовывать свой Soft, параллельно с Deus Ex Machina aka Folk Chip, реализовывающий свою машину на 201% и потихоньку прыгая вверх.
На 13 круге произошла смена караула. Лидером гонки стал privetstas, тот самый старший брат, то самого подающего надежды из Formula 2 TakoPi..кхм. Но вернёмся к гонке.

privetstas новый лидер гонки!
Постепенно, на пит-стоп начали заежать и те кто был на жёстких шинах. Ах да, забыл сообщить что БобрДобр, тоже оделся в Soft, как Глюконат, посмотрм, как он, реализует эту возможность. Параллельно PRO забирает "быстрый круг" себе.
На 15 круге, произошла первая авария. Kinofil выезжающий из боксов, столкнулся с летящим под 330 км/ч MuxauJl4uk и отлетел на гравий, прям под "службу уборки", незамедлительно Миша получает 5 секунд штрафа, тем самым обеспечивая себе спойлер: последнее место в гонке. Ну, а кинофил, шедший, стабильно в середине, выбывает.

Антон у которого гонка вообще не идёт, узнает что кто-то получил штраф

15 круг произошёл под машину безопасности, но так как, кинофил вылетел прям под краном, на 16 круге, гонка возобновилась.
Если вам интересно, как поживал "подвал" гонки, то приготовьтесь: Pusheen с Vox Ink так и не смогли выбраться с конца гонки, лишь заняв со своих 21 и 22 мест, только максимум 16 место на 1 круг(и то, при том случае, что многие заезжали на пит-стоп как Антон, у которого в отличии от PRO гонка вообще не клеилась). Evreu и MrMainstream не повторили успех Folk Chipa и продолжили дрочить внизу пелетона(ладно, не внизу, но пробиться до середины середины, не получалось) жена Зоро, тоже не могла похвастаться успехами из 20 места.
После 2/3 гонки, таблица выглядела так:
1 privetstas 🔺7 ⚪
2 SKLTN 🔺2 ⚪
3 БобрДобр 🔻2 🔴
4 Rakuzan.Inej 🔺1 ⚪
5 Kolyajivoy 🔺 9 ⚪
6 Dancer Disko 🔻 3 ⚪
7 Глюконат 🔻 5 🔴
8 Искушение 🔻2 🔴
9 VEROYATNOST9 🔺 6 ⚪
10 🟣 PRO 🔻1 ⚪
11 evnsx 🔺2 ⚪
12 esPIO 🔻5 🔴
13 MrMainstream 🔺 6 ⚪
14 Lazy Stacy 🔺 2 ⚪
15 Evreu 🔺3 ⚪
16 Pusheen 🔺 8 ⚪
17 Folk Chip 🔺 3 🟡
18 Antonymayer 🔻 7 🟡
19 жена Зоро 🔻 7 ⚪
20 MuxauJl4uk 🔻 3 ⚪
21 Vox Ink ➖ 0 ⚪
22 Kinofil (RETIRED)
Единственными кто выглядел стабильно походу ВСЕЙ гонки, то можно выделить концерн Mersedes(SKLTN, Rakuzan.Inej) и БобрДобр'а, и именно они будут походу разыгрывать кубок Городской Трассы в Баку.
Уже на 18/19 кругу, заканчивались смены последних колёс и постепенно БобрДобр на 3 секунды на круг, начал догонять privetstas'a, что никак не мог решиться на заезд на пит-стоп. И...

Новая авария!
Точнее столкновение! McLaren не поделил между собой, кто займет, очень нужное 18 место и Сашу VEROYATNOST9 стабильно находящуюся в середине таблицы, жена Зоро лишает такой возможности до конца всей гонки, жертвую своими 5 секундами.
И если вам интересно сработала ли тактика первого лидера гонки, то я вас огорчу. Она, не удалась и Глюконат на последнем пит-стопе отлетел на 13 строчку и чтобы залететь хотя бы в десятку, топ-3 сайта, потребуется нагнать 10! Секунд, что, довольно тяжело.
На 20 круге, лидером гонки стал Ракузан, да-да, именно Ракузан!; которого в том числе пустил Саня БобрДобр вперёд и privetstas теряет шансы на победу. А товарищ SKLTN добивает этот процесс и берет "быстрый круг" с 8 строчки.
Если, вы забыли про нашего нового Топ-2 esPIO, то котик Гарфилд всю гонку, потихоньку подобрался к призовой позиции и начал свою гонку за победой, параллельно SKLTN отыгрывает 3(!) Позиции за 6(!!!) Поворотов и как будто бы тоже присоединяется к гонке за победу? Ведь esPIO и БобрДобр отправляются на пит-стоп! И он ровно за 1 круг с 8 места становится третьим, а после на 22 круге забирает и 2 строчку. Дубль Мерседеса?
Параллельно с этими событиями происходит какая-то каша с позициями в гонке, которой так не хватало раньше, поэтому просто, чтобы описать каждый обгон, прикреплю сравнение 18 и 22 круга.

Параллельно, лидеры начала гонки, которые так затерялись в её середины, начали возвращать позиции, а Folk Chip камбэкает 15(!!!!!!!!!) позиций. Это точно ТОП-1 сайта!
На 23 круге ситуация становится ещё интереснее...у Ракузана полностью убитый Hard на котором он должен удержать 1 строчку, у Скелетона на менее убитый Софт, но он ещё рабочий и намного быстрее. Параллельно за 10 секунд Folk Chip камбэкает 17(!!!) СЕМНАДЦАТЬ, КАРЛ, ПОЗИЦИЙ. И совместно "с-тем-самым-котиком" ведут борьбу за 3 место и в теории esPIO может каким-то чудом догнать Мерседес, но хватит ли ему времени?

Глюконат не понимает что происходит и почему он снова не первый..
24 круг...
Скелетон сокращает отрыв до меньше 1 секунды..
Ауди тоже делают дубль в Топ-5..
privetstas тоже в игре..
Глюконат..лучше не сообщайте ему о том что он просрал 4 позиции..
25 КРУГ

1 сектор..
Скелетон сокращает отрыв до половины секунды..
У обоих батарейки выведены в 0%
2 сектор..
Ракузан немного отрывается..
Скелетон догоняет..

3 СЕКТОР
Видно что Скелетон быстрее, Ракузана, но хватит ли тому мощности?
0.4 секунды..0.3..

ПОШЕЛ ОБГОН! ДО ФИНИША ОДНА ПРЯМАЯ! ПОЛ-КИЛОМЕТРА!

РАКУЗАН КИДАЕТСЯ ВЛЕВО! СКЕЛЕТОН СКРЕЩИВАЕТ НАПРАВЛЕНИЕ ВПРАВО! 300 МЕТРОВ!

АХРЕНЕТЬ! МАШИНЫ ПОЧТИ БОК О БОК!!!


ЭТО НЕВЕРОЯТНО!!!, ЧТО ЭТО СЕЙЧАС БЫЛО??!
СКЕЛЕТОН СТАНОВИТСЯ ЧЕМПИОНОМ ГОНКИ ОБГОНЯЯ РАКУЗАНА! НЕ НА ДЕСЯТЫЕ, НЕ НА СОТЫЕ, НЕ НА ТЫСЯЧНЫЕ! НА ОДНУ 10 ТЫСЯЧНУЮ СЕКУНДУ БЫСТРЕЕ!
esPIO бронзовый призер!
Вау


Итоги гонки
Надеюсь вам понравилась данная гонка, жмакните, там что нибудь там под постом. На сегодня, мои полномочия всё. By Mentos.
Всем добра от бобра! Ввожу сразу в курс дела: В прошлом году я проводил очень сложный для себя ивент про формулу 1. Там пользователи не только создавали свои команды, но и становились гонщиками. Имелось множество механик которые в итоге исчерпали силы и закончил конкурс лишь для галочки. Чемпионом стал Cringik завоевав титул на последнем круге после аварий других соперников.
Предложение:
На днях Mentos предложил возродить затею, но с гораздо большими возможностями. Да, я весной проводил опрос где большинство отказались от второго сезона, но что если вы сможете пересмотреть своё мнение?
1. Основное изменение
Добро пожаловать, в менеджер! На этот раз, никакого пилотирования вами не будет! Это было сделано так, чтоб ивент был более гибким и активным, чтобы исключить неактивность среди пилотов. Ивент будет полностью автономным и будет проходить в Live формате в телеграмм канале F1: Pikuco. Под ваш контроль попадает команда по вашему выбору или же вы сможете присоединиться к команде другого участника. Все что будет происходить до и после гонки, ваша основная задача. Во время же гонки, вы будете наблюдать над своими пилотами и ждать результатов вашей стратегии.
2. Возглавим команду F1?
Такой вопрос будет стоять перед вами во время регистрации на ивент! Хотите возглавить Феррари? Пожалуйста. Ред Булл? Без проблем. Выбор команды тоже будет зависеть на возможно ваш результат в ивенте. Об этом ниже.

Пример
3. Пилоты
В этот раз будет все намного серьезно. При регистрации на ивент, кроме выбора команды вам предстоит написать инфо своего пилота, которого вы будете курировать.
Имя. Фамилию. Национальность.
Также, вам придется поставить рейтинг своему пилоту (от 1 до 7) и купить его.
1 - 1 млн $
2 - 1.75 млн $
3 - 2.5 млн $
4 - 3.25 млн $
5 - 4 млн $
6 - 4.75 млн $
7 - 5.5 млн $
4. Начальный кэш.
Для каждой команды F1, будет свой начальный кэш.
Мерседес, Феррари и Ред Булл 37.5 млн$;
Макларен, Альпин, Уилльямс 32.5 млн$;
Хасс, Ауди, Рейсинг Буллс, - 27.5 млн$; Кадиллак Астон Мартин - 22.5 млн $.
5. Спонсоры
Вы не забыли про спонсоов, как насчёт их?
Для каждого спонсора будет расписан свой бюджет, нужный для пополнения вашего кошелька во время ивента. После регистрации, я расскажу о каждом из них и распишу по ним прибыль, от 1 млн $ до 15 млн $.
6. Машина

Ваша команда по силе описывается характеристиками, каждая от 1 до 10(1 до 9)
Скорость Машины (Влияет на скорость Машины, соответственно)
Скорость пилота (Влияет на умение пилота пилотировать, вне зависимости от болида)
Риск пилота (Влияет на шанс аварии, пилота во время гонки)
Чтобы улучшить характеристики (не более два раза за гонку), вам нужно будет потратить деньги на улучшения.
Аэродинамика - 5 млн $ - улучшает «Скорость Машины» на 1^
Мощность - 3 млн $ - улучшает «Скорость Машины» на 0.5^
Шасси - 5 млн $ - улучшает «Скорость Пилота» на 1^
Надёжность - 4 млн $ - снижает «Риск» на 1↓
В начале у всех пилотов будет риск 9, во время сезона, вы сможете понижать показатель, в отличии от скорости. До начала ивента за свои деньги вы сможете улучшить свою машину, на оставшиеся деньги без ограничений. В последствии, у вас будут ограничения не более 2 улучшению до гонки. Выбирайте с умом!
P.s Принимать решения по улучшениям команда(Командир - 1 пилот и 2 пилот) будет принимать единогласно, предварительно написав в лс. Также улучшения принимаются только на 1 машину!
7. Моторы
При получении команды, как командир. Вы заключаете годовой контракт с одним из пяти производителей двигателей. Каждый мотор имеет свою цену и прибавку к параметрам. (Производитель - мощность машины - цена)
Renault - 2 - $12 млн
Honda - 1 - $14 млн
Red Bull Powertrains - 3 - $18 млн
Mercedes - 4 - $20 млн
Ferrari - 5 - $22 млн
Кроме команд из Феррари, Мерседеса и двух Ред Буллов(где уже автоматически установлен мотор и выписан с вашего начального бюджета). Ограничений по покупке мотора нет.
8. Прибыль за гонки
Доход команды складывается из двух источников:
А) Призовые за финиш (начисляются после каждой гонки), каждую гонку призовые изменяются и сообщаются заранее. В пример, призовые за Гран-При Бахрейна.
| Позиция | Призовые ($) |
|---------|---------------|
| 1 | 1 600 000 |
| 2 | 1 300 000 |
| 3 | 1 100 000 |
| 4 | 900 000 |
| 5 | 750 000 |
| 6 | 600 000 |
| 7 | 500 000 |
| 8 | 400 000 |
| 9 | 300 000 |
| 10 | 200 000 |
| 11–20 | 80 000 |
Б) Бонусы от спонсоров за результат
- Зависит от спонсора
7 Штрафы за аварии и нарушения
- Ремонт повреждений:
- Лёгкое повреждение (крыло, прокол) — от $50 000 до $150 000.
- Среднее (подвеска, днище) — $200 000–$500 000.
- Тяжёлая авария - Авария, столкновение
$600 000–1 200 000.
Судейские штрафы:
- Столкновение по вине пилота: денежный штраф от €10 000 до $100 000

9. Очки за гонку
Система баллов: В формуле 1 действует своя система начисления очков.
За победу - 25
За 2-е место - 18
За 3-е место - 15
За 4-е место - 12
За 5-е место - 10
За 6-е место - 8
За 7-е место - 6
За 8-е место - 4
За 9-е место - 2
За 10-е место - 1
Но в нашем чемпионате за самый быстрый круг в гонке даëтся +1 очко, а за первое место на старте +2 очка.
Побеждает тот, у кого больше всего очков.
9. Многое другое...
Календарь чемпионата —
Бахрейн 🇧🇭
Саудовская Аравия 🇸🇦
Австралия 🇦🇺
Китай 🇨🇳
Азербайджан 🇦🇿
Майами 🇺🇲
Монако 🇲🇨
Испания 🇪🇸
Канада 🇨🇦
Австрия 🇦🇹
Великобритания 🇬🇧
Венгрия 🇭🇺
ЮАР 🇿🇦
Нидерланды 🇳🇱
Италия 🇮🇹
Япония 🇯🇵
Турция 🇹🇷
Россия 🇷🇺
Остин 🇺🇲
Мексика 🇲🇽
Бразилия 🇧🇷
Абу-Даби 🇦🇪
Не исключаются изменения календаря. Например возможно добавление коротких спринтов.
Погода и динамические события — случайный дождь, машины безопасности, красные флаги, которые меняют ход гонки. Спонсоры на трассах! (Если поставите лайки Бобрану на 30 постов - появится рекламный щит с вашим акком)
Обновленная система Квалификаций на 30 минут и Гонка по 50-70 кругов!
Пора делать всё интересней!
10. Ещё пару моментов

За более подробной информацией по Ивенту вы сможете понаблюдать в моём Telegram канале, где будут вестись вся информация. Начиная с этого дня набор продлится до неопределенного времени, желательно до 22 участников.
11. Регистрация
Чтобы стать участником нужно будет выполнить эти условия
Как командир команды:
От 2 000 рейтинга и более
Как 2 пилот:
От 500 рейтинга и более
Написать Имя и Фамилию пилота. Его национальность и команду(если заявка проходит как командир). Если вы участвуете как 2 пилот, вы попадаете в Лист ожидания. Можно подать заявку на участие в команде командиру(ам) или подождать пока они сами выберут вашу кандидатуру.
12. Участники
Ferrari: Бобран
Льюис Хэмилтон 🇬🇧
-
Red Bull: Mentos
Максим Форсберг🇷🇺
-
Mercedes: Аносим
Ламберт Шон Новак🇨🇮
Жаль Пюре Ниэл🇪🇪 Mr_Satan
McLaren: 💜MilkyWay💜
Айртон Сенна🇧🇷
-
Alpine: Cringik
Чеко Перес
-
Haas:
-
-
Aston Martin:
-
-
Audi:
-
-
Racing Bulls:
-
-
Williams: VnukBerii
Илья Мэддисон🇺🇸
Юрий Хованский🇷🇸
Cadillac:
-
-

Многие просили добавить их в пост под первой частью, поэтому делаю вторую. Я не знакома лично со многими ребятами, поэтому мои ассоциации основаны на общем впечатлении (профиль, тесты, посты) Надеюсь вам понравится пост, приятного просмотра! 🤍
* * *

«Макс Ферстаппен - голландский феномен, ворвавшийся в формулу в 17 лет. Обладая агрессивным стилем и невероятной скоростью, он доминирует в современной эпохе. Завоевав четыре чемпионских титула подряд (2021–2024), он переписал множество рекордов. Сегодня Ферстаппен - главный победитель и лидер «Ред Булл», которого боятся и уважают соперники.»

«Кими Антонелли - восемнадцатилетний итальянский гонщик, воспитанник академии Mercedes. В 2025 году он дебютирует в ф1 за команду Mercedes, став одним из самых молодых пилотов в истории. Он известен своими феноменальными успехами в младших сериях, включая победу в итальянской формуле-4. Его приход знаменует новую эру для серебряных стрел после ухода Льюиса Хэмилтона.»

«Карлос Сайнс-младший - испанский гонщик ф1, продолжающий династию легендарного раллиста. Обладая спокойным характером и феноменальной стабильностью, он снискал уважение в Феррари, где помог команде вернуться к победам. Его точность в управлении шинами и тактический ум позволяют ему регулярно опережать более шумных соперников. Сегодня он один из самых недооценённых бойцов на стартовой решётке.»

«Фернандо Алонсо - испанский ветеран ф1, двукратный чемпион мира (2005–2006). Известен невероятным талантом, жёсткой борьбой на трассе и выбором не самых удачных команд после титулов. Сейчас он блистает в составе Aston Martin, доказывая, что возраст не помеха для скорости и страсти к гонкам.»

«Кими Райкконен - «Ледяной человек» формулы, известный своей невероятной скоростью и минимализмом в общении. Он брал титул чемпиона за Ferrari в 2007 году и оставался легендой даже без лишних эмоций. Гонщик, который говорил «Leave me alone, I know what I’m doing» и ушел непобежденным. Просто Кими - лучший пример того, что результат важнее слов.»

«Себастьян Феттель - легендарный немецкий гонщик, четырёхкратный чемпион мира ф1, чья эра доминирования пришлась на время выступлений за Red Bull (2010–2013). За пределами трассы он известен своим интеллектом, экологической активностью и теплыми, порой озорными, отношениями с болельщиками. Его уход из Феррари и завершение карьеры в 2022 году стали символом конца целой эпохи в автоспорте. Себ навсегда останется в памяти не только как рекордсмен, но и как человек редкой искренности, который всегда ставил выше цифр человеческое отношение.»
* * *
На этом всё!
Заранее извиняюсь, если кого-то забыла добавить.
Спасибо за внимание! 🤍
(Поставь лайк, если понравилось💪)
Как вам пост?5
Сама не ожидала от себя нового поста, но в моменте зашла на сайт, и что-то подбило меня сделать пост. Идей особо не было, что первое пришло в голову, то и решила сделать. Я забыла всех пикукеров (да и в принципе как делать посты), так что в этом посте будет немного человек. А еще написала внизу про этих гонщиков, может кому-то будет интересно почитать. Желаю приятного просмотра! 🤍
* * *

«Михаэль Шумахер — легендарный немецкий автогонщик, семикратный чемпион мира «Формулы-1». Он доминировал в эпоху Ferrari, установив множество рекордов по победам и титулам. После завершения карьеры в 2012 году в 2013-м получил тяжелую черепно-мозговую травму во время катания на горных лыжах. С тех пор он находится под круглосуточным наблюдением врачей.»

«Джордж Рассел — британский гонщик, пилот команды Mercedes. Начав карьеру в Williams, он проявил себя как один из самых талантливых и стабильных гонщиков нового поколения. В 2022 году заменил Валттери Боттаса в Mercedes и сразу же одержал свою первую победу на Гран-при Бразилии. Отличается высокой квалификационной скоростью и умением беречь шины, считается будущим лидером немецкой команды.»

«Льюис Хэмилтон — британский гонщик, семикратный чемпион мира (повторяет рекорд Шумахера). Он выступает за Mercedes и держит рекорды по количеству побед на этапах (105), поулов (104) и подиумов за карьеру (200). Хэмилтон известен своим агрессивным, но чистым пилотажем, а также активной борьбой за расовое равенство и экологию. В 2025 году он перешёл в Ferrari, что стало одной из самых громких сделок в истории автоспорта.»

«Шарль Леклер — гонщик из Монако, выступающий за Ferrari. Пришёл в «Королевские гонки» в 2018 году, а с 2019-го стал лидером итальянской команды. Славится феноменальной скоростью на одном быстром круге (взял 24 поула). Входит в число сильнейших пилотов современности, но пока борется за свой первый титул чемпиона мира.»

«Ландо Норрис — британский гонщик, выступающий за команду McLaren с 2019 года. Известен своим талантом в квалификациях и умением ярко бороться на трассе, а также открытостью и чувством юмора за её пределами. Несмотря на множество подиумов, свою первую победу в Формуле-1 он одержал лишь на Гран-при Майами в 2024 году. Сегодня он считается одним из лидеров нового поколения пилотов и главным конкурентом Макса Ферстаппена.»

«Олли Берман — британский гонщик, воспитанник академии Ferrari. В 2024 году он дебютировал в Формуле-1 за Ferrari в возрасте 18 лет, заменив Карлоса Сайнца, и сразу финишировал седьмым, став самым молодым пилотом Scuderia. В 2025 году он выступает за команду Haas, оставаясь резервным пилотом Ferrari. Его считают одним из самых ярких молодых талантов и будущей звездой чемпионата.»

«Тото Вольфф (полное имя — Торгер Кристиан Вольф) — это руководитель команды Mercedes, её генеральный директор и совладелец. Он считается одним из самых успешных и влиятельных менеджеров в истории Формулы-1. Бизнес-гений: До прихода в Ф1 он стал миллионером, основав инвестиционные компании. В 2013 году он не просто нанялся на работу, а купил 30% акций команды Mercedes (сейчас его доля составляет треть) . По оценке Forbes, его состояние составляет **$2.5 млрд**, а стоимость команды выросла при нём с ~$165 млн до $6 млрд»
* * *
На этом все! 🤍
Если соберется нормальное количество людей, которые хотят попасть в такой пост, сделаю вторую часть (🌬️🌬️)
Поздравляю всех с летними каникулами и желаю удачи тем, кто сдаёт экзамены. Кстати, буквально позавчера у меня стукнуло 4к рейтинга!! И 70 подписчиков, но два человека отписались 💔 А знаете, сколько будет подписчиков если от меня отпишется или подпишется один человек?? (бл, не шути больше)

Я не надеюсь на то, что этот пост залетит, просто решила напомнить о своем присутствии здесь. А еще я хочу извиниться перед всеми теми, кого позвала в тест примерно полгода назад, но так и не выпустила его, простите, но вряд-ли я его когда-нибудь закончу😭
Спасибо за внимание!! 🤍
Делать вторую часть? 🤍9
На данный момент одной из самых популярных франшиз гоночных игр является Forza, а точнее её отросток, рождённый дочерним, но вскоре превзошедший своего родителя - Horizon. С каждой частью разнообразие критиков и обзорщиков начинает всё больше и больше сужаться и сводиться к банальному "безупречно", "да вы посмотрите на это кино!" и "о боже, это же СУПРА!". Метакритик ставит заоблачные оценки из года в год, а народ хавает... Но так ли всё радужно? Правильно ли давать оценку очередному продукту укоренившегося конвейера по одной лишь предыдущей части, по полируемой всё меньшими и меньшими шагами графику и по главному некогда конкуренту - Need for Speed и плоевский Гран Туризмо?
Устав от однообразных дифирамб гонке ластгена, я решил окунуться чуть глубже в интернет и нарыть обзоры, посвящённые не одной лишь "пятёрке" и/или "четвёрке" в вакууме, но и всей серии, или от тех людей, что имеют куда больший опыт, даже недавний, на данный в первых двух частях. И знаете, их отзывы были куда менее оптимистичными. Скажу даже больше, они изменили своё видение столь нахваливаемой гонки нового поколения... Они говорили, что она уступает первенцу десятилетней давности (!), выпущенной на закате древней консоли пастгена середины нулевых (!!)...
Что ж, не будем опираться на одни чужие пустые слова и эмоции и разберёмся по порядку в нежданно возникшей полифонии, сравнив две столь далёкие части одной франшизы, как велосипед с самокатом.
* * *

Автосалон первой части (и с виду реальный автосалон, а не менюшка)

"Автосалон" пятой части
В числах
Начнём с излюбленного и затёртого многими до дыр критерия в сравнении гоночных игр - автопарк. В первой Хорайзен он представляет собой перечень из 127 автомобилей полусотни различных марок и тут даже итальянцы все есть без всяких обнов и DLC) Но всё же пятая часть предлагает куда более обширный и впечатляющий ассортимент железных коней - целых 658 автомобилей и более сотни автомарок, но с учётом того, что львиная доля всего этого добра приходится на различного рода допконтент, донат и гачу, но всё равно прилично, хотя обе части впечатляют для своего у каждой времени.
Начинка
Так что остановимся не на количественном соотношении, а на качественном. Половина всего рычащего под капотами табуна в "пятёрке" это либо дубликаты уже имеющихся моделей с минимальными модификациями или из реальной истории концерна, или из каких-нибудь культовых фильмов, либо же всякое однообразное старьё без какой-либо доступной отделки и специального контента в игре, чисто для галки и большей цифры, ну и лишних шекелей, ведь даже такой драндулет, как Спринтер Труено А86, вы не сможете купить за 6 кусков местных червонцев, а должны либо выкупить на площадках ивентов или игроков, ну или же выбить в очередной крутке... Дико, да? А причина всему расфоршенность и капитализация пустотелого автопарка. Но вся эта полемика с донатом довольно относительна. Давайте же обратимся к более наглядной части автосалона.
Визуал
В первой части автопарк представлен нам огромным салоном с толпами зевак и автолюбителей, перед которыми красуются сотни породистых "лошадок" прямо "с конвейера", а каждый новая выбираемая марка сопровождается объявлением с логотипом. Красиво. Удобно. Запоминающе. Что же насчёт пятёрки? Огромное табличное меню с неудобной системой не то страниц, не то столбцов с разделителями и множеством ненужной мишуры по типу категорий (которые, к слову, игра вообще никак не использует, ведь гонки лишены какой-либо квоты, но об этом позже), совершенно чужеродных машин других марок, расположенных вплотную... И это я ещё не приводил баги, один из которых - неотображение иконок доступных кузовных шаблонов для машин. Грубо говоря, винегрет, да ещё и сыроватый...

Как примерно выглядит 80% всей езды по "открытому" миру в FH 5 x)
Почему именно он?
Ох, и это очередной избитый до безобразия мнимый "козырь" пк-бояр и обожателей ластгена. Открытый мир... Именно им кичатся ценители последних частей, именно в него тычут первую часть как главное неопровержимое доказательство "нереааального" прогресса и именно из-за него практически вычеркнули "ущербный" (цитирую) порт второй части на Xbox 360... Всё ли настолько плохо и "черно-бело"? Давайте разбираться.
У кого же он "открытее"?
Начать стоит с того, что мы вообще понимаем под словами "открытый мир" в Форзе. Для тех, кто не особо разбирается в грамотной езде за цифровым экраном (а ими, к сожалению, являются немалые числа современных критиков, обзорщиков и кормового скота потребителей последних частей Хорайзен, который явно взял курс на тотальное расширение целевой аудитории всеми средствами) это просто размер площади внедорожных участков и полей, лишь бы поменьше врезаться в заборы и стены, а просто барахтаться по кочкам на внедорожном Форде... Но для тех, кто мало-мальски имеет прямые руки при игре в гонки, это не открытый, а, напротив, замкнутый пустой мир, где ты не получишь ни капли разнообразия, драйва или экспириенса. И да, по последней приведённой логике мир в первой Хорайзен КУДА БОЛЕЕ открыт, чем в восхваляемой "пятёрке". Порой критики просто искажают содержание игры, "гребя всё под одну гребёнку", то есть называя карты первых двух частей на 360-ой коробке "коридорными", хотя обширности некоторых локаций и их разнообразию может позавидовать вся карта Мексики из Forza Horizon 5 от одного моря до другого. Обсерватория в Ред Роке (и да, я знаю, в "пятёрке" тоже есть аналогичная, что говорит лишь о скудности фантазии у Плейграундов), Клир Спрингс с летними столиками и лужайками, Карсон Сити с заброшками, промзоной (ничего из этих двух нет и в помине в пятой части) и спальными кварталами, Клифтон Воллей, Бимаунт Сити - частный сектор, более чистый и элитный городок с соответствующими гонками в финале, Финли Дэм с огромными водохранилищами и площадками над обрывами, Бункер... Я назвал лишь малую часть, даже не половину! Да, в Forza Horizon 5 этот список посолиднее, но если взглянуть на фотки с каждого из них, то половина будет выглядеть на одно лицо, а про соотношение пустынь и полей к реально проработанным локациям я вообще молчу.

Замена движка в первой Хорайзен
И это то, на что не каждый рядовой игрок обратит внимание. Ведь отнюдь не каждый сидел за этим дельным занятием десятками часов. А я как раз из таких индивидов... Поехали по заезженным мной до черноты механикам и фичам.
Преобразование
Довольно-таки впечатляющая часть тюнинга, которую вы не так уж и много где можете встретить кроме Форзы. По логике с таки расширением технических возможностей, автопарка и баз данных, этот раздел прокачки авто должен был аналогично разрастись, но... Этого не произошло...
В чём именно дело? Системы подачи воздуха, турбины, нагнетатели - всё на месте, как 10 лет назад, так и сейчас. Но вот что по поводу более серьёзных запчастей, например, двигателя? Вот тут уже начинаются первые различия. И главное из них явно не в пользу "пятёрки". И это возможность переставлять двигатели между РАЗНЫМИ, чёрт возьми, Карл, машинами! Сама идея уже полный взрыв мозга, то есть вы под капот той же древней Труено А86 можете приделать шестицилиндровый двигатель из-под Супры, и корпус 35-леьней давности будет летать и рычать в один голос с одной из икон современного спортивного японского автопрома! Да, стоит помянуть и в защиту пятой части, ч то в ней по сравнению с прародителем добавилась и замена привода, но она, как и у двигателя довольна однообразна и безлика. Первая Хорайзен, как бы странно то ни звучало, впечатляет внутренним, "подкапотным", так сказать, тюнингом побольше.
Отделка
Но что же насчёт внешнего преображения ласточки? Тут всё тоже довольно неоднозначно. Японцы во всех частях Horizon не были обделены ассортиментом спойлеров, бамперов и порогов, а порой даже целых кузовов, но вот что насчёт их состава, да и остальных тачек? В "пятёрке" многие детали лишены разнообразия лицензий (которых я заметил куда больше в первой), так что многие детали вы будете брать у "Rocket Bunny", "Origin Labs", "Big Country Labs" (ух, буквально спойлеры на ВСЕ машины только от них и есть)) и "Liberty Walk Works" (ВСЕ европейцы имеют детали ТОЛЬКО от них). И тут уже возникает резонный вопрос: то нам дороже, побольше число из одинаковых деталей на сотнях кузовов или же чёткое число, но из разнообразных оригинальных фирменных запчастей? Выбирать вам.

Треклист главной радиостанции Forza Horizon (первой части)
Хоть это и самый субъективный и посему противоречивый пункт, но я всё же решил оставить его для полноты картины. Для игры более точечных и щепетильных жанров, требующих внимательности, как, например, платформинги или шутеры, саундтрек не значит так много, как для автогонок, где крутить время от времени баранку под кислый фон или вообще его отсутствие - ну уж точно, не комильфо. Как же обстоят с ним дела у каждой из двух частей?
Forza Horizon
Как разрабы пилотной части экспериментального спин-оффа, Пелйграунды решили не ударять в грязь лицом и поднапрячь всевозможные довольно знатные связи. Отсюда мы и имеем три, но зато каких, радиостанции! Это не какие-то эксклюзивы или однотипные проходные ОСТы, а самые настоящие гремящие мировые хиты, поддерживающие так и разящий дух фестиваля и крупнейшего праздника жизни и горячих покрышек. Перечислю лишь малую часть этой плеяды: Skrillex, Avicii, Scuba, Blue Monday, DJ Fresh, Benny Benassi, Nero, Modestep, Rusko, Netsky, Friendly Fires, Arctic Monkeys, The Black Keys, The Subways, The Chemical Brothets... Словом, собралось немало, негромоко будет сказать, самых настоящих легенд музыки и поп-культуры, как того времени, так и всего века. Только хардкор, только тяжёлый дабстеп, жёсткие ремиксы, качающие биты и неистовый рок! Такого разнообразия, а главное "нишевости" жанров для реальных умещих отрываться людей, а не официозных автогонок, вы не встретите больше нигде, да и поздние части Horizon не смогли воссоздать того безудержного вайба "своего" и одной огромной тусовки, которой и ждёт игрок в своих вечерних посиделках за экраном. И такой эффект неудивителен, ведь разрабочтики запарились и даже позвали к сотрудничеству реального диджея Роба да Банка для организации радио и формирования узнаваемого стиля.
Forza Horizon 5
За 10 лет, конечно же, серия обросла более богатым и обширным треклистом, и теперь радиостанций не три, а целых 8 (не считая ретроспективного Mixtape с треками из первой части). Но теперь основной вопрос остаётся в наполнении этих самых станций. Начнём с общего их обзора. Eterna выглядит буквально насмешкой над основной долей аудитории игры, ведь какой молодой человек в автогонке станет входить в заносы и повороты под этюды Чайковского? Очередная серая заглушка для пополения такой же серой массы под табличкой "для чисел и галок", чтобы угодить неотёсанным и далёким от реальных "народных забав" и интересов критикам. Pulse и Block Party слабо вяжутся с атмосферой гонок - первое с не очень известной массам реально второсортной попсой, второе же - с типичным хип-хопом (именно им, а не умелым рэпом или фристайлом, который как раз и ценится). Всё предельно шаблонно, будто и составлено не по музыкальному вкусу молодёжи и моде, а по стереотипам, будто бы взятых из книжек или статей. Bass Arena тоже не вызвала ни эмоций, ни даже "качания", за исключением пары годных композиций, а именно расфоршенного Roses, Techtonic и одного из немногих бьющих и качовых "Jungle Fury" от RIOT.
Я, конечно, не профессиональный критик и не меломан, так что не обессудьте, музыка, в конце концов, дело вкуса. Я лишь высказал своё мнение.

Выбор первой покупаемой машины

Переход к новой зелёной повязке

Демонстрация босса перед гонкой

Гонка Мустанга с самолётом по каньону
Сложность
И да, для тех любителей Хорайзен, что подзабыли, она тут есть! И только в первой части! Расскажу для неведающих пк-бояр. В первой Forza Horizon основой для участия в фестивале является система браслетов. Каждый браслет соответствует определённому уровню умения езды, ценника тачек и деталей на них и диапазона разброса гоночных трасс, ну и их витиеватости. Такая система с гибкой настройкой сложности позволяла освоиться любому запустившему игру человеку, даже тому, кто далёк от автогонок. В "пятёрке" же разрабы решили не заморачиваться и просто выдать в самом начале игроку набор имбовых тачек на все случаи жизни: и для бездорожья, и для улиц, и даже для драга и треков.
Боссы
В первой же части всё куда интереснее. Начинаем фестиваль мы на повидавшем многое за жизнь ведре с болтами - VW Corrado XX века. Но затем для контраста и стимула к большему нам дают купить одну из двух машин на выбор: WRX STI и десятый "Лансер". Заезды каждого браслета сопровождаются разнообразными боссами, то и дело дразнящих и задевающих нас, со своими биографиями, которые нам рассказывает Скотт Тайлер со своими корреспондентами с "Басс Арены". И это не безликие вёдра, как в "Полуночных битвах" в пятой части, а реальные люди с актёрами, личностями и самыми разными родными краями, от Восточной Европы до Африки и Америки. Опережение босса в каждом заезде даёт дополнительные кредиты, а после заполучения заветной повязки вы можете бросить ему вызов, где на кону будет обкатанный автомобиль.
Квота
В обеих частях типов гонок немного, в пятой два во всех дисциплинах, три - для шоссейных, в первой аналогично, только без третьего - драга. Но зато не то, что компенсирует, а скорее обращает в противоположную сильную сторону одна загвоздка всех заездов - квота. Это ограничение на мощность автомобиля и его тип. То есть вы не можете всю игру прокатать на одном тарантасе, как в той же "пятёрке", и это очень интересно, добавляет сложности, экспириенса, разнообразия и реиграбельности. Порой сочетания этих ограничений выходят довольно интересными, как например, протюнингованные машины ценой не более 20000 кредитов, напротив, дорогие машины от 2 лямов или полноприводные британцы.
Показательные заезды
И даже они тут отличаются. Если в пятой части независимо от сложности вы плетётесь в самом хвосте, а ваш противник - неважно, аквабайки или поезд, впереди с огромным отрывом, на финишной прямой в слоу-мо благородно уступая вам первое место, даже если вы на последнем четвёртом, то в первой всё гораздо более живо и не постановочно. Раз на раз здесь не приходится. Самолёты, шары - все они имеют динамику и неподдельные траектории полёт "носом к носу" к игроку с петлями и поворотами, приближаясь на чекпоинтах, в "пятёрке" этого нет. Да и разнообразие в первенце пообильнее, здесь и заезд с ордой Мини Куперов, и гонка с аэропланом вдоль полей, и серпантины наперегонки с самолётом по красному каньону!

Та самая харчевня, у которой и начинается наша история

Угадайте, где стоит главный герой? Была бы это пятая часть, наверняка был бы тот, что посередине)

А вот, собственно и наш главный герой со своей ласточкой в ожидании начала гонки
И да, вы не ослышались, были те славные времена, когда в Forza Horizon можно было увидеть цельный осмысленный сюжет с главным героем и антагонистом, всё то, за что любили многие Need for Speed. Буду довольно краток, без лишних предрассудков и доводов, для большей наглядности и места для вашего суждения.
Синопсис первой части
Безымянный водитель, далёкий от автогонок, стоял у одной из местных мелких харчевен-забегаловок в Колорадо, ровно до того момента, как по радио вдруг объявили о начале крупнейшего гоночного и музыкального фестиваля Horizon. К участию приглашались все, у кого имелась коробка на четырёх колёсах, неважно откуда ты, кто ты, и на чём вообще ездишь - на Horizon рады будут всем желающим. Но не успел наш главный герой завести свой старенький Фольксваген, как ведущий добавил, что к участию в фестивале осталось всего лишь 10 мест. Ринувшись к ближайшей точке Horizon водитель успел оказаться одним из этого десятка счастливчиков, хотя по пути встречал лихачей на гораздо более шикарных гоночных тачках, собранных со всего земного шара.
Прибыв на место, Игорь (так назовём нашего главного героя) ухватил себе последний оставшийся браслет и вступил в серию фестивальных гоночных соревнований, где поначалу его недооценивали многие лидеры тех или иных браслетов, но вскоре он вызвал внимание своей упорностью вопреки бесславности. Но никто и не думал, что какой-то Игорь из колорадской провинции, смог бы бросить вызов потенциальному победителю этого года, трёхкратному чемпиону Horizon - Дарию Флинту. Но в конце концов, Игорь добирается до зазнавшегося мажора и побеждает его, отбивая дорогую Феррари.
Вердикт
На этом всё. Да, не замысловато, но когда сюжет в гоночных играх был замудрённым? Всё по классической формуле: есть ноунейм-гг, есть хайповый мажор-антагонист, есть прихвостни местной гоночной элиты и есть поддерживающий главного героя персонал. Всё. Для мотивации игрока и активного познания внутриигрового мира более, чем достаточно. И это всё ещё приправляется множеством второстепенных сюжетных линий, которые представляют собой не просто набор диалогов и пару катсцен, как в "пятёрке", но и напрямую влияют а игровой процесс и опыт, как например, бизнес по уличным гонкам у стритрейсера-абу-бандита Али Говарда, открывающий новый раздел заездов в разных городах и точках или шоу "Krazy Max" Дюка Магуайера, открывающий ещё один перечень спонсорских испытаний для игрока.
Сравнение с Forza Horizon 5
Первая часть лишена безмолвной несвязной завязки сюжета, где игрока бросают в пучину фестивальных потех и семейных разборок мексиканской Санта-Барбары, где кумовство между ними, организаторами и игроком порой откровенно бесит, потому что игрок, впервые запустивший игру, вообще не знает эти криво прорисованные физиономии, и не чувствует себя в единстве с главным персонажем, но кроме того, вас будут с восхищением везде окликать "Суперзвездой" и петь вам дифирамбы, видимо в расчёте на то, что вы играли в Forza Horizon 4, хотя ни я, ни, скорее всего, добрая часть людей не играли в неё, и выглядело всё это крайне неуместно, некомфортно и странно, как для новичка в этой игре... Никакой прогрессии, никакой адаптации и ни слова о челлендже - всё ради того, чтобы превратить гоночное соревнование в детсадовскую песочницу и парк аттракционов.

CGI-ролик, открывающий фестиваль Horizon

Да, ночи здесь могут быть тёмные, как в ж... жерле у вулкана, но зато освещённые участки выглядят органично и аутентично, имхо
Да, с первого взгляда может и показаться нелепым сравнивать графику в играх с разницей в 10 лет одного жанра от одного разработчика, но всё же есть пара вещей в которых замолвить о себе слово может и старушка-Horizon 2012 года. А именно это наличие полноценных CGI-роликов и более хорошая прорисовка людей на самом движке. Ну ещё здесь неплохое освещение в окружении, но похуже от фар, но это уже больше по вкусу. А учитывая, что игра заточена под консоль вообще первого десятилетия XX века, то то, что мы видим в игре, можно вообще считать прорывом уровня раннего некстгена на тот момент и подвигом Плейграундов.
Не перевод, а именно ЛОКАЛИЗАЦИЯ. Она есть только у первых двух частей, но остановимся на первой. Здесь это не только кириллица в субтитрах вперемешку с местным (мексиканским в случае "пятёрки") сленгом, но и озвучка героев, радио, навигатора и роликов! Круто, да?

Вот, словом, скрин с теми самыми флагами, стендами и палатками на обочине
Они есть и в пятой части, но ограничиваются лишь автопарком и деталями. В первой же... Хо-хо, да тут порой такое ощущение, будто смотришь запись какого-то реального фестиваля, а не играешь в аркадную гонку. Каждая гонка имеет своего уникального спонсора, бренды спортивной одежды, тормозов, телешоу дают вам интересные трюки и челленджи, а все трассы сплошь и рядом обвешены флажками, стендами и палатками от "Adidas" и "Gillette".
* * *
Итак, что мы имеем? Десятилетие "прогресса", обернувшееся деградацией. В погоне за лишними лопатами шекелей и массовостью Horizon растеряла всё: вызов, душу, сюжет, дерзкий саундтрек и даже грамотный автосалон. Вместо брутального фестиваля в Колорадо - красочный, но пустой парк аттракционов в Мексике для инстаграмных снимков. Первая часть - это история гонщика-выскочки, пробивающегося к славе. Пятая - симулятор бога, где тебе с порога вручают ключи от суперкаров и величают суперзвездой, не сделавшей ни одного круга. Серия сменила курс с гоночного хардкора на всеядный попкорн. Игра 2012 года сегодня даст фору новинке не в полировке текстур, а в самом главном - в сердце, забитом бензином и адреналином, а не микротранзакциями.
Вопросы и предложения сюда.
А какая часть больше по душе ВАС?1