← Todos los artículos

Rutas en pixel art: conexiones de mapa y distritos en el iPhone

Las tres primeras generaciones de Pokémon recorren una celda de 16 pixeles en 16 fotogramas, unas 3,73 celdas por segundo, y el coleccionista de Kiradex camina 4 tiles por segundo, así que un camino medido en los juegos antiguos se traslada a nuestro pueblo a razón de un cuarto de segundo por tile.1234 La primera ruta de cada juego abarca de dos a seis pantallas de consola y no tiene entrenadores; el primer tramo, de la puerta de casa del jugador al Centro Pokémon del pueblo siguiente, son 58 celdas y 15,5 segundos de caminata en Esmeralda y 94 celdas y 25,2 segundos en Rojo Fuego, y la vuelta es más corta en ambos, 42 y 76 celdas, por rutas cuyos repechos miran todos hacia casa.567 Donde cambia el arte, Kanto pone un edificio en el camino: 76 de las 78 conexiones de mapa de Rojo unen un mismo tileset, y cada garita de Rojo entre dos lugares distintos une dos.8 El motor de Hoenn copia siete celdas del mapa vecino en un margen alrededor del mapa actual por tres lados y ocho por el este, las dibuja con los tiles del mapa actual y carga los tiles secundarios y la paleta propios del vecino en el momento en que cruzas, sin fundido.910 La pantalla del mapa de Esmeralda es una cuadrícula de 28 por 15 casillas; la abre un mapa de pared en el piso de arriba de la casa del jugador en Villa Raíz (Littleroot), el PokéNav la lleva consigo desde Ciudad Férrica (Rustboro) en adelante, y dibuja todos los lugares, visitados o no, salvo dos que esperan a ciertas banderas de la historia, mientras que Vuelo (Fly) solo ofrece los pueblos cuya bandera de visita se activó al entrar en ellos.111213 Kiradex World es hoy un único pueblo de 40 por 30 sin nada más allá de la valla.14 Así que medí los caminos, las costuras, las garitas y las pantallas de mapa del canon a partir de las descompilaciones, leí Stardew Valley, Animal Crossing y Link’s Awakening como modelos de contraste, y convertí los números en un encargo para cuatro zonas más allá de la plaza, una pantalla de mapa y un tranvía que abre una parada la primera vez que llegas.

Lo esencial

  • Una celda de caminata cuesta 16 fotogramas, más o menos un cuarto de segundo. Rojo, Cristal y Esmeralda caminan a 16 fotogramas por celda y corren o van en bici a 8, lo que a los 59,7 hercios del hardware da 3,73 y 7,47 celdas por segundo; Kiradex está configurado para caminar 4 tiles por segundo, alrededor de un 7 % más rápido que las portátiles, y para correr a 6,4 nominales, que un modelo por fotogramas de su código sitúa en 6,00 a 60 hercios, alrededor de un 20 % por debajo de la carrera de aquellas.1231541617
  • Una ruta mide de 2 a 10 pantallas, y la primera es corta y la que más hierba tiene. Dieciséis rutas medidas abarcan desde 2,0 (Ruta 101 de Esmeralda) hasta 10,0 (Ruta 32 de Cristal) pantallas de consola a lo largo de su eje; las cuatro primeras rutas tienen entre un 14,4 % y un 22,8 % de hierba alta sobre el área del mapa, la proporción más alta de cada juego, y ningún entrenador. En las nueve rutas cuyos dos extremos se unen a pie, la caminata más larga de lado a lado mide entre 1,15 y 1,70 veces el lado largo de la ruta porque el camino serpentea, y la de vuelta a casa entre 0,95 y 1,42.5617
  • Los repechos acortan el camino a casa. En las nueve rutas medidas cuyos dos extremos se unen a pie, todas ellas con repechos, la caminata hacia el pueblo anterior es entre un 2 % y un 44 % más corta, y el mínimo de celdas de hierba alta en el camino de vuelta va de 0 a 5, frente a 4 a 19 en el de ida.5618
  • Las garitas se alzan donde cambia el arte, y en ellas viven las reglas. Cada garita de Rojo entre dos lugares une dos tilesets; las garitas guardan una comprobación de medalla, un guardia sediento y tres recompensas por tener 10, 30 y 50 especies. El motor de Hoenn carga un tileset nuevo en la costura y se queda con solo 4 edificios de garita frente a los 27 mapas con tileset de garita de Rojo.8192010
  • Una costura de la Gen 3 dibuja siete celdas del vecino (ocho por el este) y carga su arte en el cruce. El margen del búfer es MAP_OFFSET 7 porque «the player has 7 metatiles of view horizontally in either direction» (el jugador ve 7 metatiles en horizontal hacia cada lado), y el lado este copia MAP_OFFSET + 1 columnas; al cruzar se cargan el tileset secundario, la música y el clima del mapa nuevo y entra deslizándose un rótulo con el nombre durante unos 3,2 segundos, sin fundido.91021
  • La pantalla del mapa muestra todos los lugares; el viaje rápido muestra dónde has estado. El mapa de Esmeralda tiene 28 por 15 casillas, 158 de ellas ocupadas por 54 lugares, y en cuanto el jugador puede abrirlo (un mapa de pared en el piso de arriba de su casa, después el PokéNav) dibuja todos los lugares, visitados o no, salvo dos retenidos por banderas de la historia; un pueblo se convierte en destino de Vuelo solo cuando su bandera FLAG_VISITED_* se activa al entrar, y Rojo, Rojo Fuego, Cristal y Link’s Awakening llevan el mismo tipo de registro de visitas.11121322232425
  • Lo que esto le da a Kiradex. Un encargo para cuatro zonas más allá de la Plaza (la Calle de los Álbumes, el Paseo de la Pradera, la Orilla del Lago y el Barrio de la Galería) con 2,8 veces el área de la Plaza, costuras abiertas sin fundido, un único grafo de caminata en ocho direcciones para la app y el servidor, una pantalla de mapa de 16 por 12, un tranvía cuyas paradas se abren en la primera visita, hallazgos que son solo cosméticos o notas de misión, y trece comprobaciones de aceptación que puede ejecutar un script o una captura.262728

1. Las rutas, medidas

Los tres artículos de esta serie del 3 de octubre se quedaron dentro de la valla. Mundos de pixel art en el iPhone fijó el sistema de tiles y la receta de RealityKit, Personas en pixel art el coleccionista, y Estructuras en pixel art los edificios y las puertas. De ellos salió Kiradex World como un único pueblo: 40 por 30 tiles, el bosque dibujado 12 tiles más allá de la valla, siete edificios cuyas puertas llevan a habitaciones o al salón, y un único tile de llegada.14 Este artículo trata de lo que hay más allá de la valla, y empieza donde empezaron los anteriores: en las descompilaciones.

Cada número de Pokémon que aparece a continuación se midió sobre clones superficiales de las descompilaciones de pret en pokered d2704a6, pokecrystal 5beda23, pokeemerald 731ad5b y pokefirered 037335f, con seis pequeños scripts de Python que se vuelven a ejecutar en un segundo o menos cada uno; las notas nombran el script que respalda cada cifra.29 La unidad es la celda, una casilla de caminata de 16 por 16 pixeles: un metatile de la Gen 3, o un cuarto de bloque de la Gen 1 o la Gen 2. Una pantalla de Game Boy muestra 10 por 9 celdas (160 por 144 pixeles) y una de Game Boy Advance 15 por 10 (240 por 160).29 El modelo de caminata es el mismo en todos los scripts: un paso cuesta una celda; un repecho solo se cruza en su dirección y se aterriza una celda más allá, dos celdas de movimiento; en Cristal, un paso no puede atravesar el muro de un solo lado de un tile, y un repecho de esquina salta en cualquiera de sus dos direcciones (la sección 2 trae el código); una costura cuenta solo donde la celda que da al otro lado, en el vecino, es alcanzable a pie desde alguna de las puertas del vecino; los entrenadores y demás personas se ignoran, y el surf no se modela.29

El reloj

Las tres generaciones caminan al mismo ritmo. En Rojo, OverworldLoop llama a DelayFrame dos veces por iteración y AdvancePlayerSprite mueve la vista 2 pixeles por iteración durante 8 iteraciones (wWalkCounter vale 8), así que una celda lleva 16 fotogramas; en bicicleta, AdvancePlayerSprite se ejecuta dos veces por iteración, 8 fotogramas por celda.1 Los StepVectors de Cristal dan a un paso caminando 8 ticks de 2 pixeles y a un paso en bici 4 ticks de 4 pixeles, y su mundo exterior ejecuta un tick cada 2 fotogramas (MaxOverworldDelay: db 2), lo que vuelve a dar 16 fotogramas por celda caminando y 8 en bici.2 Las tablas de paso de Esmeralda tienen 16 entradas para caminar (sStep1Funcs), 8 para correr y hacer surf, 6 para la Bici Acrobática y las corrientes de agua, 4 para la Bici Carrera a toda velocidad y 2 para la más rápida; un salto de repecho (JUMP_DISTANCE_FAR) dura 32 fotogramas por dos celdas y sube 12 pixeles en su punto más alto (sJumpY_High).3

El fotograma es la otra mitad del reloj. GBATEK da el fotograma de la Game Boy Advance como 280.896 ciclos, «ca. 59.737 Hz»; Pan Docs da el de la Game Boy como 70.224 dots «@ 59.7 fps».1530 A 16 fotogramas por celda, caminar son unas 3,73 celdas por segundo y correr unas 7,47.17 Los segundos de este artículo usan 224 hercios divididos entre 280.896, es decir, 59,7275 fotogramas por segundo; GBATEK da 59,737, y la diferencia es inferior al 0,02 %.29

El coleccionista de Kiradex camina a tilesPerSecond = 4 y corre a 1,6 veces eso, unos nominales 6,4 tiles por segundo.4 La cifra de la carrera es la constante, no la velocidad que alcanza el código: el artículo de esta serie sobre el movimiento modeló el código fotograma a fotograma y encontró que la carrera cubre 6,00 tiles por segundo a 60 hercios y 6,32 a 120, porque cada paso tira el avance con el que se pasa de largo.16 La caminata es alrededor de un 7 % más rápida que la de las portátiles; la carrera queda alrededor de un 20 % por debajo de la suya a 60 hercios, y un 14 % por debajo en sus 6,4 nominales.17 La caminata se parece lo bastante como para que una distancia medida en sus celdas se traduzca a la nuestra con una tasa fija: el tiempo de una ruta es su número de celdas por 0,27 segundos a la caminata de las portátiles, y su número de tiles por 0,25 segundos a la nuestra.17

Dieciséis rutas

Medí las cuatro primeras rutas de cada juego: las Rutas 1 a 4 de Rojo, la 29 a la 32 de Cristal, la 101 a la 104 de Esmeralda y la 1 a la 4 de Rojo Fuego. Las celdas de la Gen 3 se leen de map.bin (bits 0 a 9 el metatile, 10 y 11 la colisión, 12 a 15 la elevación) y el comportamiento de cada celda se consulta en el metatile_attributes.bin primario o secundario; los entrenadores son los eventos de objeto del mapa cuyo trainer_type no es TRAINER_TYPE_NONE.6 En la Gen 1, cada celda se lee por su tile de 8 por 8 inferior izquierdo dentro de la celda de 16 por 16, contra la lista de colisiones del tileset, el tile de hierba $52 y la tabla de repechos; en la Gen 2, por los cuatro bytes de colisión que cada bloque lleva por cuadrante.5

Juego Ruta Tamaño (celdas) Pantallas a lo largo de su eje Transitable Hierba alta, celdas (% del mapa) Celdas de repecho / tramos Entrenadores Caminata más corta de lado a lado, en cada sentido (celdas)
Rojo 1 20 por 36 4,0 76,8 % 104 (14,4 %) 42 / 10 0 sur 40, norte 52
Rojo 2 20 por 72 8,0 55,9 % 84 (5,8 %) 52 / 14 0 partida por un bosque
Rojo 3 70 por 18 7,0 35,1 % 100 (7,9 %) 36 / 10 8 hacia Ciudad Plateada 82, alejándose 84
Rojo 4 90 por 18 9,0 45,0 % 60 (3,7 %) 169 / 27 1 partida por una cueva
Cristal 29 60 por 18 6,0 47,7 % 160 (14,8 %) 35 / 13 0 este 71, oeste 90
Cristal 30 20 por 54 6,0 47,6 % 140 (13,0 %) 21 / 6 3 sur 57, norte 74
Cristal 31 40 por 18 4,0 39,3 % 64 (8,9 %) 13 / 5 1 el extremo oeste es una garita
Cristal 32 20 por 90 10,0 48,3 % 152 (8,4 %) 6 / 5 8 sur 132, norte 128
Esmeralda 101 20 por 20 2,0 59,2 % 91 (22,8 %) 13 / 3 más 1 de esquina 0 sur 19, norte 34
Esmeralda 102 50 por 20 3,3 48,9 % 143 (14,3 %) 17 / 4 4 este 55, oeste 62
Esmeralda 103 80 por 22 5,3 27,3 % 92 (5,2 %) 24 / 3 9 partida por el mar
Esmeralda 104 40 por 80 8,0 34,0 % 126 (3,9 %) 13 / 4 8 partida por un bosque
Rojo Fuego 1 24 por 40 4,0 62,3 % 178 (18,5 %) 61 / 10 0 sur 43, norte 58
Rojo Fuego 2 24 por 80 8,0 40,8 % 84 (4,4 %) 44 / 13 0 partida por un bosque
Rojo Fuego 3 84 por 20 5,6 37,6 % 117 (7,0 %) 42 / 10 8 hacia Ciudad Plateada 94, alejándose 97
Rojo Fuego 4 108 por 20 7,2 42,9 % 84 (3,9 %) 186 / 28 1 partida por una cueva

Fuentes de la tabla: measure_gen12_routes.py y measure_gen3_routes.py sobre las cuatro descompilaciones.56 La columna de pantallas divide el lado largo entre la vista de la consola en ese eje (10 o 9 celdas en la Game Boy, 15 o 10 en la Game Boy Advance). La columna de transitable es la proporción de celdas en las que se puede estar de pie. Las celdas de repecho son las celdas de salto en las Gens 1 y 3 y las celdas de borde en la Gen 2. Las caminatas van entre celdas de costura alcanzables desde una puerta, y una ruta partida es aquella en la que no existe dentro del mapa ninguna caminata de costura a costura porque un bosque, una cueva, una garita o el mar se interponen entre las dos mitades.29

Gráfico de barras de dieciséis rutas tempranas de Pokémon: el lado largo de cada mapa en celdas, con puntos para la caminata más corta de lado a lado en cada sentido y una etiqueta con las pantallas de consola que abarca, desde la Ruta 101 de Esmeralda con 2,0 pantallas hasta la Ruta 32 de Cristal con 10,0, sobre un eje en celdas y en segundos caminando.

Longitud de las rutas en su eje largo, con la caminata más corta de lado a lado en cada sentido; dibujado por figures/make_figures.py a partir de las salidas de los dos scripts de rutas.

De la tabla salen cinco cosas.

Las rutas abarcan de 2 a 10 pantallas, y la primera es corta. La Ruta 101 de Esmeralda mide dos pantallas de Game Boy Advance de alto; la Ruta 32 de Cristal, diez pantallas de Game Boy de alto; la primera ruta de cada juego, de dos a seis pantallas.56 En celdas, las rutas medidas van de 20 a 108 en su lado largo.6

La caminata más larga de lado a lado mide de 1,15 a 1,70 veces el lado largo. Nueve de las dieciséis rutas se pueden recorrer de punta a punta. En esas nueve, la caminata más corta en el sentido más largo, puesta frente al lado largo de la ruta, es 34 sobre 20, 1,70, hacia el norte en la Ruta 101 de Esmeralda; 90 sobre 60, 1,50, en la Ruta 29 de Cristal; 132 sobre 90, 1,47, en la Ruta 32 de Cristal; 58 sobre 40, 1,45, en la Ruta 1 de Rojo Fuego; 52 sobre 36, 1,44, en la Ruta 1 de Rojo; 74 sobre 54, 1,37, en la Ruta 30 de Cristal; 62 sobre 50, 1,24, en la Ruta 102 de Esmeralda; 84 sobre 70, 1,20, en la Ruta 3 de Rojo; y 97 sobre 84, 1,15, en la Ruta 3 de Rojo Fuego.5617 La vuelta a casa es más recta, de 0,95 a 1,42 veces el lado largo: 19 sobre 20 en la Ruta 101 de Esmeralda, 57 sobre 54 en la Ruta 30 de Cristal, 43 sobre 40 en la Ruta 1 de Rojo Fuego, 55 sobre 50 en la Ruta 102 de Esmeralda, 40 sobre 36 en la Ruta 1 de Rojo, 94 sobre 84 en la Ruta 3 de Rojo Fuego, 82 sobre 70 en la Ruta 3 de Rojo, 71 sobre 60 en la Ruta 29 de Cristal, y 128 sobre 90 en la Ruta 32 de Cristal, cuyos muros de un solo lado obligan a dar el rodeo largo en ambos sentidos.5617 Un cociente menor que 1 no es un atajo a través del espacio: una caminata desde una celda de costura de la primera fila hasta una de la última fila de un mapa de 20 celdas lleva 19 pasos, así que una ruta completamente recta puntúa 0,95.17 Según mi lectura, la cifra de ida es la que sirve para dimensionar una ruta: su caminata serpenteante, no su rectángulo envolvente.

La hierba se va aclarando a medida que avanza el viaje. La hierba alta cubre entre un 3,7 % y un 22,8 % del mapa de una ruta. Las cuatro primeras rutas, Rojo 1, Cristal 29, Esmeralda 101 y Rojo Fuego 1, son las de más hierba entre las cuatro de su juego, con un 14,4 %, un 14,8 %, un 22,8 % y un 18,5 %; las segundas rutas van del 4,4 % al 14,3 % y las terceras y cuartas del 3,7 % al 8,9 %.56 Si se cuenta en cambio sobre el suelo transitable, las proporciones son mayores y la tendencia solo se sostiene en promedio: las primeras rutas tienen entre un 18,8 % y un 38,4 % de hierba alta y las otras doce entre un 8,2 % y un 29,2 %, y la Ruta 3 de Rojo (22,6 %) tiene más hierba bajo los pies que la Ruta 1 de Rojo (18,8 %). En la Ruta 101 de Esmeralda, 91 de las 237 celdas transitables son hierba alta, un 38,4 %.5617

Ninguna primera ruta tiene entrenadores. Rojo 1, Rojo Fuego 1, Esmeralda 101 y Cristal 29 no tienen ninguno; los entrenadores empiezan en la segunda o la tercera ruta, con 4 en la Ruta 102 de Esmeralda, 3 en la Ruta 30 de Cristal y 8 en la Ruta 3 de Rojo y de Rojo Fuego.56 Sus rangos de visión en estas rutas van de 0 a 7 celdas; los nueve entrenadores de la Ruta 103 de Esmeralda ven de 1 a 5 celdas y los ocho de la Ruta 104, de 0 a 7.6

Una zona de encuentros tira los dados más o menos uno de cada nueve pasos, tras un breve periodo de gracia. Esmeralda nunca pone a prueba los cuatro primeros pasos después de que el jugador entre en un mapa, por una costura o por una puerta, ni después de un combate: CheckStandardWildEncounter va descontando esos pasos mientras sWildEncounterImmunitySteps < 4 y reinicia la cuenta después de cada encuentro, y cada carga de mapa y cada inicio de combate la reinician también. A partir de ahí, cada paso sobre una celda de encuentros se pone a prueba: un 40 % de probabilidad de saltarse la prueba cuando el paso lleva a un comportamiento distinto, y después Random() % 2880 < rate × 16. Las Rutas 101 a 104 usan todas la tasa 20, así que la tirada sin modificar es 320 entre 2.880, un 11,1 % por paso a pie; una bicicleta, una flauta, un Amuleto (Cleanse Tag) o algunas habilidades del Pokémon que va en cabeza la escalan antes.31 Rojo Fuego añade un suelo y una rampa: después de un encuentro, y al entrar en un mapa, un enfriamiento de 8 − rate/10 pasos por celdas de encuentro (6 para la tasa 21 de las Rutas 1 a 4), en cada uno de los cuales una tirada del 5 % permite que ese paso concreto intente un encuentro sin terminar el enfriamiento; después la tirada del 60 % en un comportamiento nuevo; después rate × 16 sobre 1.600, un 21 %, más un refuerzo que crece en el valor de la tasa tras cada tirada fallida (encounterRateBuff).32 Leo la gracia, el suelo y la rampa como formas de mantener cortas tanto las sequías como las avalanchas. Kiradex no tendrá combates salvajes, así que aquí el número importa solo como ritmo: pasados los primeros pasos, una primera ruta ofrece algo que notar más o menos cada nueve pasos de hierba.

