User prompt
Re-haz todo lo que es la transición del menú de inicio a contenido del juego ya que tiene errores donde se ve el fondo del inicio cuando esta en medio de la transición y consume muchas lineas Haz lo siguiente como transición: - El titulo se suelta para la izquierda como un cuadro - Se cae al piso rapido - ocurre una transición negra mientras el cuadro se cae - La transición se desvanece y se muestra el contenido del juego
User prompt
Re-haz todo lo que es la transición del menú de inicio a contenido del juego ya que tiene errores donde se ve el fondo del inicio cuando esta en medio de la transición y consume muchas lineas
User prompt
Re-haz todo lo que es la transición del menú de inicio a contenido del juego ya que tiene errores donde se ve el fondo del inicio cuando esta en medio de la transición y consume muchas lineas ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
separa transición de Startscreen
User prompt
Please fix the bug: 'Timeout.tick error: startBg is not defined' in or related to this line: 'tween(gameContent, startBg, {' Line Number: 270 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
arregla lo siguiente: Background del inicio no se debe ver, la transición oscura si
Code edit (3 edits merged)
Please save this source code
User prompt
mejora la transición del inicio al menu del juego ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 's is not defined' in or related to this line: 's;' Line Number: 947
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'titleColors is not defined' in or related to this line: 'var titleColor = titleColors[categoryId] || 0xFFF7B2;' Line Number: 1105
User prompt
Please fix the bug: 'titleColor is not defined' in or related to this line: 'var titleText = new Text2(translatedTitle, {' Line Number: 1106
Code edit (3 edits merged)
Please save this source code
User prompt
Elimina todas las notas (//) de la sección code por partes
User prompt
Elimina las notas (//) restantes
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot use 'in' operator to search for 'alpha' in null' in or related to this line: 'tween(startScreen, {' Line Number: 326
User prompt
Please fix the bug: 'TypeError: Cannot use 'in' operator to search for 'alpha' in null' in or related to this line: 'tween(startScreen, {' Line Number: 324 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: Cannot use 'in' operator to search for 'alpha' in null' in or related to this line: 'tween(startScreen, {' Line Number: 324 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { persistLanguage: true, language: "en" }); /**** * Classes ****/ var MusicNameOverlay = Container.expand(function () { var self = Container.call(this); var musicText = new Text2("", { size: 110, fill: 0x000000, align: "center", dropShadow: true, dropShadowColor: 0x000000, dropShadowDistance: 3, dropShadowAlpha: 0.5 }); musicText.anchor.set(0.5, 0.5); musicText.x = 2048 / 2; musicText.y = 150; musicText.alpha = 0; self.addChild(musicText); var musicNames = { en: ["Slime Symphony No. 5", "Bouncy Beats", "Gelatinous Groove", "Blob Bop", "Jiggle Jam", "Slimy Sonata", "Elasticity Etude", "Viscous Vibes", "Gooey Grooves", "Jiggly Jazz", "Will anyone read this?"], es: ["Sinfonía de Slime No. 5", "Ritmos Rebotantes", "Ritmo Gelatinoso", "Bop de Burbuja", "Mermelada Temblorosa", "Sonata Viscosa", "Estudio Elastico", "Vibraciones Viscosas", "Ritmos Pegajosos", "Jazz Tembloroso", "¿Alguien leerá esto?"] }; self.showRandomName = function (language) { var names = musicNames[language] || musicNames.en; var randomName = names[Math.floor(Math.random() * names.length)]; tween.stop(musicText); musicText.setText(randomName); musicText.alpha = 0; musicText.y = 180; tween(musicText, { alpha: 1, y: 150 }, { duration: 800, easing: tween.easeOut, onFinish: function onFinish() { LK.setTimeout(function () { tween(musicText, { alpha: 0, y: 100 }, { duration: 1200, easing: tween.easeIn }); }, 3000); } }); }; return self; }); var Slime = Container.expand(function () { var self = Container.call(this); self.slimeAsset = self.attachAsset('ClasicSlime', { anchorX: 0.5, anchorY: 0.5 }); self.baseScale = 3.5; self.lastX = self.lastY = 0; self.baseX = 0; self.baseY = 0; self.setBasePosition = function (x, y) { self.baseX = x; self.baseY = y; self.x = x; self.y = y; }; self.update = function () { self.lastX = self.x; self.lastY = self.y; }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('Star', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 100 }); self.setColorByRarity = function (rarityLevel) { var colors = [0xaaaaaa, 0x8ab4f8, 0x52cca3, 0x1e88e5, 0x7e57c2, 0xab47bc, 0x8e24aa, 0x6a1b9a, 0x4a148c, 0x38006b]; starGraphics.tint = rarityLevel >= 1 && rarityLevel <= 10 ? colors[rarityLevel - 1] : colors[0]; self.glowIntensity = 0.2 + rarityLevel / 10; LK.setTimeout(function () { tween(starGraphics, { scaleX: 1 + self.glowIntensity * 0.1, scaleY: 1 + self.glowIntensity * 0.1 }, { duration: 1000 + rarityLevel * 100, easing: tween.easeInOut, repeat: -1, yoyo: true }); }, Math.random() * 500); }; return self; }); var StartScreen = Container.expand(function () { var self = Container.call(this); var startBg = self.attachAsset('BGInitial', { anchorX: 0, anchorY: 0, width: 2048, height: 2732 }); var titleImage = self.attachAsset('TittleAsset', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 - 300, scaleX: 1.2, scaleY: 1.2 }); self.interactive = true; self.down = function () { if (self.onStart) { if (autoStartTimer) { LK.clearTimeout(autoStartTimer); } LK.getSound('InterfazSound').play(); // Create transition screen var transition = new TransitionScreen(); self.addChild(transition); // Only execute the title animation if it exists if (titleImage) { // First make the title shift and rotate a bit (like being loosened) tween(titleImage, { rotation: 0.2, y: titleImage.y + 100 }, { duration: 400, // Faster first animation easing: tween.easeIn, onFinish: function onFinish() { // Then drop the title off screen quickly tween(titleImage, { y: 2732 + 500, rotation: 0.5 }, { duration: 800, // Faster falling animation easing: tween.easeIn, onFinish: function onFinish() { // Start the transition effect transition.startTransition(1000, function () { self.onStart(); }); } }); } }); } else { // If no title image, just do the transition transition.startTransition(1000, function () { self.onStart(); }); } } }; return self; }); var TransitionScreen = Container.expand(function () { var self = Container.call(this); // Dark overlay for transition var darkRect = self.attachAsset('transition', { anchorX: 0, anchorY: 0, width: 2048, height: 2732, alpha: 0 }); // Falling cube for transition effect var transitionCube = self.attachAsset('BGMenu', { anchorX: 0.5, anchorY: 0.5, width: 300, height: 300, alpha: 0 }); transitionCube.x = 2048 / 2; transitionCube.y = -300; transitionCube.rotation = 0; self.startTransition = function (duration, onComplete) { // First show the cube falling transitionCube.alpha = 1; tween(transitionCube, { y: 2732 + 300, rotation: Math.PI * 2, scaleX: 3, scaleY: 3 }, { duration: 800, easing: tween.easeIn, onUpdate: function onUpdate(progress) { // Start fading in the dark overlay at 30% of the animation if (progress > 0.3 && darkRect.alpha < 1) { darkRect.alpha = (progress - 0.3) / 0.7; } }, onFinish: function onFinish() { // Ensure dark overlay is fully visible darkRect.alpha = 1; // Wait a moment with the black screen LK.setTimeout(function () { // Call the completion callback if (onComplete) { onComplete(); } // Fade out the dark overlay after callback LK.setTimeout(function () { tween(darkRect, { alpha: 0 }, { duration: 500, easing: tween.easeOut }); }, 300); }, 500); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var isDayTime = true; var darkTint = 0x404060; function checkDayTime() { var now = new Date(); var hours = now.getHours(); return hours >= 6 && hours < 18; } function multiplyColors(color1, color2) { var r1 = color1 >> 16 & 0xFF; var g1 = color1 >> 8 & 0xFF; var b1 = color1 & 0xFF; var r2 = color2 >> 16 & 0xFF; var g2 = color2 >> 8 & 0xFF; var b2 = color2 & 0xFF; var r = Math.floor(r1 * r2 / 255); var g = Math.floor(g1 * g2 / 255); var b = Math.floor(b1 * b2 / 255); return r << 16 | g << 8 | b; } var gameContent = new Container(); gameContent.y = 0; gameContent.alpha = 0; gameContent.scale.set(0.5); var bgMenu = LK.getAsset('BGMenu', { anchorX: 0, anchorY: 0, x: 0, y: 2032 / 2, width: 2048, height: 3532 / 2 }); var bg = LK.getAsset('BG', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2032 / 2 }); var startScreen = new StartScreen(); var autoStartTimer = LK.setTimeout(function () { if (startScreen && startScreen.parent) { startScreen.down(); } }, 10000); startScreen.onStart = function () { // Reset game content position and scale before transition gameContent.alpha = 0; gameContent.scale.set(1); // Show game content with a simple fade in tween(gameContent, { alpha: 1 }, { duration: 500, easing: tween.easeOut }); // Remove start screen completely if (startScreen && startScreen.parent) { game.removeChild(startScreen); startScreen = null; } }; var interfaz = LK.getAsset('Interfaz', { anchorX: 0.5, anchorY: 0, width: 2048, height: 400 }); var sortButton = LK.getAsset('BotonExtras', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8, x: 800, y: -700 }); sortButton.interactive = true; sortButton.down = function () { LK.getSound('InterfazSound').play(); changeSortOrder(); }; var sortText = new Text2("★↑", { size: 90, fill: 0x000000 }); sortText.anchor.set(0.5, 0.5); sortText.x = sortButton.x; sortText.y = sortButton.y + 35; interfaz.x = bgMenu.width / 2; interfaz.y = bgMenu.y; var leftButton = LK.getAsset('BotonChange', { anchorX: 0.5, anchorY: 0.5, scaleX: -1, x: -800, y: interfaz.height / 2 }); leftButton.interactive = true; var rightButton = LK.getAsset('BotonChange', { anchorX: 0.5, anchorY: 0.5, x: 800, y: interfaz.height / 2 }); rightButton.interactive = true; var currentSlimeIndex = 0; var currentSortOrder = 0; var currentLanguage = storage.language; var languageButton = LK.getAsset('BotonExtras', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8, x: 800, y: -900 }); languageButton.interactive = true; languageButton.down = function () { LK.getSound('InterfazSound').play(); toggleLanguage(); }; var languageText = new Text2(currentLanguage.toUpperCase(), { size: 70, fill: 0x000000 }); languageText.anchor.set(0.5, 0.5); languageText.x = languageButton.x; languageText.y = languageButton.y + 35; var availableLanguages = ['en', 'es']; var translations = { sortLabels: { en: ["★↑", "★↓", "A-Z", "Z-A", "Size↑", "Size↓"], es: ["★↑", "★↓", "A-Z", "Z-A", "Tamaño↑", "Tamaño↓"] }, categoryTitles: { rarity: { en: "Rarity", es: "Rareza" }, size: { en: "Size", es: "Tamaño" }, history: { en: "History", es: "Historia" }, location: { en: "Location", es: "Ubicación" }, favoriteFood: { en: "Favorite Food", es: "Comida Favorita" }, ability: { en: "Ability", es: "Habilidad" }, stats: { en: "Stats", es: "Estadísticas" }, lifespan: { en: "Lifespan", es: "Esperanza de vida" } }, rarityNames: { 1: { en: "Common", es: "Común" }, 2: { en: "Uncommon", es: "Poco Común" }, 3: { en: "Infrequent", es: "Infrecuente" }, 4: { en: "Rare", es: "Raro" }, 5: { en: "Epic", es: "Épico" }, 6: { en: "Exceptional", es: "Excepcional" }, 7: { en: "Legendary", es: "Legendario" }, 8: { en: "Mythic", es: "Mítico" }, 9: { en: "Arcane", es: "Arcano" }, 10: { en: "Supreme", es: "Supremo" } }, sizeDescriptions: { tiny: { en: "Tiny", es: "Diminuto" }, small: { en: "Small", es: "Pequeño" }, medium: { en: "Medium", es: "Mediano" }, large: { en: "Large", es: "Grande" }, veryLarge: { en: "Very Large", es: "Muy Grande" }, enormous: { en: "Enormous", es: "Enorme" } }, statNames: { strength: { en: "Strength", es: "Fuerza" }, agility: { en: "Agility", es: "Agilidad" }, defense: { en: "Defense", es: "Defensa" }, magic: { en: "Magic", es: "Magia" }, luck: { en: "Luck", es: "Suerte" }, mysticism: { en: "Mysticism", es: "Misticismo" } } }; function updateLanguageUI() { languageText.setText(currentLanguage.toUpperCase()); var slimeData = SlimeInfo[currentSlimeIndex]; var displayName = slimeData['SlimeName' + (currentLanguage === 'es' ? 'Es' : '')] || slimeData.SlimeName; slimeNameText.setText(displayName); var sortLabels = translations.sortLabels[currentLanguage]; sortText.setText(sortLabels[currentSortOrder]); updateInfoPanel(); if (musicNameOverlay && musicNameOverlay.parent) { musicNameOverlay.showRandomName(currentLanguage); } } function toggleLanguage() { var currentIndex = availableLanguages.indexOf(currentLanguage); var nextIndex = (currentIndex + 1) % availableLanguages.length; currentLanguage = availableLanguages[nextIndex]; storage.language = currentLanguage; updateLanguageUI(); } function changeSortOrder() { currentSortOrder = (currentSortOrder + 1) % 6; var sortLabels = translations.sortLabels[currentLanguage] || translations.sortLabels.en; sortText.setText(sortLabels[currentSortOrder]); if (currentSortOrder === 0) { SlimeInfo.sort(function (a, b) { return a.Rarity - b.Rarity; }); } else if (currentSortOrder === 1) { SlimeInfo.sort(function (a, b) { return b.Rarity - a.Rarity; }); } else if (currentSortOrder === 2) { SlimeInfo.sort(function (a, b) { return (a.SlimeName || '').localeCompare(b.SlimeName || ''); }); } else if (currentSortOrder === 3) { SlimeInfo.sort(function (a, b) { return (b.SlimeName || '').localeCompare(a.SlimeName || ''); }); } else if (currentSortOrder === 4) { SlimeInfo.sort(function (a, b) { return (a.Size || 1.0) - (b.Size || 1.0); }); } else { SlimeInfo.sort(function (a, b) { return (b.Size || 1.0) - (a.Size || 1.0); }); } slimes = SlimeInfo.map(function (slime) { var slimeName = slime.SlimeName.replace(/\s+/g, ''); return slimeName; }); slimeNames = SlimeInfo.map(function (slime) { return slime.SlimeName; }); rarityValues = SlimeInfo.map(function (slime) { return slime.Rarity; }); currentSlimeIndex = 0; updateSlimeAndInfo(); } function wrapText(text, maxWidth, textSize) { if (!text) { return ""; } var words = text.split(' '); var wrappedText = '', line = ''; var charsPerLine = Math.floor(maxWidth / (textSize * 0.5)); for (var i = 0; i < words.length; i++) { var testLine = line + words[i] + ' '; if (testLine.length > charsPerLine) { wrappedText += line.trim() + '\n'; line = words[i] + ' '; } else { line = testLine; } } return wrappedText + line.trim(); } function sortSlimesByRarity(slimes) { return slimes.slice().sort(function (a, b) { return b.Rarity - a.Rarity; }); } var SlimeInfo = [{ SlimeName: 'Classic Slime', SlimeNameEs: 'Slime Clásico', Rarity: 1, Size: 1.0, History: 'The most common and friendly of all slimes, Clasic Slimes are believed to be the original form from which all other slimes evolved.', HistoryEs: 'El más común y amigable de todos los slimes, los Slimes Clásicos son considerados la forma original de la que evolucionaron todos los demás slimes.', Location: 'Meadows, gardens, and anywhere with fresh dew', LocationEs: 'Praderas, jardines y cualquier lugar con rocío fresco', FavoriteFood: 'Fresh grass and morning dew', FavoriteFoodEs: 'Hierba fresca y rocío de la mañana', Ability: 'Can split into two smaller slimes when threatened', AbilityEs: 'Puede dividirse en dos slimes más pequeños cuando se siente amenazado', Stats: { strength: 3, agility: 5, defense: 2, magic: 1, luck: 2, mysticism: 1 }, Lifespan: '5-8 years', LifespanEs: '5-8 años' }, { SlimeName: 'Snowy Slime', SlimeNameEs: 'Slime Nevado', Rarity: 2, Size: 0.9, History: 'Snowy Slimes are born from snowdrifts touched by moonlight. They are gentle and love cold climates.', HistoryEs: 'Los Slimes Nevados nacen de ventisqueros tocados por la luz de la luna. Son gentiles y aman los climas fríos.', Location: 'Snowfields, icy caves, and mountaintops', LocationEs: 'Campos nevados, cuevas heladas y cimas de montañas', FavoriteFood: 'Icicles and frozen berries', FavoriteFoodEs: 'Carámbanos y bayas congeladas', Ability: 'Can lower the temperature around them, freezing small puddles instantly', AbilityEs: 'Puede bajar la temperatura a su alrededor, congelando pequeños charcos instantáneamente', Stats: { strength: 3, agility: 2, defense: 8, magic: 6, luck: 4, mysticism: 5 }, Lifespan: '12-15 years', LifespanEs: '12-15 años' }, { SlimeName: 'Water Slime', SlimeNameEs: 'Slime Acuático', Rarity: 3, Size: 0.8, History: 'Formed from enchanted raindrops, Water Slimes are playful and quick, often found near rivers.', HistoryEs: 'Formados a partir de gotas de lluvia encantadas, los Slimes Acuáticos son juguetones y rápidos, a menudo encontrados cerca de ríos.', Location: 'Lakes, rivers, and rainy forests', LocationEs: 'Lagos, ríos y bosques lluviosos', FavoriteFood: 'Pure spring water and water lilies', FavoriteFoodEs: 'Agua pura de manantial y nenúfares', Ability: 'Can merge with water to become invisible and move swiftly', AbilityEs: 'Puede fusionarse con el agua para volverse invisible y moverse rápidamente', Stats: { strength: 2, agility: 7, defense: 1, magic: 5, luck: 4, mysticism: 3 }, Lifespan: '8-12 years', LifespanEs: '8-12 años' }, { SlimeName: 'Rock Slime', SlimeNameEs: 'Slime Rocoso', Rarity: 4, Size: 1.3, History: 'Rock Slimes are the result of slimes living near mineral-rich caves, slowly absorbing stone and earth.', HistoryEs: 'Los Slimes Rocosos son el resultado de slimes que viven cerca de cuevas ricas en minerales, absorbiendo lentamente piedra y tierra.', Location: 'Caves, rocky hills, and mountain bases', LocationEs: 'Cuevas, colinas rocosas y bases de montañas', FavoriteFood: 'Pebbles and mineral-rich soil', FavoriteFoodEs: 'Guijarros y tierra rica en minerales', Ability: 'Can harden their bodies to become nearly unbreakable for short periods', AbilityEs: 'Puede endurecer su cuerpo para volverse casi irrompible por cortos períodos', Stats: { strength: 8, agility: 1, defense: 9, magic: 2, luck: 3, mysticism: 1 }, Lifespan: '20-30 years', LifespanEs: '20-30 años' }, { SlimeName: 'Fire Slime', SlimeNameEs: 'Slime de Fuego', Rarity: 5, Size: 1.1, History: 'Fire Slimes are born from the embers of ancient volcanoes, carrying a spark of elemental fire within.', HistoryEs: 'Los Slimes de Fuego nacen de las brasas de antiguos volcanes, llevando una chispa de fuego elemental en su interior.', Location: 'Volcanoes, hot springs, and scorched plains', LocationEs: 'Volcanes, aguas termales y llanuras calcinadas', FavoriteFood: 'Charcoal and spicy peppers', FavoriteFoodEs: 'Carbón y pimientos picantes', Ability: 'Can ignite themselves to ward off predators and light dark places', AbilityEs: 'Puede encenderse para ahuyentar a los depredadores e iluminar lugares oscuros', Stats: { strength: 6, agility: 3, defense: 4, magic: 7, luck: 2, mysticism: 6 }, Lifespan: '10-15 years' }, { SlimeName: 'Shadow Slime', SlimeNameEs: 'Slime de Sombra', Rarity: 6, Size: 1.2, History: 'Shadow Slimes are born in places untouched by light, absorbing the darkness around them.', HistoryEs: 'Los Slimes de Sombra nacen en lugares donde la luz nunca llega, absorbiendo la oscuridad a su alrededor.', Location: 'Caverns, abandoned ruins, and deep forests at night', LocationEs: 'Cavernas, ruinas abandonadas y bosques profundos durante la noche', FavoriteFood: 'Shadows and nocturnal insects', FavoriteFoodEs: 'Sombras e insectos nocturnos', Ability: 'Can blend into shadows and become nearly invisible', AbilityEs: 'Puede fundirse con las sombras y volverse casi invisible', Stats: { strength: 5, agility: 8, defense: 3, magic: 9, luck: 6, mysticism: 8 }, Lifespan: '30-40 years', LifespanEs: '30-40 años' }, { SlimeName: 'Forest Slime', SlimeNameEs: 'Slime de Bosque', Rarity: 7, Size: 1.15, History: 'Forest Slimes are the guardians of ancient woods, formed from moss and enchanted leaves.', HistoryEs: 'Los Slimes de Bosque son guardianes de los bosques antiguos, formados de musgo y hojas encantadas.', Location: 'Dense forests, groves, and magical thickets', LocationEs: 'Bosques densos, arboledas y matorrales mágicos', FavoriteFood: 'Moss, leaves, and wildflowers', FavoriteFoodEs: 'Musgo, hojas y flores silvestres', Ability: 'Can heal plants and accelerate their growth', AbilityEs: 'Puede curar plantas y acelerar su crecimiento', Stats: { strength: 4, agility: 6, defense: 5, magic: 8, luck: 5, mysticism: 7 }, Lifespan: '25-35 years', LifespanEs: '25-35 años' }, { SlimeName: 'Beast Slime', SlimeNameEs: 'Slime Bestia', Rarity: 8, Size: 1.4, History: 'Beast Slimes are fierce and wild, believed to have evolved by mimicking the strongest animals in their environment.', HistoryEs: 'Los Slimes Bestia son feroces y salvajes, se cree que evolucionaron imitando a los animales más fuertes de su entorno.', Location: 'Savannahs, jungles, and wild plains', LocationEs: 'Sabanas, selvas y llanuras salvajes', FavoriteFood: 'Raw meat and wild fruits', FavoriteFoodEs: 'Carne cruda y frutas silvestres', Ability: 'Can roar to intimidate foes and temporarily boost their own strength', AbilityEs: 'Puede rugir para intimidar enemigos y aumentar temporalmente su fuerza', Stats: { strength: 9, agility: 7, defense: 7, magic: 3, luck: 8, mysticism: 2 }, Lifespan: '18-25 years', LifespanEs: '18-25 años' }, { SlimeName: 'Lucky Slime', SlimeNameEs: 'Slime de la Suerte', Rarity: 8, Size: 0.95, History: 'Lucky Slimes are said to be born during rare celestial events, bringing fortune to those who find them.', HistoryEs: 'Se dice que los Slimes de la Suerte nacen durante eventos celestiales raros, trayendo fortuna a quienes los encuentran.', Location: 'Rainbow fields, clover patches, and near waterfalls', LocationEs: 'Campos de arcoíris, parches de tréboles y cerca de cascadas', FavoriteFood: 'Four-leaf clovers and golden apples', FavoriteFoodEs: 'Tréboles de cuatro hojas y manzanas doradas', Ability: 'Can increase the luck of nearby creatures and find hidden treasures', AbilityEs: 'Puede aumentar la suerte de criaturas cercanas y encontrar tesoros ocultos', Stats: { strength: 3, agility: 5, defense: 2, magic: 6, luck: 10, mysticism: 4 }, Lifespan: '10-20 years', LifespanEs: '10-20 años' }, { SlimeName: 'Runic Slime', SlimeNameEs: 'Slime Rúnico', Rarity: 9, Size: 1.25, History: 'Runic Slimes are ancient beings, their bodies inscribed with glowing runes of power.', HistoryEs: 'Los Slimes Rúnicos son seres antiguos, sus cuerpos están inscritos con runas brillantes de poder.', Location: 'Ancient temples, rune circles, and magical libraries', LocationEs: 'Templos antiguos, círculos de runas y bibliotecas mágicas', FavoriteFood: 'Enchanted stones and magical scrolls', FavoriteFoodEs: 'Piedras encantadas y pergaminos mágicos', Ability: 'Can cast simple spells and decipher ancient languages', AbilityEs: 'Puede lanzar hechizos simples y descifrar lenguas antiguas', Stats: { strength: 5, agility: 4, defense: 3, magic: 9, luck: 7, mysticism: 10 }, Lifespan: '50-100 years', LifespanEs: '50-100 años' }, { SlimeName: 'Divine Slime', SlimeNameEs: 'Slime Divino', Rarity: 10, Size: 1.5, History: 'Divine Slimes are legendary, said to descend from the heavens during times of great need.', HistoryEs: 'Los Slimes Divinos son legendarios, se dice que descienden de los cielos en tiempos de gran necesidad.', Location: 'Sacred groves, mountaintops, and places of worship', LocationEs: 'Arboledas sagradas, cimas de montañas y lugares de culto', FavoriteFood: 'Nectar from sacred flowers and pure spring water', FavoriteFoodEs: 'Néctar de flores sagradas y agua de manantial pura', Ability: 'Can heal wounds and purify water with a touch', AbilityEs: 'Puede curar heridas y purificar agua con solo tocarla', Stats: { strength: 7, agility: 4, defense: 6, magic: 10, luck: 10, mysticism: 9 }, Lifespan: 'Unknown, possibly eternal', LifespanEs: 'Desconocida, posiblemente eterna' }, { SlimeName: 'Fruit Slime', SlimeNameEs: 'Slime Fruta', Rarity: 5, Size: 1.05, History: 'Born from the essence of vibrant orchards, Fruit Slimes emerged when magical runoff seeped into ancient fruit groves.', HistoryEs: 'Nacidos de la esencia de huertos vibrantes, los Slimes Fruta surgieron cuando la magia se filtró en antiguos huertos de frutas.', Location: 'Orchards, fruit markets, and gardens with sweet-smelling blossoms', LocationEs: 'Huertos, mercados de frutas y jardines con flores fragantes', FavoriteFood: 'Overripe fruits and berry preserves', FavoriteFoodEs: 'Frutas demasiado maduras y conservas de bayas', Ability: 'Can change color based on the last fruit consumed, and releases a sweet aroma that calms nearby creatures', AbilityEs: 'Puede cambiar de color según la última fruta consumida y libera un aroma dulce que calma a las criaturas cercanas', Stats: { strength: 4, agility: 6, defense: 3, magic: 7, luck: 6, mysticism: 5 }, Lifespan: '15-20 years, longer if fed a varied diet of exotic fruits', LifespanEs: '15-20 años, más si se alimenta con una dieta variada de frutas exóticas' }, { SlimeName: 'Ghost Slime', SlimeNameEs: 'Slime Fantasma', Rarity: 7, Size: 1.1, History: 'Ghost Slimes formed when regular slimes wandered into haunted areas and absorbed spectral essence, gaining ethereal properties.', HistoryEs: 'Los Slimes Fantasma se formaron cuando slimes comunes vagaron por zonas embrujadas y absorbieron esencia espectral, obteniendo propiedades etéreas.', Location: 'Abandoned buildings, ancient ruins, and places with strong spiritual energy', LocationEs: 'Edificios abandonados, ruinas antiguas y lugares con fuerte energía espiritual', FavoriteFood: 'Emotions, particularly nostalgia and melancholy', FavoriteFoodEs: 'Emociones, especialmente nostalgia y melancolía', Ability: 'Can phase through solid objects and temporarily become invisible when threatened', AbilityEs: 'Puede atravesar objetos sólidos y volverse invisible temporalmente cuando se siente amenazado', Stats: { strength: 2, agility: 7, defense: 3, magic: 9, luck: 6, mysticism: 8 }, Lifespan: 'Potentially immortal, though they can fade away if they lose their spectral essence', LifespanEs: 'Potencialmente inmortal, aunque pueden desvanecerse si pierden su esencia espectral' }, { SlimeName: 'King Slime', SlimeNameEs: 'Rey Slime', Rarity: 9, Size: 1.6, History: 'The legendary King Slime is said to be born once a century when a slime absorbs royal essence from an ancient crown.', HistoryEs: 'Se dice que el legendario Rey Slime nace una vez cada siglo cuando un slime absorbe la esencia real de una corona antigua.', Location: 'Hidden chambers in royal castles and within the deepest parts of enchanted forests', LocationEs: 'Cámaras ocultas en castillos reales y en las partes más profundas de bosques encantados', FavoriteFood: 'Precious metals and gems, particularly gold and rubies', FavoriteFoodEs: 'Metales preciosos y gemas, especialmente oro y rubíes', Ability: 'Can command lesser slimes and temporarily grow to massive size, becoming nearly invulnerable', AbilityEs: 'Puede comandar slimes menores y crecer temporalmente a un tamaño masivo, volviéndose casi invulnerable', Stats: { strength: 8, agility: 4, defense: 8, magic: 7, luck: 7, mysticism: 9 }, Lifespan: 'Over 200 years, with some specimens reported to live for millennia', LifespanEs: 'Más de 200 años, con algunos ejemplares reportados viviendo milenios' }, { SlimeName: 'Golden Slime', SlimeNameEs: 'Slime Dorado', Rarity: 10, Size: 1.35, History: 'Golden Slimes are incredibly rare mutations that occur when a slime is exposed to concentrated alchemical gold for generations.', HistoryEs: 'Los Slimes Dorados son mutaciones increíblemente raras que ocurren cuando un slime es expuesto a oro alquímico concentrado durante generaciones.', Location: 'Ancient treasure vaults, alchemist laboratories, and the hearts of mountains rich with gold deposits', LocationEs: 'Antiguas bóvedas de tesoros, laboratorios de alquimistas y el corazón de montañas ricas en oro', FavoriteFood: 'Gold dust and magical essences', FavoriteFoodEs: 'Polvo de oro y esencias mágicas', Ability: 'Turns objects it consumes partially to gold and can detect precious metals at great distances', AbilityEs: 'Convierte parcialmente en oro los objetos que consume y puede detectar metales preciosos a grandes distancias', Stats: { strength: 6, agility: 3, defense: 9, magic: 8, luck: 10, mysticism: 8 }, Lifespan: 'Virtually immortal as long as they consume small amounts of gold regularly', LifespanEs: 'Prácticamente inmortal mientras consuma pequeñas cantidades de oro regularmente' }]; SlimeInfo = sortSlimesByRarity(SlimeInfo); slimes = SlimeInfo.map(function (slime, index) { var slimeName = slime.SlimeName.replace(/\s+/g, ''); return slimeName; }); var slimeNames = SlimeInfo.map(function (slime) { return slime.SlimeName; }); var slimeNamesEs = SlimeInfo.map(function (slime) { return slime.SlimeNameEs || slime.SlimeName; }); var rarityValues = SlimeInfo.map(function (slime) { return slime.Rarity; }); var histories = SlimeInfo.map(function (slime) { return slime.History; }); var locations = SlimeInfo.map(function (slime) { return slime.Location; }); var favoriteFoods = SlimeInfo.map(function (slime) { return slime.FavoriteFood; }); var abilities = SlimeInfo.map(function (slime) { return slime.Ability; }); var stats = SlimeInfo.map(function (slime) { return slime.Stats; }); var lifespans = SlimeInfo.map(function (slime) { return slime.Lifespan; }); var slimeNameText = new Text2(slimeNames[currentSlimeIndex], { size: 100, fill: 0xFFFFFF }); slimeNameText.anchor.set(0.5, 0.5); slimeNameText.x = 0; slimeNameText.y = interfaz.height / 2; var slime = new Slime(); var centerX = bg.width / 2; var centerY = bg.height / 2 + 220; slime.setBasePosition(centerX, centerY); slime.alpha = 1; slime.scaleX = 1; slime.scaleY = 1; var musicTracks = ['BGSong', 'BGSong2', 'BGSong3', 'BGSong4', 'BGSong5', 'BGsong6']; var currentMusicIndex = -1; var musicNameOverlay = new MusicNameOverlay(); function playRandomMusic() { var newIndex; do { newIndex = Math.floor(Math.random() * musicTracks.length); } while (newIndex === currentMusicIndex && musicTracks.length > 1); currentMusicIndex = newIndex; LK.playMusic(musicTracks[currentMusicIndex]); if (musicNameOverlay) { musicNameOverlay.showRandomName(currentLanguage); } } playRandomMusic(); LK.setInterval(playRandomMusic, 100000); var infoPanelHeight = bgMenu.height - interfaz.height - 40; var infoPanelWidth = bgMenu.width; var infoPanelY = bgMenu.y + interfaz.height + 20; var infoPanelX = bgMenu.x + (bgMenu.width - infoPanelWidth) / 2; var infoPanel = new Container(); infoPanel.x = infoPanelX; infoPanel.y = infoPanelY; var infoCategories = [{ titleId: "rarity", get: function get(i) { var rarityValue = SlimeInfo[i].Rarity; this.currentRarityValue = rarityValue; return translations.rarityNames[rarityValue][currentLanguage]; } }, { titleId: "size", get: function get(i) { var sizeValue = SlimeInfo[i].Size || 1.0; var sizeKey; if (sizeValue <= 0.8) { sizeKey = "tiny"; } else if (sizeValue <= 0.95) { sizeKey = "small"; } else if (sizeValue <= 1.1) { sizeKey = "medium"; } else if (sizeValue <= 1.3) { sizeKey = "large"; } else if (sizeValue <= 1.5) { sizeKey = "veryLarge"; } else { sizeKey = "enormous"; } var sizeDescription = translations.sizeDescriptions[sizeKey][currentLanguage]; return sizeDescription + " (" + sizeValue.toFixed(2) + "x scale)"; } }, { titleId: "history", get: function get(i) { return currentLanguage === 'en' ? SlimeInfo[i].History : SlimeInfo[i].HistoryEs || SlimeInfo[i].History; } }, { titleId: "location", get: function get(i) { return currentLanguage === 'en' ? SlimeInfo[i].Location : SlimeInfo[i].LocationEs || SlimeInfo[i].Location; } }, { titleId: "favoriteFood", get: function get(i) { return currentLanguage === 'en' ? SlimeInfo[i].FavoriteFood : SlimeInfo[i].FavoriteFoodEs || SlimeInfo[i].FavoriteFood; } }, { titleId: "ability", get: function get(i) { return currentLanguage === 'en' ? SlimeInfo[i].Ability : SlimeInfo[i].AbilityEs || SlimeInfo[i].Ability; } }, { titleId: "stats", get: function get(i) { var s = SlimeInfo[i].Stats; function formatStat(name, value) { var barChars = "■".repeat(value); var emptyChars = "□".repeat(10 - value); var translatedName = translations.statNames[name.toLowerCase()][currentLanguage] || name; return translatedName + ": " + value + " [" + barChars + emptyChars + "]"; } var statText = ""; statText += formatStat("strength", s.strength) + "\n"; statText += formatStat("agility", s.agility) + "\n"; statText += formatStat("defense", s.defense) + "\n"; statText += formatStat("magic", s.magic) + "\n"; statText += formatStat("luck", s.luck) + "\n"; statText += formatStat("mysticism", s.mysticism); return statText; } }, { titleId: "lifespan", get: function get(i) { return currentLanguage === 'en' ? SlimeInfo[i].Lifespan : SlimeInfo[i].LifespanEs || SlimeInfo[i].Lifespan; } }]; var infoTextContainer = new Container(); infoTextContainer.x = 30; infoTextContainer.y = 30; function updateInfoPanel() { infoTextContainer.removeChildren(); var y = 0; for (var c = 0; c < infoCategories.length; c++) { if (c > 0) { y += 80; } var titleColors = { rarity: 0xFFD700, history: 0xCF9FFF, location: 0x98FB98, favoriteFood: 0xFF7F50, ability: 0x00BFFF, stats: 0xFF1493, lifespan: 0x00FA9A }; var categoryId = infoCategories[c].titleId; var titleColor = titleColors[categoryId] || 0xFFF7B2; var translatedTitle = translations.categoryTitles[categoryId][currentLanguage] || categoryId; var titleText = new Text2(translatedTitle, { size: 110, fill: titleColor, font: "GillSans-Bold", align: "center", dropShadow: true, dropShadowColor: 0x000000, dropShadowDistance: 3, dropShadowAlpha: 0.5 }); titleText.anchor.set(0.5, 0); titleText.x = infoPanelWidth / 2 - 30; titleText.y = y; infoTextContainer.addChild(titleText); y += titleText.height + 6; var categoryId = infoCategories[c].titleId; var infoContent = infoCategories[c].get(currentSlimeIndex); var wrappedText = infoContent; if (categoryId !== "stats") { wrappedText = wrapText(infoContent, infoPanelWidth - 60, 85); } var textColors = { rarity: 0xFFFACD, history: 0xE6E6FA, location: 0xF0FFF0, favoriteFood: 0xFFE4E1, ability: 0xE0FFFF, stats: 0xFFE4E1, lifespan: 0xF0FFFF }; var textColor = textColors[categoryId] || 0xFFFFFF; var infoText = new Text2(wrappedText, { size: 85, fill: textColor, font: "GillSans", align: categoryId === "stats" ? "left" : "center", dropShadow: true, dropShadowColor: 0x333333, dropShadowDistance: 2, dropShadowAlpha: 0.3 }); if (categoryId === "stats") { infoText.anchor.set(0.5, 0); infoText.x = infoPanelWidth / 2 - 30; } else { infoText.anchor.set(0.5, 0); infoText.x = infoPanelWidth / 2 - 30; } infoText.y = y + 20; infoTextContainer.addChild(infoText); if (categoryId === "rarity" && infoCategories[c].currentRarityValue) { var starContainer = new Container(); starContainer.x = infoPanelWidth / 2 - 30; starContainer.y = y + infoText.height + 40; var rarityValue = infoCategories[c].currentRarityValue; var starSpacing = 110, totalWidth = (rarityValue - 1) * starSpacing; var startX = -totalWidth / 2; for (var s = 0; s < rarityValue; s++) { var star = new Star(); star.x = startX + s * starSpacing; star.y = 20; star.alpha = 0; star.scale.x = star.scale.y = 0.5; star.setColorByRarity(rarityValue); starContainer.addChild(star); (function (targetStar, delay) { LK.setTimeout(function () { tween(targetStar, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 400, easing: tween.easeOut }); }, delay); })(star, s * 200); } infoTextContainer.addChild(starContainer); y += 80; } y += infoText.height + 24; } infoTextContainer.totalHeight = y; } updateInfoPanel(); var scrollOffset = 0; var maxScroll = 0; function updateScrollLimits() { maxScroll = Math.max(0, infoTextContainer.totalHeight - infoPanelHeight + 40 + 60); if (scrollOffset < 0) { scrollOffset = 0; } if (scrollOffset > maxScroll) { scrollOffset = maxScroll; } infoTextContainer.y = 30 - scrollOffset; } updateScrollLimits(); var isScrolling = false, lastScrollY = 0, scrollVelocity = 0, lastScrollTime = 0, scrollTweenActive = false, scrollTracker = []; infoPanel.interactive = true; infoPanel.down = function (x, y, obj) { isScrolling = true; lastScrollY = y; lastScrollTime = Date.now(); scrollTracker = []; }; infoPanel.move = function (x, y, obj) { if (isScrolling) { var dy = y - lastScrollY; scrollOffset -= dy; updateScrollLimits(); lastScrollY = y; } }; infoPanel.up = function (x, y, obj) { if (isScrolling) { isScrolling = false; updateScrollLimits(); } }; function createButtonHandler(direction) { return function (x, y, obj) { changeSlime(direction); updateInfoPanel(); updateScrollLimits(); }; } leftButton.down = createButtonHandler('prev'); rightButton.down = createButtonHandler('next'); function updateSlimeAndInfo() { var slimeData = SlimeInfo[currentSlimeIndex]; var displayName = slimeData['SlimeName' + (currentLanguage === 'es' ? 'Es' : '')] || slimeData.SlimeName; slimeNameText.setText(displayName); tween.stop(slime); tween(slime, { alpha: 0, scaleX: 0.8, scaleY: 0.8, rotation: -0.1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { var currentSlimeName = slimes[currentSlimeIndex]; if (slime.slimeAsset) { slime.removeChild(slime.slimeAsset); } slime.slimeAsset = slime.attachAsset(currentSlimeName, { anchorX: 0.5, anchorY: 0.5 }); if (currentSlimeName === 'ClassicSlime') { var randomR = Math.floor(Math.random() * 256); var randomG = Math.floor(Math.random() * 256); var randomB = Math.floor(Math.random() * 256); var randomTint = randomR << 16 | randomG << 8 | randomB; slime.slimeAsset.tint = randomTint; if (!isDayTime) { var smoothNightTint = multiplyColors(randomTint, 0x606080); slime.slimeAsset.tint = smoothNightTint; } } else if (!isDayTime && slime.slimeAsset) { slime.slimeAsset.tint = darkTint; } var sizeMultiplier = SlimeInfo[currentSlimeIndex].Size || 1.0; slime.slimeAsset.scale.set(slime.baseScale * sizeMultiplier); slime.x = slime.baseX; var yOffset = (sizeMultiplier - 1.0) * slime.slimeAsset.height * slime.baseScale * 0.5; slime.y = slime.baseY - yOffset; slime.alpha = 0; slime.scaleX = 0.3; slime.scaleY = 0.3; slime.rotation = 0.1; tween(slime, { alpha: 1, scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 400, easing: tween.easeOut, onFinish: function onFinish() { tween(slime, { scaleX: 0.8, scaleY: 0.8 }, { duration: 500, easing: tween.elasticOut, onFinish: function onFinish() {} }); } }); } }); updateInfoPanel(); scrollOffset = 0; updateScrollLimits(); infoTextContainer.alpha = 0; tween(infoTextContainer, { alpha: 1 }, { duration: 400, easing: tween.easeOut }); } function changeSlime(direction) { currentSlimeIndex = direction === 'next' ? (currentSlimeIndex + 1) % slimes.length : (currentSlimeIndex - 1 + slimes.length) % slimes.length; updateSlimeAndInfo(); } currentSortOrder = 0; SlimeInfo.sort(function (a, b) { return a.Rarity - b.Rarity; }); slimes = SlimeInfo.map(function (slime) { var slimeName = slime.SlimeName.replace(/\s+/g, ''); return slimeName; }); slimeNames = SlimeInfo.map(function (slime) { return slime.SlimeName; }); rarityValues = SlimeInfo.map(function (slime) { return slime.Rarity; }); currentSlimeIndex = 0; updateSlimeAndInfo(); updateLanguageUI(); isDayTime = checkDayTime(); applyDayNightEffect(); LK.setInterval(function () { var newIsDayTime = checkDayTime(); if (newIsDayTime !== isDayTime) { isDayTime = newIsDayTime; applyDayNightEffect(); } }, 60000); function applyDayNightEffect() { if (isDayTime) { bg.tint = 0xFFFFFF; if (slime && slime.slimeAsset) { slime.slimeAsset.tint = 0xFFFFFF; } } else { bg.tint = darkTint; if (slime && slime.slimeAsset) { slime.slimeAsset.tint = darkTint; } } } gameContent.addChild(bgMenu); gameContent.addChild(infoPanel); infoPanel.addChild(infoTextContainer); gameContent.addChild(bg); gameContent.addChild(interfaz); interfaz.addChild(leftButton); interfaz.addChild(rightButton); interfaz.addChild(slimeNameText); interfaz.addChild(sortButton); interfaz.addChild(sortText); interfaz.addChild(languageButton); interfaz.addChild(languageText); gameContent.addChild(slime); gameContent.addChild(musicNameOverlay); game.addChild(gameContent); game.addChild(startScreen);
===================================================================
--- original.js
+++ change.js
@@ -128,69 +128,106 @@
if (autoStartTimer) {
LK.clearTimeout(autoStartTimer);
}
LK.getSound('InterfazSound').play();
+ // Create transition screen
var transition = new TransitionScreen();
- self.addChild(transition); // Add to start screen initially
- // Start the transition: Fade in, call onStart, then fade out.
- transition.startTransition(500, 500, function () {
- // Fade In complete callback
- // Move transition to game stage so it stays on top
- if (transition.parent) {
- transition.parent.removeChild(transition);
- }
- game.addChild(transition); // Add to top level game stage
- // Trigger the game content loading/animation
- self.onStart();
- }, function () {
- // Fade Out complete callback
- // Clean up transition screen after it fades out
- if (transition.parent) {
- transition.parent.removeChild(transition);
- }
- transition = null; // Allow garbage collection
- });
+ self.addChild(transition);
+ // Only execute the title animation if it exists
+ if (titleImage) {
+ // First make the title shift and rotate a bit (like being loosened)
+ tween(titleImage, {
+ rotation: 0.2,
+ y: titleImage.y + 100
+ }, {
+ duration: 400,
+ // Faster first animation
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ // Then drop the title off screen quickly
+ tween(titleImage, {
+ y: 2732 + 500,
+ rotation: 0.5
+ }, {
+ duration: 800,
+ // Faster falling animation
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ // Start the transition effect
+ transition.startTransition(1000, function () {
+ self.onStart();
+ });
+ }
+ });
+ }
+ });
+ } else {
+ // If no title image, just do the transition
+ transition.startTransition(1000, function () {
+ self.onStart();
+ });
+ }
}
};
return self;
});
var TransitionScreen = Container.expand(function () {
var self = Container.call(this);
+ // Dark overlay for transition
var darkRect = self.attachAsset('transition', {
anchorX: 0,
anchorY: 0,
width: 2048,
height: 2732,
alpha: 0
});
- self.interactive = true; // Prevent clicks passing through during transition
- self.startTransition = function (fadeInDuration, fadeOutDuration, onFadeInComplete, onFadeOutComplete) {
- tween.stop(darkRect); // Stop any previous tweens
- darkRect.alpha = 0;
- // 1. Fade In
- tween(darkRect, {
- alpha: 1.0
+ // Falling cube for transition effect
+ var transitionCube = self.attachAsset('BGMenu', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 300,
+ height: 300,
+ alpha: 0
+ });
+ transitionCube.x = 2048 / 2;
+ transitionCube.y = -300;
+ transitionCube.rotation = 0;
+ self.startTransition = function (duration, onComplete) {
+ // First show the cube falling
+ transitionCube.alpha = 1;
+ tween(transitionCube, {
+ y: 2732 + 300,
+ rotation: Math.PI * 2,
+ scaleX: 3,
+ scaleY: 3
}, {
- duration: fadeInDuration || 500,
- easing: tween.easeInOut,
- onFinish: function onFinish() {
- // 2. Call the completion callback (e.g., to start loading/showing next screen)
- if (onFadeInComplete) {
- onFadeInComplete();
+ duration: 800,
+ easing: tween.easeIn,
+ onUpdate: function onUpdate(progress) {
+ // Start fading in the dark overlay at 30% of the animation
+ if (progress > 0.3 && darkRect.alpha < 1) {
+ darkRect.alpha = (progress - 0.3) / 0.7;
}
- // 3. Fade Out
- tween(darkRect, {
- alpha: 0.0
- }, {
- duration: fadeOutDuration || 500,
- easing: tween.easeInOut,
- onFinish: function onFinish() {
- // 4. Call final completion callback
- if (onFadeOutComplete) {
- onFadeOutComplete();
- }
+ },
+ onFinish: function onFinish() {
+ // Ensure dark overlay is fully visible
+ darkRect.alpha = 1;
+ // Wait a moment with the black screen
+ LK.setTimeout(function () {
+ // Call the completion callback
+ if (onComplete) {
+ onComplete();
}
- });
+ // Fade out the dark overlay after callback
+ LK.setTimeout(function () {
+ tween(darkRect, {
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ }, 300);
+ }, 500);
}
});
};
return self;
@@ -251,25 +288,22 @@
startScreen.down();
}
}, 10000);
startScreen.onStart = function () {
- // Game content is now revealed by the transition screen fading out.
- // We just need to make sure gameContent is ready (alpha=1, scale=1).
- // The tween might still be useful for a subtle entrance effect *during* the fade-out.
+ // Reset game content position and scale before transition
+ gameContent.alpha = 0;
+ gameContent.scale.set(1);
+ // Show game content with a simple fade in
tween(gameContent, {
- alpha: 1,
- scaleX: 1,
- scaleY: 1
+ alpha: 1
}, {
duration: 500,
- // Match fadeOutDuration of transition? Or slightly longer?
easing: tween.easeOut
- // No onFinish needed here for removing startScreen
});
- // Remove startScreen immediately, it's hidden by the transition overlay
+ // Remove start screen completely
if (startScreen && startScreen.parent) {
game.removeChild(startScreen);
- startScreen = null; // Allow garbage collection
+ startScreen = null;
}
};
var interfaz = LK.getAsset('Interfaz', {
anchorX: 0.5,
Star cartoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime verde RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime rojo prendido fuego RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime RPG amarillo y divino con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime fantasmal RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime blanco con una moneda brillante en la frente RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime gris RPG con rocas en su espalda. Estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime RPG nevado con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime de agua RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime bestia peludo RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime morado con runas magicas RPG. Estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Un slime angelical RPG con estilo suave y simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Fullscreen medieval landscape banner, 16:9, high definition, for a game titled "Slime Bestiary". Medieval forest with multiple colored slimes. No text on banner!