Roblox × Story OS
Haz un juego de historia en Roblox a partir de tu historia.
Story OS de BunCho exporta tu historia como un proyecto de Roblox con diálogos de NPC, misiones, ramas y finales. El mundo lo construyes en Roblox Studio; BunCho aporta la estructura y los diálogos. Nos centramos en historias largas, personajes coherentes y ramas que encajan.
De una frase a un juego publicado
- Escribe una frase en Nueva serie de Story OS y la IA redacta la trama, los personajes y las escenas (usa créditos). O empieza con una plantilla.
- En la pestaña Juego, añade opciones y banderas (tiene la llave, resolvió el código…). Los callejones sin salida, escenas inalcanzables y banderas que nadie activa se señalan al momento.
- Cuando pasan los Story Tests se activa Exportar a Roblox: un zip con proyecto Rojo, modelo .rbxmx y un .json para el plugin.
- Impórtalo en Roblox Studio con el plugin de BunCho (o Rojo): los NPC, las misiones y la interfaz de diálogo quedan colocados.
- Construye el mundo, prueba con varios jugadores y publica en Roblox.
Lo que obtienes
Abajo está la exportación real de la plantilla que corresponde a esta frase, “Escape de la vieja escuela” (sin editar).
Estructura de la historia (ramas y finales)
15 escenas y 5 finales. Las flechas son opciones que avanzan (no se dibujan 10 caminos de vuelta, como volver al aula).
Los tres juntos / Escaparon / La verdad de la broma / La contraseña de la puerta trasera / Esperando la mañana
Tres NPC (personalidad, forma de hablar, secreto, comportamiento)
Haru
Delegado de clase
- Personalidad
- Mandón y se hace el fuerte, pero es el más responsable.
- Forma de hablar
- Tono firme y mandón.
- Objetivo
- Llevar a todos a casa
- Secreto
- Cree que una nota de broma que escribió es la culpable del encierro.
- Frase de ejemplo
- “Calma. Encontraremos la salida en cinco minutos.”
Mio
Encargada de la biblioteca
- Personalidad
- Callada y observadora; le cuesta pedir ayuda.
- Forma de hablar
- Habla bajito, breve y precisa.
- Objetivo
- Descifrar el código
- Secreto
- El año pasado casi quedó encerrada aquí, y fue ella quien dejó el código en la pizarra.
- Frase de ejemplo
- “Hay un código de números en la pizarra.”
Sora
Del equipo de atletismo
- Personalidad
- Alegre y habladora; le da miedo la oscuridad.
- Forma de hablar
- Enérgica y coloquial.
- Objetivo
- Llegar a casa antes de que oscurezca
- Secreto
- Olvidó que llevaba la nota del conserje en el bolsillo.
- Frase de ejemplo
- “Quiero llegar a casa antes de que oscurezca…”
Comportamiento: los NPC van al lugar de cada escena en la que hablan; si les hablas en otro sitio, responden con su última frase. Los secretos son notas para el desarrollador y no se muestran a los jugadores.
Misiones (encontrar la llave, descifrar el código, abrir la puerta)
Las banderas de las que dependen las opciones se convierten en la lista de objetivos. El temporizador es de 300 segundos; al agotarse, la historia salta al final “Esperando la mañana”.
- Revisar la estantería 913
- Abrir el casillero con el número del código
- Guardar la nota
- Confiar en Mio
- Abrir la puerta principal con la llave
- Decir la contraseña en la puerta trasera
Interfaz en el juego
- Ventana de diálogo: nombre de quien habla, una línea a la vez, Siguiente
- Opciones: con varios jugadores, votación (mayoría, con tiempo límite)
- Objetivos: lista con casillas y adónde ir
- Temporizador: se pone rojo con 30 segundos
- Finales: cuántos encontraste (de 5)
Creo que los números de la pizarra son números de clasificación.
Revisar la estantería 913Revisar la estantería 400Volver al aulaLa interfaz se construye con código, sin recursos de imagen. Cambia colores y fuentes en la tabla THEME al inicio de StoryClient.
Código Luau
Los datos (Story, Strings) están separados de las partes que se mueven (máquina de estados, servidor, interfaz). El servidor valida cada opción.
-- src/shared/Story.luau
["n006"] = {
Title = "N.n006.title",
Place = "science",
Ending = false,
Events = { "lights_flicker" },
Lines = {
{ Key = "N.n006.1" },
{ Key = "N.n006.2", Npc = "haru" },
},
Choices = {
{ Id = "c013", Key = "C.c013", To = "n007", Requires = { "cipher" }, Sets = { "has_key" } },
{ Id = "c014", Key = "C.c014", To = "n002", Requires = {}, Sets = {} },
},
-- src/shared/StoryRuntime.luau
-- Applies a choice. Returns false (and a reason) when the choice is not open right now.
function StoryRuntime.choose(story, state, choiceId: string): (boolean, string?)
local c = StoryRuntime.findChoice(story, state, choiceId)
if c == nil then
return false, "choice_not_available"
end
for _, f in c.Sets do
local neg, name = negated(f)
state.flags[name] = if neg then nil else true
end
StoryRuntime.jump(story, state, c.To)
return true, nil
end
-- Quest objectives with their done state (flags that some choice requires)
function StoryRuntime.objectives(story, state)
-- src/server/StoryServer.server.luau
local function onChoose(player: Player, choiceId: string)
local session = sessions[sessionKey(player)]
if session == nil or not session.open or session.state.ended then
return
end
if Runtime.findChoice(Story, session.state, choiceId) == nil then
return
end
local voters = #members(session)
if Config.ChoiceMode ~= "vote" or voters <= 1 then
Guardado
DataStore es opcional (Config.UseDataStore). Guarda los finales encontrados y el progreso en solitario. Para probar en Studio, activa el acceso de Studio a los servicios de API.
Tabla de traducción en 6 idiomas
Japonés, inglés, español, portugués, chino tradicional y simplificado. Cada jugador ve su idioma de Roblox; si falta, se usa el idioma original. localization/BunChoStory.csv también sirve para las herramientas de traducción de Roblox.
Contenido del zip
- BunChoStory.rbxmx
- NPCS.md
- README.md
- default.project.json
- localization/BunChoStory.csv
- src/client/StoryClient.client.luau
- src/server/StageSetup.server.luau
- src/server/StoryServer.server.luau
- src/shared/Config.luau
- src/shared/Localize.luau
- src/shared/StageBuilder.luau
- src/shared/Story.luau
- src/shared/StoryRuntime.luau
- src/shared/Strings.luau
- story-tests.json
- story.pack.json
Colócalo todo con el plugin de Studio
- Instala el plugin (pronto en Creator Store; por ahora pon el archivo de abajo en la carpeta Plugins de Studio)
- Abre Plugins → BunCho → Story Pack y elige el .json exportado o pega una URL https
- Build stage now coloca salas, puntos de historia brillantes y NPC hechos con Parts (todo editable)
- Pulsa Play. Para varios jugadores usa Probar → Clientes y servidores
¿Usas Rojo? Descomprime, ejecuta rojo serve y conéctate desde Studio. También puedes arrastrar el .rbxmx (pasos en el README).
Publicar
Publica en Roblox e intenta monetizarlo (los ingresos dependen de los términos de Roblox y de los requisitos de DevEx).
Por qué crearlo con BunCho
- Personajes que no cambian de carácterLa personalidad, la forma de hablar y los secretos viven en la Character Bible, y los Story Tests detectan cuando el tono se desvía. Los diálogos de los NPC salen de ese canon.
- Presagios que se resuelvenCada pista se enlaza con la escena que la resuelve; lo que quede sin resolver al final aparece en las pruebas.
- Opciones y finales coherentesLos callejones sin salida, escenas inalcanzables, banderas que nadie activa u opciones sin destino bloquean la exportación. Antes de darte los archivos se comprueba que todos los finales son alcanzables.
Pensado para las clasificaciones por edad
- Dentro del juego no se ejecuta IA generativa. Cada línea queda fijada y revisada al exportar (sin chat de IA abierto).
- Los sustos son solo parpadeos, apagones, sombras, un susurro en subtítulo y una leve sacudida. Sin sangre, heridas ni sustos con ruidos fuertes (Config.ScareIntensity = 0 los desactiva).
- Responde con precisión el cuestionario de madurez y cumplimiento de Roblox para tu experiencia.
Lo que haces tú en Roblox Studio
- Construir el mundo (el escenario son bloques simples; para tu propio mapa, etiqueta Parts con BunChoStoryTrigger y un atributo Place o Npc)
- Sonidos, modelos y animaciones con derechos de uso
- Pruebas multijugador, miniaturas, descripción, cuestionario y publicación
Plantillas
Escape de la vieja escuela
Tres estudiantes quedan encerrados en una escuela abandonada y deben escapar en cinco minutos. Encuentren la llave, descifren el código y abran la puerta. Cinco finales.
5 minutos · 3 NPC · llave / código / puerta · 5 finales
La mansión sin luz
En una noche de tormenta, un grupo de amigos queda encerrado en una vieja mansión. Encuentren las llaves de plata y oro y descubran el secreto de la niña fantasma que vive allí. Cinco finales.
Cooperativo · llaves de plata y oro · efectos de miedo (todas las edades) · 5 finales
Abrir y editar en el estudio →
Precio
La exportación a Roblox está incluida en los planes de BunCho. El plugin de Studio y las plantillas son gratis.
FAQ
¿Necesito saber usar Roblox Studio?
No para importar y pulsar Play. Construir el mundo y publicar se hace en Roblox Studio.
¿Una IA conversa con los jugadores?
No. Todo el diálogo es texto fijo escrito al exportar, lo que facilita un juego apto para todas las edades.
¿Sirve para hacer un juego de terror en Roblox?
Sí. La plantilla de terror cooperativo tiene búsqueda de llaves en equipo, cinco finales y sustos aptos para todas las edades.
¿Puedo usar mi propio mapa?
Pon Config.BuildStage = false y etiqueta Parts con BunChoStoryTrigger y un atributo Place (id del lugar) o Npc (id del personaje).
¿Hace falta Rojo?
No. Puedes importar con el plugin de BunCho o arrastrar el .rbxmx.
Las funciones descritas son las disponibles hoy en BunCho. Estamos preparando una grabación en Roblox Studio. 日本語