Cuánto de un mundo es camino

Juego Mapas de ruta Celdas de ruta Mapas de pueblo Celdas de pueblo Ruta frente a pueblo
Rojo 25 31.500 11 11.880 2,65
Cristal (Johto y Kanto) 54 49.880 23 25.380 1,97
Esmeralda (rutas terrestres) 41 87.787 16 23.700 3,70
Rojo Fuego (con las Islas Sete) 57 98.451 19 25.470 3,87

Los caminos ocupan de dos a cuatro veces el área de los pueblos.33 Las 11 rutas marítimas de Esmeralda sumarían otras 45.600 celdas.33 El cociente depende de cómo se clasifica un mapa, y cada juego clasifica de forma distinta: Rojo por id y nombre de mapa, Cristal por entorno (su entorno ROUTE incluye, por ejemplo, el exterior de las Ruinas Alfa), Esmeralda y Rojo Fuego por map_type, donde las rutas de Rojo Fuego incluyen las Islas Sete y las de Esmeralda excluyen el océano.33 En la pantalla del mapa de Esmeralda, ese mismo mundo se lee como 129 casillas de ruta frente a 22 casillas de pueblo, 5,9 a 1, porque un pueblo ocupa una o dos casillas por grande que sea: diez de sus 16 pueblos y ciudades ocupan una, y seis ocupan dos.341117

La Ruta 1, de tres maneras

Rojo, Rojo Fuego y Cristal dibujan la misma idea a tres resoluciones, y la Ruta 1 es la comparación más limpia. La de Rojo mide 10 por 18 bloques, 20 por 36 celdas, cuatro pantallas de Game Boy de alto, con 42 celdas de repecho en 10 tramos orientados al sur entre postes de valla y líneas de árboles, y 104 celdas de hierba.5 Para comprobar el modelo de celdas de la Gen 1 rendericé ese mapa a partir de su blockset al doble de tamaño con una cuadrícula de 16 pixeles; muestra una franja de 3 celdas de terreno abierto fuera de la línea de árboles occidental que toca ambas costuras y no se puede alcanzar desde las puertas de ninguno de los dos pueblos, y por eso las búsquedas siembran sus cruces desde las puertas de los vecinos.5 El modelo de la Gen 1 lee un tile de 8 por 8 por celda, el inferior izquierdo, y se comprobó a ojo solo sobre ese render; las colisiones por pares de tiles, como los pares de agua a tierra, no se modelan.29

La Ruta 1 de Rojo Fuego mide 24 por 40 celdas, sigue teniendo cuatro pantallas de alto en la pantalla más grande, con 61 celdas de repecho y 178 celdas de hierba, el 18,5 % del mapa: el remake conservó la longitud en pantallas, agrandó el mapa 4 celdas en cada dirección y añadió repechos.6 De la puerta principal de Pueblo Paleta (Pallet) al Centro de Ciudad Verde (Viridian) hay 94 celdas, 25 segundos, y en sentido contrario 76.7 La ruta inicial de Cristal, la Ruta 29, mide 60 por 18 celdas, seis pantallas de Game Boy de ancho, con un 14,8 % de hierba y sin entrenadores; la caminata de lado a lado desde el lado de Pueblo Primavera (New Bark) hasta el de Ciudad Cerezo (Cherrygrove) es de 90 celdas y la de vuelta de 71.5

2. De puerta a puerta, y el camino a casa

La longitud propia de una ruta es solo una parte del viaje. Lo que siente el jugador es el tramo: salir de un edificio, cruzar un pueblo, atravesar la ruta y el pueblo siguiente, entrar en el edificio siguiente. measure_travel.py busca ese camino completo, sobre pares (mapa, celda), a través de costuras, warps y repechos, desde la celda que hay bajo la primera puerta hasta la última puerta, contando el paso de entrada en ella.7

Juego Desde Hasta Celdas Caminando Corriendo Mapas cruzados
Esmeralda Villa Raíz, casa del jugador Centro de Pueblo Escaso 58 15,5 s 7,8 s pueblo, ruta, pueblo
Esmeralda Centro de Pueblo Escaso Centro de Ciudad Petalia 87 23,3 s 11,7 s pueblo, ruta, ciudad
Esmeralda Centro de Ciudad Petalia Centro de Ciudad Férrica 250 67,0 s 33,5 s ciudad, ruta, bosque, ruta, ciudad
Rojo Fuego Pueblo Paleta, casa del jugador Centro de Ciudad Verde 94 25,2 s 12,6 s pueblo, ruta, ciudad
Rojo Fuego Centro de Ciudad Verde Centro de Ciudad Plateada 267 (156 tras Corte) 71,5 s (41,8 s) 35,8 s a través de las dos garitas del bosque
Rojo Fuego Centro de Ciudad Plateada Centro de la Ruta 4 150 40,2 s 20,1 s ciudad, ruta, ruta
Rojo Fuego Centro de la Ruta 4 Centro de Ciudad Celeste 314 84,1 s 42,3 s a través de tres pisos de cueva, uno de ellos dos veces

Los segundos caminando son celdas por 16 fotogramas entre 59,7275 hercios. Corriendo es una segunda búsqueda del menor número de fotogramas, 8 por celda, con cada salto de repecho todavía a 32 fotogramas, porque el salto es el mismo salto de 32 fotogramas a cualquier marcha; de los siete tramos de arriba, solo el de la cueva salta un repecho, una vez, lo que lo deja en 2.528 fotogramas en lugar de 2.512. La cifra «tras Corte» es la misma búsqueda con los cinco árboles de Corte (Cut) de la Ruta 2 eliminados, lo que abre el camino del este a través de ROUTE2_EAST_BUILDING. No se cuentan fundidos ni combates.7 Dos simplificaciones de la búsqueda pesan sobre todo en el tramo de la cueva: la elevación de la Gen 3 se reduce a dos casos, alturas iguales o cualquiera de los dos lados a 0 o 15, y un warp se activa cuando se pisa al entrar y no cuando se llega a él, así que las 314 celdas a través de la cueva, cuyo camino recorre 1F, B1F, B2F y otra vez B1F, son el número menos seguro de la tabla.29

Barras horizontales de siete tramos medidos de puerta a puerta en Pokémon Esmeralda y Rojo Fuego, de ida y de vuelta, en segundos caminando y con el número de celdas, con una barra de vuelta para los cinco tramos medidos en ambos sentidos; los dos primeros tramos son de 15,5 y 25,2 segundos a la ida y de 11,3 y 20,4 a la vuelta; debajo, tres barras de rango con los objetivos del encargo de Kiradex a cuatro tiles por segundo.

De puerta a puerta, a la ida, y a la vuelta donde se midió el regreso, con los objetivos del encargo junto al canon; dibujado por figures/make_figures.py a partir de travel.json.

Un primer tramo son de 15 a 25 segundos de caminata. De la puerta de casa al Centro del pueblo siguiente hay 58 celdas, 15,5 segundos, en Esmeralda y 94 celdas, 25,2 segundos, en Rojo Fuego.7 Los tramos que llegan al minuto (las 250 celdas de Esmeralda, las 267 y las 314 de Rojo Fuego) pasan por un bosque o una cueva; según mi lectura son mazmorras, no caminos, y una mazmorra es un tipo de lugar en sí mismo.

La vuelta es más corta. Del Centro de Pueblo Escaso a la casa del jugador en Villa Raíz hay 42 celdas frente a 58 a la ida; de Ciudad Verde a Pueblo Paleta, 76 frente a 94; de Ciudad Petalia a Pueblo Escaso, 81 frente a 87; de Ciudad Férrica a Ciudad Petalia, 196 frente a 250; de Ciudad Plateada a Ciudad Verde, 254 frente a 267.7

Una MO es un atajo a través de una garita junto a la que ya pasaste. Sin los árboles de Corte de la Ruta 2, de Ciudad Verde a Ciudad Plateada hay 156 celdas en lugar de 267, y el camino pasa por el edificio del este de la Ruta 2 en lugar de por el bosque.7

Los tres primeros tramos de Hoenn

Esmeralda abre con tres respuestas distintas a la pregunta de qué hay entre pueblos, y las mediciones hacen legible el diseño.

La Ruta 101 es un pasillo con una puerta principal en cada extremo. Mide 20 por 20 celdas, dos pantallas de alto, con un 22,8 % de hierba alta, 91 de las 237 celdas en las que se puede estar de pie; la cruzan tres tramos de repecho de cuatro celdas orientados al sur. Caminar hacia el norte desde Villa Raíz lleva 34 celdas y cruza al menos 10 celdas de hierba; caminar hacia el sur desde Pueblo Escaso lleva 19 y puede evitar la hierba por completo saltando los repechos. De la puerta principal de la casa del jugador al Centro de Pueblo Escaso hay 58 celdas, 15,5 segundos caminando.6187

La Ruta 102 es más ancha y tiene los primeros entrenadores. Mide 50 por 20 celdas, 3,3 pantallas de ancho, con un 14,3 % de hierba, 4 entrenadores cuya visión es de 2 o 3 celdas, un estanque de 26 celdas de agua y 17 celdas de repecho. Ciudad Petalia se une a ella con un desplazamiento de −10, así que las 20 filas de la ruta dan a las filas 10 a 29 de Petalia. De Centro a Centro, de Pueblo Escaso a Ciudad Petalia hay 87 celdas, 23,3 segundos, y 81 a la vuelta.67

La Ruta 104 es una ruta en dos mitades. Mide 40 por 80 celdas, ocho pantallas de alto, una cuarta parte de ella es agua, y ninguna caminata une sus tres costuras dentro del mapa: la mitad sur llega a la entrada sur del Bosque Petalia (Petalburg Woods), a 51 celdas de la costura de Petalia, y la mitad norte a su salida norte, a 60 celdas de la costura de Ciudad Férrica hasta la más cercana de las dos celdas del umbral de la salida (61 hasta la otra). Del Centro de Ciudad Petalia al de Ciudad Férrica hay 250 celdas a través de cinco mapas (ciudad, ruta, bosque, ruta, ciudad), 67 segundos caminando, y 196 a la vuelta.67

Lo que cambia entre las tres es el denominador. La primera ruta es una caminata de menos de 20 segundos sin entrenadores y con un camino a casa sin hierba; la tercera es un minuto de caminata a través de una mazmorra. Según mi lectura, el juego empieza a gastar distancia solo cuando el jugador ya ha aprendido a caminar.

Los repechos apuntan a casa

Gráfico de pesas de nueve rutas tempranas que muestra la caminata más corta de ida, alejándose del pueblo anterior, y la de vuelta a casa, en celdas: Ruta 1 de Rojo 52 y 40, Ruta 1 de Rojo Fuego 58 y 43, Ruta 101 de Esmeralda 34 y 19, Ruta 102 de Esmeralda 62 y 55, Ruta 29 de Cristal 90 y 71, Ruta 30 de Cristal 74 y 57, Ruta 3 de Rojo 84 y 82, Ruta 3 de Rojo Fuego 97 y 94, Ruta 32 de Cristal 132 y 128; debajo, barras emparejadas con el mínimo de celdas de hierba alta en cada sentido en cuatro rutas medidas.

Ida y vuelta en cada ruta medida cuyos dos extremos se unen a pie, y el mínimo de celdas de hierba en cada sentido; dibujado por figures/make_figures.py a partir de las salidas de los scripts de rutas y de grass_paths.txt.

En cada ruta medida cuyos dos extremos se unen a pie, las nueve con repechos, la caminata hacia el pueblo anterior es más corta. En la Ruta 1 de Rojo son 40 celdas de vuelta frente a 52 de ida, un 23 % menos; en la Ruta 1 de Rojo Fuego, 43 frente a 58, un 26 %; en la Ruta 101 de Esmeralda, 19 frente a 34, un 44 %; en la Ruta 102 de Esmeralda, 55 frente a 62, un 11 %; en la Ruta 29 de Cristal, 71 frente a 90, un 21 %; en la Ruta 30 de Cristal, 57 frente a 74, un 23 %; en la Ruta 3 de Rojo, 82 frente a 84, en la Ruta 3 de Rojo Fuego, 94 frente a 97 y en la Ruta 32 de Cristal, 128 frente a 132, entre un 2 % y un 3 % cada una. Las 4 celdas de la Ruta 32 salen de un salto lateral desde un repecho de esquina, el único salto de la vuelta.5617 Los repechos de las primeras rutas miran todos hacia el mismo lado: las 42 celdas de repecho en 10 tramos de la Ruta 1 de Rojo, las 61 en 10 tramos de la Ruta 1 de Rojo Fuego y las 13 de la Ruta 101 de Esmeralda (tres tramos de cuatro y una celda de esquina) miran todas al sur, la de esquina al sureste, que en cada uno de esos mapas es el camino de vuelta al pueblo de partida.56

Los repechos también sacan la hierba del camino a casa. Una segunda búsqueda, que minimiza las celdas de hierba alta atravesadas en lugar de los pasos, encuentra que hacia el norte en la Ruta 1 de Rojo hay que cruzar al menos 15 celdas de hierba y hacia el sur solo 4, todas ellas en el paso estrecho junto a Pueblo Paleta; en la Ruta 1 de Rojo Fuego son 19 frente a 5; en la Ruta 101 de Esmeralda, 10 frente a 0; en la Ruta 102 de Esmeralda, 4 a la ida frente a 0 a la vuelta.18 La guía de Bulbapedia sobre la Ruta 1 de Kanto dice lo mismo en prosa: yendo hacia el sur, los entrenadores «can either hop down ledges to completely avoid any contact with wild Pokémon» (pueden saltar los repechos para evitar por completo cualquier contacto con Pokémon salvajes) o atravesar «the grass patches, the required path for northbound travel» (las zonas de hierba, el camino obligado para ir hacia el norte).35 Es una sola página wiki usada una sola vez, como contraste de la búsqueda, y la búsqueda coincide con ella salvo en el paso estrecho junto a Pueblo Paleta: mide dos celdas de ancho y cuatro filas de hierba de fondo, así que toda caminata hacia el sur en el modelo de celdas cruza allí 4 celdas de hierba, una por fila. Los repechos llevan al caminante alrededor de toda la demás hierba de la ruta, no de absolutamente toda.18

Los números de la Gen 2 necesitan una salvedad cada uno. La colisión de Cristal son cuatro bytes por bloque de 32 pixeles, uno por cuadrante, y los scripts suponen que van en orden de filas (arriba a la izquierda, arriba a la derecha, abajo a la izquierda, abajo a la derecha), porque la macro tilecoll no nombra el orden.29 Un byte COLL_HOP_* de la Gen 2 marca el borde sobre el que está el jugador y no la celda de más allá, cosa que probe_gen2_ledges.py zanjó al encontrar una celda WALL debajo de cada una de las 21 celdas HOP_DOWN de la Ruta 30; la lectura del borde solo se sondeó en las Rutas 29 y 30.529 Cristal tiene además muros de un solo lado. Un byte de colisión entre COLL_RIGHT_WALL y COLL_UP_LEFT_WALL es tierra, pero GetMovementPermissions rechaza un paso que salga de ese tile por su lado amurallado, y un paso que entre en él por ese lado; en la Ruta 32, la única de las cuatro que tiene alguno (41 celdas, todas UP_WALL), alargan la caminata más corta de las 110 celdas en cada sentido que encuentra una búsqueda que los ignora a 132 a la ida y 128 a la vuelta. Sus repechos de esquina, HOP_DOWN_RIGHT y HOP_DOWN_LEFT, saltan hacia abajo o hacia el lado, según hacia dónde mire el jugador, una vez que el paso normal se rechaza, y la vuelta usa uno de ellos de lado. Rojo no tiene muros de un solo lado: su única otra regla de movimiento, las colisiones por pares de tiles, funciona en ambos sentidos y solo figura para los tilesets de cueva y de bosque, que ninguno de estos mapas usa.5 Y la búsqueda cuenta un repecho como dos celdas de movimiento, lo que coincide con el salto de 32 fotogramas de la Gen 3 y se supone para las Gens 1 y 2.293

Lo que muestran los datos es un resultado, no una intención: no encontré ninguna declaración de los desarrolladores de que los repechos se colocaran para acortar el camino a casa, solo que en cada ruta medida lo acortan.29 La regla que saco de ahí es que un repecho es un atajo de vuelta en un solo sentido, nunca un muro hacia delante.

La cuestión de la elevación

Este hallazgo encaja mal con el artículo anterior. El dossier de estructuras que respalda Estructuras en pixel art rechazó los repechos de plano, «No ledges to jump, no climbing, no isometric» (nada de repechos que saltar, nada de escalar, nada de isométrico), y ese artículo incluye un repecho de un solo sentido entre las cosas que su compilación no hace.3637 Este dossier mide los repechos como el atajo de vuelta a casa del canon. Los dos no están en conflicto sobre los hechos; discrepan sobre si un pueblo de coleccionistas necesita altura para conseguir el efecto. La decisión corresponde al siguiente artículo del programa, sobre elevación, repechos y puentes, que todavía no está publicado. Hasta que se decida allí, el encargo de la sección 7 aplaza los repechos al artículo sobre la elevación y obtiene su camino a casa más corto de una puerta en el seto: una puerta en el Paseo de la Pradera que solo se abre desde el lado del lago, el mismo atajo de vuelta en un solo sentido, sin ninguna altura.26

3. Costuras, garitas y la pantalla del mapa

El mundo exterior de un Pokémon no es un único mapa grande. Son muchos mapas pequeños, cada uno con su propio tamaño, sus tiles y su música, unidos borde con borde para que pases caminando de uno al siguiente sin corte. Cómo funciona esa unión decide casi todo lo demás en esta sección: dónde tiene que plantarse un edificio en el camino, por qué los remakes tienen menos, y qué puede saber la pantalla del mapa.

Gen 1 y Gen 2: una franja copiada en un margen

Una conexión de Rojo es una línea en la cabecera de un mapa que nombra una dirección, el vecino y un desplazamiento en bloques; la de la Ruta 1 es connection north, ViridianCity, VIRIDIAN_CITY, -5, y la macro precalcula qué franja de bloques del vecino se copia en el búfer del mapa actual.38 El búfer, wOverworldMap, guarda el mapa con un margen de MAP_BORDER EQU 3 bloques, 6 celdas, por cada lado; la conexión llena ese margen con las 3 filas o columnas de bloques más cercanas del vecino, y CheckMapConnections cambia de mapa cuando la coordenada del jugador pasa de −1 o del ancho o el alto del mapa.39

Como la franja se copia como números de bloque y se dibuja con el blockset que esté cargado, dos mapas solo pueden encontrarse en una costura si comparten tileset, y los datos de Rojo se atienen a eso: de sus 78 líneas de conexión, 76 unen mapas con el mismo tileset. Las dos excepciones son la Ruta 22 y la Ruta 23, OVERWORLD frente a PLATEAU, y los archivos de cabecera marcan ambas líneas con «; unnecessary» (innecesaria).840 Cristal tiene 142 líneas de conexión; 138 unen el mismo tileset (las excepciones son Ciudad Trigal y la Ruta 35, y la Ruta 32 y la Ruta 33, Johto frente a Johto Modern), y 92 se quedan dentro de un mismo grupo de mapas.841

Gen 3: siete celdas del vecino (ocho por el este), y el arte en el cruce

Una conexión de la Gen 3 es una entrada de map, offset y direction en el map.json del mapa. Esmeralda tiene 134 entradas hacia arriba, abajo, izquierda y derecha más 14 de buceo y emersión, y cada una de las 134 tiene una entrada inversa correspondiente con el desplazamiento negado.8 Porymap, el editor de mapas que usa la comunidad de la descompilación, describe la función en tres frases: «Maps can be connected together so that the player can seamlessly walk between them» (los mapas pueden conectarse para que el jugador camine de uno a otro sin interrupción); «A connection has a direction, offset, and destination map» (una conexión tiene dirección, desplazamiento y mapa de destino); y «Connections are one-way, which means that you must keep the two connections in sync between the two maps» (las conexiones van en un solo sentido, así que hay que mantener sincronizadas las dos conexiones entre ambos mapas).42

