EN

XpaceOS · Documentación técnicaXpaceOS · Technical documentation

Cómo crear elementos para los Xpacios isométricosHow to create elements for the isometric Xpaces

Especificación para diseñar props, mobiliario y superficies a medida que encajen, pixel-perfect, en el motor isométrico de Admira XP (el Digital Twin de XpaceOS).Spec for designing custom props, furniture and surfaces that fit, pixel-perfect, the isometric engine of Admira XP (the XpaceOS Digital Twin).

Documento de referencia · derivado del motor real (game.html) · proyección 80×28Reference document · derived from the real engine (game.html) · 80×28 projection

01 ProyecciónProjection 02 HuellaFootprint 03 AnclajeAnchor 04 IluminaciónLighting 05 Render 06 PantallasScreens 07 EntregablesDeliverables 08 Vía nativaNative path

En una frase: cada elemento vive sobre una rejilla de rombos de 80×28 px; las líneas de suelo van a ±19,3° y las alturas suben verticales en píxeles puros. Si se dibuja con otro ángulo, no encaja. In one sentence: every element lives on a grid of 80×28 px diamonds; floor lines run at ±19.3° and heights rise straight up in pure pixels. Draw it at any other angle and it won't fit.

01Proyección — qué define "nuestro" isométricoProjection — what defines "our" isometric

No es el isométrico clásico 2:1. El tile base es 80 × 28 px:It's not the classic 2:1 isometric. The base tile is 80 × 28 px:

Un tile de suelo es un rombo de 80 ancho × 28 alto. Vértices respecto al de arriba: derecha (+40,+14), abajo (0,+28), izquierda (−40,+14).A floor tile is a diamond 80 wide × 28 tall. Vertices relative to the top one: right (+40,+14), bottom (0,+28), left (−40,+14).

tileW = 80 tileH=28 19,3°19.3° TOP IZQLEFT DERRIGHT anchor (apoyo en suelo)anchor (floor contact) altura (px)height (px)
Tile base 80×28 (izq.) · prisma con 3 caras y anclaje (der.)Base tile 80×28 (left) · prism with 3 faces and anchor (right)
Regla de oro para diseño: verticales = verticales en pantalla; horizontales siguen ±19,3°. Cualquier sprite con otro ángulo NO encaja.Golden design rule: verticals = verticals on screen; horizontals follow ±19.3°. Any sprite at another angle will NOT fit.

02Huella (footprint) — todo va sobre rejillaFootprint — everything sits on the grid

Cada elemento ocupa N×M tiles de suelo. La huella se mide en tiles; la altura, en píxeles.Each element occupies N×M floor tiles. The footprint is measured in tiles; the height, in pixels.

Elemento (motor real)Element (real engine)HuellaFootprintAlturaHeight
MostradorCounter1×216 px
Caja registradoraCash register1×216 px
AromatizadorAir freshener1×144 px
Kiosco / tótemKiosk / totem~0,64×0,64variablevariable

03Anclaje (pivot) — para que no "flote"Anchor (pivot) — so it doesn't "float"

{
  "id": "expositor-tabaco",
  "footprint": [1, 2],     // ancho × fondo en tiles// width × depth in tiles
  "heightPx": 90,
  "anchor": [40, 118],     // px del PNG que toca el suelo en la esquina origen// px of the PNG touching the floor at the origin corner
  "screenRect": null,      // o [x,y,w,h] si lleva pantalla// or [x,y,w,h] if it has a screen
  "palette": { "top":"#a88860", "left":"#6a5030", "right":"#8b6b45" }
}

04Iluminación — 3 caras fijasLighting — 3 fixed faces

Todo se modela como prisma con tres tonos del mismo color. Luz implícita desde arriba-izquierda. Mantener este esquema en TODOS los elementos para coherencia visual.Everything is modeled as a prism with three shades of the same color. Implicit light from the top-left. Keep this scheme on ALL elements for visual consistency.

CaraFaceTonoShadeEjemplo (madera)Example (wood)
Superior (top)Topla más clarathe lightest#a88860
DerechaRightmedia / basemid / base#8b6b45
IzquierdaLeftla más oscurathe darkest#6a5030

Color de pared del local actual: #e8dcc0.Wall color of the current venue: #e8dcc0.

05Dos modos de renderTwo render modes

Entregar compatible con ambos. Si entregáis PNG, hacedlo en estilo 16-bit (es el de feria).Deliver compatible with both. If you ship PNGs, use the 16-bit style (that's the trade-show one).

06Superficies de pantalla (signage)Screen surfaces (signage)

Si el elemento lleva pantalla, su contenido es una zona 16:9, base 160×90 px, que el motor rellena con vídeo/imagen en vivo.If the element has a screen, its content is a 16:9 area, base 160×90 px, which the engine fills with live video/image.

Importante: dejad la pantalla como hueco/marco transparente. No queméis contenido dentro — el twin lo inyecta en tiempo real.Important: leave the screen as a transparent hole/frame. Don't bake content inside — the twin injects it in real time.

07Entregables técnicosTechnical deliverables

08Alternativa nativa (opcional, integración más barata)Native alternative (optional, cheaper integration)

El motor dibuja por código, no por imágenes. La primitiva es:The engine draws by code, not by images. The primitive is:

drawIsoBlock(col, row, ancho, fondo, alturaPxwidth, depth, heightPx, topCol, leftCol, rightCol, neonCol)
//            ↑ posición en rejilla   ↑ huella en tiles  ↑ px   ↑ 3 caras + neón opc.//            ↑ grid position         ↑ footprint tiles  ↑ px   ↑ 3 faces + optional neon

Si pixeria entrega el elemento descompuesto en cajas (lista de prismas: huella + altura + 3 colores), lo integramos sin imágenes y pesa 0 KB. Ideal para mobiliario sencillo (mostrador, expositor, peana).If pixeria delivers the element decomposed into boxes (a list of prisms: footprint + height + 3 colors), we integrate it with no images and it weighs 0 KB. Ideal for simple furniture (counter, display, plinth).