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

Kart

El modelo de conducción de Mario Kart OrigoZero Ultimate — y la K entera.

by◐CarneJon·posted 13d ago
What it does

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

TeclaQué hace
JAcelerar. De 0 a velocidad máxima en 1,75 s con un conjunto mediano.
A / DGirar a izquierda y derecha.
S / OFrenar; por debajo de cierta velocidad, marcha atrás.
KSaltar, derrapar y cargar el salto cargado.
LUsar 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:

CargaChispasMiniturbo
1 sazules0,75 s
3 snaranjas1,5 s
5 sarcoíris3 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:

CargaVientoSaltoMiniturbo al aterrizar
0 sgris/blanco——
1 sazulpequeño0,5 s
3 snaranjamediano1 s
5 sarcoírisgrande2 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

body.component.add("Kart", { inputMap = "driveKart", heading = 0, classId = "150cc" })

Interface

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

conforms to

zero/source-extract/v2

Kart — el modelo de conducción de Mario Kart OrigoZero Ultimate, y la K entera. Vive en el cuerpo del kart. Aquí está todo lo que hace que se sienta como un kart, con los tiempos exactos de la especificación: J acelera (0 a tope en 1,75 s con un conjunto mediano) A/D gira S/O frena; por debajo de cierta velocidad, marcha atrás K salta, derrapa y carga el salto cargado L usa 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: 1 s → chispas azules, 3 s → naranjas, 5 s → arcoíris. Soltar K suelta el miniturbo de ese nivel (0,75 s / 1,5 s / 3 s). Antes del azul no hay nada que soltar. Al caer del salto recto, si sigues manteniendo K y no giras, empiezas a cargar un salto cargado — con la mitad de agarre. 1 s → viento azul, 3 s → naranja, 5 s → arcoíris. Soltar K da el salto de ese nivel y, al aterrizar, su miniturbo (0,5 s / 1 s / 2 s). Antes del azul, soltar no da ni salto ni miniturbo. Espamear K no da miniturbos: cada salto reinicia la carga, y entre salto y salto hay un tiempo mínimo.

Model

teclasAhora( ) → void

alguna(tabla: ?, nombres: ?) → void

argtypedescription
tabla?
nombres?

surfaceOf(p: ?) → void

Utilidades

argtypedescription
p?

levelFor(charge: ?, thresholds: ?) → void

argtypedescription
charge?
thresholds?

rainbow(t: ?) → void

Color arcoíris para las chispas de nivel 3.

argtypedescription
t?

kartPieces( ) → void

Las piezas que son el kart entero: esconderlas deja el sitio a la bala y encogerlas encoge el kart. Son TODAS las que cuelgan de su raíz menos la bala, que es lo único que no es el kart — así una pieza nueva del vehículo (una librea, un volante, un alerón, un piloto) entra sola, sin apuntarla en ninguna lista. Las ruedas son los pivotes, así que el eje y el neumático que cuelgan de cada una van con ella.

ghostMaterial( ) → void

applyBoost(duration: ?, mul: ?, kind: ?) → void

Estado interno del componente

argtypedescription
duration?
mul?
kind?

startHop(side: ?) → void

argtypedescription
side?

land( ) → void

stepDriving(dt: ?) → void

Tick

argtypedescription
dt?

stepVisuals(dt: ?) → void

argtypedescription
dt?

useCurrentItem( ) → void

Objetos Gasta el objeto que lleva en la mano, con el efecto que diga su ficha. Los que se lanzan a otros (plátano, los cuatro caparazones, flor de fuego) y los dos estados especiales (bala, boo) todavía no están: necesitan proyectiles y objetivos, y van en su propia pasada. Los de aquí actúan todos sobre uno mismo.

stepStarTouch( ) → void

Con la estrella en marcha, quien te toca da vueltas 1,5 s al 5 %, como un plátano: lo pide la especificación y es lo que hace que la estrella sirva para algo más que correr. Se comprueba contra todos los karts de la carrera, así que vale igual para el jugador que para una CPU.