El motor copia el mapa actual en un búfer con MAP_OFFSET 7 celdas de margen por cada lado (8 por el este, porque el búfer mide el ancho del mapa más MAP_OFFSET_W, 2 × 7 + 1), y la cabecera da la razón en un comentario: «the player has 7 metatiles of view horizontally in either direction» (el jugador ve 7 metatiles en horizontal hacia cada lado). FillSouthConnection y sus hermanas copian 7 filas o columnas del vecino en ese margen (8 columnas por el este) en el desplazamiento de la conexión, abarcando solo el ancho propio del vecino (FillNorthConnection empieza en el desplazamiento más MAP_OFFSET y copia el ancho del vecino allí donde cabe), y el búfer entero puede guardar como mucho MAX_MAP_DATA_SIZE 10240 celdas.9 Donde no hay conexión, el margen es el patrón de borde de 2 por 2 del layout, combinado con OR con MAPGRID_IMPASSABLE para que nunca se pueda pisar (GetBorderBlockAt).9

Esquema del búfer de mapa de la Gen 3 para una ruta de 20 por 20 celdas con un vecino de 20 celdas de ancho unido por el norte con desplazamiento 0: la ruta en el centro, un margen de 7 celdas al oeste, al norte y al sur y de 8 al este; 7 filas del vecino llenan el margen norte solo sobre las 20 columnas de la ruta, las esquinas y los demás márgenes guardan el patrón de borde intransitable, y la pantalla de 15 por 10 celdas queda a caballo del borde norte.

Lo que guarda el búfer en una costura, en esquema: una casilla por celda, con medidas tomadas de MAP_OFFSET, FillNorthConnection y el layout de 20 por 20 de la Ruta 101 con el layout de 20 de ancho de Pueblo Escaso al norte con desplazamiento 0; dibujado por figures/make_figures.py, sin arte del juego.

La franja del vecino se dibuja con los tilesets del mapa actual (DrawMetatileAt toma los conjuntos primario y secundario del mapa en el que estás) hasta que el jugador cruza. Al cruzar se llama a LoadMapFromCameraTransition, que ejecuta el script de transición del mapa nuevo, carga solo su tileset secundario y su paleta, cambia la música y el clima y muestra el rótulo con el nombre del mapa, sin fundido.10 Por eso ningún par conectado difiere en tileset primario: 0 de los 134 de Esmeralda y 0 de los 120 de Rojo Fuego. 38 de los de Esmeralda y 34 de los de Rojo Fuego unen tilesets secundarios distintos, y en 24 de cada uno la franja del vecino en el margen (7 celdas, 8 por el este, recortada donde saldría del búfer, tal como la recorta el motor) usa solo metatiles primarios, así que se dibuja correctamente desde cualquiera de los dos lados.8

Los desplazamientos son habituales. 36 de las 134 conexiones de Esmeralda y 68 de las 120 de Rojo Fuego no son cero; la Ruta 1 de Rojo Fuego se sitúa 12 celdas hacia dentro de las 48 de ancho de Ciudad Verde.8 La reciprocidad no es del todo universal en Rojo Fuego: 112 de sus 120 entradas son recíprocas, y la ciudad amurallada explica 6 de las 8 restantes. Ciudad Azafrán (Saffron) se conecta en un solo sentido con las Rutas 5 a 8, mientras que esas rutas no se conectan con Azafrán sino con un mapa aparte, SAFFRON_CITY_CONNECTION; las dos últimas son mapas prototipo de las Islas Sete.8 Leo la disposición de Azafrán como un truco de dibujo: la conexión existe para dibujar la muralla de la ciudad más allá del borde de la ruta, y la entrada es a través de cuatro garitas, cuyos guardias en Rojo hacen dar media vuelta al jugador hasta que les da algo de beber.819 Cuando un lugar tiene que verse continuo y aun así estar controlado, la Gen 3 dibuja el vecino en el margen y pone la puerta en un edificio.

Al cruzar una costura hacia un mapa con show_map_name activado, el nombre del lugar entra deslizándose. La tarea del rótulo espera 31 fotogramas, se desliza 40 pixeles hacia dentro a 2 pixeles por fotograma (20 fotogramas), se mantiene hasta que su temporizador pasa de 120 (121 fotogramas) y sale deslizándose (20 fotogramas): unos 190 fotogramas, 3,2 segundos.21 Conté los estados de la tarea por sus umbrales, así que cada estado puede durar un fotograma más o menos de lo que indico.29

Garitas: donde cambia el arte

Rojo tiene 27 mapas con el tileset GATE o FOREST_GATE: garitas de dos pisos en las Rutas 11, 12, 15, 16 y 18 (10 mapas), garitas de un piso en las Rutas 2, 5, 6, 7 y 8, la garita de la Ruta 22, la garita de la Zona Safari y sus 4 casas de descanso, 4 entradas del Camino Subterráneo (Underground Path) y las 2 garitas del Bosque Verde (Viridian Forest).8 Cada garita de Rojo que une dos lugares distintos une dos tilesets: OVERWORLD con FOREST (el Bosque Verde, la Zona Safari), con UNDERGROUND (las cuatro entradas del camino) o con PLATEAU (la Ruta 22 con la Ruta 23), uniones que las conexiones de Rojo casi nunca hacen.8

La Ruta 2 es el caso más claro. Mide 20 por 72 celdas en Rojo y 24 por 80 en Rojo Fuego y no se puede recorrer de punta a punta: sus mitades sur y norte solo se encuentran a través del Bosque Verde, que en Rojo se dibuja con el tileset FOREST en lugar de OVERWORLD y al que se entra por dos garitas.58 En Rojo Fuego, del Centro de Ciudad Verde al de Ciudad Plateada hay 267 celdas pasando por la garita sur, el bosque y la garita norte.7 De ahí salen tres lecturas, y son lecturas de los datos, no declaraciones de los desarrolladores.

  1. La garita está donde cambia el arte. Una costura de la Gen 1 dibuja los bloques del vecino con el blockset actual, así que dos mapas solo pueden encontrarse en una costura si comparten tileset, cosa que Rojo respeta en 76 de sus 78 conexiones. Un bosque dibujado con un tileset de bosque necesita por tanto una puerta, y la garita es esa puerta.388
  2. La garita es donde puede vivir una regla. Las cuatro garitas de Azafrán hacen dar media vuelta al jugador hasta que entrega una bebida (TEXT_ROUTE5GATE_GUARD_GEE_IM_THIRSTY, BIT_GAVE_SAFFRON_GUARDS_DRINK); la garita de la Ruta 22 comprueba BIT_BOULDERBADGE.19 Y tres garitas premian el coleccionismo: los ayudantes del Profesor Oak entregan un objeto cuando la cuenta de especies obtenidas (CountSetBits sobre wPokedexOwned) llega a 10 en la garita de la Ruta 2, a 30 en el segundo piso de la garita de la Ruta 11 y a 50 en el segundo piso de la garita de la Ruta 15.20
  3. La garita es una pausa con gente dentro. La garita de la Ruta 2 alberga a un ayudante de Oak y a un chico; la caminata se reanuda tras un fundido, en un lugar nuevo.43

Los remakes se dividen según el motor. Cristal tiene 25 mapas de entorno GATE, de los cuales 19 unen mapas de grupos de mapas distintos y 7 unen tilesets distintos.8 Rojo Fuego conserva las garitas de Kanto: 8 mapas interiores llevan a dos mapas exteriores distintos (el par del Bosque Verde, las cuatro entradas de Azafrán, la entrada norte de la Ruta 22 y la entrada de la Zona Safari), y otros 13 tienen puertas en dos lados separados de un mismo mapa exterior, entre ellos las cinco garitas de ruta de dos pisos y el edificio del este de la Ruta 2.8 Hoenn casi las elimina. En Esmeralda solo 2 mapas interiores llevan a dos mapas exteriores distintos (la planta baja del Monte Pírico y la entrada de la Zona Safari) y 5 tienen puertas en dos lados de uno mismo, entre ellos las dos estaciones de la Ruta Ciclista; las rutas se encuentran con los pueblos en costuras abiertas.8 Contadas como edificios, Esmeralda tiene 4 garitas (las dos estaciones de la Ruta Ciclista, la entrada de la Zona Safari y la garita del Frente Batalla) frente a las 14 de Rojo Fuego y los 27 mapas con tileset de garita de Rojo.8 Mi lectura, y es una lectura: Hoenn pudo prescindir de las garitas porque su motor carga un tileset secundario nuevo en el momento del cruce, así que una ruta puede encontrarse con un pueblo dibujado con otro arte sin un edificio entre ambos.10

La pantalla del mapa y Vuelo

El mapa de la región de Esmeralda es una cuadrícula de 28 por 15 casillas (MAP_WIDTH 28, MAP_HEIGHT 15), 420 en total; 158 de ellas, el 37,6 %, pertenecen a un lugar, repartidas entre 54 secciones: 34 rutas, 16 pueblos y ciudades y 4 más. Las rutas cubren 129 casillas y los pueblos 22.11 De las 213 entradas de region_map_sections.json, 95 llevan un rectángulo en la cuadrícula; 49 de ellas son una sola casilla, la mayor mide 4 por 3 (la Ruta 124 y su gemela submarina), Ciudad Portual mide 1 por 2 y Ciudad Malvalona 2 por 1.11 Una pantalla de mapa, según esta evidencia, es una cuadrícula gruesa de rectángulos con nombre, y la mayoría de los lugares ocupan una casilla.

Vuelo es donde la pantalla se encuentra con la caminata. El Vuelo de Esmeralda necesita la sexta medalla (FIELD_MOVE_FLY frente a FLAG_BADGE06_GET en la tabla de medallas) y un tipo de mapa exterior (Overworld_MapTypeAllowsTeleportAndFly: ruta, pueblo, ciudad o ruta marítima). En el mapa, un pueblo es MAPSECTYPE_CITY_CANFLY solo si su bandera FLAG_VISITED_* está activada, y cada uno de los 16 pueblos y ciudades activa la suya en su script de transición; el de Pueblo Escaso dice setflag FLAG_VISITED_OLDALE_TOWN.13

Los demás juegos coinciden en la forma. El mapa de Rojo Fuego mide 22 por 15 casillas por página, cuatro páginas (Kanto y tres grupos de las Islas Sete), cada una en dos capas, el exterior y las mazmorras; la capa exterior de Kanto llena 90 casillas con 38 secciones, y Vuelo necesita la tercera medalla. Un lugar de Rojo Fuego cuenta como visitado cuando su bandera FLAG_WORLD_MAP_* está activada, cosa que hace el script de transición de cada pueblo al entrar (setworldmapflag FLAG_WORLD_MAP_CELADON_CITY), y Vuelo solo acepta una casilla visitada.23 El mapa de Cristal sitúa 95 puntos de referencia por su posición en pixeles y ofrece 24 puntos de vuelo, 12 en Johto y 12 en Kanto; el punto de vuelo de un pueblo lo activa una rutina de retorno cuando entras en él (VioletCityFlypointCallback: setflag ENGINE_FLYPOINT_VIOLET), y Vuelo comprueba ENGINE_STORMBADGE.24 El mapa del pueblo de Rojo enumera 37 entradas exteriores en una cuadrícula de 4 bits (una marcada como sin usar) y 60 entradas interiores con posiciones propias; entrar en cualquiera de sus 11 mapas de ciudad activa el bit de esa ciudad en wTownVisitedFlag, con el comentario en el código «mark town as visited (for flying)» (marcar el pueblo como visitado, para volar), la lista de vuelo omite los pueblos no visitados, y Vuelo necesita la Medalla Trueno y un mapa exterior.22

Ninguno de los cuatro empieza dándole al jugador un mapa que llevar encima; cada uno se lo entrega durante el juego. El Mapa Pueblo (Town Map) de Rojo y de Rojo Fuego es un objeto que da la hermana del rival en Pueblo Paleta (en Rojo, ofrecido una vez que el jugador tiene la Pokédex); la Tarjeta Mapa (Map Card) de Cristal es un regalo en Ciudad Cerezo, el primer pueblo después de casa; el PokéNav de Esmeralda viene del edificio de Devon en Ciudad Férrica, el tercer pueblo después de casa.442345127 Los mapas de pared abren la misma pantalla antes: Esmeralda cuelga uno en el piso de arriba de la casa del jugador y en la planta baja de cada Centro Pokémon, Rojo Fuego en sus Centros, en la escuela de Ciudad Verde y en algunas casas, y el tileset HOUSE de Rojo, que usa la casa del rival en Pueblo Paleta, tiene un tile de mapa de pared.122344

Todo junto, la regla es coherente en cuatro juegos y tres generaciones. Una vez que el jugador tiene el mapa, este dibuja todos los lugares de la región, visitados o no; las excepciones son lugares tardíos retenidos por la historia o por un evento: las páginas de las Islas Sete de Rojo Fuego hasta que unos scripts del Centro Pokémon de Isla Prima (One Island) activan sus banderas, y en esas páginas la Roca Ombligo (Navel Rock) y la Isla Origen (Birth Island), tapadas hasta que el jugador ha estado allí; el Frente Batalla y la Isla Sur (Southern Island) de Esmeralda hasta que se activan sus banderas de lugar; y el mapa de Kanto de Cristal hasta que el jugador pisa Kanto.44451223 El viaje rápido solo ofrece lugares en los que has entrado caminando, registrados por una bandera que se activa al entrar, disponible solo en el exterior, y solo después de una medalla de mitad de juego: la tercera en Rojo y Rojo Fuego, la sexta en Esmeralda.13232422

Pokémon es una respuesta a la tierra entre pueblos. Otros tres juegos responden de otra manera, y cada diferencia es una decisión que Kiradex tiene que tomar. Los números de esta sección salen de las wikis comunitarias de los juegos y, en el caso de Link’s Awakening, de un desensamblado; no los contrasté con el código del juego, salvo donde una nota lo dice.29

Stardew Valley: un centro con radios, abiertos por el calendario

Stardew funde a negro en cada borde. En palabras de su wiki: «When you reach the edge of an area or enter a building, and the screen fades to black during the transition, you’re moving between maps» (cuando llegas al borde de una zona o entras en un edificio y la pantalla funde a negro durante la transición, te estás moviendo entre mapas). Un warp es una propiedad del mapa cuyo valor la wiki da como Warp [ <int fromX> <int fromY> <string toArea> <int toX> <int toY> ]+, con el ejemplo «6 20 Mountain 76 9».46

El valle es un grafo pequeño alrededor de un único centro. Pueblo Pelícano (Pelican Town) conecta con la parada de autobús (Bus Stop) y la granja (Farm) al noroeste, con el bosque Cindersap (Cindersap Forest) al suroeste, con la playa (The Beach) al sur y con la montaña (The Mountain) al norte.47 La parada de autobús «connects the Farm to the west with Pelican Town to the east» (une la granja, al oeste, con Pueblo Pelícano, al este) y da a la parte baja del bosque trasero (Backwoods) por la carretera del oeste.48 El bosque Cindersap «has exits to the north into the Farm, to the east into Pelican Town, to the south into The Sewers, and to the northwest into the Secret Woods» (tiene salidas al norte hacia la granja, al este hacia Pueblo Pelícano, al sur hacia las alcantarillas y al noroeste hacia el bosque secreto).49 El bosque trasero «consists of two disconnected sections» (consta de dos secciones desconectadas), un camino superior que une la granja con la montaña y una sección inferior a la que se llega desde la carretera de la parada de autobús.50 El recuadro de lugares de estas páginas enumera 26 lugares, desde el bosque trasero hasta el pantano de la bruja (Witch’s Swamp), según mi cuenta.51

Los radios se abren por fecha y por hazaña. La montaña empieza con «only two exits: to the south leading to Pelican Town, and to the west leading to the Backwoods» (solo dos salidas: al sur hacia Pueblo Pelícano y al oeste hacia el bosque trasero); las minas (Mines) se abren el 5 de primavera, el ferrocarril (Railroad) tras un terremoto el 3 de verano, y el puente de la cantera (Quarry) con los lotes de la sala de manualidades (Crafts Room) o 25.000 g.52 El desierto (The Desert) necesita reparar el autobús, con los lotes de la cámara acorazada (Vault) o 40.000 g; el bosque secreto (Secret Woods) necesita despejar un tronco con un hacha de acero o mejor; las pozas de marea de la playa necesitan un puente de 300 de madera.53 La wiki da como velocidad base del jugador 2 caminando, 5 corriendo y 6,6 a caballo, sin unidades, y no abrí el código del juego para averiguarlas.54

Mi lectura: Pokémon controla el acceso a una zona con una capacidad que el jugador lleva consigo, una medalla o una MO. Stardew lo controla con algo que hizo la comunidad: un lote, un puente o un terremoto en una fecha. Lo segundo es el tipo de cosa que puede usar un pueblo compartido de coleccionistas sin hacer que nadie se sienta excluido por su nivel.

Animal Crossing: la cuadrícula de acres y el tren

El Animal Crossing de GameCube construye su pueblo a partir de acres. «Acres are grid elements measuring 16x16 spaces» (los acres son elementos de una cuadrícula que miden 16 por 16 casillas); el pueblo es de «five acres across by six down» (cinco acres de ancho por seis de alto), con la estación de tren «always located in Acre A-3» (situada siempre en el acre A-3), y el mapa rotula las columnas del 1 al 5 y las filas de la A a la F.55 Eso son 80 por 96 casillas en total.17 Los juegos posteriores cambiaron la cuadrícula: Wild World tiene 4 por 4 acres, City Folk 5 por 5, New Leaf 5 por 4, New Horizons 7 por 6, 42 acres.55

El acre es también una regla de aparición. «Every time the player moves into an acre (with the exception of a player exiting their house upon loading the game), one fish and one bug spawn at the locations programmed within the acre data» (cada vez que el jugador entra en un acre, salvo al salir de su casa al cargar la partida, aparecen un pez y un insecto en los puntos programados en los datos del acre), y desaparecen en cuanto el jugador se aleja seis casillas de ese acre.55 El mapa del pueblo llega pronto, de manos de Tom Nook durante el trabajo a tiempo parcial; «is organized in a grid, with each square representing an acre» (está organizado en una cuadrícula en la que cada casilla representa un acre), y muestra el mar, los ríos, los edificios y las casas, no los árboles, los objetos ni los vecinos.56

El tren es la única forma de ir a otro pueblo en el juego de GameCube, mediante la tarjeta de memoria, y «The train ride takes a few minutes» (el viaje en tren dura unos minutos); la estación «is located at the top of the player’s town» (está en la parte superior del pueblo del jugador), y una partida nueva empieza con el jugador llegando allí.57

Mi lectura: los acres hacen legible un pueblo, un mapa de casillas con nombre, y aportan una regla de aparición que premia moverse sin dados por cada paso. El tren convierte el viaje entre mundos en una escena en lugar de una costura.

Link’s Awakening DX adopta el enfoque contrario al desplazamiento continuo de Pokémon. En la documentación del desensamblado zladx, el juego «takes place in non-scrollable screen-wide rooms» (transcurre en salas del ancho de la pantalla que no se desplazan), y «On the Overworld, rooms are stored as they are laid out during the game, on a 16x16 grid of rooms» (en el mundo exterior, las salas se guardan tal como se disponen durante el juego, en una cuadrícula de 16 por 16 salas).58 El mapa del mundo exterior son 512 bytes de punteros de sala de dos bytes, 256 salas, y la capa de tiles de una sala es «a straight forward array of 10x8 tile numbers» (un array sencillo de 10 por 8 números de tile).59 «Overworld rooms are grouped in 2x2 sections (i.e. 4 rooms). Each section has a tileset ID» (las salas del mundo exterior se agrupan en secciones de 2 por 2, es decir, 4 salas, y cada sección tiene un ID de tileset), y los 32 tiles de la sección se intercambian durante la transición hacia una sala que los necesita.58 Cada sala del mundo exterior tiene un byte de estado en wOverworldRoomStatus, 256 bytes, con OW_ROOM_STATUS_VISITED EQU $80 junto a bits para puertas, cambios y búhos; leí el bit en las constantes del desensamblado y no rastreé si la pantalla del mapa dibuja solo las salas que lo tienen.25

Mi lectura: Pokémon desplaza un mundo continuo y lo nombra por secciones; Link’s Awakening corta el mundo en pantallas iguales y registra cuáles has visto. En un teléfono cuya vista cambia según el dispositivo, 10,3 tiles de ancho en un iPhone 18 Pro Max en vertical y 29,7 en un iPhone Duo abierto, solo el modelo de desplazamiento funciona sin poner bandas negras en cada sala, y por eso el encargo lo usa.60

5. El oficio, como reglas con números

Estas son las reglas que respaldan las mediciones, cada una con su procedencia. Donde una regla convierte un hecho medido en una recomendación, la recomendación es mía y la regla lo dice con su verbo.

