Las dos ventanas#
Dance Machine tiene dos interfaces, y conviene saber desde el principio cuál es cuál.
Ventana | Se abre con | Para qué sirve |
|---|---|---|
El menú de canciones |
| Todo lo que hace un jugador: elegir una pista, una dificultad, un modo y un escenario, y abrir su perfil, el ranking y sus teclas. |
El panel de administración |
| Una ventana con dos pestañas: Machines, donde se colocan y editan las máquinas, y Music, donde se generan y editan las canciones. Cada comando abre su propia pestaña. |
Las máquinas, los detalles de las canciones y los charts se guardan en la base de datos y se envían a todos los jugadores conectados en cuanto guardas. Nada de esta página requiere reinicio, salvo añadir un archivo de audio nuevo.
Con qué empieza un servidor nuevo#
Diecinueve pistas originales, cada una con charts Easy, Normal y Hard ya generados una vez importado database/sql.sql. No hay ninguna máquina colocada: la primera la pones tú donde esté tu salón recreativo, club o bar.
Pista | Artista | BPM | Duración |
|---|---|---|---|
404:Heart.exe | NEKØBYTE | 99 | 1:21 |
Arcade Fantasy | Neon Gravity | 131 | 1:31 |
Binary Dreams | ARCFLOW | 144 | 2:03 |
Cosmic Bounce | Eclipse Motion | 137 | 2:58 |
Crystal Pulse | Zenith Avenue | 148 | 2:29 |
Crystal Rain | Juno | 131 | 2:49 |
Destiny Machine | Nova Sphere | 131 | 2:48 |
Digital Bloom | Iris Vector | 128 | 1:47 |
Flash Memory | Pixel Horizon | 131 | 2:35 |
Ghost in the Broadcast | VANTA | 117 | 2:31 |
Horror Show | District | 113 | 3:00 |
Last Token | S!GNAL | 144 | 2:11 |
Marionette's Last Smile | Hollow Choir | 131 | 3:20 |
Midnight Tokyo | Azure Reactor | 125 | 1:50 |
Neon Horizon | Eclipse Drive | 117 | 0:45 |
Night Voltage | Arcadia Future | 122 | 2:22 |
Parallel Hearts | Polaris Fiction | 117 | 2:06 |
Silent Motion | Atlas Project | 117 | 0:53 |
Velocity Zero | Quantum Pop | 128 | 2:33 |
Colocar una máquina#
/dancecreator → Machines → +. Rellena el formulario y pulsa Select en Placement: la ventana se cierra y una máquina transparente sigue a donde apunte tu cámara. Nunca se escribe una coordenada para una máquina.
Tecla | Acción |
|---|---|
Ratón | Apunta la máquina fantasma: se coloca sobre la superficie a la que mira la cámara, hasta 50 m de distancia. |
| Confirma la posición. |
| Mantén pulsado para rotar, a |
Rueda del ratón | Súbela o bájala, |
| Cancela y vuelve al formulario. |
La orientación y el desplazamiento de altura se muestran en la parte superior de la pantalla mientras trabajas, y los botones de la parte inferior siempre muestran las teclas que funcionan en ese momento.
El formulario#
Sección | Qué se configura ahí |
|---|---|
Machine Info | El nombre que aparece en la lista del creador. |
Players | 1 Player — un pad, solo individual. 2 Players — dos pads, que es lo que hace posibles Duo y Versus. Por defecto son dos. |
Pricing | Cuánto cuesta una partida y si se paga con Cash Money o por Bank Transfer. 0 es gratis. |
Game Modes | Cuáles de Single, Versus y Co-op (Duo) pueden iniciar aquí los jugadores. Los tres están activados por defecto. |
Placement | Select la primera vez, Re-select para volver a colocarla. |
Save Machine la hace aparecer para todos los jugadores a menos de Config.StreamDistance y la guarda en dance_machines, así que vuelve tras cada reinicio.
Gestionar máquinas#
La lista de la izquierda contiene todas las máquinas con un buscador. Cada tarjeta puede teletransportarte hasta ella (tras una confirmación), y al seleccionar una se abre para editarla: cambia cualquier campo, usa Reposition, Save Changes o Delete.
Máquinas en el archivo de configuración#
Las máquinas también se pueden listar en Config.Machines. Se crean en cada inicio a partir del archivo y no se escriben en la base de datos, así que el creador es mejor sitio para cualquier cosa que esperes mover.
Config.Machines = {
{
coords = vec3(-1371.56, -470.58, 71.03),
heading = 145.0,
label = 'Legion Square',
players = 2, -- 1 = solo only, 2 = enables Duo and Versus
price = 0,
paymentMethod = 'money', -- 'money' (cash) or 'bank'
allowedModes = { 'solo', 'duo', 'versus' },
},
}Dónde se colocan los jugadores#
Config.Pads contiene dónde se pone a cada jugador sobre la máquina, en relación con el prop: una posición para una máquina de 1 jugador y dos para una de 2 jugadores. Un vec3 orienta al jugador hacia la máquina por sí solo; un vec4 fuerza la orientación. Los valores incluidos encajan con la máquina incluida. Si cambias el modelo, colócate en una máquina y usa /dancepad — consulta Comandos y exports.
Añadir canciones#
Cualquier canción de la que tengas los derechos puede convertirse en un chart jugable. El script escucha el audio y escribe las notas por sí mismo.
Copia el audio en songs/
MP3, OGG o WAV, en cualquiera de las dos estructuras:
lua songs/ ├── My_Track.mp3 -- a file on its own: the song id is My_Track └── my_track/ └── song.mp3 -- a folder: the song id is the folder nameDentro de una carpeta, el script busca primero
song.mp3,song.oggosong.wav, y después cualquier archivo de audio.Reinicia el recurso
restart qs-dancemachine. La carpeta se lee una vez cuando se inicia el recurso, y el juego solo sirve los archivos que estaban ahí en ese momento. La consola indica cuántas canciones encontró.Genera el chart
/dancemusicmuestra la nueva canción marcada como not generated. Selecciónala, escribe su nombre y artista, elige las dificultades que pueden escoger los jugadores y pulsa Generate.Júgala
Cuando termina el análisis, el chart se guarda y la canción aparece en todas las máquinas a la vez — también para los jugadores que ya están en una.
El id de la canción es el nombre del archivo o de la carpeta. Las letras, los dígitos, _ y - se mantienen tal cual; los espacios, los acentos y los símbolos se convierten en guiones bajos, y cuando el recurso se detiene esos archivos se renombran en disco para poder servirse. Mi Canción (Remix).mp3 pasa a ser Mi_Cancion_Remix.mp3. Los jugadores nunca ven el id — ven el nombre que escribes.
Cómo se genera un chart#
La generación se ejecuta en el juego del administrador que pulsa el botón, no en el servidor, así que no le cuesta nada al servidor. Una superposición la sigue fase por fase — tarda desde unos segundos hasta un minuto aproximadamente, según la pista:
Fase | Qué ocurre |
|---|---|
Decoding audio | El archivo se carga y se mezcla en un solo canal. |
Spectral analysis (FFT) | La pista se divide en frecuencias, fotograma a fotograma. |
Detecting onsets | Se detecta cada golpe de batería y cada ataque. |
Tracking beats | Se mide el tempo — este es el BPM que muestra el menú de canciones. |
Placing notes | Cada dificultad elige los golpes más fuertes que le caben, los reparte entre los seis carriles y convierte algunos en notas largas. |
Saving beatmap | El servidor comprueba el chart, lo guarda en |
Las pistas con un ritmo claro y constante dan los mejores charts. Una canción en silencio, muy corta o sin un ritmo que el análisis pueda seguir se rechaza con un motivo — consulta Errores comunes. Solo un administrador puede generar una canción concreta a la vez.
Editar una canción#
Campo | Qué hace |
|---|---|
Song name · Artist | Lo que ven los jugadores en el menú de canciones, los resultados y los rankings. Hasta 80 caracteres cada uno. |
BPM | Se mide durante la generación y se usa para sincronizar las cámaras y los pasos de baile. Antes de generar una canción puedes indicarlo a mano. |
Start · End | La parte de la pista que se reproduce, como mm:ss o arrastrando la línea de tiempo y pulsando Set as start / Set as end. AUTO reproduce hasta el final. Las notas fuera de ese tramo se descartan, y la vista previa del menú de canciones empieza en Start. Disponible una vez generada la canción. |
Difficulties | Cuáles de Easy, Normal y Hard pueden elegir los jugadores. Siempre queda al menos una disponible. |
Save Changes aplica los detalles al instante. Regenerate vuelve a analizar la pista — útil tras cambiar Config.Beatmap. Delete saca la canción del juego: su chart se borra y desaparece de la lista de todas las máquinas, pero se queda en el Music Manager, lista para generarse de nuevo. Para quitar una pista definitivamente, borra su archivo de songs/ y reinicia.
Dificultades y niveles de estrellas#
Lo densa que es cada dificultad viene de Config.Beatmap:
Dificultad | maxNps | minGapMs | jumps |
|---|---|---|---|
Easy | 0.9 | 650 | false |
Normal | 1.35 | 440 | false |
Hard | 2.0 | 300 | false |
maxNps es el máximo de notas por segundo, minGapMs el menor intervalo entre dos notas, y jumps permite dos notas a la vez en los golpes más fuertes. Después cada chart recibe un nivel de estrellas del 1 al 20, calculado a partir de sus notas por segundo, el tempo y la duración — así que una canción Hard rápida y larga tiene más nivel que una lenta y corta. Un cambio en Config.Beatmap se aplica a las canciones generadas o regeneradas después.
Jugar#
Un jugador se acerca a una máquina y pulsa E en el aviso [E] - Pump It Up — o usa la opción de ox_target, cuando el target está activado. Un bailarín se mueve detrás del menú mientras suena una vista previa de la pista seleccionada.
Tecla | Lista de pistas | Lista de modos | Pantalla de inicio |
|---|---|---|---|
| Recorrer las canciones | Elegir un modo | Start o Return |
| Elegir la dificultad | — | Elegir el escenario |
| Continuar a los modos | Continuar a la pantalla Start | Jugar |
| Settings: perfil, ranking, teclas | — | — |
| Salir de la máquina | Volver a las pistas | Volver a los modos |
Cada canción muestra su nivel de estrellas y su BPM. Una canción que el jugador nunca ha jugado lleva la etiqueta NEW; una que ya ha jugado muestra su mejor calificación. Alejarse de la máquina cierra el menú.
Los carriles y las teclas#
Las notas salen del centro de la pantalla hacia seis objetivos, tres a cada lado, y se aciertan cuando los alcanzan:
Lado izquierdo | Tecla por defecto | Lado derecho | Tecla por defecto |
|---|---|---|---|
Arriba a la izquierda |
| Arriba a la derecha |
|
Izquierda |
| Derecha |
|
Abajo a la izquierda |
| Abajo a la derecha |
|
Cada jugador puede reasignarlas en Settings → Keybinds: elige un carril, pulsa la nueva tecla, y R restablece las de por defecto. Las asignaciones se guardan en el propio PC del jugador. Las teclas por defecto con las que empieza cada jugador son Config.DefaultKeys, escritas como códigos de tecla del navegador — 'KeyW', 'ArrowUp', 'Space'.
Notas, valoraciones y puntuación#
Hay tres tipos de nota. Una nota tap se pulsa una vez. Una nota hold se pulsa y se mantiene hasta que llega su cola — soltarla antes cuenta como Miss. Una nota bonus, aproximadamente una de cada 26 taps, vale 2.5× los puntos. Cada acierto se valora según lo cerca del ritmo que caiga:
Valoración | Ventana | Puntos | Vida |
|---|---|---|---|
PERFECT | ± 45 ms | 100% | +2 |
GREAT | ± 90 ms | 75% | +1 |
GOOD | ± 135 ms | 40% | 0 |
BAD | ± 180 ms | 10% | −4 |
MISS | Más tarde, o nunca | 0 | −8 |
Una nota vale 1,000 puntos por su valoración, por el multiplicador de combo, que crece un 5% cada 25 notas seguidas hasta 2×. Un Miss rompe el combo. La barra de vida empieza en 50 de 100; si se vacía, se falla la fase. Cada uno de estos números está en Config.Gameplay — life.failEnabled = false permite jugar cada canción hasta el final.
La partida termina con una calificación según la precisión:
SSS | SS | S | A | B | C | D | F |
|---|---|---|---|---|---|---|---|
99% | 97% | 94% | 88% | 80% | 70% | Menos del 70% | Fase fallida |
ESC o BACKSPACE durante una canción pregunta si quieres salir; una partida abandonada no se guarda. En la pantalla de resultados, ENTER vuelve a la lista de música y G vuelve a jugar la misma canción. Una nueva mejor marca personal o un récord del servidor se anuncia ahí mismo.
Modos de juego#
Modo | Cómo se juega |
|---|---|
Single | Un jugador, los seis carriles. |
Duo | Cooperativo. El pad 1 juega el lado izquierdo ( |
Versus | Ambos jugadores juegan todos los carriles del mismo chart, con la puntuación y el combo del rival en directo en pantalla. Gana la puntuación más alta — los empates se deciden por precisión, luego por combo máximo, y si no, empate. Fallar o abandonar es una derrota inmediata. |
Duo y Versus necesitan una máquina 2 Players que los permita y un segundo jugador en el menú de canciones; hasta entonces muestran FREE PAD y no se pueden elegir. Una partida de dos jugadores funciona así:
Un jugador elige
Quien pasa primero a los modos controla la selección; al otro se le pide que espere a que termine. Elige la pista, la dificultad, el modo y el escenario, y pulsa Start.
Se invita al compañero
El otro jugador ve una invitación con la canción y el escenario que eligió el anfitrión, y acepta con Start o rechaza con Return. Una invitación sin respuesta caduca tras
Config.Multiplayer.inviteTimeoutMs(30 segundos).Ambos pagan y empiezan juntos
Cada jugador paga el precio de la máquina. Si alguno no puede, la partida no empieza y no se cobra a nadie. Ambos relojes están sincronizados con el servidor, así que la primera nota llega en el mismo momento en las dos pantallas.
Si un compañero se va durante Duo, el otro sigue jugando solo. Si uno se va durante Versus, gana el que se quedó.
El escenario de baile cinemático#
Cuando empieza la canción, la pantalla del jugador deja el salón recreativo. Una copia de su personaje — misma ropa, misma cara — baila en un escenario en algún lugar de Los Santos, grabada desde quince ángulos de cámara que cambian cada 8 beats, con un golpe de zoom en cada beat. Todos los demás siguen viendo al jugador bailando en la máquina. En Duo, la copia del compañero baila a su lado.
Escenario | id | Dónde |
|---|---|---|
Funfair |
| La feria del Del Perro Pier. El predeterminado. |
Rooftop |
| Un helipuerto muy por encima del centro. |
National |
| El escenario del Vinewood Bowl. |
Asylum |
| Un interior oscuro bajo la ciudad. |
Bunker |
| Un búnker subterráneo. |
Life Invader |
| La oficina de Life Invader. |
FBI |
| En lo alto del edificio del FIB. |
El escenario se elige en la pantalla Start con ← →; en una partida de dos jugadores el anfitrión lo elige para ambos. Los pasos de baile cambian cada 8 beats y se vuelven más grandes a medida que crece el combo — más tranquilos por debajo de 8, más animados desde 8, a tope desde 20 (Config.Animations.intensity). Un breve plano orbital del bailarín, de brazos cruzados, cubre la cuenta atrás.
Solo en la pantalla del propio jugador, el menú se ilumina como de día y la canción se juega de noche (Config.DanceStage.forceNight, nightHour) con una corrección de color cinemática (timecycle); la hora del servidor vuelve en cuanto se va. Los recursos habituales de sincronización del clima se pausan durante ese tiempo — consulta Integraciones.
Añadir o mover un escenario
Cada escenario es una línea en Config.DanceStage.stages: un id, la etiqueta que ven los jugadores y un vec4 con el lugar y la dirección a la que mira el bailarín. default indica el que se selecciona primero.
Config.DanceStage = {
enabled = true,
default = 'amusement',
stages = {
{ id = 'amusement', label = 'Funfair', coords = vec4(-1651.27, -1117.60, 13.02, 308.98) },
{ id = 'beach', label = 'Beach', coords = vec4(-1520.40, -1395.10, 5.20, 120.0) },
-- ...
},
}Elige lugares abiertos: las cámaras orbitan hasta unos metros alrededor del bailarín.
Ajustar las cámaras
Config.DanceStage.cams lista los ángulos, relativos al bailarín, que se reproducen en orden. switchBeats establece cada cuánto cortan, interpMs cuánto dura el deslizamiento entre ellos y fovPulseAmp la fuerza del golpe en cada beat. Los valores intro* dan forma al plano de la cuenta atrás. Para encuadrar los ángulos a ojo, usa /dancecam con debug activado: imprime en la consola F8 una tabla cams lista para pegar.
Jugar en la máquina
Config.DanceStage.enabled = false mantiene al jugador en el salón recreativo, grabado por Config.Camera. Su mode es fixed, front, side o dynamic, que alterna ángulos cada switchBeats.
El bailarín detrás del menú
Config.Preview coloca al personaje del jugador delante del fondo dance_machine_background de dancemachine-assets, en un lugar vacío bajo el mapa. Encuadra al bailarín a la izquierda mientras se recorren las pistas, a la derecha — con un compañero cuando Duo es posible — mientras se elige un modo, y posando mientras la configuración está abierta. Cambia stage solo si otro recurso usa ese lugar; enabled = false desactiva el fondo.
Récords y clasificaciones#
Récord | Dónde se muestra |
|---|---|
Mejor marca personal | Se guarda por canción y dificultad. Su calificación es la etiqueta de la canción en la lista de pistas, y superarla muestra NEW RECORD! en los resultados. |
Récord del servidor | La mejor puntuación de cualquiera en esa canción y dificultad. Uno nuevo muestra SERVER RECORD! y se anuncia a todos los jugadores conectados ( |
Ranking | Settings → Ranking: los mejores jugadores del servidor por puntuación, combo máximo y precisión, |
Perfil | Settings → Profile: las últimas partidas del jugador por modo, y cada una abre su puntuación, combo, precisión, valoraciones y fecha. |
Una partida superada siempre gana a una fallida como mejor marca personal, sea cual sea la puntuación, y solo las partidas superadas pueden establecer un récord del servidor.



