249 lines
No EOL
17 KiB
HTML
249 lines
No EOL
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
|
<title>defiance v0.12.1</title>
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/simplex-noise/2.4.0/simplex-noise.min.js"></script>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
|
<style>
|
|
body { font-family: 'Inter', sans-serif; overflow: hidden; }
|
|
canvas { display: block; background-color: #1a202c; cursor: pointer; }
|
|
::-webkit-scrollbar { width: 8px; }
|
|
::-webkit-scrollbar-track { background: #2d3748; }
|
|
::-webkit-scrollbar-thumb { background: #4a5568; border-radius: 4px; }
|
|
::-webkit-scrollbar-thumb:hover { background: #718096; }
|
|
.control-btn {
|
|
background-color: rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.4);
|
|
color: white; font-size: 1.5rem; font-weight: bold; display: flex;
|
|
align-items: center; justify-content: center; user-select: none;
|
|
-webkit-user-select: none; -webkit-tap-highlight-color: transparent;
|
|
}
|
|
.control-btn:active { background-color: rgba(255, 255, 255, 0.5); }
|
|
.equip-btn, .menu-btn {
|
|
background-color: #3182ce; color: white; padding: 2px 6px; border-radius: 4px;
|
|
font-size: 0.75rem; cursor: pointer; margin-left: 8px; border: none;
|
|
}
|
|
.equip-btn:hover, .menu-btn:hover { background-color: #2b6cb0; }
|
|
.menu-btn { padding: 8px 12px; font-size: 1rem; width: 100%; text-align: left; }
|
|
.menu-btn:disabled { background-color: #4a5568; cursor: not-allowed; }
|
|
@media (min-width: 1024px) { #mobile-controls, #info-toggle-btn { display: none; } }
|
|
</style>
|
|
</head>
|
|
<body class="bg-gray-900 text-white flex h-screen">
|
|
<svg width="0" height="0" style="position:absolute; display: none;">
|
|
<defs>
|
|
<!-- Asset Forêt --> <!-- Asset Forêt Dense -->
|
|
<g id="forest-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="treeTrunkDark" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#5F432A;"/><stop offset="100%" style="stop-color:#4A2E1A;"/></linearGradient>
|
|
<linearGradient id="treeLeavesDark" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#2F855A;"/><stop offset="100%" style="stop-color:#276749;"/></linearGradient>
|
|
</defs>
|
|
<rect x="55" y="65" width="8" height="20" fill="url(#treeTrunkDark)"/>
|
|
<path d="M 59 35 L 85 70 L 33 70 Z" fill="url(#treeLeavesDark)"/>
|
|
<rect x="20" y="70" width="10" height="25" fill="url(#treeTrunkDark)"/>
|
|
<path d="M 25 25 L 60 75 L -10 75 Z" fill="url(#treeLeavesDark)"/>
|
|
<rect x="40" y="75" width="5" height="15" fill="url(#treeTrunkDark)" opacity="0.8"/>
|
|
<path d="M 42.5 50 L 60 80 L 25 80 Z" fill="url(#treeLeavesDark)" opacity="0.8"/>
|
|
</g>
|
|
|
|
<!-- Asset Forêt Enchantée -->
|
|
<g id="enchanted-forest-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="enchantedTrunk" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#5B21B6;"/><stop offset="100%" style="stop-color:#4C1D95;"/></linearGradient>
|
|
<linearGradient id="enchantedLeaves" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#A78BFA;"/><stop offset="100%" style="stop-color:#7C3AED;"/></linearGradient>
|
|
<radialGradient id="glowEffect"><stop offset="0%" stop-color="#FDE047" stop-opacity="0.8"/><stop offset="100%" stop-color="#FDE047" stop-opacity="0"/></radialGradient>
|
|
</defs>
|
|
<circle cx="25" cy="85" r="10" fill="url(#glowEffect)"/>
|
|
<circle cx="75" cy="80" r="12" fill="url(#glowEffect)"/>
|
|
<rect x="46" y="50" width="8" height="45" fill="url(#enchantedTrunk)"/>
|
|
<path d="M 50 10 C 20 50, 80 50, 50 10 Z" fill="url(#enchantedLeaves)" transform="rotate(-15 50 50)"/>
|
|
<path d="M 50 15 L 85 65 L 15 65 Z" fill="url(#enchantedLeaves)"/>
|
|
</g>
|
|
|
|
<!-- Asset Marais -->
|
|
<g id="swamp-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="swampWater" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#4A5568;"/><stop offset="100%" style="stop-color:#2D3748;"/></linearGradient>
|
|
<linearGradient id="deadWood" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#718096;"/><stop offset="100%" style="stop-color:#4A5568;"/></linearGradient>
|
|
</defs>
|
|
<path d="M 0 80 Q 50 70, 100 80 L 100 100 L 0 100 Z" fill="url(#swampWater)"/>
|
|
<path d="M 20 90 L 22 40 L 25 90 L 27 50 L 29 90" stroke="url(#deadWood)" stroke-width="2" fill="none"/>
|
|
<path d="M 70 95 L 68 30 L 72 35 L 75 95 L 73 40" stroke="url(#deadWood)" stroke-width="3" fill="none"/>
|
|
</g>
|
|
|
|
<!-- Asset Horde de Loups -->
|
|
<g id="wolf-pack-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="wolfFurGrey" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#A0AEC0;"/><stop offset="100%" style="stop-color:#718096;"/></linearGradient>
|
|
</defs>
|
|
<!-- Loup 1 (leader) -->
|
|
<path d="M 50 25 L 70 45 L 65 75 L 35 75 L 30 45 Z" fill="url(#wolfFurGrey)"/>
|
|
<path d="M 40 47 L 30 30 L 45 40 Z" fill="#A0AEC0" stroke="#2D3748" stroke-width="1"/>
|
|
<path d="M 60 47 L 70 30 L 55 40 Z" fill="#A0AEC0" stroke="#2D3748" stroke-width="1"/>
|
|
<!-- Loup 2 (gauche) -->
|
|
<path d="M 25 45 L 40 60 L 35 85 L 10 85 L 5 60 Z" fill="url(#wolfFurGrey)" opacity="0.9"/>
|
|
<!-- Loup 3 (droite) -->
|
|
<path d="M 75 45 L 95 60 L 90 85 L 65 85 L 60 60 Z" fill="url(#wolfFurGrey)" opacity="0.9"/>
|
|
</g>
|
|
|
|
<!-- Asset Sanglier -->
|
|
<!-- Asset Sanglier (détaillé v2) -->
|
|
<g id="boar-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="boarFurDark" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#593C2A;"/>
|
|
<stop offset="100%" style="stop-color:#3D2A1F;"/>
|
|
</linearGradient>
|
|
<linearGradient id="boarTusk" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#F7FAFC;"/>
|
|
<stop offset="100%" style="stop-color:#E2E8F0;"/>
|
|
</linearGradient>
|
|
</defs>
|
|
<!-- Pattes arrières -->
|
|
<rect x="25" y="70" width="10" height="20" fill="url(#boarFurDark)" transform="rotate(-10 30 80)"/>
|
|
<rect x="40" y="72" width="10" height="20" fill="url(#boarFurDark)" transform="rotate(-5 45 82)"/>
|
|
<!-- Corps -->
|
|
<path d="M 20 60 C 10 40, 40 25, 60 30 L 80 35 C 95 40, 95 60, 80 75 L 30 85 C 15 80, 25 75, 20 60 Z" fill="url(#boarFurDark)"/>
|
|
<!-- Pattes avants -->
|
|
<rect x="70" y="68" width="12" height="22" fill="url(#boarFurDark)" transform="rotate(10 76 79)"/>
|
|
<rect x="80" y="65" width="12" height="22" fill="url(#boarFurDark)" transform="rotate(5 86 76)"/>
|
|
<!-- Tête -->
|
|
<path d="M 78 33 C 85 28, 95 30, 100 38 L 95 55 L 82 50 Z" fill="url(#boarFurDark)"/>
|
|
<!-- Oreille -->
|
|
<path d="M 75 32 C 70 25, 80 25, 80 32 Z" fill="#3D2A1F"/>
|
|
<!-- Défenses -->
|
|
<path d="M 98 52 C 102 47, 97 42, 95 44" fill="url(#boarTusk)" stroke="#A0AEC0" stroke-width="0.5"/>
|
|
<!-- Oeil -->
|
|
<circle cx="88" cy="42" r="2" fill="#1A202C"/>
|
|
<!-- Queue -->
|
|
<path d="M 20 65 Q 15 70, 18 75" stroke="#3D2A1F" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
</g>
|
|
|
|
<!-- Asset Ville -->
|
|
<g id="city-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="stoneGradient" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#A9A9A9;"/><stop offset="100%" style="stop-color:#696969;"/></linearGradient>
|
|
<linearGradient id="stoneShadowGradient" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#808080;"/><stop offset="100%" style="stop-color:#4A5568;"/></linearGradient>
|
|
</defs>
|
|
<path d="M 10 95 L 15 70 L 85 70 L 90 95 Z" fill="url(#stoneShadowGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<path d="M 15 70 L 15 65 L 25 65 L 25 70 L 35 70 L 35 65 L 45 65 L 45 70 L 55 70 L 55 65 L 65 65 L 65 70 L 75 70 L 75 65 L 85 65 L 85 70 Z" fill="url(#stoneShadowGradient)" stroke="#1A202C" stroke-width="1.5"/>
|
|
<rect x="20" y="30" width="20" height="40" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="2"/><rect x="18" y="25" width="24" height="5" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<rect x="60" y="30" width="20" height="40" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="2"/><rect x="58" y="25" width="24" height="5" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<rect x="40" y="15" width="20" height="55" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<path d="M 38 15 L 38 10 L 43 10 L 43 15 L 48 15 L 48 10 L 53 10 L 53 15 L 58 15 L 58 10 L 63 10 L 63 15 Z" fill="url(#stoneGradient)" stroke="#1A202C" stroke-width="1.5"/>
|
|
</g>
|
|
|
|
<!-- Asset Village -->
|
|
<g id="village-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="woodGradient" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#A0522D;"/><stop offset="100%" style="stop-color:#8B4513;"/></linearGradient>
|
|
<linearGradient id="thatchGradient" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" style="stop-color:#D4A373;"/><stop offset="100%" style="stop-color:#A0522D;"/></linearGradient>
|
|
</defs>
|
|
<rect x="20" y="50" width="60" height="45" fill="url(#woodGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<polygon points="15,50 85,50 50,20" fill="url(#thatchGradient)" stroke="#1A202C" stroke-width="2"/>
|
|
<rect x="65" y="60" width="25" height="35" fill="#8B4513" stroke="#1A202C" stroke-width="1.5"/><polygon points="62,60 93,60 77.5,40" fill="#A0522D" stroke="#1A202C" stroke-width="1.5"/>
|
|
<rect x="45" y="65" width="10" height="10" fill="#2D3748"/>
|
|
</g>
|
|
|
|
|
|
<!-- Asset Joueur (Loup) -->
|
|
<g id="player-svg" viewBox="0 0 100 100">
|
|
<defs>
|
|
<linearGradient id="wolfFurGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#A0AEC0;" />
|
|
<stop offset="100%" style="stop-color:#718096;" />
|
|
</linearGradient>
|
|
<linearGradient id="wolfShadowGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#4A5568;" />
|
|
<stop offset="100%" style="stop-color:#2D3748;" />
|
|
</linearGradient>
|
|
</defs>
|
|
<path d="M 50 20 L 90 50 L 80 95 L 20 95 L 10 50 Z" fill="url(#wolfFurGradient)" />
|
|
<path d="M 50 20 L 70 55 L 50 65 L 30 55 Z" fill="url(#wolfShadowGradient)" />
|
|
<path d="M 25 52 L 10 30 L 35 40 Z" fill="#A0AEC0" stroke="#2D3748" stroke-width="1.5"/>
|
|
<path d="M 75 52 L 90 30 L 65 40 Z" fill="#A0AEC0" stroke="#2D3748" stroke-width="1.5"/>
|
|
<path d="M 35 55 Q 40 52 45 55 Q 40 58 35 55 Z" fill="#FBBF24" />
|
|
<path d="M 65 55 Q 60 52 55 55 Q 60 58 65 55 Z" fill="#FBBF24" />
|
|
<circle cx="39" cy="55" r="1.5" fill="black" />
|
|
<circle cx="61" cy="55" r="1.5" fill="black" />
|
|
</g>
|
|
|
|
</defs>
|
|
</svg>
|
|
<!-- Panneau d'information Desktop -->
|
|
<div id="desktop-panel" class="w-1/4 max-w-sm p-6 bg-gray-800 shadow-lg overflow-y-auto flex-col hidden md:flex">
|
|
<h1 class="text-2xl font-bold mb-4 text-cyan-400">defiance v0.12.1</h1>
|
|
<p class="text-sm text-gray-400 mb-6">ZQSD/Flèches: Bouger | E: Interagir | C: Camper</p>
|
|
|
|
<div class="space-y-4">
|
|
<h2 class="text-xl font-semibold border-b-2 border-gray-700 pb-2">Feuille de Personnage</h2>
|
|
<div id="player-info-desktop" class="bg-gray-700 p-4 rounded-lg text-sm space-y-3"></div>
|
|
<h2 class="text-xl font-semibold border-b-2 border-gray-700 pb-2 mt-4">Infos de la Tuile</h2>
|
|
<div id="tile-info-desktop" class="bg-gray-700 p-4 rounded-lg text-sm"></div>
|
|
</div>
|
|
<div class="mt-auto pt-6 text-center text-xs text-gray-500"><p>Généré par Gemini</p></div>
|
|
</div>
|
|
|
|
<!-- Zone du jeu -->
|
|
<div class="flex-1 relative">
|
|
<canvas id="gameCanvas"></canvas>
|
|
<div id="loading" class="absolute inset-0 bg-black bg-opacity-75 flex items-center justify-center text-2xl z-50">Le monde prend vie...</div>
|
|
<!-- UI Temps et Saison -->
|
|
<div id="time-ui" class="absolute top-4 left-4 bg-black/50 p-2 rounded-lg text-sm font-semibold z-20">
|
|
<div id="time-display">Jour 1, 06:00</div>
|
|
<div id="season-display">Printemps</div>
|
|
</div>
|
|
<!-- Bouton d'info Mobile -->
|
|
<button id="info-toggle-btn" class="control-btn absolute top-5 right-5 w-16 h-16 rounded-full text-3xl z-20">🎒</button>
|
|
|
|
<!-- Panneau d'info Mobile (Overlay) -->
|
|
<div id="mobile-info-panel" class="absolute inset-0 bg-black/75 p-4 flex-col items-center justify-center z-30 hidden">
|
|
<div class="w-full max-w-md max-h-full bg-gray-800 rounded-lg shadow-lg overflow-y-auto p-6 space-y-4">
|
|
<h2 class="text-xl font-semibold border-b-2 border-gray-700 pb-2">Feuille de Personnage</h2>
|
|
<div id="player-info-mobile" class="bg-gray-700 p-4 rounded-lg text-sm space-y-3"></div>
|
|
<h2 class="text-xl font-semibold border-b-2 border-gray-700 pb-2 mt-4">Infos de la Tuile</h2>
|
|
<div id="tile-info-mobile" class="bg-gray-700 p-4 rounded-lg text-sm"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Contrôles Mobiles -->
|
|
<div id="mobile-controls" class="absolute bottom-20 right-5 flex items-end gap-4 z-20">
|
|
<button id="btn-camp" class="control-btn rounded-full w-20 h-20 text-3xl">⛺</button>
|
|
<button id="btn-action" class="control-btn rounded-full w-20 h-20 text-3xl">✋</button>
|
|
<div class="grid grid-cols-3 grid-rows-3 w-36 h-36 gap-1">
|
|
<div></div><button id="btn-up" class="control-btn rounded-t-lg">▲</button><div></div>
|
|
<button id="btn-left" class="control-btn rounded-l-lg">◀</button><div></div><button id="btn-right" class="control-btn rounded-r-lg">▶</button>
|
|
<div></div><button id="btn-down" class="control-btn rounded-b-lg">▼</button><div></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Écran de Combat -->
|
|
<div id="combat-screen" class="absolute inset-0 bg-black/80 flex-col items-center justify-center z-40 hidden">
|
|
<div class="text-center text-4xl mb-8 text-red-500 font-bold">COMBAT !</div>
|
|
<div class="flex justify-around w-full max-w-4xl">
|
|
<div class="text-center w-1/3">
|
|
<div class="text-8xl">🦸</div>
|
|
<h3 class="text-2xl font-bold text-cyan-400">Héros</h3>
|
|
<div class="w-full bg-gray-700 rounded-full h-6 mt-2 border-2 border-gray-600"><div id="combat-player-hp-bar" class="bg-green-500 h-full rounded-full text-center text-white font-bold transition-all duration-500"></div></div>
|
|
<div id="combat-player-hp-text" class="mt-1"></div>
|
|
</div>
|
|
<div class="text-4xl font-bold self-center">VS</div>
|
|
<div class="text-center w-1/3">
|
|
<div id="combat-opponent-icon" class="text-8xl"></div>
|
|
<h3 id="combat-opponent-name" class="text-2xl font-bold text-red-400"></h3>
|
|
<div class="w-full bg-gray-700 rounded-full h-6 mt-2 border-2 border-gray-600"><div id="combat-opponent-hp-bar" class="bg-red-500 h-full rounded-full text-center text-white font-bold transition-all duration-500"></div></div>
|
|
<div id="combat-opponent-hp-text" class="mt-1"></div>
|
|
</div>
|
|
</div>
|
|
<div class="mt-12 flex flex-col items-center">
|
|
<button id="attack-btn" class="bg-red-600 hover:bg-red-700 text-white font-bold py-4 px-8 rounded-lg text-2xl shadow-lg">⚔️ Attaquer</button>
|
|
<div id="combat-log" class="mt-4 h-24 text-center text-gray-300"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="../js/scriptalpha.js"></script>
|
|
</body>
|
|
|
|
</html> |