Elemento Regla Fuente
Ritmo Una celda de caminata cuesta 16 fotogramas, unos 0,27 segundos; el tile de Kiradex cuesta 0,25. Dimensiona cada trayecto en segundos a la caminata propia del juego. Código de paso de Rojo, Cristal y Esmeralda; GBATEK; PlazaRig.swift
Longitud de la ruta De 2 a 10 pantallas a lo largo del eje de desplazamiento; la primera ruta de un juego, de 2 a 6. dieciséis rutas medidas
Serpenteo La caminata más larga de lado a lado mide de 1,15 a 1,70 veces el lado largo de la ruta, la de vuelta a casa de 0,95 a 1,42. Dimensiona una ruta por su camino, no por su rectángulo envolvente. caminatas más cortas sobre lados largos en las nueve rutas cuyos extremos se unen a pie
Primer tramo De 15 a 25 segundos desde una puerta hasta la puerta principal del pueblo siguiente. Un tramo de un minuto es una mazmorra, no un camino. Esmeralda 58 celdas, Rojo Fuego 94; 250, 267 y 314 a través de un bosque o una cueva
Proporción El camino ocupa de 2 a 4 veces el área del pueblo; en la pantalla del mapa, 5,9 a 1, porque un pueblo ocupa una o dos casillas. Cristal 1,97, Rojo 2,65, Esmeralda 3,70, Rojo Fuego 3,87; el mapa de Esmeralda
Densidad El terreno de encuentros ocupa entre un 14 % y un 23 % del mapa de una primera ruta y baja a entre un 4 % y un 9 % en la tercera y la cuarta; sobre el suelo transitable, una primera ruta tiene entre un 19 % y un 38 %. Una primera ruta no tiene entrenadores. la tabla de rutas; hierba sobre celdas transitables
Cadencia Algo que notar más o menos uno de cada nueve pasos en terreno de encuentros, tras unos pocos pasos de gracia al llegar; mantén cortas las sequías y las avalanchas con un suelo y una rampa. la inmunidad de cuatro pasos de Esmeralda, después tasa 20, un 11,1 % sin modificar; el enfriamiento y el refuerzo de Rojo Fuego
El camino a casa Más corto que el de ida, entre un 2 % y un 44 % en las nueve rutas con repechos cuyos extremos se unen a pie, con 0 a 5 celdas de hierba frente a 4 a 19. Un repecho es un atajo de vuelta en un solo sentido, nunca un muro hacia delante. nueve rutas; la búsqueda de menos hierba
Costuras Deja que dos zonas se encuentren en una costura abierta solo donde ambas dibujan el borde con el mismo juego de suelo; pon un edificio con dos puertas donde cambia el arte. Rojo 76 de 78, Cristal 138 de 142, Gen 3 0 de 134 y 0 de 120 con conjuntos primarios distintos; cada garita de Rojo entre dos lugares
Franja del vecino Dibuja al menos media vista del vecino más allá del borde. las 7 celdas de la Gen 3 (8 por el este) para una pantalla de 15 celdas; las 6 celdas de la Gen 1 para 10
Conexiones Los desplazamientos son normales; cada conexión tiene una inversa con el desplazamiento negado, y una de un solo lado es un truco de dibujo deliberado. Esmeralda 36 de 134 con desplazamiento, 134 de 134 recíprocas; Azafrán en Rojo Fuego
Rótulo con el nombre Nombra el lugar al entrar durante unos tres segundos. el rótulo de Esmeralda, unos 190 fotogramas
Garitas Una garita es donde viven una regla y una recompensa: una comprobación de hito, un guardia, un regalo al llegar a una cuenta. la comprobación de medalla de Rojo, el guardia sediento y los regalos a las 10, 30 y 50 especies obtenidas
Pantalla del mapa Una cuadrícula gruesa de rectángulos con nombre; la mayoría de los lugares, una casilla, el mayor unas pocas. Esmeralda 28 por 15, 49 de 95 rectángulos de una sola casilla, el mayor de 4 por 3; los 5 por 6 acres de Animal Crossing
Viaje rápido Una vez que el jugador tiene el mapa, este muestra todos los lugares, visitados o no, salvo unos pocos que retienen banderas de la historia o de eventos; el viaje rápido muestra solo dónde has estado, marcado por una bandera al entrar, y solo desde el exterior. el Mapa Pueblo, la Tarjeta Mapa, el PokéNav y los mapas de pared; wTownVisitedFlag de Rojo, los puntos de vuelo de Cristal, FLAG_VISITED_* de Esmeralda, FLAG_WORLD_MAP_* de Rojo Fuego; un registro de visitas no rastreado hasta su pantalla de mapa: el bit OW_ROOM_STATUS_VISITED de Link’s Awakening
Desbloqueos Las zonas se abren por hazaña y por fecha además de por capacidad. las minas, el ferrocarril, la cantera, el desierto y el bosque secreto de Stardew; las 267 celdas que pasan a 156 con Corte
Transiciones Costura dentro de un mismo mundo exterior; fundido en las puertas y en el borde del mundo. la costura de Pokémon, el fundido de Stardew, el empuje de pantalla de Link’s Awakening
Orientación Haz que una ruta corra a lo largo del eje largo del dispositivo; una ruta que cabe entera en una vista no tiene nada más que revelar. los recuentos de tiles del 3 de octubre; los 20 por 20 de la Ruta 101 de Esmeralda frente a los 29,7 por 20,9 de un Duo abierto

Fuentes de la tabla: el código de paso y la temporización de fotogramas de la sección 1;12315 la velocidad de caminata de Kiradex;4 los scripts de rutas, de trayectos, de hierba y de conexiones;567188 el código de encuentros;3132 el código del búfer, del cruce y del rótulo de Esmeralda;91021 los scripts de las garitas;1920 las pantallas de mapa, cómo las obtiene el jugador, y Vuelo;1112132345244422 Stardew Valley, Animal Crossing y Link’s Awakening;465253555825 los recuentos de tiles por dispositivo del primer artículo de esta serie.60

Tres de esas reglas merecen una frase más.

La regla de las costuras está enunciada como una regla sobre el arte, no sobre los motores. La Game Boy dibujaba la franja de un vecino con el blockset del mapa actual, así que no podía mostrar en absoluto un vecino con otro tileset; la Game Boy Advance dibuja la franja con los tilesets del mapa actual hasta que cruzas, y según mi lectura por eso sus costuras se ciñen a un único conjunto primario y, en su mayoría, a metatiles primarios.38108 Leo ambas cosas como límites de la memoria de tiles, que un teléfono que dibuja un único atlas no comparte. Lo que sobrevive es la razón visual: un camino que cambia de material en una línea recta que cruza la pantalla se lee como una costura, la necesitara o no el motor. Por eso la regla conserva su primera mitad (encontrarse abiertamente donde el suelo continúa) y la segunda (un edificio donde cambia el arte) incluso cuando nada obliga a ello.

La regla del viaje rápido es la que más merece copiarse tal cual. Cada juego de Pokémon medido aquí entrega el mapa pronto durante el juego, dibuja en él todos los lugares, visitados o no, salvo unos pocos lugares tardíos que retienen banderas de la historia o de eventos, y solo controla el acceso al atajo; todos ellos hacen que el atajo se gane por haber ido caminando a algún sitio, no pagando.44451213232224 Para una app de coleccionismo cuya experiencia (XP) sale solo de cartas escaneadas en el mundo real, la bandera de visita es la moneda adecuada, porque cuesta una caminata y nada más.27

La regla de la orientación viene del teléfono, no del canon. Un Pro Max en vertical ve 10,3 por 22,4 tiles a la escala de Kiradex y un iPhone Duo abierto 29,7 por 20,9, así que una ruta que va de norte a sur muestra 22 tiles de su longitud a la vez en el teléfono común, unos 11 por delante de un coleccionista al que la cámara mantiene centrado, mientras que una que va de este a oeste muestra 30 a la vez, unos 15 por delante, solo en el Duo abierto.602717 La Ruta 101 de Esmeralda, de 20 por 20, cabría entera dentro de una sola vista del Duo abierto, lo que significa que una ruta tan corta no tiene allí nada más que revelar.617

6. La vía de Apple: vistas, costuras, salas y un mapa

El motor que hay debajo de Kiradex World es el que expuso el primer artículo: una escena de RealityKit usada como renderizador 2D, una cámara ortográfica con un número entero de pixeles del dispositivo por texel, el suelo como una única malla MeshDescriptor dibujada en una sola llamada, cada material un UnlitMaterial con umbral de opacidad, y el desenfoque de movimiento y el mapeo de tonos de RealityView desactivados.60 El artículo de estructuras añadió objetos ordenados por profundidad en una segunda malla, los warps como datos, y los pisos intercambiados en el sitio dándole al escenario una identidad nueva, .id(floor.name), para que SwiftUI desmonte un RealityView y construya el siguiente.37 Las zonas más allá de la valla necesitan tres cosas más de ese motor: una vista del vecino al otro lado de una costura, una forma de cambiar de sala en el servidor sin corte, y una pantalla de mapa. Nada de eso se ha construido todavía, y nada de esta sección se ha medido en un teléfono; es el plan sobre el que descansa el encargo, con cada coste nombrado y marcado como no medido.

Lo que ve un teléfono

Los recuentos de tiles vienen de la tabla del primer artículo, calculada a partir de las páginas de especificaciones de Apple y de los perfiles del simulador de Xcode 27 a las escalas enteras de Kiradex.60

Dispositivo y orientación Pixeles por texel Tiles visibles (de ancho por de alto) Media vista
iPhone 18 Pro Max, vertical 8 10,3 por 22,4 6 de ancho, 12 de alto
iPhone Duo, pantalla exterior, vertical 6 14,6 por 21,2 8 de ancho, 11 de alto
iPhone Duo, pantalla interior, abierto 6 29,7 por 20,9 15 de ancho, 11 de alto

La última columna es la mitad de la vista redondeada hacia arriba, la franja del vecino que pide la regla de las costuras.17 Apple da la pantalla interior del iPhone Duo como 1878 por 2670 pixeles a 430 pixeles por pulgada y la exterior como 1398 por 2034 a 460.61 Los recuentos de tiles de la pantalla interior no salen de esos pixeles del panel: salen del framebuffer lógico del simulador, de 2007 por 2853 a escala 3,0 (2853 ÷ 96 da 29,7 y 2007 ÷ 96 da 20,9), que según explica el primer artículo se reduce en un factor de unos 0,936 hasta el cristal, así que en el hardware el mismo número de tiles debería llenar el panel, a unos 5,6 pixeles de panel por texel, si el compositor reduce la imagen como espera el primer artículo; eso no está verificado en hardware, y el primer paso del primer artículo es registrar nativeScale en un dispositivo.6017 Las Human Interface Guidelines piden que los juegos «look good and behave well at various aspect ratios» (se vean bien y se comporten bien con distintas relaciones de aspecto), y el primer artículo lo leyó como un argumento para mostrar más mundo en lugar de bandas, que es lo que hace la plaza.6260

De ahí se siguen dos cosas para las zonas. Con la cámara siguiendo al coleccionista, la vista por delante es más o menos la mitad de la vista.27 Una ruta que va de norte a sur es la que todos los teléfonos muestran bien: 22 tiles de ella a la vez en un Pro Max en vertical, unos 11 por delante, y 21 a la vez en el Duo abierto, unos 10 por delante. Una ruta que va de este a oeste muestra 30 tiles a la vez en el Duo abierto, unos 15 por delante, y solo 10 en un Pro Max en vertical, unos 5 por delante, así que le corresponde estar donde el destino está cerca.6017 Por eso la caminata larga del encargo, el Paseo de la Pradera, va de norte a sur, y por eso la Calle de los Álbumes, la zona que más marcadamente va de este a oeste (44 por 14, más de tres veces más ancha que alta), es una calle de escaparates que se ve casi entera desde cualquier punto en el Duo abierto. La Orilla del Lago (36 por 20) y el Barrio de la Galería (30 por 20) también son más anchos que altos, pero en el encargo son lugares en los que detenerse, una orilla y un barrio de museos, no caminos hacia otro sitio.2617

Una costura en RealityKit

El intercambio de pisos del artículo de estructuras es la herramienta equivocada para una costura. Desmontar un RealityView y construir el siguiente necesita un fundido que lo oculte, y las puertas de la app todavía no lo tienen: hoy el lugar cambia 220 milisegundos después del paso sobre una puerta, un cambio de piso intercambia el escenario sin fundido, y el artículo de esta serie sobre el movimiento propone el velo que cubriría ambas cosas. Una costura, por definición, no tiene fundido.376316 Así que el plan para una costura mantiene una sola escena. Cuando el coleccionista se acerca a media vista de un borde que tiene una conexión, el escenario construye el suelo del vecino como una segunda malla, a partir del mismo tipo de MeshDescriptor que la primera, colocada en el desplazamiento de la conexión en unidades del mundo, y añade los objetos del vecino a sus propias profundidades. Cuando los pies del coleccionista cruzan el borde, el escenario cambia de base: el vecino pasa a ser la zona actual, la anterior pasa a ser la franja de detrás, y la cámara, que hoy sigue al jugador limitada al mapa, se limita a la unión de ambas mientras las dos estén cargadas.2726

Tres datos del motor hacen que eso salga barato sobre el papel. El suelo es una malla y una llamada de dibujo por zona, así que un vecino añade una llamada de dibujo para su suelo y otra para sus objetos.6037 Cada pixel es recortado y escribe profundidad, así que los árboles de un vecino se ordenan respecto al coleccionista con la misma regla de profundidad que los de la zona actual, sin ordenación nueva.37 Y la forja ya exporta una zona entera como letras, suelo con autotiling, objetos y warps, así que un vecino es un segundo archivo del mismo tipo; el encargo le añade una lista connections.1426 Lo que nada de eso me dice es cuánto cuesta construir la segunda malla en el momento en que hace falta, ni si construirla dentro de un fotograma provoca un tirón; eso no está medido. Por eso la comprobación 6 del encargo tiene dos mitades, y ambas cubren toda la aproximación, desde antes de que se construya la malla del vecino hasta el final del cruce: un registro de tiempos por fotograma, que detecta un bloqueo del hilo principal, y una inspección de cada fotograma capturado, que detecta un fotograma negro. Una comprobación por muestreo no serviría: un fotograma negro entre sesenta por segundo no tiene por qué alterar el ritmo de las llamadas, y una muestra cada 100 milisegundos ve un fotograma de cada seis a 60 hercios.17 La mitad de tiempos y la regla de cada fotograma son añadidos míos a la comprobación del dossier, que muestreaba el brillo.

El autotiling es lo único que la regla de la GBA no cubre. La Gen 3 mantenía sus costuras sobre un suelo compartido porque la franja del vecino se dibujaba con los tiles del mapa actual.108 Kiradex dibuja todas las zonas con una única paleta de atlas, así que ese límite no se aplica, pero los autotiles de tipo blob en el borde de una zona se calculan a partir de las letras de la propia zona; si la forja no mira al otro lado de la costura, un camino que la cruce acaba en un reborde a ambos lados. Por eso el encargo hace que la forja calcule las máscaras de borde a través de cada conexión.26

Salas, presencia y la reconexión

La plaza de Kiradex es una sala de servidor: salas de hasta unos 40 jugadores, repartidas por región, sobre FastAPI y WebSockets.27 Una zona más allá de la valla es, naturalmente, otra sala, lo que plantea el problema que una portátil de un solo jugador nunca tuvo: la gente al otro lado de la costura. El plan es que el cliente se suscriba a los caminantes de la sala vecina cuando empieza a dibujar la franja de esa sala, para que la gente de la Calle de los Álbumes sea visible desde el borde de la Plaza, y que cambie su propia sala en el cruce, para que el caminante nunca se detenga.26 Las puertas y el tranvía llevan un fundido, el velo que el encargo del artículo de movimiento añade a las puertas, y ese fundido cubre la reconexión, como ya proponía el dossier de estructuras para los interiores.1626 El arreglo del primer artículo para una vista negra se aplica a ese fundido: animar la opacidad de la vista de SwiftUI que contiene el RealityView la dejaba sin pintar, así que el fundido es un velo dibujado encima.60

El servidor necesita el mismo mapa que dibuja el cliente. Hoy server/app/plaza.json lleva las letras del pueblo para que el servidor pueda validar una caminata; el encargo hace que la copia de cada zona lleve sus letras y sus conexiones, para que una caminata que cruza una costura se valide a ambos lados de ella.6026 Cuánto cuesta un cambio de sala en una red real, y si suscribirse a una segunda sala duplica la tasa de mensajes de la plaza cerca de una costura, no está medido.

El rótulo con el nombre, el mapa y el tranvía en SwiftUI

El nombre de la zona pertenece a SwiftUI, no a la capa de pixeles. El primer artículo encontró que una fuente de pixeles de cinco texeles a las escalas de Kiradex queda en 13,3 o en 10 puntos, la segunda por debajo del mínimo de 11 puntos de las Human Interface Guidelines, y pasó el texto de los diálogos a SwiftUI a escala de interfaz; un rótulo con el nombre es el mismo tipo de texto.60 Su duración viene de Esmeralda: unos tres segundos en pantalla.21

La pantalla del mapa es una vista de SwiftUI sobre un modelo pequeño, una cuadrícula de rectángulos con nombre, la zona actual y el conjunto de zonas visitadas. En el Duo abierto se coloca junto al mundo como un panel, igual que el plan del mundo pone la tarjeta de perfil del coleccionista junto a la plaza («The plaza on the open inner display is the best version of this: wide view, your profile card beside the world when you tap someone», la plaza en la pantalla interior abierta es la mejor versión de esto: vista amplia y tu tarjeta de perfil junto al mundo cuando tocas a alguien); en un teléfono es una hoja.27 El tranvía es un warp desde el mapa: fundido de salida, cambio de sala, fundido de entrada en la parada de destino.

El conjunto de zonas visitadas tiene que viajar con el coleccionista. La página de juegos de las Human Interface Guidelines dice «Let players pick up their game on any of their devices» (deja que los jugadores retomen su partida en cualquiera de sus dispositivos), para que la gente pueda «start back up exactly where they left off on a different device» (retomar exactamente donde lo dejó en otro dispositivo).62 Una parada de tranvía abierta en el teléfono debería estar abierta en el iPad, así que el conjunto de zonas visitadas vive con el perfil del coleccionista en el servidor y no en el almacenamiento local de la app.26 Eso amplía la sección 3 del plan del mundo, que dice «Our server holds only the public profile card and the economy» (nuestro servidor guarda solo la tarjeta de perfil pública y la economía); yo añadiría el conjunto de zonas visitadas como un campo más junto a ellas, limitado a una lista de cuáles de las cinco zonas ha pisado un coleccionista, sin ubicación, sin texto y sin hora de la visita, con la misma clave que el resto, el id de jugador de Game Center; la revisión de privacidad que pide el plan tendría que cubrirlo.2726

Lo que cuesta, y lo que no está medido

Nada de esta sección se ha cronometrado. Los costes sin medir son: construir las mallas de suelo y de objetos de un vecino en el momento en que el coleccionista se acerca a un borde; dibujar las mallas de dos zonas mientras ambas están cargadas; suscribirse a una segunda sala cerca de una costura; y el cambio de sala en un cruce. La regla de captura del primer artículo decide cómo se medirán: en el simulador del iPhone Duo, los fotogramas de RealityKit solo son fieles cuando se capturan desde dentro del paquete de pruebas (XCUIScreen.screens[1]), no desde el host.60 La comprobación 6 del encargo usa exactamente esa captura para su vista del vecino antes de la costura, y ejecuta su inspección de cada fotograma y su registro de tiempos de fotograma, leído de las llamadas de CADisplayLink, en una compilación para dispositivo en lugar del simulador: en un iPhone Duo abierto en cuanto haya uno a mano, y hasta entonces en un iPhone 18 Pro Max, porque no hay ningún iPhone Duo emparejado con mi Mac mientras escribo esto.64 Todavía no se ha demostrado que ningún método de captura registre cada fotograma mostrado; la coincidencia de recuentos de la comprobación, los fotogramas de la grabación frente a las llamadas del registro de tiempos, decide si alguno lo hace.

7. El encargo: qué construye Kiradex y qué comprobaciones debe superar

