User prompt
BAJALOS MUCHO MAS, NO LOS ESTAS BAJANDO TOTALMENTE
User prompt
mas, y tambien baja a la misma altura a player
User prompt
Coloca a demostrados, mas abajo en la pantalla de juego
User prompt
Pero de abajo ahcia arriba,e sta muy arriba
User prompt
Podrias colocar a ambos personajes mas abajo? aproximadamente a una altura de 1 tercio d ela altura total de la pantalla
User prompt
Coloca a los personajes mas abajo
User prompt
Estam demasiado grandes, al igual que lo que estaba junto al segundo personaje que es la mesira no la moviste junto con el.
User prompt
Podrias ajustar que los personajes esten alineados y en la parte de en medio de la pantalla? Estan algo descuadrados, y hazlos el triple de grande aprox, y usa la musica de fondo
User prompt
AL Puedes agregar un fondo de assets? Ya yo lo personalizo, y nececito que el boton también sea un assets, y que le aumentes el tamaño de detección, al mismo que tenga el assets que asignare. Quiero que tambien pongas un temporizador de 60 segundos para que en cada juego lo intentes, y que salgan dos assets diferentes, uno para victoria y otro con la derrota junto a las estadísticas
User prompt
Cambia el sistema de puntuación, ahora tienes que llegar a 10 toques, y si te cacha te quita vidas, las cuales deberan ser 3 corazones en la parte superior. Solo quiero que funcione el boton de “pico pico” si se preciona en el area del boton, no en toda la pantalla
User prompt
No esta rotando correctamente, es en el otro eje, y no veo el boton de “pico pico” ni la barra que se va a ir llenando.
User prompt
El personaje al que tocamos debe estar volteando solo hacia nosotros y al lado contrario, no irse debajo. Aparte haszlos mucho mas grandes, son muy pequeños
User prompt
Me gusta, pero quiero que el velocidad para tocarlo sea mas rapida, aparte en un POV el juego
Code edit (1 edits merged)
Please save this source code
User prompt
Picotina en Sam's
Initial prompt
Título provisional del juego: “Picotina en Sam’s” Género: Casual / Humorístico / Sigilo ⸻ Descripción general: El jugador toma el rol de una empleada en una tienda tipo Sam’s Club o Costco. Su objetivo es picar juguetonamente a un compañero demostrador (demo) en las costillas sin que éste la descubra. Cada toque exitoso llena una barra de progreso. Si la mantiene al máximo durante 10 segundos, el jugador gana. Sin embargo, si el compañero la descubre intentando picarlo, la barra disminuye. ⸻ Personajes: • Personaje Jugador (PJ): • Vista en primera o tercera persona (se recomienda en tercera persona, pero solo visible parcialmente, por ejemplo, una mano y una gorra). • Género femenino. • Estilo visual: caricaturesco o semi realista. • Único elemento visible: gorra (posiblemente personalizable en el futuro). • Compañero Demo (NPC): • Lleva el uniforme característico: gorra verde, mandil verde, polo blanca de manga corta, pantalón negro. • Tiene animaciones de atención al cliente, caminar, mirar a los lados, distraerse, etc. ⸻ Mecánica principal: • El objetivo es picar las costillas del demo sin ser visto. • El picoteo no es inmediato, sino que se realiza con un gesto lento de acercamiento (como una barra que se va llenando conforme se acerca el dedo). • Si el jugador logra tocar, aparece la palabra “¡Pico, pico, pico!” tres veces alrededor del NPC en forma triangular con estilo decorativo. • Cada picoteo exitoso aumenta una barra de progreso. • Si el demo detecta el intento (está mirando al jugador o se voltea mientras se acerca el dedo): • La barra de progreso disminuye. • El demo puede lanzar una línea de advertencia o molestia (”¡Ya te vi!”, etc.). • El jugador gana si logra mantener la barra llena por 10 segundos consecutivos. • El jugador acumula puntos por cada picoteo exitoso, que pueden ser usados para mejoras estéticas (como nuevos tipos de gorra o animaciones). ⸻ Controles (versión táctil): • Toque lento y mantenido en pantalla: acercamiento progresivo del dedo al objetivo. • Soltar en el momento exacto: realiza el picoteo. • Feedback visual: animación de la mano/dedo, expresión del demo, aparición de “¡Pico, pico, pico!” en pantalla. • Indicadores visuales: barra de progreso, barra de detección del NPC (como en juegos de sigilo), indicadores de dirección de la vista del demo. ⸻ Extras recomendados (opcional para fases futuras): • Modos de dificultad (el demo se voltea más o menos rápido). • Modo contrarreloj o retos diarios. • Tienda de cosméticos para personalización (gorras, uñas, animaciones). • Tabla de puntuación o logros.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Demonstrator = Container.expand(function () { var self = Container.call(this); var demoGraphics = self.attachAsset('demonstrator', { anchorX: 0.5, anchorY: 1.0, scaleX: 2.5, scaleY: 2.5 }); self.lookDirection = 0; // 0 = forward, 1 = left, 2 = right, 3 = back self.lookTimer = 0; self.nextLookTime = 120; // 2 seconds at 60fps self.isDistracted = false; self.distractionTimer = 0; self.canDetectPlayer = function () { return !self.isDistracted && self.lookDirection === 0; }; self.update = function () { self.lookTimer++; if (self.isDistracted) { self.distractionTimer--; if (self.distractionTimer <= 0) { self.isDistracted = false; } } else { if (self.lookTimer >= self.nextLookTime) { self.lookTimer = 0; self.lookDirection = Math.floor(Math.random() * 2) * 3; // 0 or 3 (forward or back) self.nextLookTime = 60 + Math.random() * 180; // 1-4 seconds // Rotate based on look direction switch (self.lookDirection) { case 0: demoGraphics.scale.x = Math.abs(demoGraphics.scale.x); break; // forward case 3: demoGraphics.scale.x = -Math.abs(demoGraphics.scale.x); break; // back } // Random distraction if (Math.random() < 0.3) { self.isDistracted = true; self.distractionTimer = 60 + Math.random() * 120; // 1-3 seconds } } } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 1.0, scaleX: 2.5, scaleY: 2.5 }); self.isApproaching = false; self.approachProgress = 0; self.targetX = 0; self.targetY = 0; self.startX = 0; self.startY = 0; self.startApproach = function (targetX, targetY) { self.isApproaching = true; self.approachProgress = 0; self.targetX = targetX; self.targetY = targetY; self.startX = self.x; self.startY = self.y; }; self.stopApproach = function () { self.isApproaching = false; self.approachProgress = 0; }; self.update = function () { if (self.isApproaching) { self.approachProgress += 0.08; if (self.approachProgress > 1) { self.approachProgress = 1; } // Move towards target quickly var lerpX = self.startX + (self.targetX - self.startX) * self.approachProgress; var lerpY = self.startY + (self.targetY - self.startY) * self.approachProgress; self.x = lerpX; self.y = lerpY; } }; return self; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('progress_bg', { anchorX: 0.5, anchorY: 0.5 }); var fill = self.attachAsset('progress_fill', { anchorX: 0, anchorY: 0.5 }); fill.x = -200; // Start at left edge of bg fill.width = 0; self.progress = 0; // 0 to 1 self.setProgress = function (value) { self.progress = Math.max(0, Math.min(1, value)); fill.width = 400 * self.progress; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf5f5dc }); /**** * Game Code ****/ // Game state variables var pokesCount = 0; var lives = 3; var fullProgressTimer = 0; var gameWon = false; var gameOver = false; var isPlayerApproaching = false; var lastPokeTime = 0; var gameTimer = 60 * 60; // 60 seconds at 60fps // Create background var background = game.addChild(LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5 })); background.x = 1024; background.y = 1366; // Start background music LK.playMusic('Romantic'); // Create warehouse floor var floor = game.addChild(LK.getAsset('warehouse_floor', { anchorX: 0.5, anchorY: 1.0 })); floor.x = 1024; floor.y = 2500; // Create demo table var table = game.addChild(LK.getAsset('demo_table', { anchorX: 0.5, anchorY: 1.0 })); table.x = 1024 + 200; // Position with demonstrator table.y = 2500; // Same height as demonstrator // Create characters - centered and aligned in middle of screen var player = game.addChild(new Player()); player.x = 1024 - 200; // Center screen minus offset for spacing player.y = 2500; // Much lower on screen, near bottom var demonstrator = game.addChild(new Demonstrator()); demonstrator.x = 1024 + 200; // Center screen plus offset for spacing demonstrator.y = 2500; // Much lower on screen, near bottom // Create progress bar var progressBar = new ProgressBar(); LK.gui.top.addChild(progressBar); progressBar.y = 200; // Create UI text var instructionText = new Text2('Hold to approach, release to poke!', { size: 60, fill: 0x333333 }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); instructionText.y = 100; // Create poke button var pokeButton = LK.getAsset('poke_button', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.center.addChild(pokeButton); pokeButton.y = 300; pokeButton.alpha = 0.7; // Create larger detection area for poke button var pokeButtonHitArea = new Container(); var hitRect = LK.getAsset('poke_button', { anchorX: 0.5, anchorY: 0.5 }); hitRect.alpha = 0; // Invisible hit area pokeButtonHitArea.addChild(hitRect); LK.gui.center.addChild(pokeButtonHitArea); pokeButtonHitArea.y = 300; var progressText = new Text2('Keep bar full for 10 seconds to win!', { size: 50, fill: 0x666666 }); progressText.anchor.set(0.5, 0); LK.gui.top.addChild(progressText); progressText.y = 400; function updateLivesDisplay() { for (var i = 0; i < heartTexts.length; i++) { heartTexts[i].alpha = i < lives ? 1.0 : 0.3; } } function updatePokesDisplay() { pokesText.setText('Pokes: ' + pokesCount + '/10'); progressBar.setProgress(pokesCount / 10); } var timerText = new Text2('60', { size: 80, fill: 0x4CAF50 }); timerText.anchor.set(0.5, 0); LK.gui.top.addChild(timerText); timerText.y = 500; function updateTimerDisplay() { var seconds = Math.ceil(gameTimer / 60); timerText.setText(seconds.toString()); if (seconds <= 10) { timerText.fill = 0xFF5722; // Red color for last 10 seconds } } // Create hearts for lives var heartTexts = []; for (var i = 0; i < 3; i++) { var heart = new Text2('♥', { size: 60, fill: 0xFF1744 }); heart.anchor.set(0.5, 0); heart.x = 150 + i * 80; heart.y = 50; LK.gui.topLeft.addChild(heart); heartTexts.push(heart); } // Create pokes counter var pokesText = new Text2('Pokes: 0/10', { size: 60, fill: 0x333333 }); pokesText.anchor.set(0.5, 0); LK.gui.top.addChild(pokesText); pokesText.y = 300; // Pico celebration effects var picoTexts = []; function createPicoEffect() { for (var i = 0; i < 3; i++) { var angle = i * 120 * Math.PI / 180; var distance = 150; var picoText = new Text2('¡Pico!', { size: 40, fill: 0xFFEB3B }); picoText.anchor.set(0.5, 0.5); picoText.x = demonstrator.x + Math.cos(angle) * distance; picoText.y = demonstrator.y + Math.sin(angle) * distance; picoText.alpha = 0; game.addChild(picoText); picoTexts.push(picoText); tween(picoText, { alpha: 1, y: picoText.y - 50 }, { duration: 500, onFinish: function onFinish() { tween(picoText, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { if (picoText.parent) { picoText.parent.removeChild(picoText); } } }); } }); } } function showDetectedWarning() { var warningText = new Text2('¡Ya te vi!', { size: 60, fill: 0xFF5722 }); warningText.anchor.set(0.5, 0.5); warningText.x = demonstrator.x; warningText.y = demonstrator.y - 200; warningText.alpha = 0; game.addChild(warningText); tween(warningText, { alpha: 1 }, { duration: 200, onFinish: function onFinish() { tween(warningText, { alpha: 0 }, { duration: 1000, onFinish: function onFinish() { if (warningText.parent) { warningText.parent.removeChild(warningText); } } }); } }); } function showVictoryScreen() { var victoryScreen = LK.getAsset('victory_screen', { anchorX: 0.5, anchorY: 0.5 }); victoryScreen.x = 1024; victoryScreen.y = 1366; game.addChild(victoryScreen); var statsText = new Text2('¡VICTORIA!\nPokes: ' + pokesCount + '/10\nTime: ' + Math.ceil((60 * 60 - gameTimer) / 60) + 's', { size: 60, fill: 0x4CAF50 }); statsText.anchor.set(0.5, 0.5); statsText.x = 1024; statsText.y = 1500; game.addChild(statsText); LK.setTimeout(function () { LK.showYouWin(); }, 3000); } function showDefeatScreen() { var defeatScreen = LK.getAsset('defeat_screen', { anchorX: 0.5, anchorY: 0.5 }); defeatScreen.x = 1024; defeatScreen.y = 1366; game.addChild(defeatScreen); var statsText = new Text2('DERROTA\nPokes: ' + pokesCount + '/10\nVidas perdidas: ' + (3 - lives), { size: 60, fill: 0xFF5722 }); statsText.anchor.set(0.5, 0.5); statsText.x = 1024; statsText.y = 1500; game.addChild(statsText); LK.setTimeout(function () { LK.showGameOver(); }, 3000); } function attemptPoke() { var distance = Math.sqrt(Math.pow(player.x - demonstrator.x, 2) + Math.pow(player.y - demonstrator.y, 2)); if (distance < 100) { // Close enough to poke if (demonstrator.canDetectPlayer()) { // Detected! Lose a life lives--; updateLivesDisplay(); showDetectedWarning(); LK.getSound('detected').play(); if (lives <= 0) { // Game over gameOver = true; showDefeatScreen(); } } else { // Successful poke! pokesCount++; updatePokesDisplay(); createPicoEffect(); LK.getSound('poke_success').play(); lastPokeTime = LK.ticks; } } else { // Too far, but still check if detected if (demonstrator.canDetectPlayer() && isPlayerApproaching) { lives--; updateLivesDisplay(); showDetectedWarning(); LK.getSound('detected').play(); if (lives <= 0) { // Game over gameOver = true; showDefeatScreen(); } } } } // Add poke button interaction using hit area pokeButtonHitArea.down = function (x, y, obj) { if (gameWon || gameOver) return; isPlayerApproaching = true; player.startApproach(demonstrator.x - 150, demonstrator.y); // Update poke button visual feedback pokeButton.alpha = 1.0; tween(pokeButton, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200 }); }; pokeButtonHitArea.up = function (x, y, obj) { if (gameWon || gameOver) return; isPlayerApproaching = false; player.stopApproach(); attemptPoke(); // Reset poke button visual feedback pokeButton.alpha = 0.7; tween(pokeButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200 }); // Return player to starting position quickly tween(player, { x: 1024 - 200, y: 2500 }, { duration: 400 }); }; // Game input handlers (disabled - only button works now) game.down = function (x, y, obj) { // Button interaction only }; game.up = function (x, y, obj) { // Button interaction only }; // Main game update loop game.update = function () { if (gameWon || gameOver) return; // Update timer gameTimer--; updateTimerDisplay(); // Check if time ran out if (gameTimer <= 0) { gameOver = true; showDefeatScreen(); return; } // POV camera - center view on player with slight offset towards demonstrator var cameraX = player.x - 1024 + (demonstrator.x - player.x) * 0.3; var cameraY = player.y - 1366 + (demonstrator.y - player.y) * 0.2; game.x = -cameraX; game.y = -cameraY; // Check win condition if (pokesCount >= 10) { gameWon = true; LK.getSound('victory').play(); showVictoryScreen(); } };
===================================================================
--- original.js
+++ change.js
@@ -156,16 +156,16 @@
anchorX: 0.5,
anchorY: 1.0
}));
table.x = 1024 + 200; // Position with demonstrator
-table.y = 2200; // Same height as demonstrator
+table.y = 2500; // Same height as demonstrator
// Create characters - centered and aligned in middle of screen
var player = game.addChild(new Player());
player.x = 1024 - 200; // Center screen minus offset for spacing
-player.y = 2200; // Same height as demonstrator
+player.y = 2500; // Much lower on screen, near bottom
var demonstrator = game.addChild(new Demonstrator());
demonstrator.x = 1024 + 200; // Center screen plus offset for spacing
-demonstrator.y = 2200; // Move demonstrator further down on screen
+demonstrator.y = 2500; // Much lower on screen, near bottom
// Create progress bar
var progressBar = new ProgressBar();
LK.gui.top.addChild(progressBar);
progressBar.y = 200;
@@ -417,9 +417,9 @@
});
// Return player to starting position quickly
tween(player, {
x: 1024 - 200,
- y: 2200
+ y: 2500
}, {
duration: 400
});
};
Es una trabajadora de sams club, tierna bonita de lentes con gorra verde y mandil verde, playera polo blanca y pantalon negro. In-Game asset. High contrast. No shadows
Es una trabajador de sams club, adorable, cabello un poco de emo, un poco cacheton y orejas de gatito en forma de diadema por encima de su gorra con gorra verde y mandil verde, playera polo blanca y pantalon negro. In-Game asset. High contrast. No shadows
Debe decir “Piko piko” y ser estilo cute. In-Game asset. High contrast. No shadows
Que tenga un mantel azul con el logo de sams club, sean menos productos y la mesita sea mas alta, el mantel no llega hasta el suelo, si no hasta a la mitad de la altura y permite ver las patitas de la mesa
Los pasillos de sams club vistos desde dentro hacia el centro del establecimiento. 2d ANIMADO. In-Game asset. 2d. High contrast. No shadows
Una mano cerrada con el dedo indici estirado, debe ser cute. In-Game asset. 2d. High contrast. No shadows
Haz estemismo personaje pero de espaldas
Debe de decir sams clue en su playera, verse la gorra y no olvides trazar las lineas cuando lo hagas png sin fondo
Que se sonroje y se ria con ternura, agrega unos brillitos al rededor de su cabeza, como de sorpresa
Que levante el brazo derecho apuntando con el dedo y que diga en un globo de dialogo ́ ́Calmate Mensa''. CON UNA CARITA como burlandose un poco enojado. No olvides las lineas negras al volverlo png
Un corazon verde de sams club. In-Game asset. 2d. High contrast. No shadows
Un cuadro de dialogo. Este dira ''Picale las costillas al Demo'' TIENE QUE SER ADORABLE pero retro, de videojuego. In-Game asset. 2d. High contrast. No shadows
MODO ARCADE, boton de seleccion de modo de juego. In-Game asset. 2d. High contrast. No shadows
Redondeado de las orillas y al hacelro png no olvides ningunalinea
Ambos deberan ser trabajadores de sams club, gorra verde con el logo, la chica de la izqueirda debera usar lentes, polo blanca, mandil verde con el logo del trabajo. EL chico de la derecha, pelo negro un poco alrgo, gorra igual verde y el amndil. Igual el de la derecha usara playera de polo blanca. Y al ededor de la mano que esta tocando deberia decir PICO PICO, COMO SI FUERA UN EFECTO DE SONIDO AL TOCARLO
Recuadro de color negro con borde verde claro, que sea semi transparente en un 70% y que sea algo retro, apra menu de videojuego. In-Game asset. 2d. High contrast. No shadows
No olvides las orejas de gatito para el chico, que sean de color negro.
Un simbolo de reiniciar, sin letras, es como un circulo con una flecha. In-Game asset. 2d. High contrast. No shadows
Un simbolo de continuar sin letras, como un triangulo. In-Game asset. 2d. High contrast. No shadows
uN SIMBOLO verde de una casita, para el menu de volver al menu principal. sin letras. In-Game asset. 2d. High contrast. No shadows
SImbolo de menu de hamburguesa. In-Game asset. 2d. High contrast. No shadows
El fondo de un menu pqueño, este se dezpliga asi que deberia ser bonito, acorde a un menu rapido y de tipo retro. colores verde pastel o azul marino mate claro. con borde blanco, y que tenga una pestañita superior que diga menu como si fuera una carpeta. In-Game asset. 2d. High contrast. No shadows
El se debe de ver desde lejos, ELLA SE VEA ASI COMO esta, pero el otro debe estar triste mientras lo despiden y le dan sus cosas, ya no traera la gorra ni el mantel por que las estan entregando
Agrega las orejitas al chico vistas desde atras, y su camisa debe ser una plo blanca, por debajo de su mandil verde
Has que estos dos personajes se esten besando en un congelador de sams club, escondidos entre los productos. agrega corazoncitos y evita el tono sepia, debe ser alegre
Los gatitos estan separados, sus dueños estan debajo de las sabanas tapados, los corazones deben estar arriba de la silueta en la cama, y los textos de tuchi tuchi igual. eS UNA ESCENA ALGO MORBOSA pero no se ve nada, que la figura en las sabanas abarque gran parte de la cama