JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<span class="attack-effect">Enemy Attack!</span> <style> .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<<typeNEW 30ms>>\ You wake up in a forest, the sun's rays filtering through the leaves. Suddenly, a beautiful elf emerges from the bushes. <</typeNEW>> <div class="video-container">\ <video width="100%" height="30%" playsinline autoplay loop muted > <source src="MagicWorldOfBimbo/Intro/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="fade-overlay"></div>\ </div>\ <<typeNEW 30ms>>\ <<speech "Elena">>Hey mister, how are you? Are you awake? I'm Elara... We need help... <</speech>> <<linkappend "...Where am I?" t8n>>\ <<speech "Elena">>We are lost in the forest!<</speech>>\ <</linkappend>>\ [[Help her]] <</typeNEW>> <style> .video-container { position: relative; width: 100%; height: 100%; } .video { width: 100%; height: 100%; } .fade-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; animation: fadeToBlack 4s infinite; pointer-events: none; z-index: 1; } @keyframes fadeToBlack { 0% { background-color: rgba(0, 0, 0, 1); } 25% { background-color: rgba(0, 0, 0, 0.1); } 50% { background-color: rgba(0, 0, 0, 0.8); } 75% { background-color: rgba(0, 0, 0, 0.2); } 100% { background-color: rgba(0, 0, 0, 1); } } </style>
<<include "Music">> ----------------------------------- <<speech "Character">>I specialize in armor, what do you need? <</speech>> ------------------------------- <audio src="medieval-story-by-frank-schroeter-from-filmmusic-io.mp3" controls autoplay> Votre navigateur ne supporte pas l'audio. </audio> --------------------------------- <<shakescreen "300ms">> ---------------------------------- Bounce du text : <span class="bounce">Ouch !!</span> en bas : <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } </style> ------------------------------------- Quest : <<set $activeQuests.push({ name: "Trouver l'épée magique", progress: 0, total: 1, completed: false })>> et <<set $activeQuests[0].progress++>> <<if $activeQuests[0].progress >= $activeQuests[0].total>> <<set $activeQuests[0].completed = true>> <</if>>
<span class="rotate">This text rotates!</span> <style> .rotate { display: inline-block; animation: rotate 2s linear infinite; } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } </style> html Copy <span class="gradient-text">This text has a gradient!</span> <style> .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } </style> <span class="highlight-hover">Hover over me!</span> <style> .highlight-hover { transition: background-color 0.3s ease; } .highlight-hover:hover { background-color: yellow; } </style> <span class="bounce">This text bounces!</span> <style> .bounce { display: inline-block; animation: bounce 1s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } </style> <span class="shake">This text shakes!</span> <style> .shake { display: inline-block; animation: shake 0.5s infinite; } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } } </style> <span class="fade-in">This text will fade in.</span> <style> .fade-in { opacity: 0; animation: fadeIn 2s ease-in forwards; } @keyframes fadeIn { to { opacity: 1; } } </style> <span class="typewriter">This text will appear as if it's being typed.</span> <style> .typewriter { display: inline-block; overflow: hidden; border-right: .15em solid orange; white-space: nowrap; margin: 0 auto; letter-spacing: .15em; animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite; } @keyframes typing { from { width: 0; } to { width: 100%; } } @keyframes blink-caret { from, to { border-color: transparent; } 50% { border-color: orange; } } </style>
<<set $Life += 1>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>With my sisters, we got lost in the forest...<</speech>> <<linkappend2 "Who are your sisters?" t8n>>\ <<speech "Elena">>There's my cute little sister Amy, with her bright eyes and contagious laughter, and my warrior sister Sym, a bit crazy.<</speech>> <</linkappend2>>\ [[Talk to Elena]][[Talk to Amy]][[Talk to Sym]] <</typeNEW>> <<run addQuest("Find the village", 1)>> <<script>> if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; delete window.audio; } window.audio = new Audio('MagicWorldOfBimbo/Music/1Forest.mp3'); window.audio.loop = true; window.audio.volume = 0.3; // Adjust volume (0.0 to 1.0) window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); <</script>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/A1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>There's something weird about this forest, the animals are strange... <</speech>> <<speech "Elena">>I'm putting on my new outfit, and we're going to find something to eat. I'm hungry... <</speech>> <<linkappend2 "...Have you lost your clothes?" t8n>>\ <<speech "Elena">>We went swimming, and our clothes were gone when we got back...<</speech>>\ <</linkappend2>>\ [[Why are you sad, Elena?]][[Find something to eat]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/AmyS0.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>I really wanted to find some roses to make massage oil, but we got lost... Why are you looking at me like that? Are you thinking about a massage? <</speech>> [[Massage]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/BA1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Sym">>What are you, some kind of little human? A goofball? I'm not a fan of that look you're giving me." <</speech>> [[human]] <<if $SymQuest neq 1>><div class="disabled-button">I am a magician.</div>\<<endif>>\ <<if $SymQuest eq 1>>[[I am a magician, GuNaked]]<<endif>> <</typeNEW>>
<<set $SymQuest to 1>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/BA2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 20ms>>\ <<speech "Sym">>Oh, human, I despise you! This is entirely your fault that we're lost.." Only a powerful mage's "GuNaked" spell could destabilize me. <</speech>> <span class="attack-effect"> After several hits, you fainted. </span> You unlock a alternatif way to die! <style> .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style> [[Restart|NewStart]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/A5.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>Follow me, I've discovered these beautiful, deep red berries growing wild. <</speech>> [[Eat berries]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/A2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>My chest is <span class="bounce">huge</span>, and this bra is too small... <</speech>> [[You can take it off, it doesn't bother me.|You can remove it]] [[Talk to Amy]] <</typeNEW>> <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } </style>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/A3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>Thank you very much, I'm going to relax my breasts for a few minutes, then we'll go get something to eat. <</speech>> [[Find something to eat]] [[Talk to Amy]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/A4.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Elena">>They're delicious! Here, have some too...<</speech>> <<linkappend "Eat berries">> <<speech "Elena">>My stomach is kind of upset. How are you feeling?!<</speech>> <span class="attack-effect"> "As the poison took effect,You fainted after a moment..." </span> [[Die of poisoning]] <<if $helenaEat neq 1>><div class="disabled-button">Extract the poison with a blowjob.</div><<endif>> <<if $helenaEat eq 1>>[[Extract the poison with a blowjob.]]<<endif>> <</linkappend>> <</typeNEW>> <style> .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/AmyS1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>Sorry, but I can't get a massage now. I put on too much oil before I went out. I think I put on too much of that rose oil for my chest. It looks a bit swollen. <</speech>> <<linkappend2 "Where we can find the rose ?" t8n>>\ <<speech "Amy">>in the deep forest...is why we are lost...<</speech>>\ <</linkappend2>>\ [[How do you give yourself a massage?]] <</typeNEW>>
<!-- Small image that the player can click --> <img src="MagicWorldOfBimbo/Amy.jpg" alt="Small Image" class="clickable-image" onclick="showImageModal('MagicWorldOfBimbo/Amy.jpg')"> <!-- Modal for displaying the larger image --> <div id="image-modal" class="modal"> <span class="close" onclick="closeImageModal()">×</span> <img id="modal-image" class="modal-content"> </div> <style> /* Style for the clickable image */ .clickable-image { width: 150px; height: auto; cursor: pointer; border: 2px solid #ccc; border-radius: 5px; transition: transform 0.2s ease; } .clickable-image:hover { transform: scale(1.05); border-color: #777; } /* Modal styles */ .modal { display: none; /* Hidden by default */ position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0, 0, 0, 0.9); } .modal-content { display: block; margin: auto; max-width: 80%; max-height: 80%; margin-top: 5%; } .close { position: absolute; top: 20px; right: 35px; color: white; font-size: 40px; font-weight: bold; cursor: pointer; } .close:hover { color: #ccc; } </style> <script> // Function to show the modal with the larger image function showImageModal(imageUrl) { const modal = document.getElementById("image-modal"); const modalImg = document.getElementById("modal-image"); modal.style.display = "block"; modalImg.src = imageUrl; } // Function to close the modal function closeImageModal() { const modal = document.getElementById("image-modal"); modal.style.display = "none"; } </script> dsds
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/AmyS2A.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>But you're stupid, I use my hands to touch my chest, like this...uh... <</speech>> [[Can you hear the noise?]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/AmyS3A.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>It's the wolf, run quickly!!! Faster... girls, run! <</speech>> [[Running?]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/AmyS3B.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>Don't run with me, you idiot, run somewhere else. <</speech>> [[Move eastwards]] [[Move north]] <</typeNEW>>
<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/1.jpg"> <<typeNEW 30ms>>\After 2 hours of running, you arrive at the village. A girl is coming your way. is ... [[Wait the girl]] <</typeNEW>> <<set $activeQuests[0].progress++>> <<if $activeQuests[0].progress >= $activeQuests[0].total>> <<set $activeQuests[0].completed = true>> <</if>>
<img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/EndForest.png" class="damage-effect"> <span class="attack-effect"> "The wolf is attacking you!" </span> [[Dream]] <style> .damage-effect { animation: colorChange 2s infinite; } @keyframes colorChange { 0% { filter: sepia(50%) hue-rotate(-50deg) saturate(200%); } /* Rouge */ 33% { filter: sepia(50%) hue-rotate(60deg) saturate(200%); } /* Vert */ 66% { filter: sepia(50%) hue-rotate(180deg) saturate(200%); } /* Bleu */ 100% { filter: sepia(50%) hue-rotate(-50deg) saturate(200%); } /* Retour au rouge */ } .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<div class="video-container">\ <video class="video" autoplay muted playsinline loop>\ <source src="MagicWorldOfBimbo/Intro/AmyS4Dream.mp4" type="video/mp4">\ </video>\ <div class="fade-overlay"></div>\ </div>\ <<typeNEW 30ms>>\ <<speech "You">>I'm dreaming ?!! What was that strange wolf? Amy ?... <</speech>> <</typeNEW>> [[Restart|NewStart]] <style> .video-container { position: relative; width: 100%; height: 100%; } .video { width: 100%; height: 100%; } .fade-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; animation: fadeToBlack 4s infinite; pointer-events: none; z-index: 1; } @keyframes fadeToBlack { 0% { background-color: rgba(0, 0, 0, 1); } 25% { background-color: rgba(0, 0, 0, 0.1); } 50% { background-color: rgba(0, 0, 0, 0.8); } 75% { background-color: rgba(0, 0, 0, 0.2); } 100% { background-color: rgba(0, 0, 0, 1); } } </style>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>That's fantastic, you escaped the wolf! My sisters and I arrived about an hour ago. Would you like to grab a drink to relax after that Adventure? <</speech>> <<set $activeQuests = $activeQuests.filter(function(quest) { return quest.name !== "Find the village"; })>> [[Go for the Drink]] <</typeNEW>> <<script>> // Fonction pour jouer un fichier audio function playAudio(audioPath) { // Vérifie si l'audio en cours est différent du nouveau if (!window.audio || window.audio.src.split('/').pop() !== audioPath.split('/').pop()) { // Si un audio existe déjà, l'arrête if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; } // Crée et configure le nouvel audio window.audio = new Audio(audioPath); window.audio.loop = true; window.audio.volume = $("#volumeSlider").val() / 100 || 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); console.log("Nouvelle musique démarrée: " + audioPath); } else { console.log("Même musique déjà en cours: " + audioPath); } } // Appel de la fonction avec le chemin de votre fichier audio playAudio('MagicWorldOfBimbo/Music/1Village.mp3'); <</script>>
<span class="gradient-text">Now the real game begins. Amy's waiting, but your wallet needs to be ready.</span> <<set $gold = 0>>\ <div style="background: linear-gradient(to right, #332b00, #111); padding: 8px 15px; border-radius: 10px; border: 2px solid #FFD700; display: inline-block; box-shadow: 0 0 10px rgba(255, 215, 0, 0.3);">\ <span style="color: #FFD700; display: flex; align-items: center; gap: 5px;">🪙 Gold Pieces: <span style="font-size: 1.2em; font-weight: bold; text-shadow: 0 0 5px #FFD700;">$gold</span></span></div> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Amy">>Great, follow me, it's just around the corner up there. - The village has a shop, a tavern, and readily available work. <</speech>> [[Tavern]] <</typeNEW>> <style> .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, orange, red, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } </style>
BONUS : <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/Bonus/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/Bonus/2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/Bonus/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/Bonus/4.mp4" type="video/mp4"> Your browser does not support the video tag. </video>
// Code pour le passage qui gère la musique <<script>> if (!window.audio) { window.audio = new Audio('medieval-story-by-frank-schroeter-from-filmmusic-io.mp3'); window.audio.loop = true; window.audio.volume = 0.3; } // Créer un objet pour gérer l'état de la musique if (!window.musicState) { window.musicState = { volume: 0.3, isPlaying: false }; } // Ajouter les contrôles au menu de gauche $(document).ready(function() { let controls = ` <div id="music-controls" style="padding: 10px;"> <h3>Contrôles Musique</h3> <button id="toggleMusic" style="margin: 5px;">▶️ Play/Pause</button><br> <input type="range" id="volumeSlider" min="0" max="100" value="30" style="width: 100%;"> <span id="volumeValue">30%</span> </div> `; // Ajouter les contrôles au menu de gauche (UI-bar) $("#ui-bar").append(controls); // Gérer le bouton play/pause $("#toggleMusic").click(function() { if (window.audio.paused) { window.audio.play(); window.musicState.isPlaying = true; } else { window.audio.pause(); window.musicState.isPlaying = false; } }); // Gérer le contrôle du volume $("#volumeSlider").on('input', function() { let volume = $(this).val() / 100; window.audio.volume = volume; window.musicState.volume = volume; $("#volumeValue").text($(this).val() + "%"); }); }); <</script>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Intro/Bl-Elena/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 20ms>>\ <<speech "Elena">>Oh no, this fruit is a poison? What should I do? <</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/2.jpg" class="damage-effect"> <<speech "Elena">>What, a blowjob to extract the venom? Yes, that might be the solution.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/3.jpg" class="damage-effect"> <<speech "Elena">>But what a huge cock!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/4.jpg" class="damage-effect"> <<speech "Elena">>Glups...Slups..<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/5.webp"> <<speech "Elena">>Gluuuups...<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/6.jpg" class="damage-effect"> <<speech "Elena">>I can feel better and you ?!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/6b.webp"> [[Cum]] <</typeNEW>>
<<set $helenaEat to 1>> You unlock a new way to die! [[Restart|NewStart]]
<<shakescreen "300ms">> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/7.jpg" class="damage-effect"> <<speech "Elena">>Oh you cumming... in my mouth...<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/8.jpg" class="damage-effect"> <<speech "Elena">>I'm having trouble swallowing it all, there's too much...<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/9.jpg" class="damage-effect"> <<speech "Elena">>It's getting thicker and thicker.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/10.jpg"> <<speech "Elena">>I hope I don't get pregnant with all that I'm swallowing.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/11.jpg" class="damage-effect"> <<speech "Elena">>I swallowed it all! Sir, are you okay?<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/12.jpg" class="damage-effect"> <<speech "Elena">>I feel much better, you are my savior.<</speech>> <span class="attack-effect"> "You saved her, but you die..." </span> <<if $CheatCode == 1>>[[Anal's sex]]<<endif>> <<if $CheatCode == 0>><div class="disabled-button">Anal's sex. (🔒<a href="https://doctorbimbo.itch.io/magic-world-of-bimbo" target="blank"> Support Only</a> )</div>\<<endif>> [[Restart|NewStart]] <style> .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<<shakescreen "1s">> <span class="gradient-text">You are casting a magic spell. GuNakeeeed !!!!</span> <video width="100%" height="30%" playsinline autoplay loop muted > <source src="MagicWorldOfBimbo/Intro/Sym/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Sym">>Uhhaaaaahhhh... - My clothes have disappeared! ! Pervvv !!!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/2b.jpg" class="damage-effect"> <<speech "Sym">>You're not getting away with this, let's fight!!<</speech>> <span class="attack-effect">Hit!</span> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/2c.jpg" id="ShakeHit"> <<speech "Sym">>Take that, you old pervert!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/3a.jpg"> <<speech "Sym">>Is that not enough for you? Then eat my foot!!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/3b.jpg" id="ShakeHit"> <<speech "Sym">>You're not so smug now! Are you falling down?<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/3c.jpg" class="damage-effect"> <<speech "Sym">>Sleep well!<</speech>> [[Restart|NewStart]] <style> .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, orange, red, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: block; margin-left: 10ch; } .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<<shake 2s>>This text will shake for 2 seconds.<</shake>> <<shake 500ms>><img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Sym/1.jpg" class="damage-effect">.<</shake>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/4b.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 0ms>>\ <<speech "Amy">>What do you want to do?<</speech>>\ <<if $gold == 0>>\ <div class="disabled-button">Offer a Drink. (1🪙)</div>\ <<else>> [[Offer a Drink (1🪙)|Glass of Milk]]\ <<endif>>\ [[Go work|Work]]\ [[Leave|CityMap]] <</typeNEW>>
<<set _randomImg = Math.floor(Math.random() * 11)>>\ <<set _phrases to [ "I love dancing in this bar.it feels just like home to me.", "And you, Do you like Milk?", "A witch lives in the forest; she might be able to help you remember.", "Please kill the wolf and I will be indebted to you...", "I've been coming to this bar for years!", "I don't like the wolf, in the forest...", "I love my sisters, and you?❤️", "I promise, if you kill the wolf, we will go for a walk in the forest.", "Milk has many benefits for the skin.", "I love how they infuse the milk with vanilla before mixing the drink.", "Mines offer quick work to earn money.", "I'm wondering when the forest will be secure." ]>>\ <<set _randomVid = Math.floor(Math.random() * 9) + 1>>\ <<print '<video width="100%" height="30%" playsinline autoplay loop muted>' + '<source src="MagicWorldOfBimbo/Village/Milk/Videos/' + _randomVid + '.mp4" type="video/mp4">' + 'Your browser does not support the video tag.</video>'>> <<typeNEW 30ms>>\ <<speech "Amy">><<print _phrases[_randomImg]>><</speech>> <<print '<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Milk/' + _randomImg + '.jpg">'>> <<speech "Amy">><<print _phrases[_randomImg+1]>><</speech>> <<if $AmyAmyRelationQuest >= 0>>\ <<set _randomImg2 = Math.floor(Math.random() * 5)+9>>\ <<print '<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Milk/' + _randomImg2 + '.jpg">'>> <<speech "Amy">>Are you getting me another round, or shall we do something else?<</speech>> <<endif>>\ <<if $AmyRelation == 0>>\ <<set $AmyRelation = 1>>\ <<endif>>\ [[Walking with Amy]] [[Tavern]] <</typeNEW>> <<script>> if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; delete window.audio; } window.audio = new Audio('MagicWorldOfBimbo/Music/1DateAmy.mp3'); window.audio.loop = true; window.audio.volume = $("#volumeSlider").length > 0 ? ($("#volumeSlider").val() / 100) : 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); <</script>>
<span class="gradient-text">*** End of this Update ***</span> Thank you for playing my little demo! I hope you had as much fun playing it as I had making it. If you enjoyed it and would like to see more, please leave a comment below / Like. Your feedback is greatly appreciated! <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Relax/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>I will miss you very much.<</speech>>\ <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Relax/2.mp4" type="video/mp4"> <source src="MagicWorldOfBimbo/Village/Relax/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>Look at my breasts one last time.❤️<</speech>>\ <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Relax/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>Promis, I'll get a massage next time?<</speech>>\ [[Restart|NewStart]] [[BONUS]] <style> .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, orange, red, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } </style>
You work for a few hours... <<typeNEW 50ms>>\ <<set _randomImg = Math.floor(Math.random() * 5)>> <<print '<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Work/' + _randomImg + '.jpg" id="ShakeHit">'>> <<set _WorkGold = Math.floor(Math.random() * 2)+1>>\ <<if $miningpickaxe > 0>> <<set _WorkGold +=5>> <</if>> You earn _WorkGold gold pieces 🪙 <<set $gold += _WorkGold>> [[Back to the Tavern|Tavern]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Shop/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Seller">>I specialize in armor, weapon, tools, what do you need? <</speech>> <<if $miningpickaxe == 0>>\ [[Bronze mining pickaxe (🪙5po)|miningpickaxe]] <</if>>\ <<if $Armor == 0>>\ [[Armor level 1 (Forest) (🪙5po)|Armor1]] <</if>>\ <<if $Weapon == 0>>\ [[Weapon level 1 (Deep-Forest) (🪙10po)|Weapon1]] <</if>>\ [[Back to the City|CityMap]] <</typeNEW>>
<span class="gradient-text">*** End of this Update ***</span> Thank you for playing my little demo! I hope you had as much fun playing it as I had making it. If you enjoyed it and would like to see more, please leave a comment below / Like. Your feedback is greatly appreciated! [[Restart|NewStart]] [[BONUS]] <style> .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, orange, red, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } </style>
<<if $gold === undefined>>\ <<set $gold = 0>>\ <<set $SymQuest = 0>>\ <<set $helenaEat = 0>>\ <<set $AmyRelation = 0>>\ <<set $WitchRelation = 0>>\ <<set $CheatCode = 0>>\ <<set $Armor = 0>>\ <<set $Weapon = 0>>\ <<set $miningpickaxe = 0>>\ <<set $potionlevel1 = 0>>\ <<set $CaptureForest = 0>>\ <<set $Life = 10>>\ <<set $LifeMax = 100>>\ <<set $Mana = 5>>\ <<set $ManaMax = 20>>\ <<set $_randomAction to 0>>\ <<set _randomAction to 0>>\ <<set $activeQuests = []>>\ <<set $CONFIG_CURSOR_SPEED = 200>> <<endif>>\
<img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/1.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/2.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/3.web"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/4.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/5.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/6.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/7.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/8.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/9.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/10.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/11.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/12.jpg"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/13.jpg">
<img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/1.jpg"> <<speech "Elena">>Do you want to go through my little hole?<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/2.jpg"> <<speech "Elena">>Your penis fits perfectly in there.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/3.jpg"> <<speech "Elena">>Ah...I'm gonna like this more than I thought. Keep going....<</speech>> <video width="100%" height="30%" playsinline autoplay loop muted > <source src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/4a.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Elena">>Oh yes i'm cumming.... Keep going....<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/4.webp"> <<speech "Elena">>Deeper... just a little further... you got this.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/5.jpg"> <<speech "Elena">>Mmm... feels so good right there. Don't stop.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/6.jpg"> <<speech "Elena">>Oh, yes... keep going... like that.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/7.jpg"> <<speech "Elena">>You're getting bigger... hold on, I'm close...Oh, yes. You feel so good.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/8.jpg"> <<speech "Elena">>Oh... I'm getting so excited... I'm going to... I'm so close!<</speech>> <<linkappend "Cumming">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100 || 0.3; soundEffect.play(); <</script>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/9.jpg"> <<speech "Elena">>Yes... please... fill me...I need you to explode inside of me.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/10.jpg"> <<speech "Elena">>More... please, more! I want to feel that again.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/11.jpg"> <<speech "Elena">>I feel amazing now... you're the best. I feel so relaxed.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/12.jpg"> <<speech "Elena">>I feel so full... did you give me all your seed? You really went all in!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/13.jpg"> <<speech "Elena">>Is it just me, or does something feel wrong? Are you okay?! You seem a little pale...<</speech>> <span class="attack-effect"> "You saved her, but you die..." </span> <</linkappend>> [[Restart|NewStart]] <style> .attack-effect { display: inline-block; font-weight: bold; color: red; animation: attack 0.5s infinite; } @keyframes attack { 0% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } 25% { transform: translateX(-5px) translateY(-5px); color: darkred; text-shadow: 0 0 10px rgba(255, 0, 0, 0.8); } 50% { transform: translateX(5px) translateY(5px); color: orange; text-shadow: 0 0 15px rgba(255, 165, 0, 0.8); } 75% { transform: translateX(-5px) translateY(-5px); color: yellow; text-shadow: 0 0 20px rgba(255, 255, 0, 0.8); } 100% { transform: translateX(0) translateY(0); color: red; text-shadow: 0 0 5px rgba(255, 0, 0, 0.8); } } </style>
<<if $gold >= 5>>\ <span style="color: #FFD700; display: flex; align-items: center; gap: 5px;">You paid 5 🪙</span>\ <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/01-ShopBuy.ogg'); soundEffect.volume = $("#volumeSlider").val() / 100; soundEffect.play(); <</script>>\ <<set $gold -= 5>>\ <<set $Armor = 1>>\ <div class="purchase-container"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/yes.jpg" class="purchase-image"> <div class="purchase-overlay">\ <div class="purchase-effect">ARMOR ACQUIRED!</div>\ </div>\ </div>\ <<speech "Seller">>Thank you for your purchase. With this armor, the enemies of the forest will not harm you.<</speech>> <<else>>\ <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/no.jpg"> <<speech "Seller">><span class="bounce">Sorry!, but you need at least 5 gold pieces</span>. Come back when you have enough money.<</speech>> <</if>>\ [[Back to the City|CityMap]] <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Purchase animation styles */ .purchase-container { position: relative; overflow: hidden; margin-bottom: 10px; } .purchase-image { animation: pulse 1s ease-in-out; } .purchase-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; pointer-events: none; } .purchase-effect { color: #FFD700; font-size: 2em; font-weight: bold; text-shadow: 0 0 10px #FFD700, 0 0 20px #FFD700; background-color: rgba(0, 0, 0, 0.5); padding: 10px 20px; border-radius: 10px; animation: fadeInOut 2s ease-in-out forwards; transform: scale(0); } @keyframes pulse { 0% { filter: brightness(1); } 50% { filter: brightness(1.5); } 100% { filter: brightness(1); } } @keyframes fadeInOut { 0% { opacity: 0; transform: scale(0) rotate(-10deg); } 20% { opacity: 1; transform: scale(1.2) rotate(5deg); } 80% { opacity: 1; transform: scale(1) rotate(0); } 100% { opacity: 0; transform: scale(0.8); } } </style>
<img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/1.jpg"> [[Back to the City|CityMap]] <<if $WitchRelation == 0>>\ [[Go to the tree house|Witch0]] <<endif>>\ <<if $WitchRelation > 0>>\ [[Go to the Witch|WitchPotionMana]] <<endif>>\ <<if $WitchRelation >= 1 and $Mana >1 >>\ [[Find animals in the Forest|FightForest1]] <<endif>>\ <<if $Mana < 2 or $WitchRelation < 1>>\ <div class="disabled-button">Forest (need Mana 🧪)</div>\ <<endif>>\ <<if $Weapon >0 and $Life >10 >>\ [[Deep-Forest|Deep-Forest]] <</if>>\ <<if $Weapon == 0>>\ <div class="disabled-button">Deep-Forest (Requis Weapon and 10Life)</div>\ <</if>>\ <<script>> // Fonction pour jouer un fichier audio function playAudio(audioPath) { // Vérifie si l'audio en cours est différent du nouveau if (!window.audio || window.audio.src.split('/').pop() !== audioPath.split('/').pop()) { // Si un audio existe déjà, l'arrête if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; } // Crée et configure le nouvel audio window.audio = new Audio(audioPath); window.audio.loop = true; window.audio.volume = $("#volumeSlider").length > 0 ? ($("#volumeSlider").val() / 100) : 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); console.log("Nouvelle musique démarrée: " + audioPath); } else { console.log("Même musique déjà en cours: " + audioPath); } } // Appel de la fonction avec le chemin de votre fichier audio playAudio('MagicWorldOfBimbo/Music/1Forest2.mp3'); <</script>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/Earn1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Witch">>Do you need energy to cast the spell? I sell mana potions, do you want some? <</speech>> [[Buy a Mana Potion ( 5 🪙)|PotionManaBuy]] [[Talk with the Witch]] [[Return to he Forest|Enter to the forest]] <</typeNEW>> <<script>> // Fonction pour jouer un fichier audio function playAudio(audioPath) { // Vérifie si l'audio en cours est différent du nouveau if (!window.audio || window.audio.src.split('/').pop() !== audioPath.split('/').pop()) { // Si un audio existe déjà, l'arrête if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; } // Crée et configure le nouvel audio window.audio = new Audio(audioPath); window.audio.loop = true; window.audio.volume = $("#volumeSlider").length > 0 ? ($("#volumeSlider").val() / 100) : 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); console.log("Nouvelle musique démarrée: " + audioPath); } else { console.log("Même musique déjà en cours: " + audioPath); } } // Appel de la fonction avec le chemin de votre fichier audio playAudio('MagicWorldOfBimbo/Music/1Witch.mp3'); <</script>>
<<set _randomEnemy = Math.floor(Math.random() * 4)>> <<if _randomEnemy == 0>> <span id="premierePhrase">A beautiful deer appears ! <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/level1/intro.mp4" type="video/mp4"> Your browser does not support the video tag. </video></span> [[Continue to walk|FightForest1]] <span class="cast-spell-lien"><<link "Cast the spell...">><<replace #contenu>> <<set _randomSpell = Math.floor(Math.random() * 99)>> <<if _randomSpell >= 80>> <<set $Mana -= 2>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <span class="bounce"><span class="gradient-text"><H1> The spell has failed. Would you like to try again?</H1></span></span> [[Try again|FightForest1]] [[Leave|Enter to the forest]] <</if>> <<if _randomSpell < 80>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <div class="purchase-container"> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/level1/0.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="purchase-overlay"> <div class="magic-effect-container"> <div class="magic-circle"></div> <div class="magic-aura"></div> <div class="magic-rays"></div> <div class="magic-energy"></div> </div> </div> </div> The deer gradually transforms into a human... <<set $Mana -= 2>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/2.jpg"> "Yo...u Sa...ve me...Thanks" <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/3.jpg"> "I... sense you are in.... heat and ready to... reproduce." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/4.jpg"> <<run updateQuestProgress("Transform 10 women for the witch.", 1)>> <<set $CaptureForest += 1>> <<linkappend "Show her your cock">> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/10.jpg"> "Glup..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/11.jpg"> "Glup...Glup.." <<linkappend "Cumming">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100 || 0.3; soundEffect.play(); <</script>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/12.jpg" id="ShakeHit"> "You're cumming...my savior..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/13.jpg"> "...give me birth!" <</linkappend>> <</linkappend>> [[Back to the forest|Enter to the forest]] <</if>> <</replace>><<remove "#premierePhrase">><<remove ".cast-spell-lien">><<script>> window.scrollTo(0, document.body.scrollHeight); <</script>><</link>></span> <span id="contenu"></span> <span class="cast-spell-lien"></span> <</if>> <<if _randomEnemy == 1>> <span id="premierePhrase">A Sheep appears ! <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/1.jpg"> </span> [[Continue to walk|FightForest1]] <span class="cast-spell-lien"><<link "Cast the spell...">><<replace #contenu>> <<set _randomSpell = Math.floor(Math.random() * 99)>> <<if _randomSpell >= 80>> <<set $Mana -= 2>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <span class="bounce"><span class="gradient-text"><H1> The spell has failed. Would you like to try again?</H1></span></span> [[Try again|FightForest1]] [[Leave|Enter to the forest]] <</if>> <<if _randomSpell < 80>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <div class="purchase-container"> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Sheep/2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="purchase-overlay"> <div class="magic-effect-container"> <div class="magic-circle"></div> <div class="magic-aura"></div> <div class="magic-rays"></div> <div class="magic-energy"></div> </div> </div> </div> The sheep gradually transforms into a human... <<set $Mana -= 2>> "Ohh!" <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Sheep/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> "Lick lick...." <<run updateQuestProgress("Transform 10 women for the witch.", 1)>> <<set $CaptureForest += 1>> <<linkappend "Show her your cock">> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/5.jpg"> "Yummy..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/6.jpg"> "Glup..." <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Sheep/6.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<linkappend "Cumming">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100; soundEffect.play(); <</script>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/7.jpg" id="ShakeHit"> "Glup...Glup.." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/7a.jpg" id="ShakeHit"> "Please...fuck me..." <<linkappend "Fuck her">> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/8.jpg"> "More..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/8a.jpg"> "More..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/9.jpg"> "Cumming..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Sheep/10.jpg"> <</linkappend>> <</linkappend>> <</linkappend>> [[Back to the forest|Enter to the forest]] <</if>> <</replace>><<remove "#premierePhrase">><<remove ".cast-spell-lien">><<script>> window.scrollTo(0, document.body.scrollHeight); <</script>><</link>></span> <span id="contenu"></span> <span class="cast-spell-lien"></span> <</if>> <<if _randomEnemy == 2>> <span id="premierePhrase">A Bunny appears ! <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/0.jpg"> </span> [[Continue to walk|FightForest1]] <span class="cast-spell-lien"><<link "Cast the spell...">><<replace #contenu>> <<set _randomSpell = Math.floor(Math.random() * 99)>> <<if _randomSpell >= 80>> <<set $Mana -= 2>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <span class="bounce"><span class="gradient-text"><H1> The spell has failed. Would you like to try again?</H1></span></span> [[Try again|FightForest1]] [[Leave|Enter to the forest]] <</if>> <<if _randomSpell < 80>> <span class="gradient-text">Cost 🧪: Mana - 2</span> <div class="purchase-container"> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Bunny/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="purchase-overlay"> <div class="magic-effect-container"> <div class="magic-circle"></div> <div class="magic-aura"></div> <div class="magic-rays"></div> <div class="magic-energy"></div> </div> </div> </div> The bunny gradually transforms into a human... <<set $Mana -= 2>> "Ohh!" <<set $CaptureForest += 1>> <<run updateQuestProgress("Transform 10 women for the witch.", 1)>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Bunny/2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> "She rubs her breasts" <<speech "You">>"She wants something?"<</speech >> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/3.png"> "Glup..." <<set $CaptureForest += 1>> <<linkappend "Give her a carrot">> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/4.jpg"> "Yummy..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/5.png"> "Glup..." <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/6.png"> <<linkappend "More deep!">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100; soundEffect.play(); <</script>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Bunny/7.png" id="ShakeHit"> "Haaaa..." <</linkappend>> <</linkappend>> [[Back to the forest|Enter to the forest]] <</if>> <</replace>><<remove "#premierePhrase">><<remove ".cast-spell-lien">><<script>> window.scrollTo(0, document.body.scrollHeight); <</script>><</link>></span> <span id="contenu"></span> <span class="cast-spell-lien"></span> <</if>> <<if _randomEnemy == 3>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/rose.jpg" > <<if getQuestProgress("Bring 20 roses to Amy.") >= 1>> <<linkappend "Pick 5 roses">> <<run incrementQuestProgress("Bring 20 roses to Amy.",5)>> <<speech "You">>*I hope with that i can fuck her...*<</speech>> <</linkappend>> <</if>> [[Continue to walk|FightForest1]] <</if>> <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Purchase container */ .purchase-container { position: relative; overflow: hidden; margin-bottom: 10px; } .purchase-image { animation: pulse 0.8s ease-in-out; } .purchase-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } @keyframes pulse { 0% { filter: brightness(1); } 50% { filter: brightness(1.8); } 100% { filter: brightness(1); } } /* Magic effects container */ .magic-effect-container { position: absolute; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; z-index: 10; overflow: hidden; } /* Main magic circle */ .magic-circle { position: absolute; width: 10px; height: 10px; border-radius: 50%; background-color: rgba(100, 200, 255, 0.1); box-shadow: 0 0 15px 8px rgba(100, 200, 255, 0.4), inset 0 0 15px 8px rgba(100, 200, 255, 0.4); border: 3px solid rgba(150, 230, 255, 0.7); transform: scale(0); opacity: 0; animation: circleExpand 2s forwards; } @keyframes circleExpand { 0% { transform: scale(0) rotate(0deg); opacity: 0; } 20% { opacity: 0.95; } 70% { transform: scale(20) rotate(180deg); opacity: 0.8; border-width: 3px; } 100% { transform: scale(30) rotate(360deg); opacity: 0; border-width: 1px; } } /* Magic circle after element - FIXED POSITIONING */ .magic-circle::after { content: ''; position: absolute; top: 50%; left: 50%; width: 130%; height: 130%; border-radius: 50%; border: 2px dashed rgba(200, 240, 255, 0.6); transform: translate(-50%, -50%); animation: rotateCircle 3s linear infinite; } @keyframes rotateCircle { 0% { transform: translate(-50%, -50%) rotate(0deg); } 100% { transform: translate(-50%, -50%) rotate(360deg); } } /* Magic rays */ .magic-rays { position: absolute; width: 200%; height: 200%; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.5) rotate(0deg); background: repeating-conic-gradient( rgba(150,230,255,0) 0deg, rgba(150,230,255,0) 18deg, rgba(150,230,255,0.3) 20deg ); border-radius: 50%; opacity: 0; animation: raysEffect 2.5s forwards; animation-delay: 0.5s; } @keyframes raysEffect { 0% { opacity: 0; transform: translate(-50%, -50%) scale(0.5) rotate(0deg); } 20% { opacity: 0.7; transform: translate(-50%, -50%) scale(0.7) rotate(30deg); } 80% { opacity: 0.4; transform: translate(-50%, -50%) scale(1) rotate(70deg); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(1.2) rotate(90deg); } } /* Magic aura */ .magic-aura { position: absolute; width: 100%; height: 100%; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.5); border-radius: 50%; background: radial-gradient( ellipse at center, rgba(100,200,255,0.4) 0%, rgba(100,200,255,0.1) 50%, rgba(100,200,255,0) 70% ); opacity: 0; filter: blur(5px); animation: auraPulse 2s forwards; animation-delay: 0.2s; } @keyframes auraPulse { 0% { opacity: 0; transform: translate(-50%, -50%) scale(0.5); } 30% { opacity: 0.8; transform: translate(-50%, -50%) scale(1); } 70% { opacity: 0.6; transform: translate(-50%, -50%) scale(1.5); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(2); } } /* Blue glow effect */ .purchase-container::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(100,200,255,0.1); animation: blueGlow 2.5s forwards; } @keyframes blueGlow { 0% { backdrop-filter: blur(0px); background: rgba(100,200,255,0); } 30% { backdrop-filter: blur(3px); background: rgba(100,200,255,0.4); } 70% { backdrop-filter: blur(2px); background: rgba(150,230,255,0.2); } 100% { backdrop-filter: blur(0px); background: rgba(100,200,255,0); } } .gradient-text { background: linear-gradient(90deg, red, orange, yellow, green, orange, red, violet); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: block; margin-left: 10ch; } .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } </style>
<<if $gold >= 5>>\ <span style="color: #FFD700; display: flex; align-items: center; gap: 5px;">You paid 5 🪙</span>\ <<set $gold -= 5>>\ <<set $Mana += 5>>\ <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/01-ShopBuy.ogg'); soundEffect.volume = $("#volumeSlider").val() / 100 || 0.3; soundEffect.play(); <</script>> <div class="purchase-container"> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/yes2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="purchase-overlay">\ <div class="purchase-effect">POTION ACQUIRED!</div>\ </div>\ </div>\ <<speech "Witch">>Thank you for your purchase.<</speech>> <<else>>\ <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/no2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Witch">><span class="bounce">Sorry!, but you need at least 5 gold pieces</span>. Too bad, I'll drink it for you...Come back when you have enough money.<</speech>> <</if>>\ [[Return to he Forest|Enter to the forest]] <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Purchase animation styles */ .purchase-container { position: relative; overflow: hidden; margin-bottom: 10px; } .purchase-image { animation: pulse 1s ease-in-out; } .purchase-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; pointer-events: none; } .purchase-effect { color: #FFD700; font-size: 2em; font-weight: bold; text-shadow: 0 0 10px #FFD700, 0 0 20px #FFD700; background-color: rgba(0, 0, 0, 0.5); padding: 10px 20px; border-radius: 10px; animation: fadeInOut 2s ease-in-out forwards; transform: scale(0); } @keyframes pulse { 0% { filter: brightness(1); } 50% { filter: brightness(1.5); } 100% { filter: brightness(1); } } @keyframes fadeInOut { 0% { opacity: 0; transform: scale(0) rotate(-10deg); } 20% { opacity: 1; transform: scale(1.2) rotate(5deg); } 80% { opacity: 1; transform: scale(1) rotate(0); } 100% { opacity: 0; transform: scale(0.8); } } </style>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/0a.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<typeNEW 30ms>>\ <<speech "Witch">>Oh good, a magician! Someone has changed the villagers into animals. Please help me restore them with that spell. <</speech>> <<speech "You">>Me ? a magician, I don't remember anything anymore... <</speech>> <<speech "Witch">>This is really strange, but I feel a lot of power coming from you. If you're willing to help me, I'll help you. <</speech>> <<set $WitchRelation = 1>>\ [[Learn to spell]] <</typeNEW>> <<script>> // Fonction pour jouer un fichier audio function playAudio(audioPath) { // Vérifie si l'audio en cours est différent du nouveau if (!window.audio || window.audio.src.split('/').pop() !== audioPath.split('/').pop()) { // Si un audio existe déjà, l'arrête if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; } // Crée et configure le nouvel audio window.audio = new Audio(audioPath); window.audio.loop = true; window.audio.volume = $("#volumeSlider").length > 0 ? ($("#volumeSlider").val() / 100) : 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); console.log("Nouvelle musique démarrée: " + audioPath); } else { console.log("Même musique déjà en cours: " + audioPath); } } // Appel de la fonction avec le chemin de votre fichier audio playAudio('MagicWorldOfBimbo/Music/1Witch.mp3'); <</script>>
<<speech "Witch">>Oh, that's great, come follow me, with this scroll, you'll be able to learn your first spell. <</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/Scroll/1.jpg"> <<speech "Witch">>It's very simple, you have to repeat 'BiBialu Abra' twice. <</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/Scroll/2.png"> <<speech "Witch">>but be careful! you have to raise your 2 fingers towards the sky. <</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/Scroll/3a.webp"> <<speech "Witch">>Once you have the blue light on your fingers, aim at the target, and it will transform... well, maybe... <</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/Scroll/4.png"> <<speech "Witch">>Here, here's the scroll, good luck to you! <</speech>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/Scroll/0.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Witch">>Rescue more than 10 women and then return to me.<</speech>> <<run addQuest("Transform 10 women for the witch.", 10)>> [[📜Take the parchment and leave|Enter to the forest]]
[[Back to the forest|Enter to the forest]]\
<<set _randomImg = Math.floor(Math.random() * 5)>> <<set _phrases to [ "I want to exercise, what do you suggest?", "What nice weather! Where do you want to go?", "Let's go, let's run, we're sure to find a nice place.", "This drink makes me feel good.", "Follow me..." ]>> <<print '<video width="100%" height="30%" playsinline autoplay loop muted>' + '<source src="MagicWorldOfBimbo/Village/Date/' + _randomImg + '.mp4" type="video/mp4">' + 'Your browser does not support the video tag.</video>'>> <<typeNEW 0ms>> <<speech "Amy">><<print _phrases[_randomImg]>><</speech>> <<linkappend2 "You are beautiful !" t8n>> <<speech "Amy">>Stop, you're going to make me blush!<</speech>> <</linkappend2>> <<linkappend2 "Where can I sleep in the village?" t8n>> <<if $AmyRelation < 1>> <<set $AmyRelation = 1>> <<endif>> <<speech "Amy">>Since you're helping me, I'd insist you stay at my place.<</speech>> <</linkappend2>> [[Garden]] <<if $AmyRelation >= 1>>[[Amy's House]]<<endif>> <<if $AmyRelation < 1>><div class="disabled-button">Amy's House. (Next Update)</div> <<endif>> <<if $AmyRelation < 3>><div class="disabled-button">Walk in the Forest. (Kill the Wolf) (Next Update)</div> <<endif>> <<if $AmyRelation < 5>><div class="disabled-button">WaterFall (Kill 2 Wolf) (Next Update)</div> <<endif>> <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>As the village herbalist, my duty is to care for the plants.<</speech>> <<if getQuestProgress("Bring 20 roses to Amy.") >= 19>> <<linkappend "📜Quest : Rose Finished" >> <<speech "Amy">>OH ! Thanks... we need to celebrat that... come with me...<</speech>> NEXT UPDATE <</linkappend>> <</if>> <<if getQuestProgress("Bring 20 roses to Amy.") >= 0 and getQuestProgress("Bring 20 roses to Amy.") < 19>> <<linkappend "📜Quest : Rose" >> <<speech "Amy">>Oh, really? You brought me roses from the deep forest? I need twenty to make a massage oil... Take this last one as a sample.🌹<</speech>> <<run addQuest("Bring 20 roses to Amy.",20)>> <<run incrementQuestProgress("Bring 20 roses to Amy.")>> <</linkappend>> <</if>> <div id="choices"> <<link "I want to fuck you...💀" >> <<replace "#choices" t8n>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/E1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>Are you serious? I am very disappointed in you.I'm leaving...<</speech>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/Leave.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>Perv...I'm leaving...<</speech>>\ <</replace>> <</link>> <<link "Can you show me how you work?">> <<replace "#choices" t8n>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/B1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>This might sound funny, but you've got to love plants and dancing beside them.Dance with me?<</speech>> <<linkappend "Do you like plants in the forest too?" t8n>> <<speech "Amy">>Yes, that's why I went, but it's too dangerous, can you bring me back?<</speech>> <</linkappend>> <<linkappend "I don't like dance..." t8n>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/B2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>If I take off my top, will you dance with me?<</speech>> <<linkappend "We have deal!" t8n>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/Topless1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<script>> window.scrollTo(0, document.body.scrollHeight); <</script>> <<speech "Amy">>You're amusing.Oh, are you getting a hard-on?<</speech>> <<if $CheatCode == 0>>\ <div class="disabled-button">Blowjob Amy. (Need Amy: ❤️❤️🖤 or 🔒Support us)</div> <<else>> [[Blowjob Amy 🍑|Blowjob Amy]] <<endif>> <</linkappend>> <</linkappend>> <</replace>> <</link>> </div> [[Back to the City|CityMap]]
:: Map <!-- Style pour positionner les images et les boutons --> <style> #map-container { position: relative; } #map-container img { width: 100%; height: 100%; } .map-button { position: absolute; background: none; border: none; cursor: pointer; padding: 0; /* Ajoute des propriétés pour masquer le bouton, mais le garder cliquable */ background-color: rgba(0, 0, 0, 0); /* Transparent */ border: none; } .map-button:hover { background-color: rgba(0, 0, 0, 0.2); /* Semi-transparent */ } #button1 { top: 20%; /* Position verticale (ajustez) */ left: 30%; /* Position horizontale (ajustez) */ width: 50px; /* Largeur de votre bouton (ajustez) */ height: 30px; /* Hauteur de votre bouton (ajustez) */ } .button1-link:hover { border: 2px solid blue; /* Ajoute une bordure bleue au survol */ background-color: rgba(0, 0, 0, 0.2); /* Semi-transparent */ } #button2 { top: 60%; /* Position verticale (ajustez) */ left: 70%; /* Position horizontale (ajustez) */ width: 50px; /* Largeur de votre bouton (ajustez) */ height: 30px; /* Hauteur de votre bouton (ajustez) */ } .button2-link:hover { border: 2px solid blue; /* Ajoute une bordure bleue au survol */ background-color: rgba(0, 0, 0, 0.2); /* Semi-transparent */ } #button1 { /* ... autres propriétés ... */ background-image: url("MagicWorldOfBimbo/Map/B1.png"); background-size: cover; /* Pour que l'image remplisse le bouton */ } </style> <!-- Conteneur de la carte --> <div id="map-container"> <img src="MagicWorldOfBimbo/Map/map.png" alt="Carte"> <!-- Boutons cliquables --> <button id="button1" class="map-button" data-passage="Tavern"></button> <button id="button2" class="map-button" data-passage="Forest"></button> </div> <script> // Gestion des clics sur les boutons $(document).on("click", ".map-button", function() { var passage = $(this).data("passage"); Engine.show(passage); // Utilise Engine.show pour changer de passage }); </script> :: Tavern Vous êtes dans la taverne. :: Forest Vous êtes dans la forêt.
<img width="100%" height="20%" src="MagicWorldOfBimbo/Village/1.jpg"> Where would you like to go? [[Tavern]]\ [[Work]]\ [[Shop]]\ <<if $AmyRelation >= 1>>[[Amy's House]]<<endif>>\ [[Walk in the Street]]\ <<if $Armor == 0>>\ <div class="disabled-button">Go to the Forest. (Need Armor 🛡️)</div>\ <<else>>\ [[Forest|Enter to the forest]]\ <<endif>>\ <div class="disabled-button">Guild. (Next Update)</div>\ <<script>> // Fonction pour jouer un fichier audio function playAudio(audioPath) { // Vérifie si l'audio en cours est différent du nouveau if (!window.audio || window.audio.src.split('/').pop() !== audioPath.split('/').pop()) { // Si un audio existe déjà, l'arrête if (window.audio) { window.audio.pause(); window.audio.currentTime = 0; } // Crée et configure le nouvel audio window.audio = new Audio(audioPath); window.audio.loop = true; window.audio.volume = $("#volumeSlider").length > 0 ? ($("#volumeSlider").val() / 100) : 0.3; window.audio.play().catch(function(error) { console.log("Audio playback failed:", error); }); console.log("Nouvelle musique démarrée: " + audioPath); } else { console.log("Même musique déjà en cours: " + audioPath); } } // Appel de la fonction avec le chemin de votre fichier audio playAudio('MagicWorldOfBimbo/Music/1Village.mp3'); <</script>>
<<set $_randomAction += 1>>\ <<if $_randomAction is 4>>\ <<set $_randomAction = 0>>\ <</if>>\ <<if $_randomAction == 0>>\ <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Village/Walk/1.mp4" type="video/mp4">\ Your browser does not support the video tag.\ </video>\ <<speech "Sym">>Are you still the demon? Leave quickly before I hit you.\ <</speech>>\ <div id="choices">\ <<link2 "I'm not a Demon." >>\ <<replace "#choices" t8n>> <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Village/Walk/1a.mp4" type="video/mp4">\ Your browser does not support the video tag.\ </video>\ <<speech "Sym">>You're going to leave here, dark mage!<</speech>> <</replace>>\ <</link2>>\ <<link2 "Can we talk ?">>\ <<replace "#choices">><<speech "Sym">>You'll talk with my Sword!<</speech>><</replace>>\ <</link2>> \</div> <</if>>\ <<if $_randomAction == 1>>\ <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Village/Walk/2.mp4" type="video/mp4">\ Your browser does not support the video tag.\ </video>\ <<speech "Character">>Oh! Hello sir, sorry I'm so happy, I'm going to be a mistress for the king.\ <</speech>>\ <</if>>\ <<if $_randomAction == 2>>\ <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Village/Walk/3.mp4" type="video/mp4">\ Your browser does not support the video tag.\ </video>\ <<speech "Elena">>Oh I'm glad to see you again, it was quite an adventure..\ <</speech>>\ <</if>>\ <<if $_randomAction == 3>>\ <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Village/Walk/4.mp4" type="video/mp4">\ Your browser does not support the video tag.\ </video>\ <<speech "Character">>Hello my young friend, a guild will soon open and we are looking for adventurers to carry out missions or recruit warriors. <</speech>>\ <</if>>\ [[Continue to Walk|Walk in the Street]]\ [[Leave|CityMap]]
:: Exemple avec révélation progressive Vous examinez le vieux livre. <<linkappend "Lire la première page">> La première page contient une introduction mystérieuse. <<linkappend "Continuer la lecture">> Vous découvrez que le livre parle d'un trésor caché. <<linkappend "Tourner la page">> Une carte apparaît sur la page suivante! <</linkappend>> <</linkappend>> <</linkappend>> :: Exemple avec options Le garde vous arrête à l'entrée de la cité. "Halte là ! Que venez-vous faire ici ?" <<linkappend "Je suis un marchand">> "Un marchand, hein? Montrez-moi votre permis de commerce." <<link "Montrer le permis">><<goto "Entrée Acceptée">><</link>> <<link "Avouer ne pas en avoir">><<goto "Entrée Refusée">><</link>> <</linkappend>> <<linkappend "Je suis un voyageur">> "Un voyageur? D'où venez-vous?" <<link "Du nord">><<goto "Tavern">><</link>> <<link "Du sud">><<goto "Interrogatoire Sud">><</link>> <</linkappend>> :: Exemple avec remove Vous apercevez une créature étrange dans les buissons. <<linkappend "S'approcher" remove>> En vous approchant, vous réalisez qu'il s'agit d'un petit renard. <</linkappend>>
Some long text... <<if $choice1>> \Long replacement text for choice 1... \<<else>> \<<linkreplace "Choice 1">>Long replacement text for choice 1...<<set $choice1 to true>><</linkreplace>> \<</if>> <<if $choice2>> \Long replacement text for choice 2... \<<else>> \<<linkreplace "Choice 2">>Long replacement text for choice 2...<<set $choice2 to true>><</linkreplace>> \<</if>> <<if $choice3>> \Long replacement text for choice 3... \<<else>> \<<linkreplace "Choice 3">>Long replacement text for choice 3...<<set $choice3 to true>><</linkreplace>> \<</if>> [[Continue|Other]]Some long text... <<if $choice1>> \Long replacement text for choice 1... \<<else>> \<<linkreplace "Choice 1">>Long replacement text for choice 1...<<set $choice1 to true>><</linkreplace>> \<</if>> <<if $choice2>> \Long replacement text for choice 2... \<<else>> \<<linkreplace "Choice 2">>Long replacement text for choice 2...<<set $choice2 to true>><</linkreplace>> \<</if>> <<if $choice3>> \Long replacement text for choice 3... \<<else>> \<<linkreplace "Choice 3">>Long replacement text for choice 3...<<set $choice3 to true>><</linkreplace>> \<</if>> [[Continue|Other]]:: Départ Vous flânez tranquillement sur la place du marché, admirant un étal de choux particulièrement... chouettes. Soudain, un garde s'approche, l'air sévère. <<linkappend "Déclencher une cascade d'éternuements exagérés">> <<set $compte_eternuements to 0>> <<timed 0.5s>> <<goto "Eternuement1">> <</timed>> <</linkappend>> <<linkappend "Faire semblant d'être un touriste perdu">> Le garde lève un sourcil. "Vous êtes nouveau ici, n'est-ce pas ? Circulez, circulez, y a rien à voir ! (sauf les choux...)" <<goto "Circulation">> <</linkappend>> <<linkappend "Tenter un pot-de-vin avec un navet">> Vous sortez un navet de votre sac et le tendez au garde avec un sourire. "Pour... la circulation ?" Le garde hésite, puis répond : "C'est... original. Mais non. Circulez !" <<goto "Circulation">> <</linkappend>> :: Eternuement1 ATCHOUM ! <<set $compte_eternuements to $compte_eternuements + 1>> <<if $compte_eternuements lt 5>> <<timed 0.5s>> <<goto "Eternuement2">> <</timed>> <<else>> Le garde, visiblement irrité, vous fait signe de partir. "Assez ! Circulez avant que je ne vous fasse éternuer en prison !" <<goto "Circulation">> <</if>> :: Eternuement2 ATCHOUM ! ATCHOUM ! <<set $compte_eternuements to $compte_eternuements + 1>> <<if $compte_eternuements lt 5>> <<timed 0.5s>> <<goto "Eternuement1">> <</timed>> <<else>> Le garde, visiblement irrité, vous fait signe de partir. "Assez ! Circulez avant que je ne vous fasse éternuer en prison !" <<goto "Circulation">> <</if>> :: Circulation Vous vous éloignez à contrecœur, murmurant quelque chose sur "les joies de la vie citadine". Où voulez-vous aller maintenant ? [[À la taverne|MultiVideo]] :: Taverne Vous entrez dans une taverne sombre et enfumée. L'odeur de bière et de vieux fromage vous frappe. (À suivre...)
<div id="test">\ After the <<link "first">> <<replace "#test">>After the <<link "but I didn't do anything to you">>xxx <<replace "#test">>After the <<link "third">> <<replace "#test">>After the [[fourth]] phase, after passionate nights and intimate days1,<</replace>> <</link>> phase, after passionate nights and intimate days2,<</replace>> <</link>> phase, after passionate nights and intimate days3,<</replace>> <</link>> phase,<br> after passionate nights and intimate days0, \</div> <div id="choices">\ <<link "Tell the truth.">> <<replace "#choices">>"Yavin 4," you murmur.<</replace>> <</link>> <<link "Lie.">> <<replace "#choices">>"Dantooine," you murmur. "They're on Dantooine."<</replace>> <</link>> \</div>
<div id="video-container" style="width: 100%; height: 30%;"> <video id="video-player" width="100%" height="100%" playsinline autoplay muted> <source src="MagicWorldOfBimbo/Forest/Witch/Earn1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> </div> <script> // Liste des vidéos à jouer en séquence const videoSources = [ "MagicWorldOfBimbo/Forest/Witch/0a.mp4", "MagicWorldOfBimbo/Forest/Witch/Earn1.mp4", "MagicWorldOfBimbo/Forest/Witch/yes.mp4" // Ajoutez d'autres vidéos selon vos besoins ]; let currentVideoIndex = 0; const videoPlayer = document.getElementById("video-player"); // Fonction pour charger la vidéo suivante function loadNextVideo() { currentVideoIndex = (currentVideoIndex + 1) % videoSources.length; videoPlayer.src = videoSources[currentVideoIndex]; videoPlayer.play().catch(error => { console.log("Erreur de lecture vidéo:", error); }); } // Passer à la vidéo suivante lorsque la vidéo actuelle se termine videoPlayer.addEventListener("ended", loadNextVideo); // Gérer les erreurs de lecture videoPlayer.addEventListener("error", () => { console.log("Erreur de lecture pour la vidéo:", videoSources[currentVideoIndex]); loadNextVideo(); // Passer à la suivante en cas d'erreur }); </script>
<!-- Widget pour le jeu de timing avec design amélioré, compatible avec SugarCube 3.7 --> <<widget "timinggame">> <<set $gameActive = true>> <<set $gameResult = "">> <div id="game-container" style="width: 340px; height: 80px; border: 3px solid #333; border-radius: 10px; position: relative; margin: 20px auto; background: #f0f0f0; box-shadow: 0 6px 10px rgba(0,0,0,0.3);"> <!-- Zone verte (succès) --> <div style="position: absolute; width: 60px; height: 74px; background-color: #4CAF50; left: 140px; top: 3px; border-radius: 5px; box-shadow: inset 0 0 10px rgba(0,0,0,0.2);"></div> <!-- Zones rouges (échec) --> <div style="position: absolute; width: 140px; height: 74px; background-color: #F44336; left: 0px; top: 3px; border-radius: 5px 0 0 5px; box-shadow: inset 0 0 10px rgba(0,0,0,0.2);"></div> <div style="position: absolute; width: 140px; height: 74px; background-color: #F44336; left: 200px; top: 3px; border-radius: 0 5px 5px 0; box-shadow: inset 0 0 10px rgba(0,0,0,0.2);"></div> <!-- Barre mobile --> <div id="moving-bar" style="position: absolute; width: 14px; height: 74px; background-color: #2196F3; left: 0px; top: 3px; border-radius: 4px; box-shadow: 0 0 6px rgba(33,150,243,0.8);"></div> </div> <div style="text-align: center; margin-top: 15px;"> <button id="game-button" style="padding: 10px 25px; background-color: #2196F3; color: white; border: none; border-radius: 5px; font-weight: bold; cursor: pointer; box-shadow: 0 3px 5px rgba(0,0,0,0.2); transition: all 0.2s;">CLIQUEZ AU BON MOMENT!</button> </div> <div id="result-message" style="text-align: center; margin-top: 15px; font-weight: bold; height: 24px;"></div> <div id="game-continue" style="display: none; text-align: center; margin-top: 20px;"> <<if $gameResult eq "success">> <<link [[Continuer (Réussite)]]>> <<goto "SuccessPassage">> <</link>> <<else>> <<link [[Réessayer]]>> <<goto "GamePassage">> <</link>> <<link [[Abandonner (Échec)]]>> <<goto "FailurePassage">> <</link>> <</if>> </div> <script> (function() { // Variables pour le jeu var barPosition = 0; var direction = 1; var speed = 10; var gameActive = true; var gameInterval; // Animation de la barre gameInterval = setInterval(function() { if (!gameActive) { clearInterval(gameInterval); return; } // Déplacer la barre barPosition += direction * speed; // Changer de direction si la barre atteint les bords if (barPosition >= 326 || barPosition <= 0) { direction *= -1; } // Mettre à jour la position visuelle de la barre $("#moving-bar").css("left", barPosition + "px"); }, 20); // Gestionnaire d'événement pour le bouton $("#game-button").on("click", function() { if (!gameActive) return; gameActive = false; clearInterval(gameInterval); // Effet visuel du bouton cliqué $(this).css({ "background-color": "#0D47A1", "box-shadow": "0 1px 2px rgba(0,0,0,0.2)", "transform": "translateY(2px)" }); // Vérifier si le joueur a cliqué dans la zone verte if (barPosition >= 140 && barPosition <= 200) { SugarCube.State.variables.gameResult = "success"; $("#result-message").html("✅ RÉUSSITE! <span style='color:green'>Excellent timing!</span>"); } else { SugarCube.State.variables.gameResult = "failure"; $("#result-message").html("❌ ÉCHEC! <span style='color:darkred'>Pas assez précis!</span>"); } // Permettre de continuer l'histoire après 1 seconde setTimeout(function() { $("#game-continue").fadeIn(500); }, 1000); }); })(); </script> <</widget>> <<timinggame>>
<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/0.jpg"> <<speech "Amy">>What...it's huge!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/1.jpg"> <<speech "Amy">>Kiss!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/2.jpg"> <<speech "Amy">>Glup...<</speech>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/Date/Park/BJ/3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>Do you like ?<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/4b.webp"> <<speech "Amy">>What...it's huge!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/5.webp"> <<speech "Amy">>Delicious...<</speech>> <<linkappend "Cumming">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100 || 0.3; soundEffect.play(); <</script>>\ <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/6.png"> <<speech "Amy">>Oh!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/7.webp"> <<speech "Amy">>I'm a bit flustered... your dick drove me a bit wild<</speech>> <</linkappend>> [[Back to the City|CityMap]]
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/yes0.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<if getQuestProgress("Bring 20 roses to Amy.") >= 19>> <<linkappend "📜Quest : Rose Finished" >> <<speech "Witch">>OH ! Thanks... we need to celebrat that... come with me...<</speech>> NEXT UPDATE <</linkappend>> <</if>> <<if $CheatCode eq 0>>In Dev (Next Update or 🔒)<<endif>> <<if $CheatCode eq 1>> <<speech "Witch">>It's a bit tricky, I'd need semen from a powerful mage...You?<</speech>> <<linkappend "But I'm not powerful, let alone a mage">>\ <<speech "Witch">>Can I check? I'll make you feel good.<</speech>>\ <<linkappend "Yes please...">>\ <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Forest/Witch/TitsJob/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Witch">>Does that make you hard? show me your cock, i'll start the extraction.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/TitsJob/2.png"> <<speech "Witch">>Beautiful ! give me that cock I'll take care of it.<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/TitsJob/3.jpg"> <<speech "Witch">>She is very hard, perfect.<</speech>> <video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Forest/Witch/TitsJob/4.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/TitsJob/5.webp"> <<linkappend "Cumming">> <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/Sperm1.wav'); soundEffect.volume = $("#volumeSlider").val() / 100 || 0.3; soundEffect.play(); <</script>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/TitsJob/6.webp">\ <<speech "Witch">>And here is the magic substance!<</speech>> <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/Witch/TitsJob/7.webp">\ <<speech "Witch">>Thank, I'll spit this out in my potion!<</speech>> <</linkappend>> <</linkappend>> <</linkappend>> <<endif>> [[Return to he Forest|Enter to the forest]]
<<linkappend2 "Click me">> Some text or <<print $someVariable>> <</linkappend2>> <<updateQuestProgress "Amy-quest" "5/10">> <<linkappend2 "Gather Herbs">> <<completeQuest "Amy-quest">> <</linkappend2>> :: Start <<set $flowers = 0>> <<set $maxFlowers = 50>> Vous êtes dans un champ de fleurs. Nombre de fleurs récoltées : State.variables.quests <<if $flowers < $maxFlowers>> <<link "Récolter des fleurs">> <<set $flowers++>> <<updateQuestProgress "Amy-quest" "1/10" "test">> $flowers <<if $flowers >= $maxFlowers>> Vous avez récolté toutes les fleurs ! <</if>> <</link>> <<else>> Vous avez récolté toutes les fleurs disponibles. <</if>> <<link [[Réessayer]]>> <<goto "Réessayer">> <</link>>
<!-- Dans l'onglet "Stylesheet" de Twine --> <!-- Dans l'onglet "Script" de Twine --> <!-- Dans un passage normal --> :: Start Bienvenue dans votre aventure, $playerName ! [[Commencer l'aventure|Switch random]] :: Foret Vous entrez dans une forêt sombre. <<set $sidebarText to "Exploration de la forêt">> Un gobelin apparaît ! [[Combattre le gobelin|Combat-Deep]] [[Fuir|Clairiere]] :: Combat Vous combattez le gobelin ! <<set $health to $health - 20>> <<set $gold to $gold + 10>> <<set $sidebarText to "Combat terminé">> Vous perdez 20 PV, mais gagnez 10 pièces d'or. [[Continuer|Clairiere]] :: Clairiere Vous arrivez dans une clairière paisible. <<set $sidebarText to "Repos dans la clairière">> [[Explorer plus loin|Switch random]] [[Se reposer|Start]]
:: Combat <!-- Image de l'ennemi --> <img src="https://placehold.co/200x100?text=Ennemi" style="display: block; margin: 0 auto;"> <!-- Barres de vie --> <div style="width: 80%; margin: 20px auto; background: #ddd; height: 20px;"> <div id="enemyHealth" style="width: 100%; height: 100%; background: red;"></div> </div> <!-- Barre d'attaque --> <div style="width: 80%; margin: 20px auto; position: relative; height: 30px; background: #f0f0f0; border: 1px solid #000;"> <div id="attackZone" style="width: 30%; height: 100%; background: green; position: absolute; left: 35%;"></div> <div id="attackCursor" style="width: 2px; height: 100%; background: black; position: absolute; left: 0;"></div> </div> <!-- Bouton d'attaque --> <button id="attackButton" style="display: block; margin: 20px auto; padding: 10px 20px;">Attaque !</button> <script> // Initialisation des variables de combat if (!window.hasOwnProperty('setup')) { window.setup = {}; } setup.enemyMaxHealth = 100; setup.enemyHealth = setup.enemyMaxHealth; setup.attackSpeed = 0.05; setup.attackDirection = 1; setup.attackRunning = true; // Fonction pour mettre à jour la santé de l'ennemi function updateEnemyHealth() { const percent = (setup.enemyHealth / setup.enemyMaxHealth) * 100; $('#enemyHealth').css('width', percent + '%'); if (setup.enemyHealth <= 0) { $('#attackButton').text('Ennemi vaincu !').prop('disabled', true); setup.attackRunning = false; } } // Fonction pour animer le curseur d'attaque function animateAttackCursor() { if (!setup.attackRunning) return; const $cursor = $('#attackCursor'); let newPos = parseFloat($cursor.css('left')) + (setup.attackDirection * setup.attackSpeed); if (newPos <= 0) { newPos = 0; setup.attackDirection = 1; } else if (newPos >= 100) { newPos = 100; setup.attackDirection = -1; } $cursor.css('left', newPos + '%'); setTimeout(animateAttackCursor, 16); } // Gestionnaire d'attaque $('#attackButton').on('click', function() { if (!setup.attackRunning) return; const $cursor = $('#attackCursor'); const $zone = $('#attackZone'); const cursorPos = parseFloat($cursor.css('left')); const zonePos = parseFloat($zone.css('left')); const zoneWidth = parseFloat($zone.css('width')); if (cursorPos >= zonePos && cursorPos <= (zonePos + zoneWidth)) { setup.enemyHealth -= 10; } else { setup.enemyHealth -= 5; } updateEnemyHealth(); }); // Démarrer l'animation quand le passage est chargé $(document).one(':passagedisplay', function() { updateEnemyHealth(); animateAttackCursor(); }); </script>
:: StoryTitle Système de Combat RPG :: StoryData { "ifid": "COMBAT-SYSTEM-UNIQUE-ID", "format": "SugarCube", "format-version": "2.36.1", "start": "Start" } :: Start <<set $player = { name: "Héros", maxHP: 100, currentHP: 100, attack: 10, defense: 5, gold: 0, potions: 2 }>> <<set $enemy = { name: "Gobelin", maxHP: 50, currentHP: 50, attack: 8, defense: 3 }>> Vous rencontrez un $enemy.name ! [[Commencer le combat|Combat-Deep]] :: Combat <div id="combat-screen"> <div id="player-stats"> Héros - PV: <<print $player.currentHP>>/<<print $player.maxHP>> Or: <<print $player.gold>> </div> <div id="enemy-stats"> $enemy.name - PV: <<print $enemy.currentHP>>/<<print $enemy.maxHP>> </div> <div id="combat-actions"> [[Attaquer|Attack]] [[Défendre|Defend]] [[Utiliser une Potion|UsePotion]] </div> </div> :: Attack <<set _damage to Math.max(0, $player.attack - $enemy.defense)>> <<set $enemy.currentHP -= _damage>> Vous infligez <<print _damage>> dégâts au $enemy.name ! <<if $enemy.currentHP <= 0>> [[Continuer|EnemyDefeated]] <<else>> <<set _enemyDamage to Math.max(0, $enemy.attack - $player.defense)>> <<set $player.currentHP -= _enemyDamage>> Le $enemy.name vous inflige <<print _enemyDamage>> dégâts ! <<if $player.currentHP <= 0>> [[Game Over|Start]] <<else>> [[Continuer le combat|Combat-Deep]] <</if>> <</if>> :: Defend <<set $player.defense *= 2>> Vous prenez une posture défensive ! <<set _enemyDamage to Math.max(0, $enemy.attack - $player.defense)>> <<set $player.currentHP -= _enemyDamage>> Le $enemy.name vous inflige <<print _enemyDamage>> dégâts ! <<if $player.currentHP <= 0>> [[Game Over|Start]] <<else>> [[Continuer le combat|Combat-Deep]] <</if>> :: UsePotion <<if $player.potions > 0>> <<set $player.currentHP = Math.min($player.maxHP, $player.currentHP + 20)>> <<set $player.potions -= 1>> Vous utilisez une potion et récupérez 20 PV. Il vous reste <<print $player.potions>> potions. <<set _enemyDamage to Math.max(0, $enemy.attack - $player.defense)>> <<set $player.currentHP -= _enemyDamage>> Le $enemy.name vous inflige <<print _enemyDamage>> dégâts ! <<if $player.currentHP <= 0>> [[Game Over|Start]] <<else>> [[Continuer le combat|Combat-Deep]] <</if>> <<else>> Vous n'avez plus de potions ! [[Retour au combat|Combat-Deep]] <</if>> :: EnemyDefeated <<set $player.gold += 25>> Vous avez vaincu le $enemy.name ! Vous gagnez 25 pièces d'or. [[Recommencer|Start]]
<<switch random(1,4)>>\ <<case 1>>\ sdsds <<case 2>>\ qsdqsdqs <<case 3>>\ xwcwcxcxw <<case 4>>\ <<goto "SB12">> <</switch>>\ Fin <<set $Life = 50>> <<run updateBars()>>
Static Healthbars for SugarCube <progress @value="$Life" max="$LifeMax"></progress> ici<progress @value="$Life" max="$LifeMax"></progress> :: Start <<set $health to 80>> Show a healthbar using a Progress element: <progress @value="$health" max="100"></progress> Show a healthbar using a Meter element: <meter @value="$health" min="0" max="100"></meter>
<<if $wasMenuItemEntered>> <<link "BACK" $pastPassage>> <<set $wasMenuItemEntered = false>> <</link>> <<else>> <<if $stage == 0>>\ <<set $wasMenuItemEntered = true>> <<set $pastPassage to passage()>> <</link>><</if>> <<link "Characters" "Characters">> <<set $wasMenuItemEntered = true>> <<set $pastPassage to passage()>> <</link>> <<link "Options" "Options">> <<set $wasMenuItemEntered = true>> <<set $pastPassage to passage()>> <</link>> <<link "Cheats" "Cheat">> <<set $wasMenuItemEntered = true>> <<set $pastPassage to passage()>> <</link>> <</if>>
<img width="100%" height="20%" src="MagicWorldOfBimbo/PresentationF95.jpg">
test
<!-- Tableau des quêtes --> <div id="quest-panel"> <h3>Quêtes</h3> <div class="quest-list"> <<if $activeQuests && $activeQuests.length > 0>> <<for _i to 0; _i < $activeQuests.length; _i++>> <div class="quest-item"> <div class="quest-icon">📜</div> <div class="quest-info"> <div class="quest-name"><<print $activeQuests[_i].name>></div> <div class="quest-progress"><<print $activeQuests[_i].progress>>/<<print $activeQuests[_i].total>></div> </div> <div class="quest-status <<print $activeQuests[_i].completed ? 'completed' : 'in-progress'>>"> <<print $activeQuests[_i].completed ? "✓" : "">> </div> </div> <</for>> <<else>> <div class="quest-item empty"> <div class="quest-icon">📜</div> <div class="quest-name">Aucune quête active</div> </div> <</if>> </div> </div> <!-- Tableau des stats --> <div id="status-panel"> <h3>Stats</h3> <!-- Barre de vie --> <div class="stat-container"> <div class="stat-icon health-icon"></div> <div class="stat-bar-container"> <div id="health-bar" class="stat-bar" style="width: <<print Math.floor(($Life / $LifeMax) * 100)>>%;"> <<print Math.floor($Life)>>/<<print Math.floor($LifeMax)>> </div> </div> </div> <!-- Barre de mana --> <div class="stat-container"> <div class="stat-icon mana-icon"></div> <div class="stat-bar-container"> <div id="mana-bar" class="stat-bar" style="width: <<print Math.floor(($Mana / $ManaMax) * 100)>>%;"> <<print Math.floor($Mana)>>/<<print Math.floor($ManaMax)>> </div> </div> </div> <!-- Or (Gold) --> <div class="stat-container"> <div class="stat-value gold-value">🪙<<print $gold>></div> </div> <!-- Armure --> <div class="stat-container"> <div class="stat-value">🛡️<<print $Armor>></div> </div> </div> <style> @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css'); /* Styles communs pour les deux panneaux */ #status-panel, #quest-panel { background: linear-gradient(to bottom, #2c3e50, #1a2530); border: 1px solid #34495e; border-radius: 6px; padding: 10px; color: #ecf0f1; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); max-width: 250px; } #quest-panel { margin-bottom: 8px; } #status-panel h3, #quest-panel h3 { margin-top: 0; margin-bottom: 6px; border-bottom: 1px solid #34495e; padding-bottom: 4px; font-size: 1em; display: flex; align-items: center; } #status-panel h3 { color: #3498db; } #quest-panel h3 { color: #f39c12; } .icon-character:before { font-family: 'FontAwesome'; margin-left: 5px; } /* Styles pour les statistiques */ .stat-container { display: flex; align-items: center; margin-bottom: 4px; } .stat-icon { width: 20px; text-align: center; margin-right: 5px; font-family: 'FontAwesome'; } .health-icon { color: #e74c3c; } .mana-icon { color: #3498db; } .armor-icon { color: #95a5a6; } .gold-icon { color: #f1c40f; } .gold-value { color: #f1c40f !important; } .stat-bar-container { flex-grow: 1; background-color: rgba(0, 0, 0, 0.3); height: 16px; border-radius: 3px; overflow: hidden; box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3); } .stat-bar { height: 100%; color: white; text-align: center; font-size: 0.7em; line-height: 16px; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.7); transition: width 0.3s ease-in-out; display: flex; align-items: center; justify-content: center; } #health-bar { background: linear-gradient(to bottom, #e74c3c, #c0392b); } #mana-bar { background: linear-gradient(to bottom, #3498db, #2980b9); } .stat-value { min-width: 25px; text-align: right; font-weight: bold; color: #95a5a6; } /* Styles pour les quêtes */ .quest-list { display: flex; flex-direction: column; gap: 4px; } .quest-item { display: flex; align-items: center; padding: 4px 6px; background: rgba(52, 73, 94, 0.5); border-radius: 3px; border-left: 3px solid #f39c12; } .quest-item.empty { opacity: 0.5; border-left-color: #7f8c8d; } .quest-icon { width: 20px; text-align: center; margin-right: 6px; } .quest-info { flex-grow: 1; } .quest-name { font-size: 0.8em; font-weight: bold; } .quest-progress { font-size: 0.7em; color: #bdc3c7; } .quest-status { width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7em; } .quest-status.in-progress { background-color: #2980b9; color: #ecf0f1; } .quest-status.completed { background-color: #27ae60; color: #ecf0f1; } /* Styles restants */ .separator { height: 1px; background-color: #34495e; margin: 5px 0; } .inventory-section { margin-top: 3px; } .inventory-list { display: flex; flex-direction: column; gap: 3px; } .inventory-item { display: flex; align-items: center; padding: 3px 5px; background: rgba(52, 73, 94, 0.5); border-radius: 3px; border-left: 3px solid #3498db; } .inventory-item.empty { opacity: 0.5; border-left-color: #7f8c8d; } .item-icon { font-family: 'FontAwesome'; width: 16px; text-align: center; margin-right: 5px; } .health-potion { color: #e74c3c; } .mana-potion { color: #3498db; } .strength-potion { color: #e67e22; } .item-name { flex-grow: 1; font-size: 0.8em; } .item-count { background-color: #2c3e50; border-radius: 3px; min-width: 20px; height: 20px; font-size: 0.8em; display: flex; align-items: center; justify-content: center; } </style> <<script>> // Fonction d'ajout de quête qui vérifie si la quête existe déjà function addQuest(questName, progressTotal) { // Initialiser le tableau activeQuests s'il n'existe pas encore if (!State.variables.activeQuests) { State.variables.activeQuests = []; } // Vérifier si une quête avec le même nom existe déjà const questExists = State.variables.activeQuests.some(quest => quest.name === questName); // Si la quête n'existe pas déjà, l'ajouter if (!questExists) { State.variables.activeQuests.push({ name: questName, progress: 0, total: progressTotal, completed: false }); // Rafraîchir l'affichage pour montrer la nouvelle quête Engine.show(); return true; // La quête a été ajoutée avec succès } return false; // La quête existait déjà } // Fonction pour mettre à jour la progression d'une quête function updateQuestProgress(questName, newProgress) { if (!State.variables.activeQuests) return false; for (let i = 0; i < State.variables.activeQuests.length; i++) { if (State.variables.activeQuests[i].name === questName) { State.variables.activeQuests[i].progress = newProgress; // Marquer comme complétée si progress >= total if (newProgress >= State.variables.activeQuests[i].total) { State.variables.activeQuests[i].completed = true; } // Rafraîchir l'affichage Engine.show(); return true; } } return false; // Quête non trouvée } // Fonction pour compléter une quête directement function completeQuest(questName) { if (!State.variables.activeQuests) return false; for (let i = 0; i < State.variables.activeQuests.length; i++) { if (State.variables.activeQuests[i].name === questName) { State.variables.activeQuests[i].progress = State.variables.activeQuests[i].total; State.variables.activeQuests[i].completed = true; // Rafraîchir l'affichage Engine.show(); return true; } } return false; // Quête non trouvée } // Fonction pour supprimer une quête function removeQuest(questName) { if (!State.variables.activeQuests) return false; const initialLength = State.variables.activeQuests.length; State.variables.activeQuests = State.variables.activeQuests.filter(quest => quest.name !== questName); if (State.variables.activeQuests.length < initialLength) { // Rafraîchir l'affichage Engine.show(); return true; } return false; // Quête non trouvée } <</script>>
// Désactive la suppression automatique des espaces blancs Config.passages.nobr = false; $(document).on(':passagedisplay', function() { updateStatBars(); }); // Mettre à jour manuellement après modifications de variables function updateStatBars() { const vieRatio = State.variables.Life / State.variables.LifeMax; const manaRatio = State.variables.Mana / State.variables.ManaMax; $("#health-bar").css("width", (vieRatio * 100) + "%"); $("#health-bar").text(State.variables.Life + "/" + State.variables.LifeMax); $("#mana-bar").css("width", (manaRatio * 100) + "%"); $("#mana-bar").text(State.variables.Mana + "/" + State.variables.ManaMax); } // Hook pour que la fonction soit appelée après chaque changement de variable $(document).on(':stateupdate', function() { updateStatBars(); });
<<script>> // Initialisation du lecteur audio if (!window.audio) { window.audio = new Audio('medieval-story-by-frank-schroeter-from-filmmusic-io.mp3'); window.audio.loop = true; window.audio.volume = 0.3; } // Initialiser la variable typewriter si elle n'existe pas if (State.variables.typewriterEnabled === undefined) { State.variables.typewriterEnabled = true; } <</script>> <h2>Music Volumes</h2> <div style="margin-bottom: 20px;"> <input type="range" id="volumeSlider" min="0" max="100" value="30" style="width: 100%;" oninput="window.audio.volume = this.value/100; $('#volumeValue').text(this.value)"> <h2>Typewriter Settings</h2> SOON </div>
V0.05
IN DEV (NOT WORKING) <<set $relations = { "Amy": { level: 1, pic: "MagicWorldOfBimbo/Amy.jpg", Desc: "Your future girlfriend?" }, "Elena": { level: 0, pic: "MagicWorldOfBimbo/Elena.jpg", Desc: "the person who woke you up" }, "Witch": { level: 1, pic: "MagicWorldOfBimbo/Witch.jpg", Desc: "The powerful witch of the forest" }, "Seller": { level: 3, pic: "MagicWorldOfBimbo/Seller.jpg", Desc: "a hot saleswoman" } }>> <div class="relations-table"> <<for _name, _data range $relations>> <div class="character-row"> <div class="character-cell"> <div class="character-avatar"> <<print '<img src="' + _data.pic + '" alt="' + _name + '">'>> </div> <div class="character-info"> <span class="character-name"><<= _name >></span> <span class="character-desc"><<= _data.Desc >></span> </div> </div> <div class="level-cell"> <div class="level-display"> <span class="relation-level">Niveau <<= _data.level >></span> <div class="hearts"> <<for _i range 5>> <<if _i < _data.level>> <span class="heart heart-red">❤</span> <<else>> <span class="heart heart-gray">❤</span> <</if>> <</for>> </div> </div> </div> </div> <</for>> </div> <style> .relations-table { width: 100%; max-width: 700px; margin: 0 auto; font-family: Arial, sans-serif; } .character-row { display: flex; align-items: center; background: rgba(255, 255, 255, 0.8); border-radius: 12px; margin-bottom: 15px; padding: 15px; box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease; } .character-row:hover { transform: translateY(-3px); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15); background: rgba(255, 255, 255, 0.95); } .character-cell { display: flex; align-items: center; flex: 2; } .level-cell { flex: 1; text-align: center; } .character-avatar { width: 60px; height: 60px; margin-right: 15px; flex-shrink: 0; } .character-avatar img { width: 100%; height: 100%; border-radius: 50%; border: 3px solid #4a89dc; object-fit: cover; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .character-info { display: flex; flex-direction: column; } .character-name { font-size: 18px; font-weight: bold; color: #2c3e50; margin-bottom: 5px; } .character-desc { font-size: 14px; color: #7f8c8d; line-height: 1.4; } .level-display { display: flex; flex-direction: column; align-items: center; } .relation-level { font-size: 16px; font-weight: bold; color: #e74c3c; margin-bottom: 8px; } .hearts { line-height: 1; } .heart { font-size: 1.5em; margin: 0 2px; transition: transform 0.2s ease; } .heart:hover { transform: scale(1.4); } .heart-red { color: #e74c3c; text-shadow: 0 0 5px rgba(231, 76, 60, 0.3); } .heart-gray { color: #bdc3c7; } /* Responsive */ @media (max-width: 600px) { .character-row { flex-direction: column; text-align: center; padding: 20px; } .character-cell { flex-direction: column; margin-bottom: 15px; } .character-avatar { margin-right: 0; margin-bottom: 10px; } .character-info { align-items: center; } .character-desc { text-align: center; } } </style>
<img width="100%" height="30%" src="MagicWorldOfBimbo/Village/AmyHouse/1.jpg"> [[Find Amy]] [[Sleep]] [[Back to the City|CityMap]]
<<set _randomImg = Math.floor(Math.random() * 11)>> <<set _phrases to [ "Do you like watching me cook?", "Do you want to go for a walk?", "No no you will not taste my meal until it is finished", "I'm a little hot, and you?", "Oh...you're not sleeping?.", "So did you like my dancing in the garden?", "...", "The more roses I have, the more I am in love.", "Yes, I drank another glass of Volka Milk.", "do you like my nightie?", "Come on, I'm going to sleep, see you later...", "Why are you watching me sleep?" ]>> <<print '<video width="100%" height="30%" playsinline autoplay loop muted>' + '<source src="MagicWorldOfBimbo/Village/AmyHouse/Find/' + _randomImg + '.mp4" type="video/mp4">' + 'Your browser does not support the video tag.</video>'>> <<typeNEW 30ms>> <<speech "Amy">><<print _phrases[_randomImg]>><</speech>> [[Walking with Amy]] [[Amy's House]] [[Back to the City|CityMap]] <</typeNEW>>
<video width="100%" height="30%" playsinline autoplay loop muted> <source src="MagicWorldOfBimbo/Village/AmyHouse/Sleep/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<speech "Amy">>you slept well ? I can see that you are full of life<</speech>> <<set $Life to $LifeMax>> [[Back to the City|CityMap]]
<<set $activeQuests.push({ name: "Bring 20 roses to Amy.", progress: 0, total: 20, completed: false })>> <<script>> updateQuestProgress("Bring 20 roses to Amy.",1); <</script>> Vous avez <<print questProgress("Bring 20 roses to Amy.")>> roses sur 20 pour Amy. <<if questProgress("Bring 20 roses to Amy.") >= 10>> Vous avez au moins 10 roses pour Amy. <<else>> Vous n'avez pas encore assez de roses pour Amy. <</if>> <<set $activeQuests = $activeQuests.filter(function(quest) { return quest.name !== "Find the village"; })>>
<<set $activeQuests.push({ name: "Bring 20 roses to Amy.", progress: 0, total: 20, completed: false })>> <<script>> updateQuestProgress("Bring 20 roses to Amy.",1); <</script>> Vous avez <<print questProgress("Bring 20 roses to Amy.")>> roses sur 20 pour Amy. <<if questProgress("Bring 20 roses to Amy.") >= 10>> Vous avez au moins 10 roses pour Amy. <<else>> Vous n'avez pas encore assez de roses pour Amy. <</if>> <<script>> updateQuestProgress("Bring 20 roses to Amy.", 1); <</script>> <<set $activeQuests = $activeQuests.filter(function(quest) { return quest.name !== "Find the village"; })>>
<h3>💖 Support us and🔒unlock all locked scenes 💖</h3> <span style="color: #eeeeee;">💦</span> <span style="color: #eeeeee;">Bonus Scenes / Early sex Scenes / Menu NSFW scenes</span><br> <span style="color: #eeeeee;">💪</span> <span style="color: #eeeeee;">Cheat code (Golds, Mana, Amor, Weapons, Life)</span> <br> <span style="color: #eeeeee;">🔞</span> <span style="color: #eeeeee;">Early access to the next update.</span><br> <a href="https://www.example.com" target="_blank" class="clickable-image"> <img src="MagicWorldOfBimbo/Patreon.jpg" alt="Patreon" style="width: 100%; max-width: 500px; transition: transform 0.3s;"> </a> <a href="https://official-en.fanbox.cc/" target="_blank" class="clickable-image"> <img src="MagicWorldOfBimbo/LogoFanCC.png" alt="Fan CC" style="width: 100%; max-width: 500px; transition: transform 0.3s;"> </a> <style> .clickable-image { display: inline-block; position: relative; text-decoration: none; } .clickable-image:hover img { transform: scale(1.03); box-shadow: 0 5px 15px rgba(0,0,0,0.3); } .image-caption { position: absolute; bottom: 0; left: 0; right: 0; background: rgba(0,0,0,0.7); color: white; padding: 8px; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; opacity: 0; transition: opacity 0.3s; } </style>
:: JavaScript [script] // Définir les fonctions dans l'espace de noms global de SugarCube (window.setup) setup.addQuest = function(questName, progressTotal) { // Initialiser le tableau activeQuests s'il n'existe pas encore if (!State.variables.activeQuests) { State.variables.activeQuests = []; } // Vérifier si une quête avec le même nom existe déjà const questExists = State.variables.activeQuests.some(quest => quest.name === questName); // Si la quête n'existe pas déjà, l'ajouter if (!questExists) { State.variables.activeQuests.push({ name: questName, progress: 0, total: progressTotal, completed: false }); // Rafraîchir l'affichage pour montrer la nouvelle quête Engine.show(); return true; // La quête a été ajoutée avec succès } return false; // La quête existait déjà }; setup.updateQuestProgress = function(questName, newProgress) { if (!State.variables.activeQuests) return false; for (let i = 0; i < State.variables.activeQuests.length; i++) { if (State.variables.activeQuests[i].name === questName) { State.variables.activeQuests[i].progress = newProgress; // Marquer comme complétée si progress >= total if (newProgress >= State.variables.activeQuests[i].total) { State.variables.activeQuests[i].completed = true; } // Rafraîchir l'affichage Engine.show(); return true; } } return false; // Quête non trouvée }; setup.completeQuest = function(questName) { if (!State.variables.activeQuests) return false; for (let i = 0; i < State.variables.activeQuests.length; i++) { if (State.variables.activeQuests[i].name === questName) { State.variables.activeQuests[i].progress = State.variables.activeQuests[i].total; State.variables.activeQuests[i].completed = true; // Rafraîchir l'affichage Engine.show(); return true; } } return false; // Quête non trouvée }; setup.removeQuest = function(questName) { if (!State.variables.activeQuests) return false; const initialLength = State.variables.activeQuests.length; State.variables.activeQuests = State.variables.activeQuests.filter(quest => quest.name !== questName); if (State.variables.activeQuests.length < initialLength) { // Rafraîchir l'affichage Engine.show(); return true; } return false; // Quête non trouvée };
<<if $gold >= 10>>\ <span style="color: #FFD700; display: flex; align-items: center; gap: 5px;">You paid 10 🪙</span>\ <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/01-ShopBuy.ogg'); soundEffect.volume = $("#volumeSlider").val() / 100; soundEffect.play(); <</script>>\ <<set $gold -= 10>>\ <<set $Weapon = 1>>\ <div class="purchase-container"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/yes.jpg" class="purchase-image"> <div class="purchase-overlay">\ <div class="purchase-effect">WEAPON ACQUIRED!</div>\ </div>\ </div>\ <<speech "Seller">>Thank you for your purchase. With this weapon, the enemies of the deep forest will not harm you.<</speech>> <<else>>\ <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/no.jpg"> <<speech "Seller">><span class="bounce">Sorry!, but you need at least 5 gold pieces</span>. Come back when you have enough money.<</speech>> <</if>>\ [[Back to the City|CityMap]] <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Purchase animation styles */ .purchase-container { position: relative; overflow: hidden; margin-bottom: 10px; } .purchase-image { animation: pulse 1s ease-in-out; } .purchase-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; pointer-events: none; } .purchase-effect { color: #FFD700; font-size: 2em; font-weight: bold; text-shadow: 0 0 10px #FFD700, 0 0 20px #FFD700; background-color: rgba(0, 0, 0, 0.5); padding: 10px 20px; border-radius: 10px; animation: fadeInOut 2s ease-in-out forwards; transform: scale(0); } @keyframes pulse { 0% { filter: brightness(1); } 50% { filter: brightness(1.5); } 100% { filter: brightness(1); } } @keyframes fadeInOut { 0% { opacity: 0; transform: scale(0) rotate(-10deg); } 20% { opacity: 1; transform: scale(1.2) rotate(5deg); } 80% { opacity: 1; transform: scale(1) rotate(0); } 100% { opacity: 0; transform: scale(0.8); } } </style>
<<if $gold >= 5>>\ <span style="color: #FFD700; display: flex; align-items: center; gap: 5px;">You paid 5 🪙</span>\ <<script>> var soundEffect = new Audio('MagicWorldOfBimbo/Sounds/01-ShopBuy.ogg'); soundEffect.volume = $("#volumeSlider").val() / 100; soundEffect.play(); <</script>>\ <<set $gold -= 5>>\ <<set $miningpickaxe = 1>>\ <div class="purchase-container"> <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/yes.jpg" class="purchase-image"> <div class="purchase-overlay">\ <div class="purchase-effect">TOOL ACQUIRED!</div>\ </div>\ </div>\ <<speech "Seller">>Thank you for your purchase this tool. mining will be fast.<</speech>> <<else>>\ <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Shop/no.jpg"> <<speech "Seller">><span class="bounce">Sorry!, but you need at least 5 gold pieces</span>. Come back when you have enough money.<</speech>> <</if>>\ [[Back to the City|CityMap]] <style> .bounce { display: inline-block; animation: bounce 0.5s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Purchase animation styles */ .purchase-container { position: relative; overflow: hidden; margin-bottom: 10px; } .purchase-image { animation: pulse 1s ease-in-out; } .purchase-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; pointer-events: none; } .purchase-effect { color: #FFD700; font-size: 2em; font-weight: bold; text-shadow: 0 0 10px #FFD700, 0 0 20px #FFD700; background-color: rgba(0, 0, 0, 0.5); padding: 10px 20px; border-radius: 10px; animation: fadeInOut 2s ease-in-out forwards; transform: scale(0); } @keyframes pulse { 0% { filter: brightness(1); } 50% { filter: brightness(1.5); } 100% { filter: brightness(1); } } @keyframes fadeInOut { 0% { opacity: 0; transform: scale(0) rotate(-10deg); } 20% { opacity: 1; transform: scale(1.2) rotate(5deg); } 80% { opacity: 1; transform: scale(1) rotate(0); } 100% { opacity: 0; transform: scale(0.8); } } </style>
<<set _randomImg = Math.floor(Math.random() * 6)>>\ <div id="combat-ui" style="text-align: center;">\ <<print '<video width="100%" height="30%" playsinline autoplay loop muted alt="Enemy" id="enemy-img">' + '<source src="MagicWorldOfBimbo/Forest/DeepForest/' + _randomImg + '.mp4" type="video/mp4">' + 'Your browser does not support the video tag.</video>'>> <nobr> <div id="attack-bar-container" style="width: 300px; height: 30px; background-color: #555; margin: 0 auto 15px; position: relative; border: 2px solid white; overflow: hidden; border-radius: 5px; box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);"> <div id="bar-blue-left" style="position: absolute; left: 0%; top: 0; width: 25%; height: 100%; background-color: dodgerblue;"></div> <div id="bar-orange-left" style="position: absolute; left: 25%; top: 0; width: 15%; height: 100%; background-color: orange;"></div> <div id="bar-red-center" style="position: absolute; left: 40%; top: 0; width: 20%; height: 100%; background-color: crimson;"></div> <div id="bar-orange-right" style="position: absolute; left: 60%; top: 0; width: 15%; height: 100%; background-color: orange;"></div> <div id="bar-blue-right" style="position: absolute; left: 75%; top: 0; width: 25%; height: 100%; background-color: dodgerblue;"></div> <div id="attack-cursor" style="position: absolute; left: 0%; top: 0; width: 4px; height: 100%; background-color: black; z-index: 1;"></div> </div>\ \ <button id="attack-button">Fight</button>\ \ \ <div id="attack-feedback" style="margin-top: 15px; font-weight: bold; line-height: 1.4;"> </div>\ \ <div id="combat-continue" style="margin-top: 20px; display: none;">\ <<if $Life < 8>>[[Deep-Forest]]<<endif>> [[Leave|Enter to the forest]] </div>\ </nobr> </div> <style> #attack-button { display: block; margin: 0 auto; width: 250px; padding: 12px 20px; font-size: 1.1em; font-weight: bold; cursor: pointer; background-color: crimson; color: white; border: none; border-radius: 5px; text-transform: uppercase; transition: background-color 0.2s ease, transform 0.1s ease; } #attack-button:hover { background-color: darkred; } #attack-button:active { transform: scale(0.98); } #attack-button:disabled { cursor: not-allowed; background-color: #993333; opacity: 0.7; } #attack-feedback { padding: 5px; border: 2px solid transparent; display: inline-block; min-width: 280px; min-height: 5em; vertical-align: top; } </style> <<script>> var CONFIG_CURSOR_SPEED = 200; // Déclaration en dehors de la fonction $(document).one(...) var blueZone1End = 25; var orangeZone1End = 40; var redZoneEnd = 60; var orangeZone2End = 75; var results = { critical: { damage: 15, gold: 10, hpLost: 2, color: 'crimson', label: 'Perfect Combat!' }, good: { damage: 10, gold: 5, hpLost: 5, color: 'orange', label: 'Medium Combat!' }, weak: { damage: 5, gold: 2, hpLost: 10, color: 'dodgerblue',label: 'Faible Combat.' } }; $(document).one(':passagedisplay', function (ev) { var cursorPosPercent = 0; var cursorDirection = 1; var intervalId = null; var lastUpdateTime = performance.now(); var cursor = $('#attack-cursor'); var button = $('#attack-button'); var feedback = $('#attack-feedback'); var continueLinks = $('#combat-continue'); var enemyImage = $('#enemy-img'); function updateCursor() { var now = performance.now(); var deltaTime = (now - lastUpdateTime) / 1000; lastUpdateTime = now; cursorPosPercent += cursorDirection * CONFIG_CURSOR_SPEED * deltaTime; if (cursorPosPercent >= 100) { cursorPosPercent = 100; cursorDirection = -1; } else if (cursorPosPercent <= 0) { cursorPosPercent = 0; cursorDirection = 1; } cursor.css('left', cursorPosPercent + '%'); } function handleAttack() { enemyImage.css('filter', 'grayscale(100%)'); if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } button.prop('disabled', true); var finalPos = cursorPosPercent; var attackResult; if (finalPos > orangeZone1End && finalPos <= redZoneEnd) { attackResult = results.critical; } else if ((finalPos > blueZone1End && finalPos <= orangeZone1End) || (finalPos > redZoneEnd && finalPos <= orangeZone2End)) { attackResult = results.good; } else { attackResult = results.weak; } var message = `<span style="color: ${attackResult.color}; font-weight:bold;">${attackResult.label}</span><br>`; message += `Enemy is KO.<br>`; message += `You lost ${attackResult.hpLost} HP.<br>`; message += `You gained ${attackResult.gold} Gold.`; if (State.variables.Life < 10) {message += `Low HP, Need to rest.`; } feedback.css({ 'border': `2px solid ${attackResult.color}` }); feedback.html(message); try { console.log(`Updating variables: Enemy HP -= ${attackResult.damage}, Player HP -= ${attackResult.hpLost}, Player Gold += ${attackResult.gold}`); State.variables.gold += attackResult.gold; State.variables.Life -=attackResult.hpLost // Afficher la nouvelle valeur } catch (e) { console.error("Error updating Sugarcube variables. Make sure $enemyHP, $playerHP, and $playerGold are initialized.", e); feedback.append("<br><span style='color:red;font-size:0.8em;'>Error updating game state! Check console (F12).</span>"); } continueLinks.show(); } function startGame() { enemyImage.css('filter', 'none'); cursorPosPercent = 0; cursorDirection = 1; cursor.css('left', '0%'); feedback.html(' '); feedback.css({'border-color': 'transparent'}); button.prop('disabled', false); continueLinks.hide(); lastUpdateTime = performance.now(); if (intervalId === null) { intervalId = setInterval(updateCursor, 16); } } button.on('mousedown', handleAttack); startGame(); $(document).one(':passagedone', function (ev) { if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } button.off('mousedown', handleAttack); }); }); <</script>>
<<set $enemyHP = 100>> <<set $damage = 0>> <div id="combat-container" style="text-align: center; margin: 20px auto; width: 400px;"> <!-- Image de l'ennemi --> <div id="enemy-image" style="margin-bottom: 20px;"> <img src="https://via.placeholder.com/150" alt="Ennemi" style="width: 150px; height: 150px;"> </div> <!-- Barre de timing --> <div id="timing-bar" style="position: relative; width: 300px; height: 30px; margin: 0 auto 20px; background: linear-gradient(to right, blue 50%, green 50%);"> <div id="cursor" style="position: absolute; width: 3px; height: 30px; background-color: black; left: 0; top: 0;"></div> </div> <!-- Bouton d'attaque --> <button id="attack-button" style="padding: 10px 20px; font-size: 16px;">Attaque</button> <!-- Affichage des dégâts et HP de l'ennemi --> <div style="margin-top: 20px;"> <div>Dégâts: <span id="damage-display">0</span></div> <div>HP Ennemi: <span id="enemy-hp">100</span>/100</div> </div> </div> <<script>> $(document).ready(function() { // Variables pour contrôler l'animation et le jeu let animationId; let position = 0; let direction = 1; // 1 = droite, -1 = gauche let barWidth = 300; let isAnimating = true; // Fonction pour animer le curseur function animateCursor() { if (isAnimating) { position += (2 * direction); // Inverser la direction quand le curseur atteint les bords if (position >= barWidth || position <= 0) { direction *= -1; } // Mettre à jour la position du curseur $("#cursor").css("left", position + "px"); // Continuer l'animation animationId = requestAnimationFrame(animateCursor); } } // Démarrer l'animation animationId = requestAnimationFrame(animateCursor); // Gestionnaire d'événements pour le bouton d'attaque $("#attack-button").on("click", function() { // Arrêter l'animation temporairement isAnimating = false; cancelAnimationFrame(animationId); // Déterminer les dégâts en fonction de la position du curseur // Zone verte commence à 150px (50% de 300px) let damage = (position >= 150) ? 10 : 5; // Mettre à jour les variables SugarCube State.variables.damage = damage; State.variables.enemyHP = Math.max(0, State.variables.enemyHP - damage); // Mettre à jour l'affichage $("#damage-display").text(damage); $("#enemy-hp").text(State.variables.enemyHP); // Afficher un message pour informer sur les dégâts let messageClass = (damage === 10) ? "hit-success" : "hit-normal"; $("<div>").addClass(messageClass) .text(damage === 10 ? "Coup critique! " + damage + " dégâts!" : "Touché! " + damage + " dégâts") .appendTo("#combat-container") .fadeOut(2000, function() { $(this).remove(); }); // Vérifier si l'ennemi est vaincu if (State.variables.enemyHP <= 0) { $("#enemy-image").html("<div style='font-size: 24px; color: green;'>Ennemi vaincu!</div>"); $("#attack-button").prop("disabled", true); } else { // Redémarrer l'animation après un court délai setTimeout(function() { isAnimating = true; animationId = requestAnimationFrame(animateCursor); }, 1000); } }); }); <</script>> <style> #combat-container { font-family: Arial, sans-serif; position: relative; } .hit-success { color: green; font-weight: bold; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 20px; } .hit-normal { color: blue; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 16px; } </style>
:: Combat <style> .combat-container { max-width: 500px; margin: 0 auto; text-align: center; font-family: Arial, sans-serif; } .enemy-image { width: 200px; height: 150px; object-fit: cover; border: 3px solid #333; border-radius: 5px; margin-bottom: 20px; } .health-bar-container { width: 100%; height: 25px; background: #ddd; border-radius: 12px; overflow: hidden; margin-bottom: 30px; box-shadow: 0 2px 5px rgba(0,0,0,0.2); } .health-bar { width: 100%; height: 100%; background: linear-gradient(to right, #e74c3c, #f39c12); transition: width 0.3s ease; } .attack-bar-container { width: 100%; height: 40px; background: #ecf0f1; border-radius: 20px; position: relative; overflow: hidden; margin-bottom: 30px; box-shadow: inset 0 2px 5px rgba(0,0,0,0.1); } .attack-zone { width: 30%; height: 100%; background: linear-gradient(to right, #2ecc71, #27ae60); position: absolute; left: 35%; border-radius: 20px; } .attack-cursor { width: 4px; height: 100%; background: #34495e; position: absolute; left: 0; border-radius: 2px; box-shadow: 0 0 5px rgba(0,0,0,0.5); } .attack-button { background: linear-gradient(to bottom, #3498db, #2980b9); color: white; border: none; padding: 12px 30px; font-size: 18px; border-radius: 30px; cursor: pointer; transition: all 0.2s; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } .attack-button:hover { transform: translateY(-2px); box-shadow: 0 6px 8px rgba(0,0,0,0.15); } .attack-button:active { transform: translateY(1px); box-shadow: 0 2px 3px rgba(0,0,0,0.1); } .damage-feedback { font-size: 24px; font-weight: bold; margin: 10px 0; height: 30px; } .critical-hit { color: #e74c3c; animation: pulse 0.5s; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.3); } 100% { transform: scale(1); } } </style> <div class="combat-container"> <!-- Image de l'ennemi --> <img src="https://placehold.co/200x150?text=Ennemi" class="enemy-image"> <!-- Barre de vie --> <div class="health-bar-container"> <div id="enemyHealth" class="health-bar"></div> </div> <!-- Feedback des dégâts --> <div id="damageFeedback" class="damage-feedback"></div> <!-- Barre d'attaque --> <div class="attack-bar-container"> <div id="attackZone" class="attack-zone"></div> <div id="attackCursor" class="attack-cursor"></div> </div> <!-- Bouton d'attaque --> <button id="attackButton" class="attack-button">Attaque !</button> </div> <script> // Initialisation des variables de combat if (!window.hasOwnProperty('setup')) { window.setup = {}; } setup.enemyMaxHealth = 100; setup.enemyHealth = setup.enemyMaxHealth; setup.attackSpeed = 2; // Vitesse de déplacement (en % par frame) setup.attackDirection = 1; setup.attackRunning = true; setup.animationId = null; // Fonction pour mettre à jour la santé de l'ennemi function updateEnemyHealth() { const percent = Math.max(0, (setup.enemyHealth / setup.enemyMaxHealth) * 100); $('#enemyHealth').css('width', percent + '%'); if (setup.enemyHealth <= 0) { $('#attackButton').text('Ennemi vaincu !').prop('disabled', true); setup.attackRunning = false; cancelAnimationFrame(setup.animationId); } } // Fonction pour animer le curseur d'attaque function animateAttackCursor() { if (!setup.attackRunning) return; const $cursor = $('#attackCursor'); let currentPos = parseFloat($cursor.css('left')) || 0; let newPos = currentPos + (setup.attackDirection * setup.attackSpeed); // Inverser la direction aux bords if (newPos <= 0) { newPos = 0; setup.attackDirection = 1; } else if (newPos >= 100) { newPos = 100; setup.attackDirection = -1; } $cursor.css('left', newPos + '%'); setup.animationId = requestAnimationFrame(animateAttackCursor); } // Gestionnaire d'attaque $('#attackButton').on('click', function() { if (!setup.attackRunning) return; const $cursor = $('#attackCursor'); const $zone = $('#attackZone'); const $feedback = $('#damageFeedback'); const cursorPos = parseFloat($cursor.css('left')); const zonePos = parseFloat($zone.css('left')); const zoneWidth = parseFloat($zone.css('width')); let damage = 5; let feedbackText = "5 dégâts"; if (cursorPos >= zonePos && cursorPos <= (zonePos + zoneWidth)) { damage = 10; feedbackText = "10 dégâts - Critique !"; $feedback.addClass('critical-hit'); } else { $feedback.removeClass('critical-hit'); } setup.enemyHealth -= damage; $feedback.text(feedbackText); // Retirer le feedback après 1 seconde setTimeout(() => { $feedback.text(''); }, 1000); updateEnemyHealth(); }); // Démarrer l'animation quand le passage est chargé $(document).one(':passagedisplay', function() { updateEnemyHealth(); animateAttackCursor(); }); // Nettoyer l'animation quand on quitte le passage $(document).on(':passageend', function() { cancelAnimationFrame(setup.animationId); }); </script>:: Combat Passage <!-- Section HTML pour l'affichage --> <div id="combat-ui" style="text-align: center;"> <!-- Image de l'ennemi --> <img id="enemy-img" src="PLACEHOLDER_URL_ENNEMI.png" alt="Ennemi" style="max-width: 200px; display: block; margin: 0 auto 15px;"> <!-- Barre d'attaque --> <div id="attack-bar-container" style="width: 300px; height: 30px; background-color: #ccc; margin: 0 auto 15px; position: relative; border: 1px solid black; overflow: hidden;"> <!-- Sections bleue et verte --> <div id="bar-blue-left" style="position: absolute; left: 0; top: 0; width: 40%; height: 100%; background-color: blue;"></div> <div id="bar-green" style="position: absolute; left: 40%; top: 0; width: 20%; height: 100%; background-color: limegreen;"></div> <div id="bar-blue-right" style="position: absolute; left: 60%; /* 40% + 20% */ top: 0; width: 40%; height: 100%; background-color: blue;"></div> <!-- Curseur (trait) qui défile --> <div id="attack-cursor" style="position: absolute; left: 0%; top: 0; width: 4px; height: 100%; background-color: red; z-index: 1;"></div> </div> <!-- Bouton d'attaque --> <button id="attack-button">Attaque</button> <!-- Zone pour afficher le résultat --> <div id="attack-feedback" style="margin-top: 15px; font-weight: bold;"> </div> <!-- (Optionnel) Liens pour continuer après l'attaque --> <div id="combat-continue" style="margin-top: 20px; display: none;"> [[Continuer le combat]] <!-- Lien vers le même passage ou un autre --> [[CombatGoogleAI]] </div> </div> <!-- Section CSS (peut aussi être mise dans le Stylesheet) --> <style> #attack-button { padding: 10px 20px; font-size: 1em; cursor: pointer; } #attack-button:disabled { cursor: not-allowed; opacity: 0.6; } </style> <!-- Section JavaScript / Sugarcube --> <script> $(document).one(':passagedisplay', function (ev) { // --- Configuration --- const cursorSpeed = 150; // Vitesse du curseur en % de la barre par seconde const greenZoneStartPercent = 40; // Début de la zone verte (en %) const greenZoneEndPercent = 60; // Fin de la zone verte (en %) -> 40% + 20% de largeur const damageGood = 10; // Dégâts si dans le vert const damageBad = 5; // Dégâts si dans le bleu // --- Variables --- let cursorPosPercent = 0; // Position actuelle en % let cursorDirection = 1; // 1 = vers la droite, -1 = vers la gauche let intervalId = null; // Pour stocker l'ID de l'animation let lastUpdateTime = performance.now(); // Pour un mouvement fluide basé sur le temps // --- Éléments DOM --- const cursor = $('#attack-cursor'); const button = $('#attack-button'); const feedback = $('#attack-feedback'); const continueLinks = $('#combat-continue'); // Section des liens optionnels // --- Fonctions --- function updateCursor() { const now = performance.now(); const deltaTime = (now - lastUpdateTime) / 1000; // Temps écoulé en secondes lastUpdateTime = now; // Calculer le nouveau déplacement cursorPosPercent += cursorDirection * cursorSpeed * deltaTime; // Gérer les rebonds if (cursorPosPercent >= 100) { cursorPosPercent = 100; cursorDirection = -1; } else if (cursorPosPercent <= 0) { cursorPosPercent = 0; cursorDirection = 1; } // Appliquer la position au style CSS cursor.css('left', cursorPosPercent + '%'); } function handleAttack() { // Arrêter l'animation if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } // Désactiver le bouton pour éviter les clics multiples button.prop('disabled', true); // Obtenir la position finale du curseur const finalPos = cursorPosPercent; // Utiliser la dernière position calculée // Déterminer les dégâts let damageDealt; let message; if (finalPos >= greenZoneStartPercent && finalPos <= greenZoneEndPercent) { damageDealt = damageGood; message = `<span style="color: limegreen;">Attaque réussie !</span> Vous infligez ${damageDealt} points de dégâts.`; feedback.css('border', '2px solid limegreen'); // Feedback visuel } else { damageDealt = damageBad; message = `<span style="color: blue;">Attaque moyenne.</span> Vous infligez ${damageDealt} points de dégâts.`; feedback.css('border', '2px solid blue'); // Feedback visuel } feedback.css('padding', '5px'); feedback.html(message); // Afficher le résultat // --- IMPORTANT --- // Ici, vous devriez mettre à jour les PV de l'ennemi ou d'autres variables du jeu // Exemple : State.variables.enemyHP -= damageDealt; // (Assurez-vous que la variable $enemyHP existe et est initialisée ailleurs) // exemple : Wikifier.wikifyEval("<<set $enemyHP -= " + damageDealt + ">>"); // Afficher les liens pour continuer (optionnel) continueLinks.show(); } // --- Initialisation --- function startGame() { // (Ré)initialiser l'état si besoin cursorPosPercent = 0; cursorDirection = 1; cursor.css('left', '0%'); feedback.html(' '); // Vider le feedback feedback.css('border', 'none'); feedback.css('padding', '0'); button.prop('disabled', false); // Réactiver le bouton continueLinks.hide(); // Cacher les liens de continuation lastUpdateTime = performance.now(); // Réinitialiser le temps // Démarrer l'animation seulement si elle n'est pas déjà en cours if (intervalId === null) { // Utiliser requestAnimationFrame pour une animation plus fluide si possible, // mais setInterval est plus simple pour ce cas. // Ajuster l'intervalle pour une sensation de fluidité (ex: toutes les 16ms ~ 60fps) intervalId = setInterval(updateCursor, 16); } } // Attacher le listener au bouton button.on('click', handleAttack); // Démarrer le mini-jeu startGame(); // Nettoyage si on quitte le passage sans cliquer (par exemple, avec l'historique) // Important pour arrêter l'intervalle et éviter les problèmes. $(document).one(':passagedone', function (ev) { if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } // Détacher le listener pour éviter les accumulations si on revient au passage button.off('click', handleAttack); }); }); </script>
<div id="combat-ui" style="text-align: center;">\ <video width="100%" height="30%" playsinline autoplay loop 3 muted alt="Enemy" id="enemy-img"> <source src="MagicWorldOfBimbo/Forest/DeepForest/1.mp4" type="video/mp4"> Your browser does not support the video tag. </video>\ <nobr> <div id="attack-bar-container" style="width: 300px; height: 30px; background-color: #555; margin: 0 auto 15px; position: relative; border: 2px solid white; overflow: hidden; border-radius: 5px; box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);"> <div id="bar-blue-left" style="position: absolute; left: 0%; top: 0; width: 25%; height: 100%; background-color: dodgerblue;"></div> <div id="bar-orange-left" style="position: absolute; left: 25%; top: 0; width: 15%; height: 100%; background-color: orange;"></div> <div id="bar-red-center" style="position: absolute; left: 40%; top: 0; width: 20%; height: 100%; background-color: crimson;"></div> <div id="bar-orange-right" style="position: absolute; left: 60%; top: 0; width: 15%; height: 100%; background-color: orange;"></div> <div id="bar-blue-right" style="position: absolute; left: 75%; top: 0; width: 25%; height: 100%; background-color: dodgerblue;"></div> <div id="attack-cursor" style="position: absolute; left: 0%; top: 0; width: 4px; height: 100%; background-color: black; z-index: 1;"></div> </div>\ \ <button id="attack-button">Fight</button>\ \ \ <div id="attack-feedback" style="margin-top: 15px; font-weight: bold; line-height: 1.4;"> </div>\ \ <div id="combat-continue" style="margin-top: 20px; display: none;">\ <<if $Life < 8>>[[CombatGoogleAI]]<<endif>> [[Leave|Enter to the forest]] </div>\ </nobr> </div> <style> #attack-button { display: block; margin: 0 auto; width: 250px; padding: 12px 20px; font-size: 1.1em; font-weight: bold; cursor: pointer; background-color: crimson; color: white; border: none; border-radius: 5px; text-transform: uppercase; transition: background-color 0.2s ease, transform 0.1s ease; } #attack-button:hover { background-color: darkred; } #attack-button:active { transform: scale(0.98); } #attack-button:disabled { cursor: not-allowed; background-color: #993333; opacity: 0.7; } #attack-feedback { padding: 5px; border: 2px solid transparent; display: inline-block; min-width: 280px; min-height: 5em; vertical-align: top; } </style> <<script>> var CONFIG_CURSOR_SPEED = 200; // Déclaration en dehors de la fonction $(document).one(...) var blueZone1End = 25; var orangeZone1End = 40; var redZoneEnd = 60; var orangeZone2End = 75; var results = { critical: { damage: 15, gold: 10, hpLost: 2, color: 'crimson', label: 'Perfect Combat!' }, good: { damage: 10, gold: 5, hpLost: 5, color: 'orange', label: 'Medium Combat!' }, weak: { damage: 5, gold: 2, hpLost: 10, color: 'dodgerblue',label: 'Faible Combat.' } }; $(document).one(':passagedisplay', function (ev) { var cursorPosPercent = 0; var cursorDirection = 1; var intervalId = null; var lastUpdateTime = performance.now(); var cursor = $('#attack-cursor'); var button = $('#attack-button'); var feedback = $('#attack-feedback'); var continueLinks = $('#combat-continue'); var enemyImage = $('#enemy-img'); function updateCursor() { var now = performance.now(); var deltaTime = (now - lastUpdateTime) / 1000; lastUpdateTime = now; cursorPosPercent += cursorDirection * CONFIG_CURSOR_SPEED * deltaTime; if (cursorPosPercent >= 100) { cursorPosPercent = 100; cursorDirection = -1; } else if (cursorPosPercent <= 0) { cursorPosPercent = 0; cursorDirection = 1; } cursor.css('left', cursorPosPercent + '%'); } function handleAttack() { enemyImage.css('filter', 'grayscale(100%)'); if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } button.prop('disabled', true); var finalPos = cursorPosPercent; var attackResult; if (finalPos > orangeZone1End && finalPos <= redZoneEnd) { attackResult = results.critical; } else if ((finalPos > blueZone1End && finalPos <= orangeZone1End) || (finalPos > redZoneEnd && finalPos <= orangeZone2End)) { attackResult = results.good; } else { attackResult = results.weak; } var message = `<span style="color: ${attackResult.color}; font-weight:bold;">${attackResult.label}</span><br>`; message += `Enemy is KO.<br>`; message += `You lost ${attackResult.hpLost} HP.<br>`; message += `You gained ${attackResult.gold} Gold.`; if (State.variables.Life < 10) {message += `Low HP, Need to rest.`; } feedback.css({ 'border': `2px solid ${attackResult.color}` }); feedback.html(message); try { console.log(`Updating variables: Enemy HP -= ${attackResult.damage}, Player HP -= ${attackResult.hpLost}, Player Gold += ${attackResult.gold}`); State.variables.gold += attackResult.gold; State.variables.Life -=attackResult.hpLost // Afficher la nouvelle valeur } catch (e) { console.error("Error updating Sugarcube variables. Make sure $enemyHP, $playerHP, and $playerGold are initialized.", e); feedback.append("<br><span style='color:red;font-size:0.8em;'>Error updating game state! Check console (F12).</span>"); } continueLinks.show(); } function startGame() { enemyImage.css('filter', 'none'); cursorPosPercent = 0; cursorDirection = 1; cursor.css('left', '0%'); feedback.html(' '); feedback.css({'border-color': 'transparent'}); button.prop('disabled', false); continueLinks.hide(); lastUpdateTime = performance.now(); if (intervalId === null) { intervalId = setInterval(updateCursor, 16); } } button.on('mousedown', handleAttack); startGame(); $(document).one(':passagedone', function (ev) { if (intervalId !== null) { clearInterval(intervalId); intervalId = null; } button.off('mousedown', handleAttack); }); }); <</script>>
Gold avant : <<print $gold>> <<script>> // Modifier $gold State.variables.gold += 5; // Afficher la nouvelle valeur alert("Gold après : " + State.variables.gold); <</script>> Gold après : <<print $gold>> // Doit afficher +5
// Ajouter une nouvelle quête <<run addQuest("Sauver le village", "Éliminer les bandits qui menacent le village", 5, "principale")>> // Mettre à jour la progression d'une quête <<run updateQuestProgress("Sauver le village", 3)>> // Incrémenter la progression d'une quête <<run incrementQuestProgress("Sauver le village")>> // Vérifier la progression d'une quête <<if getQuestProgress("Sauver le village") >= 3>> Le chef des bandits commence à s'inquiéter... <</if>> // Vérifier si une quête est complétée <<if isQuestCompleted("Sauver le village")>> Les villageois vous acclament en héros ! <</if>> // Marquer une quête comme complétée <<run completeQuest("Sauver le village")>>
[[Anal's sex]] <img width="100%" height="30%" src="MagicWorldOfBimbo/Intro/Bl-Elena/Anal/1.jpg"> [[Blowjob Amy]] <img width="100%" height="30%" src="MagicWorldOfBimbo/Village/Date/Park/BJ/0.jpg"> <<set $CheatCode = 1>>\ [[Talk with the Witch]] <video width="100%" height="30%" playsinline autoplay loop muted>\ <source src="MagicWorldOfBimbo/Forest/Witch/TitsJob/1.mp4" type="video/mp4"> </video> [[Sex after transform animals|FightForest1]] <img width="100%" height="30%" src="MagicWorldOfBimbo/Forest/level1/4.jpg">