Síntesis del autor. Lo que sigue es mi propuesta, derivada de las secciones 1 a 6 y ajustada al plan del mundo del repositorio de Kiradex, a su sección 4 («The game», el juego) y a su sección 7 («Order of work», el orden de trabajo).2726 No nombra ningún lugar, criatura ni marca de ningún juego de Pokémon; donde toma prestada una mecánica, cita la regla de la sección 5, no el vocabulario del juego de origen. Todos los tamaños están en tiles de 16 pixeles, y la longitud de una caminata es su coste en la propia búsqueda de caminos de la app, en la que un paso en diagonal cuenta √2 tiles (punto 3).28 Todos los tiempos son esa longitud a los 4 tiles por segundo nominales de la caminata, una cifra para comparar con el canon, no una medida; el encargo del artículo de movimiento caminaría 16 ticks por tile recto a 60 hercios, 3,75 tiles por segundo, y redondearía una diagonal hacia arriba a 23 ticks, con lo que cada tiempo de aquí crecería una quinceava parte en los pasos rectos y alrededor de una doceava parte en las diagonales.41617

El bucle de Kiradex está en el mundo real. La XP sale solo de cartas escaneadas y registradas: «XP comes only from the real world, which is the point of the app» (la XP viene solo del mundo real, que es el sentido de la app).27 Así que caminar es un coste, no un contenido, y cada zona tiene que darle al caminante algo que hacer con su colección: mostrarla, intercambiar en torno a ella, ganar un cosmético por ella o que lo manden de vuelta al escáner. Nada de lo que se encuentra o se gana caminando es nunca una carta ni XP, y nada en el mundo se vende por dinero salvo a través de la tienda que ya define el plan del mundo.27

1. Cinco zonas: la Plaza y cuatro más allá

Zona Qué es Tamaño (tiles) Unida a Papel en el bucle de coleccionismo
La Plaza (existe) El pueblo: casas, salón, quiosco, terraza de la fuente, patio de llegada 40 por 30 el centro Llegar, presumir de la carta favorita, entrar en las habitaciones y en el salón
La Calle de los Álbumes Una calle comercial: la tienda de cartas del kit de estructuras, el puesto de intercambio, un tablón de deseos y, más adelante, una hilera de seis puestos de mercado 44 por 14 la Plaza, este, costura abierta Gastar monedas en cosméticos; ver qué piden ver los coleccionistas del pueblo; la pantalla de intercambio; los puestos del mercado cuando llegue esa fase
El Paseo de la Pradera Un sendero de parque entre pradera y bosquecillos, con macizos de flores donde aparecen hallazgos, y un sendero con setos de vuelta a casa cuya puerta solo se abre desde el lado del lago 24 por 60, eje largo de norte a sur la Plaza, norte, costura abierta Hallazgos (punto 6); un paseo con amigos; el camino al lago
La Orilla del Lago El final del paseo: una orilla, un muelle, bancos, un cobertizo de botes 36 por 20 el Paseo de la Pradera, norte, costura abierta El lugar tranquilo para sentarse y mostrar una carta al atardecer; el punto de encuentro semanal
El Barrio de la Galería Un distrito de piedra: el museo y la galería de vitrinas de los coleccionistas 30 por 20, más una casa del arco de 8 por 6 la Plaza, oeste, a través del arco (dos puertas) Las colecciones completadas en todo el servidor llenan el museo; el guardián de hitos del arco (punto 7)

El área total más allá de la Plaza es 616 más 1.440 más 720 más 600, 3.376 tiles, 2,8 veces los 1.200 de la Plaza, dentro de la franja del canon de 1,97 a 3,87 (sección 5, Proporción).1733 El Barrio de la Galería está detrás de un edificio porque se dibuja en piedra con un juego de suelo distinto (sección 5, Costuras). Las otras tres comparten el césped y el pavimento de la Plaza, así que se unen en costuras abiertas, tres en total: la Calle de los Álbumes con el borde este de la Plaza, el Paseo de la Pradera con su borde norte, y la Orilla del Lago con el borde norte del Paseo de la Pradera.26 El tablón de deseos de la Calle de los Álbumes muestra lo que los propios coleccionistas del pueblo piden ver, juzgado contra las cartas reales por el código que ya lo hace (Kiradex/World/Wants.swift); sus puestos esperan al mercado, que el plan del mundo canaliza a través de eBay en una fase posterior.6527

Esquema de las cinco zonas del encargo en una pantalla de mapa de 16 por 12 a una casilla por cada 10 tiles: la Orilla del Lago arriba, el Paseo de la Pradera debajo, la Plaza abajo en el centro, la Calle de los Álbumes al este de la Plaza y el Barrio de la Galería al oeste a través de un arco discontinuo; un punto marca la parada de tranvía de cada zona, y una nota da 3.376 tiles más allá de la Plaza, 2,8 veces sus 1.200.

Las zonas propuestas, dibujadas sobre la cuadrícula de la pantalla del mapa; solo un esquema, dibujado por figures/make_figures.py, que comprueba que cada rectángulo mide el tamaño de su zona entre 10, redondeado.

Comprobaciones: 4 (proporción) y 5 (orientación).

2. Distancias y tiempos

Trayecto Objetivo (tiles) A 4 tiles por segundo Referencia del canon
Del patio de llegada a la puerta de la tienda de cartas 60 como máximo 15 s como máximo sección 5, Primer tramo: de 15 a 25 s
Del patio de llegada al muelle de la Orilla del Lago, a la ida de 110 a 120 de 28 a 30 s Más largo que un primer tramo (15 a 25 s), por debajo de los tramos de camino del canon, de hasta 40 s, y de sus mazmorras de un minuto; Serpenteo, de 1,15 a 1,70 veces el lado largo a la ida
Del muelle de la Orilla del Lago al patio de llegada, a la vuelta, por la puerta del seto 0,8 veces la caminata de ida como máximo 24 s como máximo El camino a casa es más corto
Del patio de llegada, a través del arco, a la puerta del museo 70 como máximo 18 s como máximo Primer tramo
De cualquier zona a cualquier zona visitada en tranvía un fundido más o menos 1 s más la reconexión Viaje rápido; Transiciones

Los 60 tiles de longitud del Paseo de la Pradera serpentean hasta 78 a 90 tiles de camino, un factor de 1,3 a 1,5 (sección 5, Serpenteo).26 Un camino por sí solo no puede hacer más corta la vuelta a casa: en una cuadrícula en la que cada paso se puede dar en ambos sentidos, la caminata más corta desde la llegada hasta el muelle es la caminata más corta de vuelta, y un camino más recto también se tomaría a la ida. El ahorro necesita algo de un solo sentido. Aquí es una puerta en el seto. Un sendero con setos de 2 tiles de ancho baja en línea recta por el lado este del Paseo de la Pradera, alineado con el muelle, hasta el borde norte de la Plaza entre el salón y la casa que hay al este de él, donde el césped entre ambos baja hacia el patio de llegada. La puerta del extremo del sendero que da al lago solo se abre desde el lado del lago. A la ida, se queda cerrada y el camino serpentea; a la vuelta, se abre y el sendero es recto. Ese es el atajo de vuelta en un solo sentido del canon (sección 5, El camino a casa) puesto en plano. Modelé las tres zonas sobre el grafo compartido en ocho direcciones del punto 3, con el pueblo tal como lo dibuja hoy la forja y con el sendero y el muelle colocados de esa manera. Elegí hacerlo serpentear con cuatro setos que cruzan la pradera, uno cada 12 filas, cada uno con un hueco de 2 tiles. Los pasos en diagonal recortan cada zigzag. En todas las posiciones del hueco, dos setos espaciados por igual no pueden hacer serpentear la pradera 78 tiles en este grafo: llegan como mucho a 66,46 tiles de borde a borde. Tres, espaciados por igual, sí pueden, pero por poco: 6 de sus 8.000 posiciones de hueco la hacen serpentear de 78 a 79,77 tiles, y 5 de esas 6 también dan una ida dentro de la franja de 110 a 120 tiles, de 114,05 a 119,02, con la vuelta a casa entre 0,740 y 0,772 de la ida, por debajo del objetivo de 0,8. Cuatro setos la hacen serpentear de 78 a 90 tiles en 5.912 de sus 160.000 posiciones, lo que le deja a la forja margen para trazar la pradera. Ese margen es mi razón para elegir cuatro; el grafo no lo impone. En esas disposiciones de cuatro setos, la vuelta a casa son 88,07 tiles frente a 108,74 a 133,75 de ida. El objetivo de 0,8 necesita al menos 110,09 de ida, y dentro de la franja de ida de 110 a 120 tiles las 4.111 disposiciones lo cumplen, entre 0,73 y 0,80. Con la puerta abierta en ambos sentidos, las dos caminatas salen iguales.66 La caminata en ocho direcciones es la razón por la que los dos setos del modelo anterior ya no bastan: acorta el sendero de vuelta solo de 91 tiles a 88,07, porque el sendero ya es recto, pero le quita mucho más a un camino de ida serpenteante, así que la puerta ahorra menos a menos que la pradera serpentee más. El mismo modelo fija el extremo inferior de la franja. Ninguna disposición en él, con cualquier desplazamiento o posición del muelle que pruebe, da una ida de menos de 107,18 tiles, y la vuelta a casa nunca baja de 88,07, así que una ida bastante por debajo de 110 tiles no cumple el objetivo de 0,8.66 Unas bajadas de un solo sentido desde las terrazas de la pradera harían lo mismo a la manera del canon, pero el trabajo de estructuras rechazó los repechos, así que las bajadas se aplazan al artículo sobre la elevación, que es quien las decide.3626

Comprobación: 3 (distancias).

3. Las conexiones como datos

Cada zona es una exportación de la forja como town.json: letras, suelo con autotiling, objetos, warps y la llegada, más connections: [{"dir": "north"|"south"|"east"|"west", "area": "<id>", "offset": <tiles>}], donde el desplazamiento es el origen del vecino a lo largo del borde compartido, la convención de la Gen 3.148 Cada conexión tiene una inversa con el desplazamiento negado (sección 5, Conexiones), sin excepción: las conexiones de un solo lado del canon son un truco de dibujo que este encargo no necesita. La copia de cada zona en el servidor lleva las letras y las conexiones, para que una caminata se valide a través de la costura.6026

Un único grafo de caminata sirve a ambos lados. El TileMap.path de la app busca en ocho direcciones, con un paso en diagonal que cuesta √2 y que solo se permite cuando los dos tiles entre los que pasa son transitables, para que nadie recorte la esquina de un muro; el Plaza.path del servidor en server/app/rooms.py busca en cuatro direcciones, aunque su comentario lo llama «the same walk the app takes» (la misma caminata que hace la app).28 El encargo convierte la búsqueda del cliente en el contrato: el cambio en el servidor sustituye Plaza.path por la misma búsqueda en ocho direcciones, con √2 y sin recortar esquinas, y ambos leen la puerta del seto (punto 2) como una arista dirigida, en la que se entra desde el lado del lago solo con un paso recto y de la que nunca se sale hacia el lago. Cada distancia de este encargo se mide sobre ese grafo.

Comprobaciones: 1 (reciprocidad), 2 (cruces) y 12 (paridad con el servidor).

4. Costuras abiertas, sin fundido

Cruzar una costura abierta no tiene fundido (sección 5, Transiciones). El cliente dibuja el suelo y los objetos del vecino con al menos media vista de profundidad: 15 tiles al otro lado de una costura que se cruza de este a oeste, la mitad de los 29,7 del Duo abierto, y 12 al otro lado de una costura que se cruza de norte a sur, la mitad de los 22,4 de un Pro Max en vertical (sección 5, Franja del vecino).6017 La forja calcula las máscaras de autotile a través de cada costura, para que un camino que la cruce no acabe en un reborde, y abre un hueco en la valla del pueblo en cada costura, de al menos 2 tiles de ancho, con las celdas del hueco transitables a ambos lados.1426 El bosque que la forja dibuja hoy con 12 tiles de profundidad alrededor del pueblo (MARGIN = 12) cede el sitio al vecino a lo largo de todo el borde compartido: la franja del vecino sustituye allí al margen de bosque, y el bosque se queda solo donde no se une ninguna zona. Eso corrige el dossier, que abría el hueco de 2 tiles también en el margen de bosque y habría dejado el bosque tapando la mayor parte de la franja del vecino.1426 El cliente se suscribe a los caminantes de la sala vecina cuando empieza a dibujar la franja de esa sala y cambia su propia sala en el cruce.26

Comprobación: 6 (ningún fotograma negro, ningún bloqueo del hilo principal, y la franja visible antes de la costura).

5. El rótulo con el nombre

Al entrar en una zona por una costura o en tranvía, su nombre entra deslizándose, se mantiene y se va en unos 3 segundos (sección 5, Rótulo con el nombre), a escala de interfaz en SwiftUI, nunca en la capa de pixeles.2160

Comprobación: 7 (temporización del rótulo).

6. Hallazgos en el Paseo de la Pradera

  • Dónde. Los macizos de flores cubren entre un 12 % y un 18 % de los tiles transitables del Paseo de la Pradera, dibujados con su propio juego de autotiles para que se lean desde lejos.26 Esa proporción es una elección mía, no una cifra del canon. Contadas igual, sobre el suelo transitable, las primeras rutas del canon tienen entre un 18,8 % y un 38,4 % de hierba alta y sus rutas posteriores entre un 8,2 % y un 29,2 % (sección 1), así que los macizos quedan a la altura de las rutas posteriores y por debajo de cualquier primera ruta: un destello está colocado y es visible, así que los macizos solo tienen que enmarcarlo, no cargar con una tirada por paso.17
  • Cómo aparecen. No con dados por paso. Al entrar en el Paseo de la Pradera, el servidor coloca como mucho un destello visible para ese coleccionista dentro de un macizo, elegido de forma determinista a partir del coleccionista, la fecha y la zona, la regla de aparición al entrar en un acre de Animal Crossing, hasta que el coleccionista haya tenido tres ese día.5526 Un destello visible mantiene la regla legible para un niño y evita las rachas sin necesitar el enfriamiento y la rampa de la fila Cadencia de la sección 5.
  • Qué son. Solo cosas del mundo: una pegatina o un marco para la habitación, un cosmético de funda o de pin, o una nota que nombra una de las misiones del día, que solo un escaneo real puede completar; las misiones ya se juzgan a partir de la colección misma (Kiradex/World/Quests.swift).2765 Nunca una carta, nunca XP, nunca nada que se venda; un hallazgo no puede convertirse jamás en un motivo para comprar. Las monedas esperan: el plan del mundo permite ganar monedas con visitas diarias pero no fija una cantidad ni un tope, y pone las monedas en su cuarta fase, así que los hallazgos de monedas se aplazan hasta que exista esa regla, y entonces saldrán del mismo presupuesto de visitas diarias en lugar de sumarse a él.27
  • Quién los ve. El destello de cada coleccionista es suyo; los amigos que caminan juntos ven cada uno el suyo. No hay nada que arrebatar ni nada por lo que pelearse.

Comprobación: 10 (hallazgos).

7. El arco y su guardián

El edificio entre la Plaza y el Barrio de la Galería es una habitación de 8 por 6 con una puerta a cada lado y un guardián tras un mostrador. El guardián entrega un cosmético cuando la cuenta de cartas registradas del coleccionista supera por primera vez 10, 30, 50 y 100, la garita de hitos de colección de la fila Garitas de la sección 5, contada a partir de la colección del mundo real igual que la XP.2026 La habitación es también donde el arte cambia de césped a piedra (sección 5, Costuras). Nada está cerrado: el arco siempre está abierto, y el guardián solo da.

Comprobación: 11 (guardián del arco).

8. La pantalla del mapa

Una cuadrícula de 16 por 12 de rectángulos con nombre, una casilla por cada 10 tiles, redondeado: la Plaza 4 por 3, la Calle de los Álbumes 4 por 1 en el lado este de la Plaza, el Paseo de la Pradera 2 por 6 encima de ella, la Orilla del Lago 4 por 2 arriba del todo, el Barrio de la Galería 3 por 2 al oeste. Apiladas, la Orilla del Lago, el Paseo de la Pradera y la Plaza ocupan 11 de las 12 filas (sección 5, Pantalla del mapa).2617 Todas las zonas se dibujan y se nombran desde el primer día. Esa es una elección propia de Kiradex, no del canon: los cuatro juegos dibujan todos los lugares una vez que el jugador tiene el mapa, salvo unos pocos lugares tardíos, pero entregan el mapa durante el juego (sección 5, Viaje rápido), y un pueblo de coleccionistas no tiene motivo para hacer que nadie se gane el derecho a verlo. La zona actual late; las zonas visitadas muestran su parada de tranvía. En el Duo abierto el mapa se coloca junto al mundo como un panel; en un teléfono es una hoja.27

Comprobación: 8 (modelo de la pantalla del mapa).

9. El tranvía

Cada zona exterior tiene una parada. Una parada se abre la primera vez que el coleccionista entra en esa zona, la bandera de visita de la fila Viaje rápido de la sección 5, que se activa al entrar y nunca por nivel ni por pago.1326 Desde la pantalla del mapa, tocar una zona visitada te lleva allí: fundido de salida, cambio de sala, fundido de entrada en la parada de esa zona, y después el rótulo con el nombre. No hay viajes desde interiores, igual que Vuelo no permite ninguno (sección 5, Viaje rápido).13 El tranvía convierte la caminata de 28 a 30 segundos hasta la Orilla del Lago en un toque una vez que se ha hecho la caminata una vez, un atajo ganado por visitar y no por una capacidad (sección 5, Desbloqueos).26

Comprobación: 9 (reglas del tranvía).

10. Nombres y arte

El nombre, los carteles y los textos de cada zona pasan por una lista de nombres vetados protegidos, y cada tile y cada sprite sale de la forja.2726 La lista de nombres vetados todavía no existe: el dossier prometía una en el repositorio, y el repositorio no tiene ninguna. Crearla forma parte de este encargo: una lista sencilla de los nombres protegidos, uno por línea, incluida en el repositorio junto a la forja, y una prueba que lee el nombre, los carteles y los textos de cada zona en las exportaciones de la forja y falla ante cualquier entrada de la lista que aparezca en ellos, sin distinguir mayúsculas de minúsculas.26 Nada de nombres de camino numerados, nada de un esquema de nombres de «región», y ningún edificio que reproduzca el aspecto de una garita del canon: los tamaños y las reglas pueden coincidir, pero las formas y los nombres tienen que ser propios de Kiradex.26

Comprobación: 13 (nombres y arte).

11. Orden de trabajo

El plan del mundo pone la plaza (salas, sincronización, burbujas, perfiles, la pantalla de intercambio) en tercer lugar y las monedas y la tienda en cuarto.27 Las zonas encajan como una fase 3b, después de que la red de la plaza aguante y antes de las monedas o a la par que ellas:26

  1. Conexiones en la forja y en el servidor (formato, reciprocidad, dibujo de costuras, cambio de sala), la búsqueda en ocho direcciones del servidor, y la lista de nombres vetados con su prueba, con la Calle de los Álbumes como primera zona, porque usa la tienda de cartas que el trabajo de estructuras ya diseñó y es la más pequeña.
  2. El Paseo de la Pradera y los hallazgos (colocación en el servidor, el tope diario, las recompensas).
  3. La pantalla del mapa y el tranvía.
  4. La Orilla del Lago.
  5. El Barrio de la Galería con el arco, cuando exista el interior del museo. La hilera de puestos de la Calle de los Álbumes espera a la fase del mercado.

Cada paso es una compilación de TestFlight, como pide el plan del mundo para cada fase, con capturas para sus comprobaciones.27

Las comprobaciones de aceptación

