Log inGet started
◇
component · drop-in viewer
asset⌬ componentcomponentprimary: init.luau·originates fromworld 15f1acc9-b…

Race

La carrera: cuenta atrás, vueltas, Lakitu, posición y meta.

by◐CarneJon·posted 13d ago
What it does

Race

La carrera: cuenta atrás, vueltas, Lakitu, posición y meta.

Vive en una entidad propia de la escena (RaceDirector). Los karts se apuntan solos al despertar, así que la misma pieza sirve para el jugador, para las CPUs y para quien entre después — y como el mundo es multijugador, la carrera es una sola para todos los que están en ella.

Las reglas viven en game.race y no tocan el motor, así que se pueden comprobar sin conducir.

Fases

idle → countdown → racing → finished

Con autoStart (por defecto) la cuenta atrás se lanza sola en cuanto hay un kart apuntado. La pantalla de selección la lanzará a mano con startRace().

Vueltas

La vuelta se reparte en 8 puertas de control. Una vuelta solo cuenta si se han pasado las ocho en orden y luego se cruza la meta, así que no se puede hacer trampa yendo y viniendo por la línea. El circuito de tramo (el 10, la Senda Arcoíris) no da vueltas: termina al cruzar la meta una vez.

Lakitu

Si un kart se aleja más de 45 m del eje de la carretera y sigue así 1,6 s, Lakitu se lo lleva de vuelta a la última puerta que pasó y le cuesta 3 monedas. Salirse un poco al prado es parte del juego; perderse en el campo no.

Public fields

CampoQué es
phaseEn qué punto está la carrera.
countdownSegundos que quedan de la cuenta atrás.
raceTimeSegundos desde la salida.
leaderLapVuelta en la que va quien va primero.
totalLapsVueltas de la carrera.
trackIdCircuito en el que se corre.
entryCountCuántos karts hay apuntados.
standingsLa clasificación: nombre, vuelta, progreso, posición y monedas.
resultsEl resultado final, en orden de llegada.
lastEventEl último aviso: "VUELTA 2", "META", "LAKITU".

Methods

  • :register(kartId) / :unregister(kartId) — los llama el propio kart.
  • :startRace() — lanza la cuenta atrás.
  • :reset() — vuelve al estado inicial sin lanzarla.
  • :kartStatus(kartId) — vuelta, último tiempo, tiempo total y puesto.

Usage

entity.spawn("RaceDirector").component.add("Race", { autoStart = true })

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

Race — la carrera: cuenta atrás, vueltas, Lakitu, posición y meta. Vive en una entidad propia de la escena (RaceDirector). Los karts se apuntan solos al despertar, así que la misma pieza sirve para el jugador, para las CPUs y para quien entre después. La cuenta atrás no arranca hasta que hay alguien apuntado, y `startRace()` la lanza a mano desde la pantalla de selección.

localAvatarId( ) → void

Registro Quién es el jugador, en ESTA sesión: el avatar del jugador local, que es lo que el motor sabe de verdad. `entity:isLocal()` no sirve para esto. Pregunta si este par es dueño de la entidad, y en una sesión de un solo par lo es de todas: los doce karts salían marcados como el jugador, así que el HUD leía la fila del líder —vueltas, monedas, puesto y objeto eran los de él— y las CPUs podían repetir tu personaje.

kartName(id: ?) → void

argtypedescription
id?

resetEntries( ) → void

Carrera

refreshStandings( ) → void

notePlayerFinish(id: ?, place: ?) → void

Lo que se apunta cuando el JUGADOR de este aparato cruza la meta: sus logros, el tick del circuito y, si toca, el desbloqueo de los cinco últimos. Las CPUs no apuntan nada. El tick lo pide así la especificación: verde por acabar entre los tres primeros en 50cc o 100cc, plata por lo mismo en 150cc, y oro por ganar en 150cc. Y el desbloqueo es ganar en 150cc en los cinco circuitos abiertos.

argtypedescription
id?
place?

finishTimeTrial( ) → void

El final del Contrarreloj: se compara el tiempo con el récord personal y con el del mundo, se guardan si son mejores, y se dice cuál de las tres cosas ha pasado — que es lo que luego enseña el HUD.