stepDecor( ) → void

El decorado Tocar el decorado del circuito. Hasta ahora se atravesaba; la especificación pide que exista: tocarlo **en el aire** es un TRICK —te elevas, brillas un cuarto de segundo y al caer te llevas un miniturbo de 0,75 s— y tocarlo con las ruedas en el suelo es un choque, que clava el kart. Las piezas son del sitio y las indexa el Venue de cada circuito; aquí solo se pregunta qué se está tocando y se decide qué hacer, que es lo que el kart sabe y el sitio no: si va por el aire o no.

update(dt: ?) → void

argtypedescription
dt?

editorUpdate(dt: ?) → void

argtypedescription
dt?

refreshPieces( ) → void

Ciclo de vida Localiza lo que cuelga del vehículo y se queda con lo necesario para animarlo: las piezas por nombre, la escala y el color de cada una, la bala y las chispas de las ruedas. Se hace al despertar y CADA VEZ que el kart cambia de aspecto: elegir otro vehículo en el menú rehace las piezas, así que las viejas ya no existen y hay que volver a localizarlas o el kart se queda sin ruedas que girar y sin chispas.

indexPiece(e: ?) → void

argtypedescription
e?

awake( ) → void

wireControls(controls: ?) → void

Los controles, entrada por entrada, a sus campos. Escriben los campos del MAPA: lo que de verdad conduce son `mapaX or la tecla`, y eso se compone cada fotograma en `stepDriving`.

argtypedescription
controls?

connectControls( ) → boolean

--!desc Engancha los controles del kart a su mapa. Devuelve si lo ha --!desc conseguido. --!desc --!desc Se llama al arrancar y se reintenta desde `update` si falla: activar --!desc un mapa que todavía no está listo devuelve nada y deja al kart SORDO --!desc — se conduce, se pulsa la J y no pasa nada, sin que se vea nada raro --!desc en pantalla. Es el "el kart no se mueve" más difícil de ver.

start( ) → void

onDestroy( ) → void

setCombo(charId: string, vehicleId: string, classId: string) → void

Superficie pública --!desc Fija el conjunto (personaje, vehículo y cilindrada) y recalcula la conducción. --!arg charId Identificador del personaje del plantel. --!arg vehicleId Identificador del vehículo del plantel. --!arg classId Cilindrada: 50cc, 100cc o 150cc.

argtypedescription
charIdstring
vehicleIdstring
classIdstring

addCoins(n: number) → number

--!desc Da o quita monedas. Devuelve el total resultante. --!arg n Cuántas monedas suma (negativo para quitarlas).

argtypedescription
nnumber

applyBoost(duration: number, mul: number?, kind: string?) → void

--!desc Le da un impulso, sin acumular con el que ya lleve. --!arg duration Segundos que dura. --!arg mul Multiplicador de velocidad (por defecto el del turbo). --!arg kind Qué se lo ha dado: turbo, panel, estrella, bala.

argtypedescription
durationnumber
mulnumber?
kindstring?

slip( ) → void

--!desc Derrapa: pierde 3 monedas y da vueltas al 5 % durante 1,5 s.

squish( ) → void

--!desc Le cae un rayo: encogido y al 33 % durante 3,5 s.

trick(source: string?) → void

--!desc Un TRICK: tocar el decorado en el aire. El kart se eleva un poco, brilla con colores 0,25 s y al caer le da el miniturbo de 0,75 s. --!arg source De dónde ha venido el golpe, para lo que depende de con qué se --!arg hizo: un truco contra una rampa no cuenta como truco contra un objeto.

argtypedescription
sourcestring?

crash( ) → void

--!desc Se choca con el decorado: clava el kart, lo manda un poco hacia atrás y lo deja sin control un instante. Es lo que pasa al tocar una de esas piezas con las ruedas en el suelo.

shiver( ) → void

