Sobre el proyecto

Sprawl//Run es una aplicación Android basada en Flutter que enmarca correr como una historia de mensajero cyberpunk. Está diseñada para personas que buscan motivación narrativa en lugar de una hoja de cálculo de divisiones, y funciona completamente sin conexión. Historia y estructura Dos campañas contienen veinte misiones rastreadas por GPS. Sprawl Prime es la campaña inicial; completarla desbloquea Null Tide. Antes de cada misión eliges un objetivo — tiempo o distancia — y la historia se adapta a lo que elijas. Alcanzar el objetivo completa la operación; detenerte antes la falla, la deja abierta y puedes reintentarla cuando quieras. Correr más allá del objetivo aún cuenta y activa diálogo adicional del operador. Las persecuciones son la mecánica central: durante ciertas misiones algo te persigue y tienes una ventana limitada para escapar. El esfuerzo requerido se ajusta a tu propio ritmo de los últimos tres minutos en lugar de un número fijo elegido por el diseñador, por lo que es un esfuerzo real a cualquier velocidad de carrera y nunca es imposible. Las persecuciones pueden desactivarse por completo manteniendo la historia. Nueve personajes tienen voz mediante síntesis de voz en el dispositivo, y el README indica que las campañas contienen 492 líneas de diálogo. Un códice de cuarenta entradas se desbloquea solo después de que un personaje mencione una entrada, por lo que registra lo que te han dicho en lugar de actuar como una wiki de lectura anticipada. Se pueden habilitar recordatorios opcionales del operador y mensajes opcionales de "ruido de señal" entre carreras, y estos últimos nunca se activan durante la noche. Seguimiento y métricas El seguimiento GPS continúa con la pantalla apagada e incluye pausa automática. El HUD en vivo muestra distancia, ritmo, tiempo transcurrido, un anillo de objetivo y la barra de persecución. Las calorías se calculan a partir de las ecuaciones metabólicas del ACSM y tu masa corporal. Las rutas se dibujan como un trazo neón a partir de los datos GPS almacenados y se pueden reproducir al ritmo que realmente corriste. La aplicación omite deliberadamente los mapas porque los mosaicos de mapas requieren red. Progreso Los resúmenes semanales y mensuales se pueden retroceder hasta tu primera carrera. Un historial a largo plazo muestra distancia por mes más un calendario de puntos donde cada mes se ilumina según lo que corriste. Sesenta logros abarcan seis categorías y cuatro niveles, y el progreso se recalcula desde el registro de carreras en lugar de almacenarse como contadores. Las rachas usan un compromiso semanal que defines tú mismo (minutos, kilómetros o misiones), y una semana aún en progreso nunca rompe una racha. Propiedad de los datos Configuración → Datos exporta perfil, progreso de campaña, logros, códice y cada carrera con su trazo GPS como un único archivo JSON plano entregado a la hoja de compartir del sistema. La importación reemplaza el dispositivo (restauración limpia) o fusiona, agregando solo lo que falta para que una copia de seguridad antigua no pueda volver a bloquear una misión. No se usa permiso de almacenamiento en ninguna dirección. Las carreras individuales se pueden exportar como pistas GPX 1.1 para aplicaciones como OsmAnd, Strava o Komoot. Audio La música de otro reproductor se atenúa para una transmisión y se reanuda si el reproductor se comporta mal. Hay una capa ambiental sintética opcional cuando no traes música. La velocidad del habla y el volumen de efectos son ajustables, y la voz de la historia se puede silenciar. Privacidad y permisos El README es inusualmente explícito aquí. No hay permiso de INTERNET, ni cuentas, ni anuncios, ni análisis, ni Google Play Services; el módulo de la aplicación excluye el grupo com.google.android.gms y fuerza el LocationManager de AOSP. El seguimiento con pantalla apagada usa un servicio en primer plano en lugar de ACCESS_BACKGROUND_LOCATION, y la notificación continua es la única notificación que muestra la aplicación. El README también señala que android:allowBackup se deja en el valor predeterminado de Android, true, por lo que el agente de respaldo del sistema operativo puede copiar el registro de carreras a la cuenta de Google del usuario si la copia de seguridad del dispositivo está habilitada — la aplicación en sí nunca hace esto. Dos permisos llegan indirectamente: ACCESS_NETWORK_STATE a través de ExoPlayer/just_audio, y un permiso de receptor dinámico autodefinido de share_plus. Notas técnicas Construido con Flutter 3.44.8 / Dart 3.12, Android primero con andamiaje de iOS presente. La compilación requiere JDK 17. Se necesita el NDK porque path_provider_android incluye package:jni. El motor de carrera toma su fuente de ubicación, narrador y reloj por inyección, lo que permite probar misiones completas contra GPS sintético en milisegundos; el README informa 228 pruebas y un flutter analyze limpio. Los efectos de sonido, iconos de lanzador y capturas de pantalla del README son generados por scripts en tool/, y la herramienta de capturas maneja los widgets reales con datos sembrados. Los paquetes de misiones son archivos JSON únicos colocados en el directorio de documentos de la aplicación bajo sprawlrun/mission_packs/ y se recargan desde Configuración, sin necesidad de reconstruir. El código de la aplicación es MIT; las fuentes incluidas (Orbitron, Rajdhani, Share Tech Mono) son SIL OFL 1.1.