stepKart(id: ?, entry: ?, dt: ?) → void

argtypedescription
id?
entry?
dt?

update(dt: ?) → void

argtypedescription
dt?

awake( ) → void

kartIds( ) → void

Superficie pública --!desc Los karts apuntados a la carrera, para que otros sistemas los recorran.

register(kartId: string) → void

--!desc Apunta un kart a la carrera. Lo llama el propio kart al despertar. --!arg kartId Identificador de la entidad del kart.

argtypedescription
kartIdstring

unregister(kartId: string) → void

--!desc Quita un kart de la carrera.

argtypedescription
kartIdstring

startRace( ) → void

--!desc Lanza la cuenta atrás.

setPaused(on: boolean) → void

--!desc Pone la carrera en pausa o la reanuda. La pausa la pide el jugador --!desc con Backspace, y con la carrera parada no corre ni el reloj.

argtypedescription
onboolean

reset( ) → void

--!desc Vuelve la carrera a su estado inicial, sin lanzarla.

kartStatus(kartId: string) → void

--!desc La vuelta y los segundos de un kart, para el HUD. --!arg kartId Identificador del kart.

argtypedescription
kartIdstring
⌬ Metadata
descriptionLa carrera de Mario Kart OrigoZero Ultimate: cuenta atrás, conteo de vueltas por puertas de control, rescate de Lakitu, clasificación en vivo y resultado.

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

Showing up to 3 levels deep. Open a part to see what it holds further down.