--!desc Tiritar: una pared de hielo lo deja helado dos segundos. Tiembla y el --!desc volante se le va un poco — que es lo que pide la especificación: la --!desc pared de hielo no es una ruta, y chocarse con ella se paga con dos --!desc segundos de no ir fino.

star( ) → void

--!desc Estrella: inmune, un 5 % más rápido y brilla, durante 10 s.

toGrid( ) → void

--!desc Lo coloca en su puesto de la parrilla de salida, mirando hacia la salida y parado. Es a donde vuelve cada kart cuando arranca la cuenta atrás.

warpTo(x: number, z: number, yaw: number) → void

--!desc Lo planta en un punto del mundo mirando hacia donde se le diga, parado. Sirve para empezar una carrera en otro sitio, para volver a la pista y para poder probar un atajo sin conducir hasta él. --!arg x Coordenada X del mundo. --!arg z Coordenada Z del mundo. --!arg yaw Rumbo en grados (0 mira a +Z).

argtypedescription
xnumber
znumber
yawnumber

rescueAt(index: number) → void

--!desc Lo devuelve a la pista en el último punto de control, al estilo Lakitu. --!arg index Muestra del circuito donde dejarlo.

argtypedescription
indexnumber

isBoosting( ) → boolean

--!desc Si ahora mismo tiene un impulso en marcha.

blast( ) → void

--!desc Lo que hace la explosión del caparazón azul: pierde toda la velocidad y sale despedido por los aires unos dos segundos.

useItemNow( ) → boolean

--!desc Gasta el objeto de la mano ahora mismo, sin la L. Es lo que usa una --!desc CPU para gastar lo que lleva, que no tiene botones que pulsar. --!desc Devuelve si ha gastado algo.

isImmune( ) → boolean

--!desc Si es inmune a los objetos ahora mismo: la estrella y el boo lo hacen atravesarlo todo, y la bala también.

armItem(itemId: string) → void

--!desc Le pone un objeto en la mano (lo llama la caja de objetos). --!arg itemId Identificador del objeto, del catálogo de `game.items`.

argtypedescription
itemIdstring

setDriveIntent(steer: number, accel: boolean, brake: boolean) → void

--!desc Lo que pide quien conduce por la máquina: giro, acelerar y frenar. --!arg steer De -1 (izquierda) a 1 (derecha). --!arg accel Si quiere acelerar. --!arg brake Si quiere frenar.

argtypedescription
steernumber
accelboolean
brakeboolean

useItem( ) → void

--!desc Gasta el objeto que lleva en la mano. Es lo que dispara la L.

⌬ Metadata
descriptionModelo de conducción del kart y toda la mecánica de la K: salto, derrape, chispas azul/naranja/arcoíris y salto cargado con sus miniturbos.

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.

43+items
◇
component · born here
❒asset
# 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 | Campo | Qué es | |---|---| | `phase` | En qué punto está la carrera. | | `countdown` | Segundos que quedan de la cuenta atrás. | | `raceTime` | Segundos desde la salida. | | `leaderLap` | Vuelta en la que va quien va primero. | | `totalLaps` | Vueltas de la carrera. | | `trackId` | Circuito en el que se corre. | | `entryCount` | Cuántos karts hay apuntados. | | `standings` | La clasificación: nombre, vuelta, progreso, posición y monedas. | | `results` | El resultado final, en orden de llegada. | | `lastEvent` | El ú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 ```lua entity.spawn("RaceDirector").component.add("Race", { autoStart = true }) ```
▲ 0↑ born
▣
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
# items <!-- 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.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
# kart_visual <!-- 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
# 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
# Projectiles <!-- zero:scaffolded-readme --> <!-- Replace the line below with what this component provides and who consumes it, then delete both comment lines. --> TODO: describe this component.
▲ 0↑ born
◇
component · born here
❒asset
# Venue <!-- zero:scaffolded-readme --> <!-- Replace the line below with what this component provides and who consumes it, then delete both comment lines. --> TODO: describe this component.
▲ 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/Kart.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.