Skip to content

Releases: odegaard12/Saga-Engine

v5.36.0

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 22:58
  • Reagrupa el catálogo de minijuegos del admin en 5 familias claras en
    español
    ("Llegar y escanear", "Puzles", "Movimiento", "Orientación",
    "Sonido") en vez de las 5 familias técnicas del runtime, que mezclaban
    motor interno con lo que ve el organizador. Es solo una capa de
    presentación (frontend/src/admin/lib/displayFamilies.ts): ningún
    interaction_type, game_id ni family del runtime del jugador cambia, así
    que las misiones existentes cargan y se juegan exactamente igual. El
    selector de juego del editor guiado (AdminGameEditor.tsx) y las tarjetas
    de familia (FamiliesPanel.tsx) ahora muestran esas 5 familias; el backend
    (/api/admin/react-overview) añade display_family_counts y
    display_families sin quitar las claves técnicas de siempre.
  • spark_radar y team_relay dejan de ofrecerse para un nodo nuevo.
    Ninguno de los dos está probado de punta a punta con jugadores reales -sus
    README (frontend/src/player/minigames/families/sparkRadar y
    .../teamRelay) los describen como trabajo a medias o prototipo huérfano-,
    así que se marcan runtimeStatus: 'runtime_partial' en lugar del
    'runtime_ready' optimista que tenían. Un nodo antiguo que ya los use
    sigue abriéndose y editándose con normalidad -con un aviso en el editor-,
    y el organizador puede seguir eligiéndolos a mano con "Mostrar
    experimentales" si quiere probarlos.
  • Actualizado docs/gameplay/minigames-and-physical-interactions-audit.md
    con la reagrupación y una nota sobre una contradicción encontrada en el
    propio código: FamilyRuntimeHost.tsx ya tiene ramas para spark_radar y
    team_relay que sus README dicen que no existen. Pendiente de que alguien
    lo confirme de punta a punta antes de reabrirlos en el selector.

v5.35.1

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 22:03
  • Corrige inyección de fórmulas (CSV injection) en la exportación del
    Registro de partida.
    /api/admin/match-log/export?formato=csv escribía
    user, display_name y payload tal cual: un nombre de jugador o un
    texto libre del payload que empezara por =, +, - o @ se abre como
    fórmula, no como texto, en Excel/Sheets/LibreOffice -el vector clásico de
    CSV injection (OWASP)-. backend/app/runtime/match_log.py::to_csv ahora
    antepone una comilla simple a cualquier celda que empiece por uno de esos
    caracteres (o por tabulador/retorno de carro). Revisadas el resto de capas
    del motor antitrampas (cliente, transporte offline, motor de servidor,
    almacenamiento JSON/SQLite y panel de administración): sin más hallazgos
    que corregir.

v5.35.0

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 21:37
  • Nuevo: Registro de partida. Bitácora por jugador para revisar después
    de la ruta y detectar trampas: sesión abierta, muestras de posición de
    heartbeat (máx. una cada 30 s, con precisión y origen real/manual),
    nodo abierto, avance/completado (con o sin cobertura), QR, mochila,
    minijuegos, sincronización de la cola offline (cuántos eventos y con
    cuánto retraso) y las sospechas/notas del motor antitrampas. Sólo se
    escribe mientras la misión está PROGRAMADA (mission_launch_at puesta) y
    ACTIVA -fuera de esa ventana no se anota nada-. Almacén SQLite propio
    (data/match_log.sqlite3, fuera del repo) con tope de tamaño y poda de
    lo más antiguo. Incluido en la purga de "Datos personales". Panel nuevo
    en el admin ("Registro de partida", grupo Seguimiento): línea de tiempo
    filtrable por jugador y fechas, con sospechas resaltadas, y exportación a
    JSON y CSV.

v5.34.1

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 20:48
  • Corrige el mínimo de tiempo de minijuego (regresión de 5.34.0). La
    tabla por familia derivaba el umbral de la duración "típica" del catálogo
    del organizador (p.ej. team_relay ≈66 s), pero con datos reales los
    circuitos se completaban en ~17 s y otros minijuegos en ~1 s: flagueaba a
    jugadores honestos. Se sustituye por un suelo único y conservador de 2 s
    (MIN_PLAUSIBLE_STAGE_MS), sin mínimos "por duración típica"; sólo
    sequence_code conserva un suelo propio, y calculado de un límite físico
    real (nº de pasos de la secuencia del nodo), no de una media. Se añade una
    red de seguridad basada en datos: con 5 o más partidas ya vistas de ese
    minijuego en esta misión, sólo se flaguea si el tiempo está por debajo del
    20 % de la mediana observada, así que un récord rápido pero cercano a
    otros tiempos reales nunca queda marcado. Se quitan las entradas de
    spark_radar y team_relay (prototipos sin cablear en la ruta real).
    Ningún registro se invalida: sigue siendo FLAG, no bloqueo.