Cada una se puede ejecutar con un script sobre las exportaciones de la forja y las pruebas del servidor, o con una captura en el simulador; la comprobación 6 se ejecuta en un dispositivo, salvo su única captura en el simulador.26

  1. Reciprocidad. Las exportaciones contienen exactamente tres costuras abiertas, la Plaza este con la Calle de los Álbumes, la Plaza norte con el Paseo de la Pradera y el Paseo de la Pradera norte con la Orilla del Lago, y para cada conexión (a, dir, b, off) la exportación contiene (b, opposite(dir), a, −off); la prueba falla ante cualquier conexión de un solo lado, sin excepciones.
  2. Cruces. Una búsqueda en anchura desde la llegada y las puertas de cada zona encuentra al menos 2 tiles de cruce a cada lado de cada costura, frente a tiles transitables al otro lado, el método de measure_gen3_routes.py.6
  3. Distancias. La búsqueda compartida en ocho direcciones del punto 3 sobre las zonas unidas, con la puerta del seto como arista de un solo sentido (en la que se entra desde el lado del lago solo con un paso recto y de la que nunca se sale hacia el lago), y con cada longitud como coste de camino en el que un paso en diagonal cuenta √2, da de la llegada a la tienda de cartas 60 tiles como máximo; de la llegada al muelle de la Orilla del Lago, de 110 a 120; del muelle a la llegada, 0,8 veces la caminata de ida como máximo; de la llegada a la puerta del museo, 70 como máximo. La forja imprime los tiempos a 4 tiles por segundo.
  4. Proporción. Los tiles más allá de la Plaza divididos entre los tiles de la Plaza quedan entre 2,0 y 3,9.
  5. Orientación. La altura del Paseo de la Pradera supera a su anchura.
  6. Ningún fotograma negro ni bloqueo del hilo principal en una costura. En una compilación para dispositivo, el coleccionista cruza caminando la costura entre la Plaza y la Calle de los Álbumes, desde un tile que está a más de media vista de la costura, antes de que el escenario empiece a construir la malla de la Calle de los Álbumes, hasta que el primer paso más allá de la costura ha terminado y la Plaza se ha convertido en la franja de detrás. Dos registros cubren todo ese tramo. Para la ejecución, el display link pide 60 hercios a través de su preferredFrameRateRange, para que la frecuencia cambiante de una pantalla ProMotion no mueva el recuento a mitad de la caminata; Apple describe el rango como uno que el display link hace lo posible por respetar, así que es el registro de tiempos, no la petición, el que muestra la frecuencia que se mantuvo.67 El primer registro es cada fotograma que muestra la pantalla, guardado por una grabación a esa frecuencia e inspeccionado fotograma a fotograma: un fotograma es negro cuando su brillo medio queda por debajo de una cuarta parte del fotograma mediano del tramo (umbral mío), y un solo fotograma negro en cualquier punto del tramo hace fallar la comprobación. El número de fotogramas de la grabación en el tramo debe ser igual al número de llamadas del registro de tiempos en ese mismo tramo, para que una captura que pierde fotogramas no pueda aprobar por saltarse el negro. Todavía no se ha demostrado que ningún método de captura registre cada fotograma mostrado, y esta coincidencia es la que decide si alguno lo hace. Cuando los recuentos difieren y el registro de tiempos cumple su propia regla, que se da más abajo, la culpa es de la captura y la ejecución no cuenta; cuando difieren y el registro de tiempos incumple esa regla, la comprobación falla. El segundo es el targetTimestamp de una llamada de CADisplayLink registrada en el run loop principal, tal como lo registra el propio ejemplo de Apple, el momento en que, según la documentación de Apple, se muestra el siguiente fotograma, anotado en cada fotograma; ningún intervalo entre valores sucesivos puede superar los 25 milisegundos, un fotograma y medio a 60 hercios, así que un solo fotograma perdido hace fallar la comprobación igual que un solo fotograma negro, lo que detecta un bloqueo del hilo principal tanto mientras se construye el vecino como en el cruce. Una ejecución cuyo registro de tiempos se asienta en cualquier frecuencia distinta de 60 hercios no cuenta, y el modo de bajo consumo está desactivado para ella, ya que Apple nombra ese modo, un estado térmico crítico y los ajustes de accesibilidad entre lo que puede cambiar la frecuencia.67 El dispositivo es un iPhone Duo abierto en cuanto haya uno a mano; no hay ningún iPhone Duo emparejado con mi Mac mientras escribo esto, así que hasta entonces la comprobación se ejecuta en un iPhone 18 Pro Max sobre la misma costura, lo que muestra si la aproximación y el cruce bloquean o dejan en blanco la pantalla en un teléfono, pero no cómo marca el ritmo de sus fotogramas la pantalla interior del Duo. El simulador no puede sustituirlo: según mi lectura, su temporización de fotogramas mide el Mac que lo ejecuta, no un teléfono. Por separado, una captura en el simulador del Duo abierto desde dentro del paquete de pruebas, con el coleccionista en el último tile de la Plaza antes de la costura, muestra al menos 14 tiles de la Calle de los Álbumes.6064
  7. Rótulo con el nombre. El rótulo está en pantalla entre 2,5 y 3,5 segundos después de cruzar una costura o de llegar en tranvía.
  8. Modelo de la pantalla del mapa. Pruebas unitarias: el rectángulo de cada zona cabe dentro de 16 por 12, no hay dos que se solapen, cada zona tiene nombre, la zona actual está marcada y la parada de una zona no visitada está desactivada.
  9. Reglas del tranvía. Pruebas del servidor: un viaje a una zona no visitada se rechaza; un viaje desde un interior se rechaza; un viaje termina en la parada de destino.
  10. Hallazgos. Pruebas del servidor: como mucho un destello por entrada en una zona, como mucho tres por coleccionista y día, el mismo destello para el mismo coleccionista, fecha y zona, y recompensas sacadas solo de las tablas de cosméticos y de notas de misión, nunca una carta, XP ni monedas. Una prueba de la forja: los macizos de flores cubren entre un 12 % y un 18 % de los tiles transitables del Paseo de la Pradera.
  11. Guardián del arco. Una prueba unitaria: los cuatro regalos de hito se disparan una vez cada uno, con cuentas registradas de 10, 30, 50 y 100, y nunca por monedas ni por compras.
  12. Paridad con el servidor. El servidor carga las letras y las conexiones de cada zona y lleva a un coleccionista caminando desde la llegada hasta el muelle de la Orilla del Lago a través de dos costuras y de vuelta por la puerta del seto, con la búsqueda en ocho direcciones del punto 3; la app y el servidor devuelven los mismos tiles y el mismo coste en ambos sentidos, y un paso que la búsqueda del cliente rechazaría, un recorte de esquina o un paso desde el sendero hacia fuera a través de la puerta, también lo rechaza el servidor, el patrón de las pruebas de servidor existentes.3728
  13. Nombres y arte. La lista de nombres vetados existe en el repositorio con su prueba, y la prueba pasa: cada nombre de zona, cartel y texto supera la lista; cada tile y cada sprite sale de la forja.

Fuera de este encargo

  • Encuentros aleatorios por paso, o cualquier cosa que se juegue como un combate salvaje. Los hallazgos están colocados y son visibles.
  • Controles de acceso por capacidad en las zonas principales. Ninguna zona se abre por un nivel, un pin, una compra o una herramienta; las zonas se abren llegando a ellas caminando, y solo el atajo, el tranvía, se gana, visitando. Esa es la fila Desbloqueos de la sección 5 leída en su versión amable.5226
  • Trayectos de más de unos 30 segundos entre dos lugares donde la gente se encuentra, sin tranvía. Los tramos de un minuto del canon son mazmorras.7
  • Repechos, terrazas con bajadas de un solo sentido y cualquier altura por celda. Se aplazan al artículo sobre la elevación, que es quien los decide; hasta entonces el encargo obtiene su camino a casa más corto de la puerta del seto, que es de un solo sentido pero plana.36
  • Nombres de camino numerados, un esquema de nombres de «región», viaje rápido condicionado a medallas, o un edificio que copie el aspecto de una garita del canon.27
  • Conexiones de un solo lado. El canon las usa como truco de dibujo; este encargo no tiene ninguna, y la comprobación 1 falla ante cualquiera.8
  • Hallazgos de monedas, hasta que el plan del mundo fije cuántas monedas da una visita diaria.27
  • Los puestos del mercado en la Calle de los Álbumes antes de la fase del mercado.27

Puntos clave

Si dibujas el arte

  • Dibuja una costura solo donde el suelo continúa. Rojo une un mismo tileset en 76 de sus 78 conexiones, y cada garita de Rojo entre dos lugares está donde cambia el tileset; un edificio con dos puertas es la forma honesta de cambiar de material.8
  • Haz la primera ruta corta y la de más hierba: de dos a seis pantallas, entre un 14 % y un 23 % de su mapa con terreno de encuentros, sin entrenadores. Ve aclarándola a medida que avanza el viaje.56
  • Dibuja la pantalla del mapa como una cuadrícula gruesa de rectángulos con nombre. La de Esmeralda tiene 28 por 15 casillas, y 49 de sus 95 rectángulos son de una sola casilla.11

Si construyes el motor

  • Guarda las conexiones como datos con una dirección, un vecino y un desplazamiento, y comprueba que cada una tiene una inversa con el desplazamiento negado; las 134 de Esmeralda la tienen.842
  • Dibuja al menos media vista del vecino más allá del borde. La Gen 3 copia 7 celdas (8 por el este) porque el jugador ve 7 a cada lado; a las escalas de Kiradex eso son 15 tiles en el Duo abierto y 12 en un Pro Max en vertical.960
  • Mantén una sola escena a través de una costura y reserva el cambio de escena para las puertas y el viaje rápido, donde un fundido lo oculta.1037
  • Mide las distancias con una búsqueda, no con una regla, y con todas las reglas de movimiento que tenga el motor: en las nueve rutas medidas cuyos extremos se unen a pie, la caminata más larga de lado a lado mide de 1,15 a 1,70 veces el lado largo y la de vuelta a casa de 0,95 a 1,42, y la vuelta puede ser una cuarta parte más corta que la ida. Una búsqueda sin los muros de un solo lado y los saltos laterales de esquina de Cristal deja la Ruta 32 en 110 celdas en cada sentido; con ellos son 132 a la ida y 128 a la vuelta.5617
  • Dale a la app y al servidor un único grafo de caminata. Si el cliente camina en ocho direcciones y el servidor en cuatro, cada distancia que mida una prueba pertenece solo a uno de los dos.28

Si diseñas el bucle

  • Dimensiona cada trayecto en segundos. Un primer tramo son de 15 a 25 segundos de caminata en el canon; un minuto es una mazmorra.7
  • Haz que el camino a casa sea más corto que el de ida, y dale algo de un solo sentido con lo que lograrlo, porque en una cuadrícula que se puede recorrer en ambos sentidos la caminata más corta de vuelta es la caminata más corta de ida. El canon lo hace con repechos, hasta un 44 %; una puerta que solo se abre desde el lado lejano lo hace sin altura.5666
  • Una vez que el jugador tiene el mapa, muestra en él todos los lugares, y haz que solo se gane el atajo, visitando. Cada juego de Pokémon medido aquí entrega el mapa durante el juego, dibuja en él todos los lugares, visitados o no, salvo unos pocos lugares tardíos retenidos por banderas de la historia o de eventos, activa la bandera de visita al entrar y solo ofrece para el viaje rápido los lugares visitados; Kiradex va un paso más allá y muestra su mapa desde el primer día.4445121323222426
  • Abre las zonas por hazaña y por fecha, como hace Stardew, en lugar de por un nivel o una compra, y dale al caminante algo que hacer con la colección vaya donde vaya.5227

Preguntas frecuentes

¿Cuánto debe medir una ruta en un RPG de vista cenital?

En los Pokémon en 2D, de dos a diez pantallas de consola a lo largo del eje de desplazamiento, y la primera ruta de dos a seis. En celdas, las dieciséis rutas que medí van de 20 a 108 en su lado largo, y en las nueve que se pueden recorrer de punta a punta, la caminata más corta de lado a lado en el sentido más largo mide de 1,15 a 1,70 veces esa longitud porque el camino serpentea, y la de vuelta a casa de 0,95 a 1,42. A 16 fotogramas por celda, un primer tramo desde una puerta hasta el edificio principal del pueblo siguiente lleva 15,5 segundos en Esmeralda y 25,2 en Rojo Fuego.56717

¿Cómo conectan los juegos de Pokémon sus mapas sin pantalla de carga?

Cada mapa enumera sus vecinos con una dirección y un desplazamiento. En Esmeralda, el motor copia el mapa actual en un búfer con un margen de 7 celdas (8 por el este), «the player has 7 metatiles of view horizontally in either direction» (el jugador ve 7 metatiles en horizontal hacia cada lado), y llena el margen de un lado conectado con 7 filas o columnas del vecino (8 columnas por el este), dibujadas con los tiles del mapa actual. Cuando el jugador cruza, carga el tileset secundario, la paleta, la música y el clima del mapa nuevo y hace entrar deslizándose un rótulo con el nombre, sin fundido. Rojo hace lo mismo con un margen de 3 bloques, 6 celdas.91039

¿Por qué las rutas de Kanto tienen garitas?

Según mi lectura de los datos, porque una costura de Game Boy solo puede unir dos mapas dibujados con el mismo tileset, y una garita es una puerta donde cambia el tileset: 76 de las 78 conexiones de Rojo unen un mismo tileset, y cada garita de Rojo entre dos lugares une dos. Las garitas también albergan reglas: los guardias de Azafrán que quieren una bebida, una comprobación de medalla en la Ruta 22, y tres ayudantes que dan objetos a las 10, 30 y 50 especies obtenidas. Ninguna declaración de los desarrolladores confirma la razón del tileset.8192029

¿Por qué los repechos de Pokémon son de un solo sentido?

El comportamiento de una celda de repecho nombra una dirección de desplazamiento, y el jugador solo puede cruzarla en ese sentido. Medidos en las primeras rutas, los repechos miran hacia el pueblo anterior: la vuelta a casa es entre un 2 % y un 44 % más corta que la ida en las nueve rutas con repechos cuyos extremos se unen a pie. En las cuatro rutas en las que se buscó, el camino a casa cruza de 0 a 5 celdas de hierba alta frente a 4 a 19 en el de ida.365618

¿Cómo decide Vuelo a qué pueblos puedes volar?

Con una bandera de visita que se activa cuando entras en el pueblo. En Esmeralda, cada uno de los 16 pueblos y ciudades activa su bandera FLAG_VISITED_* en su script de transición, y el mapa de la región marca un pueblo como destino de Vuelo solo cuando la bandera está activada; Rojo guarda un bit por ciudad en wTownVisitedFlag, y Cristal activa un punto de vuelo en una rutina de retorno del mapa. Vuelo necesita además una medalla (la tercera en Rojo y Rojo Fuego, la sexta en Esmeralda) y un mapa exterior.13222423

¿Qué tamaño tiene un pueblo comparado con sus caminos?

Entre dos y cuatro veces menor. Las celdas de ruta divididas entre las celdas de pueblo dan 1,97 en Cristal, 2,65 en Rojo, 3,70 en las rutas terrestres de Esmeralda y 3,87 en Rojo Fuego; en la pantalla del mapa de Esmeralda el cociente se lee como 5,9 a 1, porque un pueblo ocupa una o dos casillas por grande que sea.3334

Las mecánicas, los tamaños y los métodos no están protegidos por derechos de autor. Los tiles y sprites concretos sí lo están, y los nombres y las marcas lo están por el derecho de marcas. El primer artículo de esta serie trata esa frontera, con la Circular 33 de la Copyright Office, que deja los sistemas y los métodos de funcionamiento fuera del derecho de autor, y las patentes de la demanda de Nintendo contra la desarrolladora de Palworld.60 Este encargo toma prestados números y reglas y dibuja cada tile con la forja propia de Kiradex, con los nombres contrastados con una lista de nombres vetados.26


Cómo se hizo este artículo. El dossier de investigación que lo respalda se compiló el 4 de octubre de 2026 a partir de clones superficiales de las descompilaciones de pret, medidos con seis scripts de Python guardados junto con sus salidas, y de copias guardadas de la Stardew Valley Wiki, Nookipedia, el desensamblado zladx, el manual de Porymap, GBATEK, Pan Docs, una página de Bulbapedia y las páginas de Apple. Cada número de Pokémon del texto es la salida de un script, y cada nota nombra el script. Antes de la publicación, una segunda revisión el 5 de octubre dio lugar a tres nuevas mediciones, los muros de un solo lado y los saltos de esquina de Cristal, la carrera sobre repechos y la pradera del encargo sobre la caminata en ocho direcciones de la app, y a una lectura más atenta de los pasos de gracia del código de encuentros; cada nota dice qué cambió. La propuesta de la sección 7 es mía y está marcada como tal; nada de ella se ha construido.

Relacionado en este sitio: Mundos de pixel art en el iPhone es el primer artículo de esta serie, con los sistemas de tiles, la receta de RealityKit y los recuentos de tiles por dispositivo sobre los que descansan las vistas de este artículo; Personas en pixel art: personajes y un creador en el iPhone es el coleccionista que recorre estas rutas; Estructuras en pixel art: casas, salones e interiores en el iPhone tiene las puertas, los warps y los intercambios de piso que reutilizan el tranvía y el arco, y el rechazo de los repechos que este artículo deja al artículo sobre la elevación; El iPhone Duo para desarrolladores deduce el tamaño de la pantalla interior a partir del cual se calcula la franja de media vista; Prepara tu app para el iPhone Duo trata la disposición lado a lado que sigue el panel del mapa; y Xcode 27.1 beta: tu app en el simulador del iPhone Duo trata el simulador en el que se ejecuta la comprobación de costura del encargo.

