Emotion Tycoon — acuerdo de trabajo y manual de jugadas
Usa esto cada vez que el usuario mencione Emotion Tycoon, sus árboles, trabajadores, soltadores, mejoras, eventos, pisos, espacios de guardado, pases de juego, incursiones, códigos, el panel de administración, o pida iconos, partículas, interfaz de usuario, modelos, miniaturas o un vídeo promocional para ello — incluso si solo describen un síntoma ("el árbol está atascado", "las partículas se ven pequeñas", "estoy atascado con $0").
El usuario es un desarrollador de Roblox en solitario (grupo "Squashed Studios", id 706695552) que dibuja a mano gran parte del arte y es exigente con todo lo que parezca "generado por IA" o "vibecodeado". Todo lo que sigue proviene de sus propias correcciones; trátalo como su estilo personal, no como una sugerencia. A menudo envían lotes largos de solicitudes escritas por voz: convierte cada lote en una lista de tareas, corrige primero los bugs rápidos, y responde a todos los elementos del informe final (incluyendo aquellos que decidiste no hacer).
Las reglas permanentes del usuario
- Respeta sus ediciones. Nunca sobrescribas cambios en modelos/UI que el usuario haya hecho a mano. Lee antes de escribir.
- Sin UI con aspecto de IA. Sin etiquetas/chips/insignias de texto ("PASS", "NEW", "HOT"), sin píldoras brillantes con degradado pegadas a las cosas, sin iconos superpuestos a campos de texto, sin líneas de texto flotantes explicando cosas. Diferencia las cosas por diseño, estilo de contorno, color o agrupación.
- Ventanas nuevas: clona una ventana que el usuario ya haya aprobado (la de dos columnas
HUD.FriendModal,RebirthModal,OfflineModal) e intercambia su contenido, en lugar de componer una desde cero. Una ventana hecha desde cero fue rechazada por "visiblemente hecha con IA". Campos de texto = caja blanca empotrada con contorno oscuro de 3 px, texto oscuro. - Los números que el jugador posee se ven como la barra de dinero. Ej.: Tokens de Incursión = un clon de
HUD.Cashjunto a él con el icono de token, hover (PC) / tocar (móvil) para un tooltip. Siempre haz que la información hover funcione en móvil (tocar alterna). - Textura real de stud para fondos de UI:
rbxassetid://100839690373358(nunca una procedural). - Usa primero sus assets hechos a mano (IDs abajo). No generes reemplazos cuando exista uno de ellos.
- Termina cada respuesta que añada imágenes con una breve lista de assets que podrían dibujar para reemplazar los marcadores de posición.
- El glifo de Robux es el carácter de uso privado
U+E002. - No alucines. Busca en la web / lee el código cuando no estés seguro sobre una API o ID.
- No abras una segunda instancia de Roblox Studio. El uso del ordenador es solo para cosas que MCP no puede hacer (importación FBX, Game Bar).
- Nunca guardes su .blend (
C:\Users\cosul\Desktop\models_for_roblox\RobloxTycoon.blend); recuérdale que presione Ctrl+S. - Modelos 3D en Blender: basados en modificadores, low-poly limpio, sombreado plano; gear en el estilo del kit
/roblox-r6-armor. - Sin recompensas diarias (prefieren ganancias offline/AFK). Mantén hexágonos de misterio "?" por todas partes — cuando un "?" se convierta en un nodo real, añade nuevos hexágonos "?" más allá.
- Decidido / rechazado (no lo vuelvas a proponer): protección base, saltar renacimiento, "Mejorar Todo" (solo un botón de Máximo por NPC), una tienda de cosméticos, un árbol de Trofeo (los Tokens de Incursión se mantienen; se ganan por ser top 3 diario en Renacimientos + cada 5 renacimientos). Máquina del Clima = exactamente 1 por parcela. Tutorial de sinergia: en espera hasta que lo pidan.
- Nunca dejes que un jugador se quede atascado. Cualquier cambio en costos/árboles/renacimiento debe mantener un camino hacia una línea funcional (Main tiene
lineCost+ recargarescuey un guardia del Árbol de Dinero — mantenlos funcionando).
Flujo de trabajo de Studio MCP
- El id de Studio cambia por sesión — obténlo con
list_roblox_studios. - Editar el modelo de datos no está disponible en modo Jugar. El usuario mismo prueba el juego: comprueba
get_studio_state; mientras juega, aún puedes LEER scripts a través del modelo de datos del Servidor (game.ServerScriptService.Main.Source). Espera a que termine (pregunta cada pocos minutos); detén su prueba de juego solo si ha estado inactivo durante minutos, y dímelo. Si pregunta "asegúrate de que las cosas se guarden": las ediciones solo persisten cuando se hacen en Editar. execute_luauen Cliente/Servidor tiene su propia caché de require:require(módulo)allí es una copia nueva, no la que se está ejecutando (monkey-patch no hace nada). Alcanza el estado en ejecución a través de los remotos del juego (ReplicatedStorage.Remotes.Request:InvokeServer(acción, ...), incl. operacionesadmin) o instancias/atributos. Para probar ediciones de Config en modo Editar,require(Config:Clone()).- Ediciones de scripts:
ScriptEditorService:UpdateSourceAsyncmedianteexecute_luau, buscar/reemplazar exacto constring.find(src, old, 1, true)y afirmar que la coincidencia es única. Usa cadenas[==[ ]==](el código a menudo contiene]]). - La función de inicio del módulo
UIestá en el límite de 200 registros locales de Luau ("Out of local registers"). Nunca añadas nuevas variables locales de nivel superior allí: pon el nuevo estado/funciones en la tabla compartidaexto dentro de bloquesdo ... end. - Para probar un estado poco común (ej.: una línea completa), cambia temporalmente una constante de Config en Editar, prueba el juego, luego reviértelo.
- Verifica probando el juego con
ET_NoSave:start_stop_play,screen_capture,get_console_output.user_mouse_inputx/y son coordenadas de GUI/pantalla: para un punto del mundo usaWorldToScreenPoint(= viewport y - 58); para UI usaAbsolutePosition. Las capturas de pantalla están escaladas (~0.955 del viewport de 2011 px).textInputen un TextBox no llega a él — prueba flujos de tipo canjeo a través del remoto. - Las DataStores en Studio son las REALES (acceso API activado): cualquier cosa que escribas mientras pruebas (ej.: códigos de prueba) debe ser eliminada después.
Mapa del juego (dónde viven las cosas)
ReplicatedStorage.Shared.Config— todo el ajuste: Items, Employees, Perks, Materials, Events, Robux,RobuxClusters, Themes, TreePaths/TreeLayout/RebirthLayout,AURA(quién mejora/empeora qué casillas),CAPACITY_PERKS,MAX_LIVE_CUBES(por línea de soltador) /MAX_PLOT_CUBES, funciones de la Máquina del Clima (weatherChance,weatherUpgradeCost= parte del próximo renacimiento duplicándose por nivel,weatherRoll,weatherOwned), definiciones de incursiones + tokens.ReplicatedStorage.Shared.Grid— matemáticas de celdas (20x20 casillas, TILE=4). Rotación r: 0=-Z 1=+X 2=+Z 3=-X.ReplicatedStorage.Shared.VFX— preajustes de partículas;VFX.bursthace un emisor por color.ServerScriptService.Main— sesiones,handlers.*para cada acción remota (incl.batchpara construcción por arrastre,upgradeWeather,redeemCode,buyRaidToken), datos de la Máquina del Clima (data.wm,Factory.weatherHook), rescate, bucle Heartbeat.pushStatepuede ser retenido (s.holdPush) durante un lote.ServerScriptService.Server.{Factory,Plots,Shop,Events,DataService,Leaderboards,Prices,Raids,Admin,Codes}. Factory: recuentos de cubos por línea (session.lineCount,uncount),lineCap, atributoLineFullen los soltadores, comprobación de bloqueo por cubos (mantenlo O(n), las líneas pueden contener 100 cubos),Factory.holdpara reconstrucciones por lotes. Admin: operacionesopssolo para administradores (regalar online/offline/cross-server, eventos, anunciar, códigos). Codes: DataStoreET_Codes_v1(clavecodes+uses_<CÓDIGO>), tipos cash/scaled/rp/token/boost, fechas, usos máximos (0 = sin límite).StarterPlayerScripts.ClientModules.{UI,Build,Cubes,Life,Boards,Aura,Pop}— UI = HUD, árboles, modales, panel de inspección; Build = fantasma, colocación por arrastre/lote con marcadores de posición translúcidos, eliminar manteniendo clic derecho, mover; Aura = los cuadrados de casilla verde/rojo/amarillo. UI del panel de administración:ServerStorage.AdminGui(+AdminClient), clonado solo en el PlayerGui de los administradores.- Los lienzos de los árboles son nodos creados en
StarterGui.TreeGui.Window.Pan.{Canvas,RebirthCanvas,RobuxCanvas}.Nodes(atributos Q, R, Ring, Path, Mystery). Un nuevo nodo = renombrar/convertir un nodo "?" en esa celda (eliminarMystery, establecerPath) + añadir el id aConfig.TreePaths/RebirthLayout. Posición: cash x = 0.4654 + 0.0691q, y = 0.6062 + 0.0850r + 0.0425q; rebirth x = 0.5 + 0.1230q, y = 0.5 + 0.1300r + 0.0650q. - Remotos de desarrollo solo para Studio:
devEvent,devCash,devRobux,devRobuxRemove,devRobuxReset,devOffline,devTutorial. Los remotos de administración (admin, op, ...) funcionan en Studio para el propietario (regalarse rp/cash/token a uno mismo). - Nunca pruebes sobre la partida real por accidente.
workspace:SetAttribute("ET_NoSave", true)en Editar antes de una prueba de juego desechable, elimínalo después.
Trampas conocidas (cada una nos ha mordido una vez)
- Los errores de colocación de NPC Premium dejaban casillas "fantasma" →
placeconstruye dentro de pcall con rollback; mantén ese patrón. - PlayerAdded espera (
Shop.checkPasses, cargas de DataStore): después de cada espera, verifica que la sesión sigue siendo actual, o un jugador que se fue hará que su parcela se reconstruya sin dueño. PlayerRemoving libera la parcela ANTES de guardar. - Un
UIGradientmultiplicaBackgroundColor3— un marco teal clonado con un gradiente púrpura se renderiza azul marino. Pon el fondo en blanco cuando cambies de color a través del gradiente. - La barra de dinero tiene un UIScale
Bump: cualquier cosa posicionada desde su AbsoluteSize debe dividirse por esa escala. - Botón derecho del ratón en Construir = mantener para eliminar; el paneo de la cámara es el botón central / WASD.
- El inicio de arrastre del árbol debe usar
UIS.InputBegan(las pulsaciones de botón nunca llegan awin.InputBegan). - Las texturas de los temas de piso van encima del piso (instancia Texture); nunca cambies el Material del piso.
- Las hojas de partículas del usuario son flipbooks 2x2 con formas pequeñas → escala Size ~2–2.5x; multicolor = múltiples emisores.
- Las texturas recién subidas pueden verse borrosas por un tiempo (procesamiento de Roblox).
- Los soltadores de alto nivel necesitan un trabajo enorme por etapa; las líneas débiles se venden por ~$1 (valor del cubo vacío).
- Imágenes:
upload_imagefunciona desde un servidor http local (ej.:http://127.0.0.1:8765/<archivo>). - Pipeline FBX: exporta desde Blender con
use_selection=True, object_types={'MESH'}, apply_unit_scale=True, mesh_smooth_type='FACE'a%LOCALAPPDATA%\Temp\et_export\; importa mediante uso del ordenador (Asset Manager → Import → escribir ruta → Import), aterriza enworkspace.<FbxName>. El importador refleja en X: coloca las partes conCFrame.new(-x_b, z_b, y_b)desde las coordenadas de Blender. Vistas previas de render: escena temporal "ET_Preview" → imágenes escenificadas. - No se permiten enlaces externos dentro del juego: Discord/grupo van en los Enlaces Sociales de la página del juego; dentro del juego solo un botón
GroupService:PromptJoinAsync(groupId)"Unirse al grupo".
Disposición de monetización (actual)
- Tienda de Robux = islas separadas entre las que se navega (
Config.RobuxClusters: Pases de Juego, Trabajadores Premium, Dinero, Mejoras y Eventos). Añadir un pase = añadir su id a lositemsde una isla + añadir un hexágono enRobuxCanvas.Nodes. - Los pases frente a los productos se distinguen por isla y animación del contorno, nunca por etiquetas.
- Los precios se obtienen en vivo (
Server.Prices→ atributoRobuxPricesdeReplicatedStorage). - IDs de pases: HypeQueen 2026442663, DiamondWorker 2026394625, PassMidas 2025590666, PassLuck 2025848628, PassDrop 2025464639, PassVIP 2026922652, GoldenRobot 2025374681, LayoutSlot3 2026652648, LayoutSlot4 2026010654, Pass2x 2027138654.
- IDs de productos: OfflineDouble 3717787338, BuyBlood 3717787331, BuyMeteor 3717787319, BuyThunder 3717787307, BuyGolden 3717787299, BuyRain 3717787292, Boost3x 3717787279, Boost2x 3717787271, CashVault 3717787265, CashBag 3717787258, CashPouch 3717787249, RaidPortal 3717992673, RaidSiphon 3717992684, RaidJunk 3717992698, RaidGloom 3717992711.
- Los pisos son recompensas gratuitas de renacimiento elegidas en Configuración. Fábrica guarda: 2 espacios gratuitos, los espacios 3–4 son pases.
- Los jugadores avanzados tienen sextillones y 30+ renacimientos: pon precio al contenido avanzado como una parte de
Config.rebirthCost(escala para siempre) en lugar de un número fijo; los códigos por defecto son "% del próximo renacimiento" por la misma razón.
Los assets del usuario
Iconos: moneyboost3 105474801162476, moneybag 79223369019300, goldenhour 71253971041485, thunderstorm 106415624997312, moneyvault 114456854945836, moneyboost2 88658276906960, meteor 110778083355096, rain 112383447314124, coinpouch 115820638833486, faster_hoppers 85633043652627, x2coins 100838792374750, crown 89385624200044, midas_touch 108493524899149, bloodmoon_2 79508274280864, moon2 97357609209998, hammer 89643796486723, floppydisk 127943322640811, star 119578070875725, zzz 130218032337173, frost 109343690555707, raid_token 112843349186486, weather_machine 112719886234229, conveyor_full 79879060986006 (letrero de línea llena), backpack_cubes 84466301181838 / crate_cubes 108346564955404 / chest_cubes 131689000211065 (ventajas de capacidad).
Pisos: ocean_lights 138556700370722, holy 105026190310831, pink 83692624195325, pink_green 136148045549462, redx 124121848293779.
Partículas (hojas 2x2): anger 97456853400445, happy_love 83569352224420, bolts 125645422252125, steam 115369146046246, confetti 108450399478144, swirls_sparkles 131593243447656, waterdrops 125415103859140, happy_confetti 103582469151146, money 128140468436252, music_notes 92525208060800, ice_shards 123359736235888.
workspace["Simulator Icon Pack"] (lista sus Decals para IDs): útiles — Flecha abajo 17368169201, Códigos 17368032566, MultiGifts 15402969720, Expandir 17368183719, Click 17260727409, Rocket 16670799841, Caja 17368122337, Crate 17368402884. CubePets 17368391613 es un PERRO — nunca lo uses para cosas que no sean mascotas.
Receta de vídeo promocional (completamente automatizada, sin clics del usuario después de las primeras aprobaciones)
- Aprobaciones una vez: acceso por uso del ordenador a Roblox Studio + Game Bar con combinaciones de teclas del sistema, y acceso a la carpeta
~/Videos(Game Bar guarda enVideos\Captures). - Estado de exhibición: establece
ET_NoSave, inicia el juego, luego a través del remoto Request:devCash, desbloquea cada nodo del árbol de dinero (bucleunlockhasta que no haya progreso), limpia el diseño, construye 4 líneas (soltador en x=1 r=1, cintas x=2..17, vendedor x=18; trabajadores a ambos lados mirando hacia la cinta). Usa Dropper2–4 para que los cubos realmente se llenen y se vendan por números reales. - Director en el cliente:
BindToRenderStepen Camera+5 forzandoCameraType=Scriptabley un_G.DirCF; ayudantes para Hold/Move/Orbit; alterna ScreenGuis del HUD (no TreeGui). Celda→mundo:X = -134 + 4x, Z = -96 + 4zpara Plot1. Encuadre de vista previa conscreen_captureantes de grabar. - Grabar: enfoca Studio,
win+alt+r→ ejecuta la toma (execute_luau, < 60 s) →win+alt+r. Detén eventos naturales condevEvent("")entre tomas. Activa eventos condevEvent("Thunderstorm" | "MeteorShower" | "BloodMoon" | "CashRain" | "GoldenHour" | "Frost"). Comprueba los clips con una hoja de contactos con marcas de tiempo y repite las tomas malas. -
…
[truncado para traducción]