31+items
▣
module · born here
❒asset
# game.roster El plantel de **Mario Kart OrigoZero Ultimate**: 16 personajes y 6 vehículos, con las cuatro estadísticas que `game.core` convierte en conducción. ```lua local Roster = require("game.roster") local tune = Roster.tuning("bowser", "boulder_kart", "150cc") -- tune.topSpeed, tune.accel, tune.turnRate, tune.chargeSpeed, tune.boostTimeMul ``` ## Personajes En el orden que pide la especificación — dentro de cada peso, de menor a mayor. **Ligeros** (más aceleración y manejo, menos velocidad): Bat · Baby Rosalina · Baby Daisy · Cheep Cheep · Goomba · Shy Guy · Koopa **Medianos** (un balance de todo): Toadette · Toad · Luigi · Mario · Waluigi · Moo Moo **Pesados** (más velocidad y peso, menos aceleración y manejo): Wario · Donkey Kong · Bowser Dos parejas comparten peso exactamente, como se pidió: **Toadette con Toad**, y **Baby Rosalina con Baby Daisy**. La clase se lee del peso (`Core.weightClass`), y es la que da las bonificaciones: un ligero carga derrape y salto un 10 % más rápido, un mediano un 5 % más y sus miniturbos duran un 5 % más, y un pesado sus miniturbos duran un 10 % más. ## Vehículos Un kart y una moto de cada peso. Dentro de cada peso la moto pesa menos y gira algo mejor; el kart aguanta más. | Vehículo | Clase | Kart o moto | |---|---|---| | Pip Kart | ligero | kart | | Feather Bike | ligero | moto | | Comet Kart | mediano | kart | | Bolt Bike | mediano | moto | | Boulder Kart | pesado | kart | | Ironbike | pesado | moto | Cada vehículo trae además `bodyScale`, `wheelRadius` y `wheelWidth`, que es lo que hace que el peso **se vea**: una moto pesada es larga y ancha de rueda, y una ligera es estrecha y corta. ## API | Llamada | Qué da | |---|---| | `Roster.character(id)` | El personaje, o el de por defecto si no se pasa id. | | `Roster.vehicle(id)` | El vehículo, o el de por defecto. | | `Roster.kindOf(character)` | Su clase de peso: `light`, `medium` o `heavy`. | | `Roster.tuning(charId, vehId, classId)` | La conducción final del conjunto. | | `Roster.accelSeconds(charId, vehId, classId)` | Cuánto tarda de 0 a tope, sin conducir. | `Roster.DEFAULT_CHARACTER` es `mario` y `Roster.DEFAULT_VEHICLE` es `comet_kart` — un conjunto mediano, cuya referencia son los 1,75 s de la especificación.
▲ 0↑ born
▣
module · born here
❒asset
# game.core El contrato compartido de **Mario Kart OrigoZero Ultimate**. Ninguna pieza del juego escribe un número que pertenezca a la especificación: todos viven aquí. `require("game.core")` desde cualquier parte del mundo. ## Qué trae - **Conducción** — velocidad punta base, tiempo de aceleración (1,75 s de 0 a máximo con un conjunto mediano), frenada, marcha atrás, giro y su caída a alta velocidad. - **Las 3 cilindradas** — 50cc / 100cc / 150cc con sus multiplicadores. - **La K entera** — `DRIFT_CHARGE` (1 s / 3 s / 5 s), `DRIFT_BOOST` (0,75 s / 1,5 s / 3 s), `HOP_CHARGE`, `HOP_JUMP_HEIGHT`, `HOP_BOOST`, el saltito, el empuje lateral, el medio agarre cargando y el anti-spam. - **Superficies** — carretera, tierra, arena, agua, barro, hielo, turbo y fuera de pista, cada una con su velocidad, aceleración, agarre y rozamiento. - **Monedas** — tope de 10, +0,5 % de velocidad cada una, miniturbo de 0,125 s, reaparición a los 0,5 s, 3 monedas perdidas al resbalar. - **Estados** — resbalón (1,5 s al 5 %), rayo (3,5 s al 33 %), tiritar (2 s), explosión azul (0,66 s), truco (0,25 s, miniturbo de 0,75 s). - **Estadísticas** — `Core.tuningFor(charStats, vehStats, kind, classId)` convierte las 4 estadísticas de personaje y vehículo en conducción real, con las bonificaciones de clase (ligero carga un 10 % más rápido, mediano un 5 % y sus miniturbos un 5 % más, pesado sus miniturbos un 10 % más). ## Uso ```lua local Core = require("game.core") local tune = Core.tuningFor(char.stats, veh.stats, char.kind, "150cc") -- tune.topSpeed, tune.accel, tune.turnRate, tune.chargeSpeed, tune.boostTimeMul ```
▲ 0↑ born
▣
module · born here
❒asset
# achievements <!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. --> TODO: describe this module.
▲ 0↑ born
▣
module · born here
❒asset
# game.track Los circuitos de Mario Kart OrigoZero Ultimate, construidos en código en cada carga: nada queda congelado en la escena, así que recargar el mundo deja el mismo circuito. ```lua local Track = require("game.track") local inst = Track.build("pradera") ``` ## Qué construye - La carretera, como una fila de losas solapadas un 25 % para que no se vea ninguna juntura. - Un bordillo claro a cada lado. - Nada más: el suelo, el cielo y el mar son de la escena. ## Consultas que da la instancia | Llamada | Qué responde | |---|---| | `inst:nearest(p)` | La muestra más cercana: `index`, `t`, `arc`, `lateral` (metros a la derecha del eje), `along`, `planDistance`, `dir`, `right`. | | `inst:surfaceAt(p)` | `"road"` si el punto cae dentro del ancho del asfalto; si no, la superficie del circuito (`"offroad"` por defecto). | | `inst:startPose(i)` | Posición y rumbo (grados) de la muestra `i`, que es donde aparece un kart. | | `inst:despawn()` | Quita el circuito del mundo. | `Track.current` es el circuito activo. Construir uno nuevo quita el anterior. ## Añadir un circuito Una entrada en `Track.defs`: su nombre, dificultad, ancho, colores, y una lista de puntos de control que se cierran en bucle. La curva pasa por todos ellos y el eje Y es la altura. | Campo | Qué es | |---|---| | `points` | Puntos de control `{ x, y, z }` de la vuelta. | | `width` | Ancho del asfalto en metros. | | `surface` | Superficie de todo lo que no sea asfalto. | | `walled` | Si lleva muros que impiden salirse. | | `laps` | Vueltas de la carrera. | | `roadTint` / `kerbTint` / `groundTint` | Colores. | | `skyPreset` / `timeOfDay` | Cielo del circuito. | | `sea` | Preset de océano, si el circuito tiene mar. |
▲ 0↑ born
◇
component · born here
❒asset
# Kart El modelo de conducción de Mario Kart OrigoZero Ultimate — y la K entera. Vive en el cuerpo del kart (el `body` del `PlayerPrototype`). Attach it there and every joining player drives their own. ## Controles | Tecla | Qué hace | |---|---| | J | Acelerar. De 0 a velocidad máxima en 1,75 s con un conjunto mediano. | | A / D | Girar a izquierda y derecha. | | S / O | Frenar; por debajo de cierta velocidad, marcha atrás. | | K | Saltar, derrapar y cargar el salto cargado. | | L | Usar el objeto. | ## La K, entera Un toque de K en el suelo salta. Si estás girando, el salto va **hacia el lado contrario** al derrape que vas a hacer; si no, va recto. Al caer derrapando empiezas a cargar, y cada nivel son chispas de las ruedas y un miniturbo al soltar la K: | Carga | Chispas | Miniturbo | |---|---|---| | 1 s | azules | 0,75 s | | 3 s | naranjas | 1,5 s | | 5 s | arcoíris | 3 s | Al caer del salto recto, si sigues manteniendo la K y no giras, empiezas a cargar un **salto cargado** — con la mitad de agarre. Las ruedas sueltan dos remolinos de viento, y soltar la K da el salto de ese nivel: | Carga | Viento | Salto | Miniturbo al aterrizar | |---|---|---|---| | 0 s | gris/blanco | — | — | | 1 s | azul | pequeño | 0,5 s | | 3 s | naranja | mediano | 1 s | | 5 s | arcoíris | grande | 2 s | Antes del azul no hay nada que soltar: ni miniturbo, ni salto. Espamear la K no da miniturbos: cada salto reinicia la carga y entre salto y salto hay un tiempo mínimo. ## Public fields - `characterId`, `vehicleId`, `classId` — la selección. - `isCpu`, `cpuSkill`, `gridIndex` — la parrilla. - `speed`, `speedRatio`, `heading`, `coins`, `lap`, `lastLapTime`, `totalTime`, `finished` — estado que leen la cámara, el HUD y la carrera. - `drifting`, `driftSide`, `chargeMode`, `chargeLevel`, `chargeTime` — la carga. - `boostTime`, `boostMul`, `boostKind` — el impulso en curso. - `airborne`, `surface`, `squishTime`, `slipTime`, `starTime`, `controlLocked`, `gone` — el resto de estados. - `inputMap` — el mapa de controles que activa al arrancar. ## Methods - `:setCombo(charId, vehicleId, classId, charStats, vehStats, kind)` — fija el conjunto y recalcula la conducción. - `:addCoins(n)` — suma o quita monedas (y da el miniturbo de 0,125 s al coger). - `:applyBoost(duration, mul, kind)` — un impulso, sin acumular con el que ya lleve. - `:slip()` — resbalón: 3 monedas y vueltas al 5 % durante 1,5 s. - `:squish()` — rayo: encogido al 33 % durante 3,5 s. - `:star()` — estrella: inmune, un 5 % más rápido, 10 s. - `:rescueAt(index)` — Lakitu: vuelta al punto de control. - `:isBoosting()`, `:isImmune()`. ## Lifecycle - `awake()` — localiza las piezas visuales del kart y le pone las chispas. - `start()` — activa su mapa de controles y se suscribe. - `update(dt)` — toda la conducción. - `onDestroy()` — suelta su reclamación del mapa de controles. ## Usage ```lua body.component.add("Kart", { inputMap = "driveKart", heading = 0, classId = "150cc" }) ```
▲ 0↑ born
▣
module · born here
❒asset
# progress <!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. --> TODO: describe this module.
▲ 0↑ born
▣
module · born here
❒asset
# race <!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. --> TODO: describe this module.
▲ 0↑ born
backing path · game/Race.component

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported on this asset or on the parts this page shows. Parts it leaves out are not counted here.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.