Fuentes


  1. pret, pokered/home/overworld.asm en el commit d2704a6 (OverworldLoop llamando a DelayFrame dos veces por iteración; AdvancePlayerSprite moviendo 2 pixeles por iteración durante 8 iteraciones, wWalkCounter 8; la bicicleta llamando a AdvancePlayerSprite dos veces por iteración), consultado el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/home/overworld.asm. ↩↩↩↩

  2. pret, pokecrystal/engine/overworld/map_objects.asm (StepVectors: un paso caminando de 8 ticks de 2 pixeles, un paso en bici de 4 ticks de 4 pixeles) y pokecrystal/engine/overworld/events.asm (MaxOverworldDelay: db 2) en el commit 5beda23, consultados el 4 de octubre de 2026, https://github.com/pret/pokecrystal/blob/master/engine/overworld/map_objects.asm. ↩↩↩↩

  3. pret, pokeemerald/src/event_object_movement.c en el commit 731ad5b (las tablas de paso: 16 entradas en sStep1Funcs para caminar, 8 para correr y hacer surf, 6 para la Bici Acrobática y las corrientes, 4 para la Bici Carrera, 2 para la más rápida; JUMP_DISTANCE_FAR 32 fotogramas sobre dos celdas; sJumpY_High con un pico de 12 pixeles), consultado el 4 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/src/event_object_movement.c. ↩↩↩↩↩

  4. Código fuente de Kiradex, Kiradex/World/PlazaRig.swift, línea 101 (tilesPerSecond: Float = 4) y línea 122 (runPace: Float = 1.6), leídas del árbol de trabajo el 4 de octubre de 2026, y líneas 660 y 666 (cada fotograma suma dt × tilesPerSecond × pace ÷ length al avance de un paso, y un paso terminado devuelve el avance a 0, descartando el exceso), leídas el 5 de octubre de 2026; repositorio privado. Los 6,4 tiles por segundo son la carrera nominal, 4 × 1,6. ↩↩↩↩↩

  5. Medición del autor, 4 de octubre de 2026: measure_gen12_routes.py en la carpeta de evidencias del autor para este artículo, salida gen12_routes.txt. Entradas de pokered de pret en d2704a6: constants/map_constants.asm (tamaños en bloques, duplicados a celdas), maps/Route*.blk, gfx/blocksets/overworld.bst frente a Overworld_Coll, el tile de hierba $52 y data/tilesets/ledge_tiles.asm (un tile de 8 por 8 por celda, el inferior izquierdo), data/maps/objects/Route*.asm (entrenadores como líneas object_event con una clase OPP_), data/maps/headers/Route*.asm (conexiones). De pokecrystal de pret en 5beda23: maps/Route*.blk, data/tilesets/<tileset>_collision.asm a través de CollisionPermissionTable (los cuatro bytes por bloque, supuestos en orden de filas), maps/Route*.asm (entrenadores como OBJECTTYPE_TRAINER). Ampliado el 5 de octubre de 2026 (la salida anterior se conserva como gen12_routes.pre-walls.txt): los muros laterales de Cristal, los bytes de colisión de COLL_RIGHT_WALL a COLL_UP_LEFT_WALL ($b0 a $b7) y las boyas laterales, rechazan un paso que salga por el lado amurallado y un paso que entre por él, tal como los establece GetMovementPermissions (home/map.asm, desde la línea 1511) y los lee .CheckLandPerms (engine/overworld/player_movement.asm, línea 686); los repechos de esquina HOP_DOWN_RIGHT y HOP_DOWN_LEFT saltan hacia abajo o hacia el lado (.ledge_table, línea 383), y un salto solo se intenta después de que falle el paso normal (.Normal, líneas 45 a 56); los caminos más cortos se encuentran con la búsqueda de Dijkstra, ya que un salto cuesta 2. Solo la Ruta 32 tiene muros laterales (41 celdas, todas UP_WALL, entre ellas el bloque de data/tilesets/johto_collision.asm línea 113), y solo se movieron sus caminatas: 110 en cada sentido antes, 132 hacia el sur y 128 hacia el norte después. probe_gen12_exact.py (salida probe_gen12_exact.txt) ejecuta todas las combinaciones de los tres cambios: los muros solos dan 132 en cada sentido, los saltos de esquina en dos direcciones acortan después la vuelta a 128, y la búsqueda exacta no cambia nada; probe_route32_path.py traza el salto, desde el borde HOP_DOWN_RIGHT en la celda (8, 80) sobre una celda WALL hasta (10, 80). pokered no tiene permisos de un solo lado por tile; su TilePairCollisionsLand (data/tilesets/pair_collision_tile_ids.asm) bloquea un par de tiles en ambos sentidos y solo enumera los tilesets CAVERN y FOREST, mientras que todos los mapas medidos aquí son OVERWORLD. La lectura del borde en la Gen 2 viene de probe_gen2_ledges.py (21 de 21 celdas HOP_DOWN de la Ruta 30 tienen una celda WALL debajo). El modelo de celdas de la Gen 1 se comprobó a ojo sobre el render de la Ruta 1 de Rojo que hace render_gen1.py, al doble de tamaño con una cuadrícula de 16 pixeles (render_Route1.png, solo para análisis, derivado de arte con derechos de autor y no publicado). También las áreas de rutas y pueblos de la nota 33. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  6. Medición del autor, 4 de octubre de 2026: measure_gen3_routes.py en la carpeta de evidencias del autor para este artículo, salidas gen3_routes.txt y gen3_routes.json. Entradas de pokeemerald de pret en 731ad5b y pokefirered en 037335f: data/layouts/layouts.json (tamaños), cada celda del map.bin de cada ruta (bits 0 a 9 metatile, 10 y 11 colisión, 12 a 15 elevación), su comportamiento según el metatile_attributes.bin primario o secundario (Esmeralda u16, bits de comportamiento 0 a 7; Rojo Fuego u32, bits de comportamiento 0 a 8, tipo de encuentro bits 24 a 26), recuentos de comportamientos MB_TALL_GRASS, MB_JUMP_* y de agua, y data/maps/Route*/map.json (conexiones, entrenadores como object_events cuyo trainer_type no es TRAINER_TYPE_NONE, trainer_sight_or_berry_tree_id). Caminatas más cortas por búsqueda en anchura. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. Medición del autor, 4 de octubre de 2026: measure_travel.py en la carpeta de evidencias del autor para este artículo, salidas travel.txt y travel.json, sobre pokeemerald de pret en 731ad5b y pokefirered en 037335f. Búsqueda en anchura sobre pares (mapa, celda) a través de costuras, warps y repechos, desde la celda bajo la primera puerta hasta la última puerta, con el recuento incluyendo el paso final de entrada en ella (línea 136, «+1: the step up into the door»); segundos como celdas × 16 fotogramas ÷ 59,7275 hercios caminando. Corriendo, ampliado el 5 de octubre de 2026 (la salida anterior, que valoraba cada celda corriendo a 8 fotogramas, se conserva como travel.pre-ledgerun.txt), es una segunda búsqueda del menor número de fotogramas, 8 por paso y 32 por salto de repecho, porque el salto de Rojo Fuego es Jump2 a JUMP_DISTANCE_FAR, 32 fotogramas a cualquier marcha (src/field_player_avatar.c PlayerJumpLedge, línea 905; src/event_object_movement.c DoJumpSpriteMovement, línea 9094); el tramo del Centro de la Ruta 4 a Ciudad Celeste son 2.528 fotogramas, 42,3 segundos, con un salto, y ningún otro tramo de ida de la tabla salta un repecho; los árboles de Corte, las rocas de Golpe Roca y los pedruscos de Fuerza bloquean sus celdas salvo que la ejecución diga otra cosa (la ejecución «tras Corte» los elimina, lo que en la Ruta 2 abre ROUTE2_EAST_BUILDING). No se cuentan fundidos ni combates. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  8. Medición del autor, 4 de octubre de 2026, ampliada el 5 de octubre de 2026 para leer 8 columnas por el este, como las copia FillEastConnection, y para recortar cada franja donde saldría del búfer, como la recortan FillNorthConnection, FillSouthConnection, FillWestConnection y FillEastConnection; los recuentos de solo primarios pasaron de 22 de 38 (Esmeralda) y 25 de 34 (Rojo Fuego) a 24 de 38 y 24 de 34: measure_connections.py en la carpeta de evidencias del autor para este artículo, salidas connections.txt y connections.json, sobre las cuatro descompilaciones: cada conexión de mapa, la coincidencia de tileset a través de cada costura (para la Gen 3, conjuntos primario y secundario, y si la franja del vecino en el margen, 7 filas o columnas y 8 columnas por el este, usa solo metatiles primarios), la reciprocidad con desplazamientos negados, los desplazamientos distintos de cero, los mapas con los tilesets GATE y FOREST_GATE en Rojo (data/maps/headers/*.asm), el entorno GATE en Cristal (data/maps/maps.asm), y los mapas interiores de la Gen 3 cuyos warps llevan a dos mapas exteriores distintos o a dos lados de uno mismo. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  9. pret, pokeemerald/include/fieldmap.h (MAP_OFFSET 7 y su comentario, «the player has 7 metatiles of view horizontally in either direction»; MAX_MAP_DATA_SIZE 10240; MAP_OFFSET_W como MAP_OFFSET * 2 + 1 y MAP_OFFSET_H como MAP_OFFSET * 2), pokeemerald/src/fieldmap.c (InitMapLayoutData dimensionando el búfer como el mapa más MAP_OFFSET_W por MAP_OFFSET_H; FillSouthConnection y sus hermanas, con FillNorthConnection fijando x = offset + MAP_OFFSET y width = cWidth cuando la franja cabe, MAP_OFFSET filas de alto, y FillEastConnection copiando MAP_OFFSET + 1 columnas; GetBorderBlockAt combinando el borde con OR con MAPGRID_IMPASSABLE), data/maps/Route101/map.json (Pueblo Escaso al norte con desplazamiento 0) y data/layouts/layouts.json (LAYOUT_ROUTE101 y LAYOUT_OLDALE_TOWN, de 20 por 20 cada uno) en 731ad5b, consultados el 4 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/include/fieldmap.h y https://github.com/pret/pokeemerald/blob/master/src/fieldmap.c. ↩↩↩↩↩↩↩

  10. pret, pokeemerald/src/field_camera.c (DrawMetatileAt dibujando con los tilesets primario y secundario del layout actual) y pokeemerald/src/overworld.c (LoadMapFromCameraTransition: el script de transición, el tileset secundario y la paleta, la música, el clima y el rótulo con el nombre del mapa, sin fundido) en 731ad5b, consultados el 4 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/src/overworld.c. ↩↩↩↩↩↩↩↩↩↩

  11. pret, pokeemerald/src/region_map.c (MAP_WIDTH 28, MAP_HEIGHT 15), src/data/region_map/region_map_layout.h y src/data/region_map/region_map_sections.json en 731ad5b, consultados el 4 de octubre de 2026, con recuentos de measure_region_maps.py (salida region_maps.txt), https://github.com/pret/pokeemerald/blob/master/src/data/region_map/region_map_layout.h. ↩↩↩↩↩↩↩

  12. pret, pokeemerald/src/field_control_avatar.c (un metatile con el comportamiento MB_REGION_MAP ejecuta EventScript_RegionMap), data/event_scripts.s (EventScript_RegionMap, special FieldShowRegionMap), data/maps/RustboroCity_DevonCorp_3F/scripts.inc (setflag FLAG_SYS_POKENAV_GET), src/start_menu.c (la entrada del PokéNav en el menú solo cuando FLAG_SYS_POKENAV_GET está activada) y src/region_map.c (el Frente Batalla y la Isla Sur como MAPSECTYPE_NONE hasta sus banderas FLAG_LANDMARK_*, líneas 1213 a 1216) en 731ad5b, consultados el 4 de octubre de 2026, con los layouts de mapas de pared según scan_wall_maps.py en la carpeta de evidencias del autor para este artículo (salida wall_maps.txt: el piso de arriba de las dos casas de Villa Raíz y la planta baja de cada Centro Pokémon), https://github.com/pret/pokeemerald/blob/master/data/event_scripts.s. ↩↩↩↩↩↩↩↩

  13. pret, pokeemerald/src/party_menu.c (FIELD_MOVE_FLY frente a FLAG_BADGE06_GET), src/overworld.c (Overworld_MapTypeAllowsTeleportAndFly), src/region_map.c (MAPSECTYPE_CITY_CANFLY cuando la FLAG_VISITED_* del pueblo está activada) y data/maps/OldaleTown/scripts.inc (setflag FLAG_VISITED_OLDALE_TOWN) en 731ad5b, consultados el 4 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/src/region_map.c. ↩↩↩↩↩↩↩↩↩↩

  14. Código fuente de Kiradex, scripts/forge/town.py, líneas 79 y 80 (MARGIN = 12, WIDTH, HEIGHT = 40, 30) y su lista BUILDINGS (siete edificios, puertas a room:me, room:npc-* o hall, una llegada), leído el 4 de octubre de 2026; repositorio privado. ↩↩↩↩↩↩

  15. Martin Korth, GBATEK, temporización de la LCD («Total 228 lines, 16.743 ms, 280896 cycles - ca. 59.737 Hz»), guardado el 4 de octubre de 2026 como gbatek.txt, https://problemkaputt.de/gbatek.htm. ↩↩↩

  16. Blake Crosley, «Pixel-Art Motion: Walks, Cameras and Doors on iPhone», blakecrosley.com, 5 de octubre de 2026, sección 7 («Where the walk stands today»: el modelo por fotogramas del código de caminata de Kiradex, en el que la carrera tarda 10 fotogramas por tile a 60 hercios, 6,00 tiles por segundo, y 19 a 120, 6,32, porque se descarta el exceso de cada tile; la espera de 220 milisegundos de la puerta y el cambio de piso sin fundido; y la caminata del encargo de 1 pixel por tick, 16 ticks por tile a 60 hercios, 3,75 tiles por segundo, con el velo escalonado sobre puertas y pisos), https://blakecrosley.com/blog/pixel-art-motion-on-iphone. ↩↩↩↩↩

  17. Aritmética del autor a partir de los valores medidos del texto, con las cifras del 5 de octubre impresas por arith_oct5.py en la carpeta de evidencias del autor para este artículo (salida arith_oct5.txt): celdas por segundo como 59,7275 ÷ 16 y ÷ 8; los 4 tiles por segundo de Kiradex frente a 3,73 (un 7,2 % más rápido), y su carrera frente a 7,47 a 6,00 (un 19,6 % por debajo) y a 6,4 (un 14,3 % por debajo); un tiempo a 4 tiles por segundo frente a uno a 3,75 como 4 ÷ 3,75, una quinceava parte más largo, y los 23 ticks de una diagonal a 60 hercios frente a √2 ÷ 4 segundos como 0,3833 ÷ 0,3536 = 1,084, alrededor de una doceava parte más largo (impreso por r6_arith.py); segundos por celda como 16 ÷ 59,7275 (0,27) y por tile de Kiradex como 1 ÷ 4 (0,25); factores de camino como la caminata más corta dividida entre el lado largo de la ruta, para el sentido más largo y para la vuelta a casa, en las nueve rutas con una caminata de costura a costura en cada sentido (una caminata recta desde la primera fila hasta la última de un mapa de 20 celdas son 19 pasos, 0,95), y los ahorros como (ida − vuelta) ÷ ida, del 2,38 % (Ruta 3 de Rojo) al 44,12 % (Ruta 101 de Esmeralda); la hierba alta sobre celdas transitables por ruta a partir de los recuentos de hierba y de celdas transitables de los dos scripts de rutas; las casillas de los pueblos en el mapa de Esmeralda a partir del width y el height de las 16 secciones de pueblos y ciudades de region_map_sections.json (diez de 1 por 1, seis de 1 por 2 o 2 por 1, 22 en total); los recuentos de tiles del Duo interior como 2853 ÷ 96 y 2007 ÷ 96, siendo 96 los 16 texeles a 6 pixeles; los tiles por delante de un coleccionista centrado como la mitad de los tiles visibles a lo largo del eje de desplazamiento; una muestra de 100 milisegundos como un fotograma de cada 100 × 60 ÷ 1.000 = 6 a 60 hercios; el umbral de tiempos como dos fotogramas a 60 hercios, 33 milisegundos; los 5 por 6 acres de 16 por 16 casillas de Animal Crossing como 80 por 96; las zonas del encargo como 44 × 14 + 24 × 60 + 36 × 20 + 30 × 20 = 3.376 tiles sobre 40 × 30 = 1.200; las medias vistas como los recuentos de tiles del 3 de octubre divididos entre dos y redondeados hacia arriba; las casillas de la pantalla del mapa como los tiles de cada zona entre 10, redondeados. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  18. Medición del autor, 4 de octubre de 2026: measure_grass_paths.py en la carpeta de evidencias del autor para este artículo, salida grass_paths.txt: una búsqueda en anchura 0-1 en la que entrar en una celda de hierba alta cuesta 1 y cualquier otro movimiento 0, con los repechos en un solo sentido, usando los modelos de celdas y los cruces alcanzables desde puertas de los dos scripts de rutas; Ruta 1 de Rojo, Ruta 1 de Rojo Fuego, Rutas 101 y 102 de Esmeralda. Las celdas del paso estrecho salen de probe_grass_gateway.py (salida grass_gateway.txt), que vuelve a ejecutar la búsqueda hacia el sur de la Ruta 1 de Rojo convirtiendo por turnos cada celda de hierba en suelo normal: solo las 8 celdas de las cuatro últimas filas del paso, dos por fila, bajan el mínimo. ↩↩↩↩↩↩

  19. pret, pokered/scripts/Route5Gate.asm (TEXT_ROUTE5GATE_GUARD_GEE_IM_THIRSTY, BIT_GAVE_SAFFRON_GUARDS_DRINK) y pokered/scripts/Route22Gate.asm (BIT_BOULDERBADGE) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/scripts/Route5Gate.asm. ↩↩↩↩↩

  20. pret, pokered/scripts/Route2Gate.asm, scripts/Route11Gate2F.asm, scripts/Route15Gate2F.asm (umbrales de 10, 30 y 50) y engine/events/oaks_aide.asm (CountSetBits sobre wPokedexOwned) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/engine/events/oaks_aide.asm. ↩↩↩↩↩

  21. pret, pokeemerald/src/map_name_popup.c en 731ad5b (POPUP_OFFSCREEN_Y 40, el deslizamiento de 2 pixeles por fotograma, tOnscreenTimer > 120), consultado el 4 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/src/map_name_popup.c. El total de 190 fotogramas es el recuento del autor de los estados de la tarea por sus umbrales; cada estado puede durar un fotograma más o menos. ↩↩↩↩↩

  22. pret, pokered/data/maps/town_map_entries.asm (37 entradas exteriores, una sin usar; 60 interiores), engine/overworld/toggleable_objects.asm (wTownVisitedFlag, con el comentario «mark town as visited (for flying)»), engine/items/town_map.asm (la lista de vuelo omitiendo los pueblos no visitados) y engine/menus/start_sub_menus.asm (Vuelo necesita la Medalla Trueno, bit 2, y un mapa exterior) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/engine/items/town_map.asm. ↩↩↩↩↩↩↩

  23. pret, pokefirered/src/data/region_map/region_map_layout_kanto.h y los tres layouts de las Islas Sete (22 por 15 por página, capas de exterior y de mazmorras), src/party_menu.c e include/constants/party_menu.h (Vuelo como FLAG_BADGE01_GET + fieldMove con FIELD_MOVE_FLY 2, la tercera medalla), src/region_map.c (GetMapsecType devolviendo MAPSECTYPE_VISITED solo cuando la bandera FLAG_WORLD_MAP_* del lugar está activada, desde la línea 2957; Vuelo aceptando solo una casilla visitada; las páginas de las Islas Sete retenidas hasta FLAG_SYS_SEVII_MAP_123 y FLAG_SYS_SEVII_MAP_4567, líneas 1028 y 1556, que activan los scripts del Centro de Isla Prima; la Roca Ombligo y la Isla Origen tapadas hasta que se activan FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR y FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR, líneas 1521 a 1524), data/maps/CeladonCity/scripts.inc (setworldmapflag FLAG_WORLD_MAP_CELADON_CITY en el script de transición), data/maps/PalletTown_RivalsHouse/scripts.inc (la hermana del rival entregando el Mapa Pueblo, RECEIVED_TOWN_MAP) y data/event_scripts.s (EventScript_WallTownMap, special ShowTownMap) en 037335f, consultados el 4 de octubre de 2026, con recuentos de measure_region_maps.py y mapas de pared según scan_wall_maps.py (salida wall_maps.txt: la planta baja de cada Centro Pokémon, la escuela de Ciudad Verde y algunas casas), https://github.com/pret/pokefirered/blob/master/src/data/region_map/region_map_layout_kanto.h. ↩↩↩↩↩↩↩↩↩↩

  24. pret, pokecrystal/data/maps/landmarks.asm (95 puntos de referencia), data/maps/flypoints.asm (24 puntos de vuelo), maps/VioletCity.asm (VioletCityFlypointCallback: setflag ENGINE_FLYPOINT_VIOLET) y engine/events/overworld.asm (ENGINE_STORMBADGE) en 5beda23, consultados el 4 de octubre de 2026, https://github.com/pret/pokecrystal/blob/master/data/maps/flypoints.asm. ↩↩↩↩↩↩↩

  25. zladx, LADX-Disassembly en el commit 2a5c2c0, src/constants/memory/wram.asm (wOverworldRoomStatus, ds $100) y src/constants/gameplay.asm (OW_ROOM_STATUS_VISITED EQU $80 y los demás bits de estado), guardados el 4 de octubre de 2026 como ladx-wram.asm y ladx-gameplay.asm, https://github.com/zladx/LADX-Disassembly/blob/main/src/constants/gameplay.asm. ↩↩↩

  26. Dossier de investigación del autor, «Beyond the plaza: routes, map connections and districts in the canon», 4 de octubre de 2026, sección 4 («The brief for Kiradex»), síntesis del autor: las cinco zonas y sus tamaños, los objetivos de distancia, el formato de las conexiones, el plan de costura, presencia y hueco en la valla, los hallazgos, el guardián del arco, la pantalla del mapa, el tranvía, el orden de trabajo, las trece comprobaciones de aceptación y los rechazos. Repositorio de Kiradex, docs/research/routes/01-routes.md; privado. La franja de ida se estrechó el 5 de octubre de 2026 de los 90 a 120 tiles del dossier a 110 a 120, por la razón que da la nota 66; la copia del dossier todavía lleva la franja anterior. También fijados el 5 de octubre, después del dossier y fuera de su copia: el grafo de caminata en ocho direcciones compartido por la app y el servidor, los cuatro setos de la pradera, la inspección de cada fotograma de la comprobación 6, la lista de nombres vetados como trabajo pendiente y el aplazamiento de los hallazgos de monedas. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  27. Kiradex, docs/WORLD.md, «Kiradex World: research and plan», leído el 4 de octubre de 2026 (repositorio privado): sección 1 («The rules for Kiradex World»: nada de lo suyo en el mundo); sección 4 («Levels»: «XP comes only from the real world, which is the point of the app»; «Coins and the shop»: monedas ganadas con escaneos, niveles y visitas diarias; «The plaza»: salas de hasta unos 40 jugadores, repartidas por región, la cámara siguiendo al jugador limitada al mapa); sección 5 («What the Duo gives us»: «The plaza on the open inner display is the best version of this: wide view, your profile card beside the world when you tap someone»); sección 6 (el mercado a través de eBay, el puesto); sección 7 («Order of work», cada fase una compilación de TestFlight); y las decisiones del 2 de octubre de 2026 (el servidor sobre FastAPI y WebSockets). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  28. Código fuente de Kiradex, leído el 5 de octubre de 2026 (repositorio privado): Kiradex/World/TileMap.swift, path(from:to:) desde la línea 325 (ocho movimientos; una diagonal cuesta Float(2).squareRoot() y, en la línea 348, se omite salvo que los dos tiles entre los que pasa sean transitables; se expande primero el tile abierto más barato), y server/app/rooms.py, Plaza.path desde la línea 52 (en anchura sobre los cuatro movimientos de la línea 66; su docstring: «the same walk the app takes»). ↩↩↩↩↩

  29. Dossier de investigación del autor, «Beyond the plaza: routes, map connections and districts in the canon», compilado el 4 de octubre de 2026, secciones «Method» y 5 («What is measured and what is not»): las definiciones de caminata compartidas (un paso es una celda; un repecho en un solo sentido y dos celdas; una costura cuenta solo donde la celda del vecino que da al otro lado es alcanzable desde una de sus puertas, sembrada desde otras conexiones con un nivel de profundidad para un vecino sin warps; entrenadores, PNJ y bloqueos de la historia ignorados; sin surf; la elevación de la Gen 3 reducida a alturas iguales o a cualquiera de los dos lados a 0 o 15; los warps se activan al pisarlos al entrar; los árboles de Corte, las rocas de Golpe Roca y los pedruscos de Fuerza bloqueados salvo que se indique), las salvedades de los modelos de celdas de la Gen 1 y la Gen 2, la salvedad de la temporización del rótulo, la cifra de la frecuencia de fotogramas, las salvedades de clasificación, las fuentes secundarias no contrastadas con los datos del juego, y las lecturas que no son hechos. Repositorio de Kiradex, docs/research/routes/01-routes.md; privado, con una copia en el estado de investigación del autor. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  30. gbdev, Pan Docs, «Rendering» (70.224 dots por fotograma, «@ 59.7 fps»), guardado el 4 de octubre de 2026 como pandocs-timing.txt, https://gbdev.io/pandocs/Rendering.html. ↩

  31. pret, pokeemerald/src/field_control_avatar.c (CheckStandardWildEncounter, líneas 668 a 686: mientras sWildEncounterImmunitySteps < 4 cuenta el paso y vuelve sin poner a prueba; después de un StandardWildEncounter con éxito devuelve la cuenta a 0), src/overworld.c (RestartWildEncounterImmunitySteps en LoadMapFromCameraTransition, línea 800, y en LoadMapFromWarp, línea 850), src/battle_setup.c (la misma llamada al inicio de un combate, línea 370), src/wild_encounter.c (StandardWildEncounter: el salto del 40 % en un cambio de comportamiento, líneas 531 a 539 y 599; WildEncounterCheck, desde la línea 502: la tasa por 16, escalada por las Bicis Carrera y Acrobática al 80 %, por ApplyFluteEncounterRateMod y ApplyCleanseTagEncounterRateMod, y por la habilidad del Pokémon en cabeza, y después Random() % 2880 frente a ella) y src/data/wild_encounters.json (tasa terrestre 20 en las Rutas 101 a 104) en 731ad5b, consultados el 4 y el 5 de octubre de 2026, https://github.com/pret/pokeemerald/blob/master/src/field_control_avatar.c. ↩↩

  32. pret, pokefirered/src/wild_encounter.c en 037335f, consultado el 4 y el 5 de octubre de 2026: GetMapBaseEncounterCooldown (8 − rate/10 pasos, línea 686); HandleWildEncounterCooldown, líneas 707 a 755 (una vez que los pasos desde el último encuentro alcanzan el enfriamiento, cada paso puede intentarlo; antes de eso, cada paso en una celda de encuentros suma uno a la cuenta y deja que ese paso concreto lo intente cuando Random() % 100 < 5, sin terminar el enfriamiento); TryStandardWildEncounter, líneas 757 a 776 (la cuenta y el refuerzo vuelven a 0 solo después de que empiece un encuentro); el mismo reinicio en cada carga de mapa, donde src/overworld.c (líneas 764 y 799) llama a RestartWildEncounterImmunitySteps, que en Rojo Fuego llama a ResetEncounterRateModifiers (src/field_control_avatar.c, líneas 735 a 737); la tirada del 60 % en un comportamiento nuevo (línea 370); DoWildEncounterRateTest, línea 309 (rate × 16 más encounterRateBuff × 16 / 200, sobre MAX_ENCOUNTER_RATE 1.600); y AddToWildEncounterRateBuff, línea 778 (la tasa sumada tras cada tirada fallida salvo que haya un Repelente activo), https://github.com/pret/pokefirered/blob/master/src/wild_encounter.c. ↩↩

  33. Medición del autor, 4 de octubre de 2026, a partir de measure_gen12_routes.py (Rojo: de ROUTE_1 a ROUTE_25 frente a los 11 ids de mapa por debajo de $0B en constants/map_constants.asm, bloques por 4; Cristal: entorno ROUTE frente a TOWN en data/maps/maps.asm, tamaños de constants/map_constants.asm) y de measure_connections.py (Esmeralda y Rojo Fuego: map_type con tamaños de layouts.json; los 11 mapas MAP_TYPE_OCEAN_ROUTE de Esmeralda, 45.600 celdas, excluidos de la cifra terrestre; las rutas de Rojo Fuego incluyen las Islas Sete). Salidas gen12_routes.txt y connections.txt. ↩↩↩↩↩↩

  34. Medición del autor, 4 de octubre de 2026: measure_region_maps.py en la carpeta de evidencias del autor para este artículo, salidas region_maps.txt y region_maps.json (Esmeralda: 129 casillas de ruta y 22 casillas de pueblo en la cuadrícula de 28 por 15). ↩↩

  35. Bulbapedia, «Kanto Route 1», sección de la guía, guardada el 4 de octubre de 2026 como bulba-route1.txt, https://bulbapedia.bulbagarden.net/wiki/Kanto_Route_1. Usada una sola vez, como contraste de la búsqueda de menos hierba. ↩

  36. Dossiers de investigación del autor para el artículo de estructuras, repositorio de Kiradex, docs/research/structures/01-structures-in-the-canon.md, sección 8.8 («What to refuse»: «No ledges to jump, no climbing, no isometric»), y 02-structures-craft-and-engine.md (GetLedgeJumpDirection de Esmeralda, que solo deja cruzar un repecho en la dirección que nombra su comportamiento), 3 de octubre de 2026; privados. ↩↩↩↩

  37. Blake Crosley, «Pixel-Art Structures: Houses, Halls and Interiors on iPhone», blakecrosley.com, 3 de octubre de 2026 (sección 6: una única regla de profundidad y la malla de objetos, los warps como datos, los pisos intercambiados en el sitio con .id(floor.name); sección 7: las pruebas del servidor sobre plaza.json y la lista de lo que no hace la compilación, incluido «a one-way ledge»), https://blakecrosley.com/blog/pixel-art-structures-on-iphone. ↩↩↩↩↩↩↩

  38. pret, pokered/data/maps/headers/Route1.asm (connection north, ViridianCity, VIRIDIAN_CITY, -5) y pokered/macros/scripts/maps.asm (los punteros de franja de la macro connection) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/macros/scripts/maps.asm. ↩↩↩

  39. pret, pokered/constants/map_data_constants.asm (MAP_BORDER EQU 3) y pokered/home/overworld.asm (CheckMapConnections) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/constants/map_data_constants.asm. ↩↩

  40. pret, pokered/data/maps/headers/Route22.asm y Route23.asm (connection north, Route23, ROUTE_23, 0 ; unnecessary y su inversa) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/data/maps/headers/Route22.asm. ↩

  41. pret, pokecrystal/data/maps/attributes.asm (conexiones) y data/maps/maps.asm (tilesets, entornos y grupos de mapas) en 5beda23, consultados el 4 de octubre de 2026, https://github.com/pret/pokecrystal/blob/master/data/maps/attributes.asm. ↩

  42. Documentación de Porymap, «Editing Map Connections», guardada el 4 de octubre de 2026 como porymap-connections.txt, https://huderlem.github.io/porymap/manual/editing-map-connections.html. ↩↩

  43. pret, pokered/data/maps/objects/Route2Gate.asm (el ayudante de Oak y un chico) en d2704a6, consultado el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/data/maps/objects/Route2Gate.asm. ↩

  44. pret, pokered/scripts/BluesHouse.asm (la hermana del rival entregando TOWN_MAP una vez activado EVENT_GOT_POKEDEX, después EVENT_GOT_TOWN_MAP), engine/items/town_map.asm (DisplayTownMap recorriendo cada entrada de TownMapOrder sin comprobar visitas; wTownVisitedFlag leído solo en BuildFlyLocationsList) data/tilesets/bookshelf_tile_ids.asm (bookshelf_tile HOUSE, $3D, TownMapText, un mapa de pared que abre la misma pantalla), data/maps/headers/BluesHouse.asm (la casa del rival con el tileset HOUSE; la casa del jugador usa REDS_HOUSE_1 y REDS_HOUSE_2), gfx/blocksets/house.bst (el tile $3D solo en el bloque 14) y maps/BluesHouse.blk (el bloque 14 en la segunda posición de la fila superior) en d2704a6, consultados el 4 de octubre de 2026, https://github.com/pret/pokered/blob/master/scripts/BluesHouse.asm. ↩↩↩↩↩↩

  45. pret, pokecrystal/maps/CherrygroveCity.asm (el regalo del señor guía, setflag ENGINE_MAP_CARD, línea 72) y engine/pokegear/pokegear.asm (el POKEGEAR_MAP_CARD_F de la tarjeta de mapa; PokegearMap_CheckRegion mostrando el mapa de Kanto solo cuando el jugador está en un punto de referencia de Kanto; los puntos de vuelo de Kanto retenidos hasta visitar la Meseta Añil) en 5beda23, consultados el 4 de octubre de 2026, https://github.com/pret/pokecrystal/blob/master/maps/CherrygroveCity.asm. ↩↩↩↩↩

  46. Stardew Valley Wiki, «Modding:Maps», guardada el 4 de octubre de 2026 como sdv-modding-maps.txt, https://stardewvalleywiki.com/Modding:Maps. ↩↩

  47. Stardew Valley Wiki, «Pelican Town», guardada el 4 de octubre de 2026 como sdv-pelican-town.txt, https://stardewvalleywiki.com/Pelican_Town. ↩

  48. Stardew Valley Wiki, «Bus Stop», guardada el 4 de octubre de 2026 como sdv-bus-stop.txt, https://stardewvalleywiki.com/Bus_Stop. ↩

  49. Stardew Valley Wiki, «Cindersap Forest», guardada el 4 de octubre de 2026 como sdv-cindersap.txt, https://stardewvalleywiki.com/Cindersap_Forest. ↩

  50. Stardew Valley Wiki, «Backwoods», guardada el 4 de octubre de 2026 como sdv-backwoods.txt, https://stardewvalleywiki.com/Backwoods. ↩

  51. Stardew Valley Wiki, el recuadro de navegación de lugares tal como aparece en «Railroad», guardado el 4 de octubre de 2026 como sdv-railroad.txt, https://stardewvalleywiki.com/Railroad; 26 lugares según la cuenta del autor. ↩

  52. Stardew Valley Wiki, «The Mountain» (las dos salidas iniciales; las minas el 5 de primavera; el ferrocarril tras el terremoto del 3 de verano; el puente de la cantera por los lotes de la sala de manualidades o 25.000 g), guardada el 4 de octubre de 2026 como sdv-mountain.txt, https://stardewvalleywiki.com/The_Mountain. ↩↩↩↩

  53. Stardew Valley Wiki, «The Desert» (el autobús, los lotes de la cámara acorazada o 40.000 g), «Secret Woods» (el tronco y un hacha de acero) y «The Beach» (el puente de 300 de madera), guardadas el 4 de octubre de 2026 como sdv-desert.txt, sdv-secret-woods.txt y sdv-beach.txt, https://stardewvalleywiki.com/The_Desert, https://stardewvalleywiki.com/Secret_Woods y https://stardewvalleywiki.com/The_Beach. ↩↩

  54. Stardew Valley Wiki, «Speed», guardada el 4 de octubre de 2026 como sdv-speed.txt, https://stardewvalleywiki.com/Speed. La página no da unidades. ↩

  55. Nookipedia, «Acre» (el acre de 16 por 16 casillas; el pueblo de GameCube de cinco acres por seis; la estación en A-3; los rótulos; la aparición de peces e insectos al entrar y la desaparición a seis casillas; los tamaños de pueblo de los juegos posteriores), guardada el 4 de octubre de 2026 como nook-acre.txt, https://nookipedia.com/wiki/Acre. ↩↩↩↩↩

  56. Nookipedia, «Map», guardada el 4 de octubre de 2026 como nook-map.txt, https://nookipedia.com/wiki/Map. ↩

  57. Nookipedia, «Train» y «Train station», guardadas el 4 de octubre de 2026 como nook-train.txt y nook-train-station.txt, https://nookipedia.com/wiki/Train y https://nookipedia.com/wiki/Train_station. ↩

  58. zladx, wiki de LADX-Disassembly, «Game engine documentation», guardada el 4 de octubre de 2026 como ladx-engine.txt, https://github.com/zladx/LADX-Disassembly/wiki/Game-engine-documentation. ↩↩↩

  59. zladx, wiki de LADX-Disassembly, «Maps data format» (el mapa del mundo exterior de 512 bytes con punteros de sala de dos bytes; la capa de 10 por 8), guardada el 4 de octubre de 2026 como ladx-maps-format.txt, https://github.com/zladx/LADX-Disassembly/wiki/Maps-data-format. ↩

  60. Blake Crosley, «Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew», blakecrosley.com, 3 de octubre de 2026 (sección 5: la receta de RealityKit, una única malla MeshDescriptor para el mapa, los valores por defecto de RealityView, la tabla de escalado calculada a partir de las páginas de especificaciones de Apple y los perfiles del simulador de Xcode 27, el mínimo de texto de 11 puntos y el texto en SwiftUI, el fallo de la animación de opacidad y su velo, la captura con XCUIScreen dentro del paquete; «Since publishing»: un único mapa de letras exportado a la app y al servidor; la pregunta frecuente sobre derechos de autor y patentes), https://blakecrosley.com/blog/pixel-art-world-on-iphone. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  61. Apple, «iPhone Duo: Technical Specifications», guardada el 4 de octubre de 2026 como apple-duo-specs.txt, https://www.apple.com/iphone-duo/specs/. ↩

  62. Apple, Human Interface Guidelines, «Designing for games» (a través del JSON de la documentación), guardada el 4 de octubre de 2026 como hig-games-plain.txt, https://developer.apple.com/design/human-interface-guidelines/designing-for-games. ↩↩

  63. Código fuente de Kiradex, Kiradex/World/PlazaStage.swift, leído el 5 de octubre de 2026 (repositorio privado): líneas 132 y 133 (en el warp de una puerta, Task.sleep(for: .milliseconds(220)) y después onWarp(warp), sin fundido) y líneas 698 a 700 (un warp floor: establece el piso nuevo en el sitio, sin fundido). ↩

  64. Apple Developer Documentation, «targetTimestamp» (una propiedad de instancia de CADisplayLink, Core Animation; iOS y iPadOS 10.0 y posteriores), guardada el 4 de octubre de 2026 (el resumen, «The time interval that represents when the next frame displays», el intervalo de tiempo que representa cuándo se muestra el siguiente fotograma, y el ejemplo que añade el display link al run loop principal), https://developer.apple.com/documentation/quartzcore/cadisplaylink/targettimestamp. ↩↩

  65. Código fuente de Kiradex, Kiradex/World/Wants.swift («What the town’s own collectors ask to be shown, and whether the collection has it», lo que los propios coleccionistas del pueblo piden ver y si la colección lo tiene) y Kiradex/World/Quests.swift (las misiones del día y de la semana, «judged from the collection itself»), leídos el 4 de octubre de 2026; repositorio privado. ↩↩

  66. Medición del autor, 5 de octubre de 2026: measure_meadow_gate.py en la carpeta de evidencias del autor para este artículo, salida meadow_gate.txt. Une la Plaza, el Paseo de la Pradera y la Orilla del Lago del encargo en una sola cuadrícula con los tamaños de la sección 7: la Plaza tal como la entrega la forja (town.json, 40 por 30, la llegada en la columna 19, fila 13, las letras transitables del servidor), con su valla norte abierta a lo largo del borde compartido; el Paseo de la Pradera, 24 por 60, 4 tiles hacia dentro desde el extremo oeste de la Plaza para que su sendero se encuentre con el césped entre el salón y la casa que hay al este de él, el sendero de 2 tiles de ancho tras un seto en el lado este con la puerta como arista de un solo sentido en su extremo del lago, y el resto cruzado por cuatro setos, en las filas 12, 24, 36 y 48 de la pradera, con huecos de 2 tiles probados en todas las posiciones; la Orilla del Lago, 36 por 20, centrada sobre el paseo, con su mitad norte de lago, el muelle de 2 tiles de ancho alineado con el sendero y medido hasta su tile del lado de tierra. Recorre el grafo de la app (TileMap.path): ocho direcciones, una diagonal que cuesta √2 y que se rechaza cuando cualquiera de los dos tiles entre los que pasa está bloqueado; la puerta rechaza cualquier paso desde el sendero hacia el lago y solo admite un paso recto desde el lago. El serpenteo es la caminata más corta propia de la pradera desde su borde sur hasta su borde norte, al oeste del sendero. Dos setos, en las filas 20 y 40 de la pradera, la hacen serpentear de 59,00 a 66,46 tiles en las 400 posiciones, tres (filas 15, 30 y 45) de 59,00 a 79,77 (6 de 8.000 dentro de 78 a 90), cuatro de 59,00 a 95,43 (5.912 de 160.000 dentro de 78 a 90); esos límites son para setos espaciados por igual, y los espaciados desiguales serpentean más con la misma función (r7_uneven_probe.py, 5 de octubre, salida r7_uneven_probe.txt: dos setos en las filas 0 y 2 llegan a 77,00, tres en las filas 20, 22 y 24 llegan a 95,00). El mismo barrido con tres setos, en las filas 15, 30 y 45 de la pradera (añadido a la sección 5 del script el 5 de octubre tras la sexta ronda de la revisión): las 6 disposiciones dan una vuelta de 88,07 tiles y una ida de 114,05 a 120,44, cociente de 0,731 a 0,772, todas en 0,8 o por debajo, y 5 de ellas están dentro de la franja de 110 a 120, ida de 114,05 a 119,02, cociente de 0,740 a 0,772. Así que tres setos cumplen todos los objetivos en 5 posiciones; cuatro, la elección del autor, los cumplen en 4.111. En esas 5.912 disposiciones de cuatro setos: vuelta de 88,07 tiles, ida de 108,74 a 133,75, cociente de 0,658 a 0,810, 5.886 en 0,8 o por debajo; el objetivo de 0,8 necesita 88,07 ÷ 0,8 = 110,09 de ida; dentro de la franja de 110 a 120, 4.111 disposiciones, ida de 110,15 a 119,95, cociente de 0,734 a 0,800, todas en 0,8 o por debajo. De la llegada al borde norte hay 17,07 tiles; con la puerta abierta en ambos sentidos las caminatas son iguales (88,07 en cada sentido en una disposición de cada número de setos). En todos los desplazamientos de 0 a 16 tiles y en las dos posiciones del muelle, la ida más corta es de 107,18 y la vuelta más corta de 88,07; a 4 tiles por segundo, 110 y 120 tiles son 27,5 y 30 segundos. La misma salida se contrasta con el modelo anterior: ejecutada desde su copia guardada, la búsqueda en anchura en cuatro direcciones con dos setos conserva 125 disposiciones, ida de 113 a 119, vuelta de 91, cociente de 0,765 a 0,805, y esas 125 disposiciones recorridas en ocho direcciones dan una ida de 97,18 a 99,67, vuelta de 88,07, cociente de 0,884 a 0,906, ninguna en 0,8. Aquel modelo anterior contaba el serpenteo como los pasos por la pradera del camino más corto que devolviera su búsqueda, algo que los empates pueden cambiar; el serpenteo de borde a borde no puede cambiar. Disposiciones que el encargo no describe, barridas en la misma salida: con el muelle en el centro de la orilla, el mejor cociente es 0,721 (desplazamiento 4, 2.182 de 5.912 disposiciones en 0,8 o por debajo), y donde el sendero se encuentra con un edificio la puerta no ahorra nada. ↩↩↩↩

  67. Apple Developer Documentation, «preferredFrameRateRange» (una propiedad de instancia de CADisplayLink, Core Animation; iOS y iPadOS 15.0 y posteriores), guardada el 4 de octubre de 2026 (la discusión: el display link hace lo posible por llamar dentro del rango, el sistema también tiene en cuenta el hardware, el resto del trabajo, el modo de bajo consumo, el estado térmico y los ajustes de accesibilidad, y por defecto el rango es igual a la frecuencia máxima de refresco de la pantalla), https://developer.apple.com/documentation/quartzcore/cadisplaylink/preferredframeraterange. ↩↩

Artículos relacionados

Pixel-Art Structures: Houses, Halls and Interiors on iPhone

How Pokémon, the SNES RPGs and Stardew build houses, interiors and floors, measured from source, and how Kiradex's town …

80 min de lectura

Pixel-Art People: Characters and a Creator on iPhone

How the best pixel-art games build and dress their people, measured, and how we rebuilt Kiradex's collector, its wardrob…

79 min de lectura

Prepara tu app para el iPhone Duo: un ejemplo práctico

Cómo preparar y enviar una app para el iPhone Duo: el sello del SDK que activa el diseño, una app real en cada pose, cap…

68 min de lectura