v5.34.0

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 20:17
  • Motor antitrampas SAGA Engine: posición manual/debug excluida. Un
    latido con source: "manual" (modo prueba, ver PlayerApp.tsx
    handleDebugSetPosition) ya no puede disparar "velocidad imposible": el
    salto real→manual→real es justo lo que se espera de ese modo. Se anota,
    como mucho una vez por sesión de uso manual, una nota NEUTRA ("usó
    posición manual") separada de las sospechas en el panel.
  • Mínimo de tiempo de minijuego, por familia. El suelo único de 5 s pasa
    a ser un suelo por game_id (≈20-25 % de la duración mínima real de cada
    minijuego, ver gameCatalog.ts), nunca por debajo de 5 s. Checkpoint, QR
    y coleccionables siguen exentos, como antes.
  • Rebranding: "Motor antitrampas SAGA Engine". Un único módulo
    (backend/app/runtime/anti_cheat.py) con toda la política y los
    umbrales documentados, y el panel de admin ahora separa sospechas de
    notas neutras (con su recuento por jugador) bajo esa cabecera.
  • Doc: se deja explícito que un blur sin hidden más corto que
    SALIDA_MINIMA_MS (1,5 s) -como deslizar el Centro de Control en iOS- no
    penaliza, con el mismo umbral que ya usaba Android.

v5.33.1

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 19:21
  • Antitrampas del servidor, revisado. Velocidad imposible sólo se mira
    ENTRE NODOS -no en el trayecto de casa al primer nodo, que puede ser en
    coche- y sólo si se sostiene en 2 tramos consecutivos: un salto suelto de
    GPS ya no se flaguea. Se quita del todo "nodo completado lejos de su
    sitio": el GPS en el monte falla demasiado a menudo y acusaba a jugadores
    honestos. El tiempo mínimo de reto sólo se comprueba en minijuegos -no en
    checkpoints, QR ni coleccionables, que no tienen partida que jugar- y sube
    a 5 s.
  • Antitrampas del cliente, más señales. useAntiTrampas.ts distingue
    salir de la app (visibilitychange/pagehide) de abrir el selector de
    apps sin soltar la pestaña (blur sin hidden), ignora los avisos de
    permiso que pide la propia app (cámara, movimiento, GPS), y reporta cada
    salida al servidor por la misma cola offline-first de siempre para que
    salga en el panel, en "Sospechas de trampa".

v5.33.0

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 16:27
  • Antitrampas en el servidor. Hasta ahora sólo existía en el móvil
    (salir de la app durante un minijuego). Ahora el servidor MARCA, sin
    bloquear nunca a nadie: velocidades imposibles entre posiciones (más de
    40 km/h descontando la precisión del GPS), completar un nodo lejos de
    él, completar un nodo en menos de 1,5 s y eventos sin cobertura con la
    hora en el futuro. Las sospechas se ven en el admin, en Actividad ›
    "Sospechas de trampa". Un jugador honrado con el GPS poco preciso no sale
    marcado (hay test para eso).

  • El latido del jugador envía también la precisión del GPS, que es lo que
    permite no castigar a quien tiene mala señal.

  • Revisados carga, cobertura, sincronización y clasificación: sin fallos
    nuevos reproducibles.

  • Sincronización sin cobertura que se caía entera. Si un solo evento de
    la cola traía el tiempo del nodo corrupto (un texto en vez de un número),
    el servidor daba error 500 y NO se sincronizaba ninguno de los hasta 100
    eventos de la tanda, aunque los demás estuvieran bien. Lo mismo al
    avanzar nodo con conexión. Ahora ese tiempo se ignora y el resto sigue.

  • Traducción al gallego del jugador. Unos 70 textos salían en el idioma
    equivocado: avisos con números dentro (el puente de idioma no podía
    traducirlos), algunos fijos en inglés ("Centered on node.") y otros fijos
    en gallego que veía también quien jugaba en castellano ("Saíches do
    camiño", "Sen cobertura…"). Ahora salen en el idioma de la misión.

  • TODO.md: el acceso escalonado ya estaba hecho (lo decía PROGRESS.md).

  • Los minijuegos sparkRadar y teamRelay llevan un README: son prototipos
    sin terminar y sin conectar al juego.

  • Misión en gallego: el aviso "Activa GPS para obtener una posición…"
    salía en castellano; ya tiene su traducción.

  • Panel "Antes de salir" en un solo idioma. Mezclaba gallego
    ("Movemento", "Seguir sen iso") y castellano ("Lo denegaste…"). Ahora
    cada texto sale en el idioma de la misión.

  • El aviso de permiso denegado dice qué tocar según el móvil: en
    iPhone, Ajustes › Safari; en Android, el candado de la barra de
    direcciones › Permisos. Antes decía Safari a todo el mundo.

Admin: funciones del servidor que el panel no usaba.

  • Actividad (menú "Seguimiento"): el registro de eventos del servidor
    (latidos, QR escaneados, acciones de admin), con filtro por estado y
    "marcar como leído".

  • Datos personales (en Jugadores): ver cuántas fotos de campo y
    posiciones GPS hay guardadas y borrarlas. La misión, los nodos y el
    progreso no se tocan. Borra datos de personas reales sin vuelta atrás,
    así que hay que escribir BORRAR para confirmarlo.

  • Editor de nodos: fuera 120 líneas muertas (pestañas que nunca se
    conectaron, un panel sin usar y una cabecera duplicada oculta).

  • Sin halos en los nodos completados ni en los pendientes. Su halo de
    color en el suelo "quedaba fatal sobre el terreno". Ahora sólo llevan la
    sombra de contacto, y el único halo es el del nodo que toca: su radio
    real de entrada.

  • Primera carga del mapa mucho más rápida. El paquete offline (unas
    3.000 teselas) se bajaba tesela a tesela, y cada una tardaba ~0,7 s en ir
    y volver por el túnel de Cloudflare aunque la Pi la sirviera de su disco
    en 60 ms: medido en un móvil nuevo, más de 20 minutos. Ahora se baja por
    lotes de 120 (nueva ruta /api/teselas/lote), tres a la vez; si el
    servidor no sabe dar lotes, se vuelve a la descarga de una en una.

  • Relieve de cerca sin cobertura. El paquete apenas traía el relieve
    z12 (3 teselas), que es el que usa la forma del terreno: sin cobertura
    el monte de cerca salía plano. Ahora entra el de toda la zona de misión.

  • Relieve menos exagerado (×1,5, era ×2,2). Con 2,2, cerca de un monte
    la cámara quedaba dentro del relieve y MapLibre le bajaba a la fuerza la
    inclinación y el zoom: saltos al ampliar y centrado descolocado.

  • Las fotos de cada nodo, en un montón al lado de su base. No se veían
    hasta ampliar mucho (zoom 18) y entonces salían en fila, pequeñas y encima
    del camino. Ahora cada nodo con fotos lleva un montón con la primera y
    cuántas hay, que crece con el nodo y se ve desde lejos; al tocarlo se
    abren todas en grande. Las fotos sueltas por el campo, como antes.

  • Centrado exacto también al volver de "ver la ruta". Medido con un
    móvil simulado en la ruta real: tras ver la ruta (centro en un alto) y
    volver a ti, el centro del mapa estaba en tus coordenadas pero tú salías
    100 px más abajo, porque MapLibre dejaba la cámara con la altura del
    terreno del sitio anterior. Al acabar cada movimiento se iguala la altura
    del centro con la del terreno.

  • "Centrar en mí" ya centra. El precalentado de la pantalla de carga
    (pasa por varios zooms y vuelve) seguía moviendo la cámara si la carga se
    quitaba por tope antes de acabar, y al terminar devolvía la cámara a
    donde estaba al empezar: pisaba el centrado y el seguimiento del GPS, y
    al entrar el jugador podía quedar fuera de la pantalla. Ahora se para en
    cuanto tocas el mapa, pides encuadrar o el GPS te sigue, y no restaura
    nada.

Repaso del panel de administración, que estaba abandonado:

  • Menú por grupos: Misión (Crear, Ajustes) · Contenido (Juegos,
    Objetos) · Personas y pruebas (Jugadores, Simular). "Crear" (el asistente
    de plantillas) sólo existía en el menú del móvil; ahora también en
    escritorio. "Familias" pasa a llamarse "Juegos".

  • Cambio de contraseña: si el servidor pide cambiarla, el panel ya
    tiene pantalla para hacerlo (antes se quedaba en "Access denied" sin
    salida). Pantalla de acceso en castellano y centrada.

  • Seguridad: fuera un último intento de carga que mandaba la
    contraseña en la dirección (?password=…) a una ruta que ni existía.

  • Barra de datos de la ruta (distancia, tiempo, desnivel, PLAY): tapaba
    la fila de botones cuando éstos ocupaban dos líneas y se metía bajo el
    menú. Ahora se coloca debajo, midiendo la barra de verdad.

  • Las cinco familias de juego en los recuentos del servidor (contaba tres)
    y sus nombres en castellano (Reto de movimiento, Caza de rumbo, Matriz de
    circuitos, Reto de sonido).

  • Textos que no se actualizaban, en toda la app. El puente de idioma
    (traduce los textos de la página por detrás de React) guardaba el texto
    de la primera vez y, cuando React lo cambiaba, lo devolvía a aquel: un
    estado, un contador o la etiqueta de un botón que alterna se quedaban
    congelados con el primer valor. Ahora acepta el texto nuevo.

  • Un bucle que no paraba. El mismo puente reescribía cada texto aunque
    fuera igual, eso volvía a dispararlo y recorría la página entera en cada
    fotograma, siempre. Ahora sólo escribe si cambia: menos trabajo para el
    móvil y más fluidez.

  • Fotos de los nodos, sólo de cerca. De lejos quedaban apiladas y
    clavadas en el poste del nodo. Ahora no se ven hasta el zoom 18, donde
    salen repartidas bajo el nodo; tocar el nodo de lejos ya no las abre.
    Las fotos en campo abierto siguen viéndose (una por sitio).

  • El nodo en juego marca su radio de entrada real. Su halo medía lo
    mismo en pantalla a cualquier zoom y de lejos quedaba enorme, más grande
    que el trazado. Ahora es el círculo donde el juego te deja entrar, a su
    tamaño de verdad sobre el mapa: velo suave y un anillo que late en el
    borde, del color del tipo.

  • Fotos juntas de lejos. Repartidas a cualquier zoom quedaban fatal.
    Ahora se ve una por sitio hasta el zoom 18 y sólo de muy cerca se
    reparten bajo el nodo para poder tocarlas. Tocar la de lejos abre todas.

  • Los nodos ya no "se recargan" más grandes al ampliar. MapLibre topaba
    el tamaño de cada símbolo en el del zoom siguiente a su tesela: ampliando
    deprisa, el nodo se quedaba quieto hasta que llegaba la tesela y pegaba
    el salto. Ahora el tamaño crece sin escalones (nodos, fotos y jugador),
    con la misma curva.

  • Fotos de los nodos, que se pueden tocar. Estaban todas en el mismo
    punto, apiladas y debajo del nodo: al ampliar no se separaban. Ahora las
    de cada sitio se reparten en filas bajo la peana del nodo, por encima del
    halo, y al tocar una se abre el visor con todas empezando por esa.

  • La guía por caminos se guarda. Al volver a abrir la app en el mismo
    sitio sale al instante, sin esperar a que se cargue la red y se calcule.

  • Centrar en mí encuadra una sola vez: el punto nuevo del GPS ya no
    vuelve a mover el mapa con otro encuadre.

  • El mapa no se vuelve a cargar al desampliar. Guarda en memoria ocho
    niveles de zoom en vez de cinco, pide 32 teselas a la vez en vez de 16
    (salen de la caché, no de la red) y las enseña sin fundido. La pantalla
    de carga pasa por cada nivel de zoom hacia fuera, no a saltos.

  • Botones de posición. "Centrar en mí" centra al momento con la
    última posición. Antes pedía el GPS de nuevo cada vez: reiniciaba la
    escucha, avisaba "Solicitando permiso de ubicación…" aunque funcionara y
    no centraba hasta el punto siguiente. Si el punto es viejo, se pide otro
    en silencio. "Ver la ruta" ya no pide GPS: no lo necesita.

  • Quieto más de 45 s ya no desapareces del mapa: se te pinta en tu última
    posición de esta sesión. Para abrir nodos sigue haciendo falta un punto
    reciente.

  • Zoom y arrastre más fluidos. Las animaciones del mapa (pulso del
    trazado, moneda que flota, halo, guía) se pausan mientras el mapa se
    mueve. Cada una cambia el estilo, y con relieve MapLibre repinta
    entonces todas las texturas del terreno: diez veces por segundo en pleno
    pellizco eran tirones.

  • Nodos y fotos que aparecían y desaparecían. Con cada cambio de
    estilo -diez por segundo, por las animaciones- se volvían a cargar todos
    los datos del mapa: trazado, nodos, fotos y guía se recortaban y
    recolocaban sin parar. Ahora sólo se cargan cuando cambian de verdad.

  • La guía late en opacidad con un trazo fijo. Su "trazo que crece"
    cambiaba line-dasharray c...

Read more

v5.32.1

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 15:40
  • Sincronización sin cobertura que se caía entera. Si un solo evento de
    la cola traía el tiempo del nodo corrupto (un texto en vez de un número),
    el servidor daba error 500 y NO se sincronizaba ninguno de los hasta 100
    eventos de la tanda, aunque los demás estuvieran bien. Lo mismo al
    avanzar nodo con conexión. Ahora ese tiempo se ignora y el resto sigue.

  • Traducción al gallego del jugador. Unos 70 textos salían en el idioma
    equivocado: avisos con números dentro (el puente de idioma no podía
    traducirlos), algunos fijos en inglés ("Centered on node.") y otros fijos
    en gallego que veía también quien jugaba en castellano ("Saíches do
    camiño", "Sen cobertura…"). Ahora salen en el idioma de la misión.

  • TODO.md: el acceso escalonado ya estaba hecho (lo decía PROGRESS.md).

  • Los minijuegos sparkRadar y teamRelay llevan un README: son prototipos
    sin terminar y sin conectar al juego.

  • Misión en gallego: el aviso "Activa GPS para obtener una posición…"
    salía en castellano; ya tiene su traducción.

  • Panel "Antes de salir" en un solo idioma. Mezclaba gallego
    ("Movemento", "Seguir sen iso") y castellano ("Lo denegaste…"). Ahora
    cada texto sale en el idioma de la misión.

  • El aviso de permiso denegado dice qué tocar según el móvil: en
    iPhone, Ajustes › Safari; en Android, el candado de la barra de
    direcciones › Permisos. Antes decía Safari a todo el mundo.

Admin: funciones del servidor que el panel no usaba.

  • Actividad (menú "Seguimiento"): el registro de eventos del servidor
    (latidos, QR escaneados, acciones de admin), con filtro por estado y
    "marcar como leído".

  • Datos personales (en Jugadores): ver cuántas fotos de campo y
    posiciones GPS hay guardadas y borrarlas. La misión, los nodos y el
    progreso no se tocan. Borra datos de personas reales sin vuelta atrás,
    así que hay que escribir BORRAR para confirmarlo.

  • Editor de nodos: fuera 120 líneas muertas (pestañas que nunca se
    conectaron, un panel sin usar y una cabecera duplicada oculta).

  • Sin halos en los nodos completados ni en los pendientes. Su halo de
    color en el suelo "quedaba fatal sobre el terreno". Ahora sólo llevan la
    sombra de contacto, y el único halo es el del nodo que toca: su radio
    real de entrada.

  • Primera carga del mapa mucho más rápida. El paquete offline (unas
    3.000 teselas) se bajaba tesela a tesela, y cada una tardaba ~0,7 s en ir
    y volver por el túnel de Cloudflare aunque la Pi la sirviera de su disco
    en 60 ms: medido en un móvil nuevo, más de 20 minutos. Ahora se baja por
    lotes de 120 (nueva ruta /api/teselas/lote), tres a la vez; si el
    servidor no sabe dar lotes, se vuelve a la descarga de una en una.

  • Relieve de cerca sin cobertura. El paquete apenas traía el relieve
    z12 (3 teselas), que es el que usa la forma del terreno: sin cobertura
    el monte de cerca salía plano. Ahora entra el de toda la zona de misión.

  • Relieve menos exagerado (×1,5, era ×2,2). Con 2,2, cerca de un monte
    la cámara quedaba dentro del relieve y MapLibre le bajaba a la fuerza la
    inclinación y el zoom: saltos al ampliar y centrado descolocado.

  • Las fotos de cada nodo, en un montón al lado de su base. No se veían
    hasta ampliar mucho (zoom 18) y entonces salían en fila, pequeñas y encima
    del camino. Ahora cada nodo con fotos lleva un montón con la primera y
    cuántas hay, que crece con el nodo y se ve desde lejos; al tocarlo se
    abren todas en grande. Las fotos sueltas por el campo, como antes.

  • Centrado exacto también al volver de "ver la ruta". Medido con un
    móvil simulado en la ruta real: tras ver la ruta (centro en un alto) y
    volver a ti, el centro del mapa estaba en tus coordenadas pero tú salías
    100 px más abajo, porque MapLibre dejaba la cámara con la altura del
    terreno del sitio anterior. Al acabar cada movimiento se iguala la altura
    del centro con la del terreno.

  • "Centrar en mí" ya centra. El precalentado de la pantalla de carga
    (pasa por varios zooms y vuelve) seguía moviendo la cámara si la carga se
    quitaba por tope antes de acabar, y al terminar devolvía la cámara a
    donde estaba al empezar: pisaba el centrado y el seguimiento del GPS, y
    al entrar el jugador podía quedar fuera de la pantalla. Ahora se para en
    cuanto tocas el mapa, pides encuadrar o el GPS te sigue, y no restaura
    nada.

Repaso del panel de administración, que estaba abandonado:

  • Menú por grupos: Misión (Crear, Ajustes) · Contenido (Juegos,
    Objetos) · Personas y pruebas (Jugadores, Simular). "Crear" (el asistente
    de plantillas) sólo existía en el menú del móvil; ahora también en
    escritorio. "Familias" pasa a llamarse "Juegos".

  • Cambio de contraseña: si el servidor pide cambiarla, el panel ya
    tiene pantalla para hacerlo (antes se quedaba en "Access denied" sin
    salida). Pantalla de acceso en castellano y centrada.

  • Seguridad: fuera un último intento de carga que mandaba la
    contraseña en la dirección (?password=…) a una ruta que ni existía.

  • Barra de datos de la ruta (distancia, tiempo, desnivel, PLAY): tapaba
    la fila de botones cuando éstos ocupaban dos líneas y se metía bajo el
    menú. Ahora se coloca debajo, midiendo la barra de verdad.

  • Las cinco familias de juego en los recuentos del servidor (contaba tres)
    y sus nombres en castellano (Reto de movimiento, Caza de rumbo, Matriz de
    circuitos, Reto de sonido).

  • Textos que no se actualizaban, en toda la app. El puente de idioma
    (traduce los textos de la página por detrás de React) guardaba el texto
    de la primera vez y, cuando React lo cambiaba, lo devolvía a aquel: un
    estado, un contador o la etiqueta de un botón que alterna se quedaban
    congelados con el primer valor. Ahora acepta el texto nuevo.

  • Un bucle que no paraba. El mismo puente reescribía cada texto aunque
    fuera igual, eso volvía a dispararlo y recorría la página entera en cada
    fotograma, siempre. Ahora sólo escribe si cambia: menos trabajo para el
    móvil y más fluidez.

  • Fotos de los nodos, sólo de cerca. De lejos quedaban apiladas y
    clavadas en el poste del nodo. Ahora no se ven hasta el zoom 18, donde
    salen repartidas bajo el nodo; tocar el nodo de lejos ya no las abre.
    Las fotos en campo abierto siguen viéndose (una por sitio).

  • El nodo en juego marca su radio de entrada real. Su halo medía lo
    mismo en pantalla a cualquier zoom y de lejos quedaba enorme, más grande
    que el trazado. Ahora es el círculo donde el juego te deja entrar, a su
    tamaño de verdad sobre el mapa: velo suave y un anillo que late en el
    borde, del color del tipo.

  • Fotos juntas de lejos. Repartidas a cualquier zoom quedaban fatal.
    Ahora se ve una por sitio hasta el zoom 18 y sólo de muy cerca se
    reparten bajo el nodo para poder tocarlas. Tocar la de lejos abre todas.

  • Los nodos ya no "se recargan" más grandes al ampliar. MapLibre topaba
    el tamaño de cada símbolo en el del zoom siguiente a su tesela: ampliando
    deprisa, el nodo se quedaba quieto hasta que llegaba la tesela y pegaba
    el salto. Ahora el tamaño crece sin escalones (nodos, fotos y jugador),
    con la misma curva.

  • Fotos de los nodos, que se pueden tocar. Estaban todas en el mismo
    punto, apiladas y debajo del nodo: al ampliar no se separaban. Ahora las
    de cada sitio se reparten en filas bajo la peana del nodo, por encima del
    halo, y al tocar una se abre el visor con todas empezando por esa.

  • La guía por caminos se guarda. Al volver a abrir la app en el mismo
    sitio sale al instante, sin esperar a que se cargue la red y se calcule.

  • Centrar en mí encuadra una sola vez: el punto nuevo del GPS ya no
    vuelve a mover el mapa con otro encuadre.

  • El mapa no se vuelve a cargar al desampliar. Guarda en memoria ocho
    niveles de zoom en vez de cinco, pide 32 teselas a la vez en vez de 16
    (salen de la caché, no de la red) y las enseña sin fundido. La pantalla
    de carga pasa por cada nivel de zoom hacia fuera, no a saltos.

  • Botones de posición. "Centrar en mí" centra al momento con la
    última posición. Antes pedía el GPS de nuevo cada vez: reiniciaba la
    escucha, avisaba "Solicitando permiso de ubicación…" aunque funcionara y
    no centraba hasta el punto siguiente. Si el punto es viejo, se pide otro
    en silencio. "Ver la ruta" ya no pide GPS: no lo necesita.

  • Quieto más de 45 s ya no desapareces del mapa: se te pinta en tu última
    posición de esta sesión. Para abrir nodos sigue haciendo falta un punto
    reciente.

  • Zoom y arrastre más fluidos. Las animaciones del mapa (pulso del
    trazado, moneda que flota, halo, guía) se pausan mientras el mapa se
    mueve. Cada una cambia el estilo, y con relieve MapLibre repinta
    entonces todas las texturas del terreno: diez veces por segundo en pleno
    pellizco eran tirones.

  • Nodos y fotos que aparecían y desaparecían. Con cada cambio de
    estilo -diez por segundo, por las animaciones- se volvían a cargar todos
    los datos del mapa: trazado, nodos, fotos y guía se recortaban y
    recolocaban sin parar. Ahora sólo se cargan cuando cambian de verdad.

  • La guía late en opacidad con un trazo fijo. Su "trazo que crece"
    cambiaba line-dasharray cada 160 ms, y esa propiedad obliga a
    recargar la fuente entera cada vez.

  • Sin saltos al ampliar y desampliar. La forma del relieve se queda
    en una sola resolución desde el zoom 12: el dato es de ~30 m y los
    niveles 13 y 14 eran ese mismo dato remuestreado, distinto en cada uno;
    con la exageración, al cruzar de zoom el suelo y los nodos saltaban.
    De cerca, además, el relieve sale más suave. El sombreado sigue a z14.

  • Nodos asentados. El halo y la sombra de cada nodo van tumbados
    sobre el mapa, con su perspectiva real en cualquier punto de la
    pantalla, y los nodos van a 2 m del suelo en vez de 3.

  • Check integrado. Es una chapa verde en 3D pegada al canto de la
    moneda: gira, flota y se ilumina con ella. Antes era una pe...

Read more

v5.32.0

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 15:17
  • Traducción al gallego del jugador. Unos 70 textos salían en el idioma
    equivocado: avisos con números dentro (el puente de idioma no podía
    traducirlos), algunos fijos en inglés ("Centered on node.") y otros fijos
    en gallego que veía también quien jugaba en castellano ("Saíches do
    camiño", "Sen cobertura…"). Ahora salen en el idioma de la misión.

  • TODO.md: el acceso escalonado ya estaba hecho (lo decía PROGRESS.md).

  • Los minijuegos sparkRadar y teamRelay llevan un README: son prototipos
    sin terminar y sin conectar al juego.

  • Misión en gallego: el aviso "Activa GPS para obtener una posición…"
    salía en castellano; ya tiene su traducción.

  • Panel "Antes de salir" en un solo idioma. Mezclaba gallego
    ("Movemento", "Seguir sen iso") y castellano ("Lo denegaste…"). Ahora
    cada texto sale en el idioma de la misión.

  • El aviso de permiso denegado dice qué tocar según el móvil: en
    iPhone, Ajustes › Safari; en Android, el candado de la barra de
    direcciones › Permisos. Antes decía Safari a todo el mundo.

Admin: funciones del servidor que el panel no usaba.

  • Actividad (menú "Seguimiento"): el registro de eventos del servidor
    (latidos, QR escaneados, acciones de admin), con filtro por estado y
    "marcar como leído".

  • Datos personales (en Jugadores): ver cuántas fotos de campo y
    posiciones GPS hay guardadas y borrarlas. La misión, los nodos y el
    progreso no se tocan. Borra datos de personas reales sin vuelta atrás,
    así que hay que escribir BORRAR para confirmarlo.

  • Editor de nodos: fuera 120 líneas muertas (pestañas que nunca se
    conectaron, un panel sin usar y una cabecera duplicada oculta).

  • Sin halos en los nodos completados ni en los pendientes. Su halo de
    color en el suelo "quedaba fatal sobre el terreno". Ahora sólo llevan la
    sombra de contacto, y el único halo es el del nodo que toca: su radio
    real de entrada.

  • Primera carga del mapa mucho más rápida. El paquete offline (unas
    3.000 teselas) se bajaba tesela a tesela, y cada una tardaba ~0,7 s en ir
    y volver por el túnel de Cloudflare aunque la Pi la sirviera de su disco
    en 60 ms: medido en un móvil nuevo, más de 20 minutos. Ahora se baja por
    lotes de 120 (nueva ruta /api/teselas/lote), tres a la vez; si el
    servidor no sabe dar lotes, se vuelve a la descarga de una en una.

  • Relieve de cerca sin cobertura. El paquete apenas traía el relieve
    z12 (3 teselas), que es el que usa la forma del terreno: sin cobertura
    el monte de cerca salía plano. Ahora entra el de toda la zona de misión.

  • Relieve menos exagerado (×1,5, era ×2,2). Con 2,2, cerca de un monte
    la cámara quedaba dentro del relieve y MapLibre le bajaba a la fuerza la
    inclinación y el zoom: saltos al ampliar y centrado descolocado.

  • Las fotos de cada nodo, en un montón al lado de su base. No se veían
    hasta ampliar mucho (zoom 18) y entonces salían en fila, pequeñas y encima
    del camino. Ahora cada nodo con fotos lleva un montón con la primera y
    cuántas hay, que crece con el nodo y se ve desde lejos; al tocarlo se
    abren todas en grande. Las fotos sueltas por el campo, como antes.

  • Centrado exacto también al volver de "ver la ruta". Medido con un
    móvil simulado en la ruta real: tras ver la ruta (centro en un alto) y
    volver a ti, el centro del mapa estaba en tus coordenadas pero tú salías
    100 px más abajo, porque MapLibre dejaba la cámara con la altura del
    terreno del sitio anterior. Al acabar cada movimiento se iguala la altura
    del centro con la del terreno.

  • "Centrar en mí" ya centra. El precalentado de la pantalla de carga
    (pasa por varios zooms y vuelve) seguía moviendo la cámara si la carga se
    quitaba por tope antes de acabar, y al terminar devolvía la cámara a
    donde estaba al empezar: pisaba el centrado y el seguimiento del GPS, y
    al entrar el jugador podía quedar fuera de la pantalla. Ahora se para en
    cuanto tocas el mapa, pides encuadrar o el GPS te sigue, y no restaura
    nada.

Repaso del panel de administración, que estaba abandonado:

  • Menú por grupos: Misión (Crear, Ajustes) · Contenido (Juegos,
    Objetos) · Personas y pruebas (Jugadores, Simular). "Crear" (el asistente
    de plantillas) sólo existía en el menú del móvil; ahora también en
    escritorio. "Familias" pasa a llamarse "Juegos".

  • Cambio de contraseña: si el servidor pide cambiarla, el panel ya
    tiene pantalla para hacerlo (antes se quedaba en "Access denied" sin
    salida). Pantalla de acceso en castellano y centrada.

  • Seguridad: fuera un último intento de carga que mandaba la
    contraseña en la dirección (?password=…) a una ruta que ni existía.

  • Barra de datos de la ruta (distancia, tiempo, desnivel, PLAY): tapaba
    la fila de botones cuando éstos ocupaban dos líneas y se metía bajo el
    menú. Ahora se coloca debajo, midiendo la barra de verdad.

  • Las cinco familias de juego en los recuentos del servidor (contaba tres)
    y sus nombres en castellano (Reto de movimiento, Caza de rumbo, Matriz de
    circuitos, Reto de sonido).

  • Textos que no se actualizaban, en toda la app. El puente de idioma
    (traduce los textos de la página por detrás de React) guardaba el texto
    de la primera vez y, cuando React lo cambiaba, lo devolvía a aquel: un
    estado, un contador o la etiqueta de un botón que alterna se quedaban
    congelados con el primer valor. Ahora acepta el texto nuevo.

  • Un bucle que no paraba. El mismo puente reescribía cada texto aunque
    fuera igual, eso volvía a dispararlo y recorría la página entera en cada
    fotograma, siempre. Ahora sólo escribe si cambia: menos trabajo para el
    móvil y más fluidez.

  • Fotos de los nodos, sólo de cerca. De lejos quedaban apiladas y
    clavadas en el poste del nodo. Ahora no se ven hasta el zoom 18, donde
    salen repartidas bajo el nodo; tocar el nodo de lejos ya no las abre.
    Las fotos en campo abierto siguen viéndose (una por sitio).

  • El nodo en juego marca su radio de entrada real. Su halo medía lo
    mismo en pantalla a cualquier zoom y de lejos quedaba enorme, más grande
    que el trazado. Ahora es el círculo donde el juego te deja entrar, a su
    tamaño de verdad sobre el mapa: velo suave y un anillo que late en el
    borde, del color del tipo.

  • Fotos juntas de lejos. Repartidas a cualquier zoom quedaban fatal.
    Ahora se ve una por sitio hasta el zoom 18 y sólo de muy cerca se
    reparten bajo el nodo para poder tocarlas. Tocar la de lejos abre todas.

  • Los nodos ya no "se recargan" más grandes al ampliar. MapLibre topaba
    el tamaño de cada símbolo en el del zoom siguiente a su tesela: ampliando
    deprisa, el nodo se quedaba quieto hasta que llegaba la tesela y pegaba
    el salto. Ahora el tamaño crece sin escalones (nodos, fotos y jugador),
    con la misma curva.

  • Fotos de los nodos, que se pueden tocar. Estaban todas en el mismo
    punto, apiladas y debajo del nodo: al ampliar no se separaban. Ahora las
    de cada sitio se reparten en filas bajo la peana del nodo, por encima del
    halo, y al tocar una se abre el visor con todas empezando por esa.

  • La guía por caminos se guarda. Al volver a abrir la app en el mismo
    sitio sale al instante, sin esperar a que se cargue la red y se calcule.

  • Centrar en mí encuadra una sola vez: el punto nuevo del GPS ya no
    vuelve a mover el mapa con otro encuadre.

  • El mapa no se vuelve a cargar al desampliar. Guarda en memoria ocho
    niveles de zoom en vez de cinco, pide 32 teselas a la vez en vez de 16
    (salen de la caché, no de la red) y las enseña sin fundido. La pantalla
    de carga pasa por cada nivel de zoom hacia fuera, no a saltos.

  • Botones de posición. "Centrar en mí" centra al momento con la
    última posición. Antes pedía el GPS de nuevo cada vez: reiniciaba la
    escucha, avisaba "Solicitando permiso de ubicación…" aunque funcionara y
    no centraba hasta el punto siguiente. Si el punto es viejo, se pide otro
    en silencio. "Ver la ruta" ya no pide GPS: no lo necesita.

  • Quieto más de 45 s ya no desapareces del mapa: se te pinta en tu última
    posición de esta sesión. Para abrir nodos sigue haciendo falta un punto
    reciente.

  • Zoom y arrastre más fluidos. Las animaciones del mapa (pulso del
    trazado, moneda que flota, halo, guía) se pausan mientras el mapa se
    mueve. Cada una cambia el estilo, y con relieve MapLibre repinta
    entonces todas las texturas del terreno: diez veces por segundo en pleno
    pellizco eran tirones.

  • Nodos y fotos que aparecían y desaparecían. Con cada cambio de
    estilo -diez por segundo, por las animaciones- se volvían a cargar todos
    los datos del mapa: trazado, nodos, fotos y guía se recortaban y
    recolocaban sin parar. Ahora sólo se cargan cuando cambian de verdad.

  • La guía late en opacidad con un trazo fijo. Su "trazo que crece"
    cambiaba line-dasharray cada 160 ms, y esa propiedad obliga a
    recargar la fuente entera cada vez.

  • Sin saltos al ampliar y desampliar. La forma del relieve se queda
    en una sola resolución desde el zoom 12: el dato es de ~30 m y los
    niveles 13 y 14 eran ese mismo dato remuestreado, distinto en cada uno;
    con la exageración, al cruzar de zoom el suelo y los nodos saltaban.
    De cerca, además, el relieve sale más suave. El sombreado sigue a z14.

  • Nodos asentados. El halo y la sombra de cada nodo van tumbados
    sobre el mapa, con su perspectiva real en cualquier punto de la
    pantalla, y los nodos van a 2 m del suelo en vez de 3.

  • Check integrado. Es una chapa verde en 3D pegada al canto de la
    moneda: gira, flota y se ilumina con ella. Antes era una pegatina plana.

  • La pantalla de carga deja el mapa preparado. Antes de quitarse
    hornea todos los nodos (salían tarde, al llegar a la zona, y el mapa se
    trababa mientras) y pasa por dos zooms más lejanos y por la ruta entera,
    así que al desampliar ya no se queda en blanco 2-3 segundos.

  • Nodos y fotos sin fundido al cambiar de zoom: ya no desaparecen y
    apare...

Read more

v5.31.2

Choose a tag to compare

@odegaard12 odegaard12 released this 27 Sep 14:37
  • Misión en gallego: el aviso "Activa GPS para obtener una posición…"
    salía en castellano; ya tiene su traducción.

  • Panel "Antes de salir" en un solo idioma. Mezclaba gallego
    ("Movemento", "Seguir sen iso") y castellano ("Lo denegaste…"). Ahora
    cada texto sale en el idioma de la misión.

  • El aviso de permiso denegado dice qué tocar según el móvil: en
    iPhone, Ajustes › Safari; en Android, el candado de la barra de
    direcciones › Permisos. Antes decía Safari a todo el mundo.

Admin: funciones del servidor que el panel no usaba.

  • Actividad (menú "Seguimiento"): el registro de eventos del servidor
    (latidos, QR escaneados, acciones de admin), con filtro por estado y
    "marcar como leído".

  • Datos personales (en Jugadores): ver cuántas fotos de campo y
    posiciones GPS hay guardadas y borrarlas. La misión, los nodos y el
    progreso no se tocan. Borra datos de personas reales sin vuelta atrás,
    así que hay que escribir BORRAR para confirmarlo.

  • Editor de nodos: fuera 120 líneas muertas (pestañas que nunca se
    conectaron, un panel sin usar y una cabecera duplicada oculta).

  • Sin halos en los nodos completados ni en los pendientes. Su halo de
    color en el suelo "quedaba fatal sobre el terreno". Ahora sólo llevan la
    sombra de contacto, y el único halo es el del nodo que toca: su radio
    real de entrada.

  • Primera carga del mapa mucho más rápida. El paquete offline (unas
    3.000 teselas) se bajaba tesela a tesela, y cada una tardaba ~0,7 s en ir
    y volver por el túnel de Cloudflare aunque la Pi la sirviera de su disco
    en 60 ms: medido en un móvil nuevo, más de 20 minutos. Ahora se baja por
    lotes de 120 (nueva ruta /api/teselas/lote), tres a la vez; si el
    servidor no sabe dar lotes, se vuelve a la descarga de una en una.

  • Relieve de cerca sin cobertura. El paquete apenas traía el relieve
    z12 (3 teselas), que es el que usa la forma del terreno: sin cobertura
    el monte de cerca salía plano. Ahora entra el de toda la zona de misión.

  • Relieve menos exagerado (×1,5, era ×2,2). Con 2,2, cerca de un monte
    la cámara quedaba dentro del relieve y MapLibre le bajaba a la fuerza la
    inclinación y el zoom: saltos al ampliar y centrado descolocado.

  • Las fotos de cada nodo, en un montón al lado de su base. No se veían
    hasta ampliar mucho (zoom 18) y entonces salían en fila, pequeñas y encima
    del camino. Ahora cada nodo con fotos lleva un montón con la primera y
    cuántas hay, que crece con el nodo y se ve desde lejos; al tocarlo se
    abren todas en grande. Las fotos sueltas por el campo, como antes.

  • Centrado exacto también al volver de "ver la ruta". Medido con un
    móvil simulado en la ruta real: tras ver la ruta (centro en un alto) y
    volver a ti, el centro del mapa estaba en tus coordenadas pero tú salías
    100 px más abajo, porque MapLibre dejaba la cámara con la altura del
    terreno del sitio anterior. Al acabar cada movimiento se iguala la altura
    del centro con la del terreno.

  • "Centrar en mí" ya centra. El precalentado de la pantalla de carga
    (pasa por varios zooms y vuelve) seguía moviendo la cámara si la carga se
    quitaba por tope antes de acabar, y al terminar devolvía la cámara a
    donde estaba al empezar: pisaba el centrado y el seguimiento del GPS, y
    al entrar el jugador podía quedar fuera de la pantalla. Ahora se para en
    cuanto tocas el mapa, pides encuadrar o el GPS te sigue, y no restaura
    nada.

Repaso del panel de administración, que estaba abandonado:

  • Menú por grupos: Misión (Crear, Ajustes) · Contenido (Juegos,
    Objetos) · Personas y pruebas (Jugadores, Simular). "Crear" (el asistente
    de plantillas) sólo existía en el menú del móvil; ahora también en
    escritorio. "Familias" pasa a llamarse "Juegos".

  • Cambio de contraseña: si el servidor pide cambiarla, el panel ya
    tiene pantalla para hacerlo (antes se quedaba en "Access denied" sin
    salida). Pantalla de acceso en castellano y centrada.

  • Seguridad: fuera un último intento de carga que mandaba la
    contraseña en la dirección (?password=…) a una ruta que ni existía.

  • Barra de datos de la ruta (distancia, tiempo, desnivel, PLAY): tapaba
    la fila de botones cuando éstos ocupaban dos líneas y se metía bajo el
    menú. Ahora se coloca debajo, midiendo la barra de verdad.

  • Las cinco familias de juego en los recuentos del servidor (contaba tres)
    y sus nombres en castellano (Reto de movimiento, Caza de rumbo, Matriz de
    circuitos, Reto de sonido).

  • Textos que no se actualizaban, en toda la app. El puente de idioma
    (traduce los textos de la página por detrás de React) guardaba el texto
    de la primera vez y, cuando React lo cambiaba, lo devolvía a aquel: un
    estado, un contador o la etiqueta de un botón que alterna se quedaban
    congelados con el primer valor. Ahora acepta el texto nuevo.

  • Un bucle que no paraba. El mismo puente reescribía cada texto aunque
    fuera igual, eso volvía a dispararlo y recorría la página entera en cada
    fotograma, siempre. Ahora sólo escribe si cambia: menos trabajo para el
    móvil y más fluidez.

  • Fotos de los nodos, sólo de cerca. De lejos quedaban apiladas y
    clavadas en el poste del nodo. Ahora no se ven hasta el zoom 18, donde
    salen repartidas bajo el nodo; tocar el nodo de lejos ya no las abre.
    Las fotos en campo abierto siguen viéndose (una por sitio).

  • El nodo en juego marca su radio de entrada real. Su halo medía lo
    mismo en pantalla a cualquier zoom y de lejos quedaba enorme, más grande
    que el trazado. Ahora es el círculo donde el juego te deja entrar, a su
    tamaño de verdad sobre el mapa: velo suave y un anillo que late en el
    borde, del color del tipo.

  • Fotos juntas de lejos. Repartidas a cualquier zoom quedaban fatal.
    Ahora se ve una por sitio hasta el zoom 18 y sólo de muy cerca se
    reparten bajo el nodo para poder tocarlas. Tocar la de lejos abre todas.

  • Los nodos ya no "se recargan" más grandes al ampliar. MapLibre topaba
    el tamaño de cada símbolo en el del zoom siguiente a su tesela: ampliando
    deprisa, el nodo se quedaba quieto hasta que llegaba la tesela y pegaba
    el salto. Ahora el tamaño crece sin escalones (nodos, fotos y jugador),
    con la misma curva.

  • Fotos de los nodos, que se pueden tocar. Estaban todas en el mismo
    punto, apiladas y debajo del nodo: al ampliar no se separaban. Ahora las
    de cada sitio se reparten en filas bajo la peana del nodo, por encima del
    halo, y al tocar una se abre el visor con todas empezando por esa.

  • La guía por caminos se guarda. Al volver a abrir la app en el mismo
    sitio sale al instante, sin esperar a que se cargue la red y se calcule.

  • Centrar en mí encuadra una sola vez: el punto nuevo del GPS ya no
    vuelve a mover el mapa con otro encuadre.

  • El mapa no se vuelve a cargar al desampliar. Guarda en memoria ocho
    niveles de zoom en vez de cinco, pide 32 teselas a la vez en vez de 16
    (salen de la caché, no de la red) y las enseña sin fundido. La pantalla
    de carga pasa por cada nivel de zoom hacia fuera, no a saltos.

  • Botones de posición. "Centrar en mí" centra al momento con la
    última posición. Antes pedía el GPS de nuevo cada vez: reiniciaba la
    escucha, avisaba "Solicitando permiso de ubicación…" aunque funcionara y
    no centraba hasta el punto siguiente. Si el punto es viejo, se pide otro
    en silencio. "Ver la ruta" ya no pide GPS: no lo necesita.

  • Quieto más de 45 s ya no desapareces del mapa: se te pinta en tu última
    posición de esta sesión. Para abrir nodos sigue haciendo falta un punto
    reciente.

  • Zoom y arrastre más fluidos. Las animaciones del mapa (pulso del
    trazado, moneda que flota, halo, guía) se pausan mientras el mapa se
    mueve. Cada una cambia el estilo, y con relieve MapLibre repinta
    entonces todas las texturas del terreno: diez veces por segundo en pleno
    pellizco eran tirones.

  • Nodos y fotos que aparecían y desaparecían. Con cada cambio de
    estilo -diez por segundo, por las animaciones- se volvían a cargar todos
    los datos del mapa: trazado, nodos, fotos y guía se recortaban y
    recolocaban sin parar. Ahora sólo se cargan cuando cambian de verdad.

  • La guía late en opacidad con un trazo fijo. Su "trazo que crece"
    cambiaba line-dasharray cada 160 ms, y esa propiedad obliga a
    recargar la fuente entera cada vez.

  • Sin saltos al ampliar y desampliar. La forma del relieve se queda
    en una sola resolución desde el zoom 12: el dato es de ~30 m y los
    niveles 13 y 14 eran ese mismo dato remuestreado, distinto en cada uno;
    con la exageración, al cruzar de zoom el suelo y los nodos saltaban.
    De cerca, además, el relieve sale más suave. El sombreado sigue a z14.

  • Nodos asentados. El halo y la sombra de cada nodo van tumbados
    sobre el mapa, con su perspectiva real en cualquier punto de la
    pantalla, y los nodos van a 2 m del suelo en vez de 3.

  • Check integrado. Es una chapa verde en 3D pegada al canto de la
    moneda: gira, flota y se ilumina con ella. Antes era una pegatina plana.

  • La pantalla de carga deja el mapa preparado. Antes de quitarse
    hornea todos los nodos (salían tarde, al llegar a la zona, y el mapa se
    trababa mientras) y pasa por dos zooms más lejanos y por la ruta entera,
    así que al desampliar ya no se queda en blanco 2-3 segundos.

  • Nodos y fotos sin fundido al cambiar de zoom: ya no desaparecen y
    aparecen al desampliar. Las teselas pedidas no se cancelan a mitad del
    pellizco.

  • Nodos más grandes a zoom medio (de 15 a 17), sin cambiar el de cerca.

  • Halo del suelo más ancho, y el trazado cosido a sus nodos: la línea del
    camino llega hasta el nodo aunque el track se grabara a unos metros.

  • Los nodos, un 30 % más grandes, con la peana y el aro de la base más
    anchos.

  • Los completados, en gris del todo (poste, cubo, moneda y brillo del
    suelo) y con el check verde más grande. A medio apagar quedaban raros.

  • **Los nodos son poképa...

Read more