(https://i.imgur.com/xBD9e2e.png)
iOS, originalmente llamado iPhone OS, es un sistema operativo desarrollado por Apple para su línea de dispositivos móviles iPhone, iPad e iPod Touch.
Fue presentado al público, junto al iPhone, en el MacWorld de enero de 2007. Se pueden criticar muchas cosas de Apple, especialmente su pasión por "inventar" cosas que ya estaban inventadas, pero el iPhone era el futuro y aquella presentación cambió el paradigma de la telefonía móvil para siempre. Las compañías clásicas llevaban estancadas ya varios años y los sistemas móviles de la época se estaban volviendo pesados y obsoletos: Symbian, Windows Mobile y PalmOS. Estas plataformas iteraban continuamente sobre el mismo kernel y fiaban sus "novedades" a capas de personalización ultra-recargadas que los procesadores de la época apenas podían mover, llegando a niveles de fluidez insoportables, cosas como el TouchWiz de Samsung. iOS llegó para cambiarlo todo con un look sencillo y moderno, una accesibilidad espectacular y una innovadora jerarquía de carpetas e iconos. Sumado a la tecnología capacitiva, hacían de la experiencia un uso fluido e inmediato.
(https://github.com/stranno/stranno.github.io/raw/refs/heads/main/pinch-macworld.webp)
Por primera vez en la historia se hacía el gesto 'Pinch to Zoom'
iPhone OS no tuvo aplicaciones, más allá de algunos juegos flash a través de Safari, hasta la apertura de la App Store, un año después. Con ella llegó el SDK de desarrollo y la posibilidad de crear aplicaciones de terceros. La entrega de los estudios fue total, ante la perspectiva de que los móviles iban a reemplazar a las consolas, y tan solo el primer día la App Store ya contó con más de 300 juegos. En comparación, el mercado digital más popular hasta la fecha, el N-Gage Service de Nokia, apenas contó con 50 juegos en dos años de vida.
(https://github.com/stranno/stranno.github.io/raw/refs/heads/main/super-monkey-ball-ios.webp)
Super Monkey Ball — El juego más popular de los primeros días de la App Store
Durante más de 15 años había sido imposible jugar a juegos de iOS fuera del ecosistema de Apple. Sin embargo, a principios de 2023, una programadora suiza conocida como Hikari, apasionada de la saga Monkey Ball, decidió emular esta primera versión de iOS tan solo para poder jugar al clásico de Sega en cualquier dispositivo. Así nació un touchHLE que, a la larga, ha ido soportando cientos de juegos más, gracias a colaboradores apasionados de este sistema. Actualmente la lista cuenta con unos 130 juegos completamente jugables, así como casi 100 más que funcionan con problemas.
(https://github.com/stranno/stranno.github.io/raw/refs/heads/main/spore-ios.webp)
Spore — Otro clásico de los primeros días de la App Store
Muchos clásicos exclusivos de Gameloft han pasado a ser jugables ya que un entusiasta de esta compañía (¿quién no lo es?) es actualmente el mayor colaborador del emulador y quien ha añadido la mayoría de contribuciones últimamente: ciciplusplus.
touchHLE empezó emulando únicamente iOS 2.x, la primera versión del sistema, que ya contaba con miles de juegos en la época. Actualmente tiene también soporte para juegos iOS 3.x y preliminar para 4.x. Hikari ha dicho en varias ocasiones que no está entre sus planes pasar de ahí. Cuanto más nuevas son las versiones de iOS más complejidad, mayor variedad de hardware y mayor cantidad de APIs.
touchHLE
El interfaz de touchHLE se limita a un lanzador de aplicaciones, sin más virguerías. Para configurarlo es necesario o bien añadir los parámetros vía línea de comandos o bien añadir los parámetros en el archivo de configuración (touchHLE_default_options.txt). En Android solo existe esta segunda opción, de no querer lanzarlo los juegos con los valores por defecto. Todos los parámetros los tenéis explicados en el archivo de ayuda (OPTIONS_HELP.txt (https://raw.githubusercontent.com/touchHLE/touchHLE/refs/heads/trunk/OPTIONS_HELP.txt)).
- --fullscreen: Lanzar el juego a pantalla completa. En Android solo es posible lanzarlo así.
- --landscape-left y --landscape-right: Lanzar el juego rotado hacia la izquierda o derecha: Estas dos opciones, en principio, no son necesarias, ya que el propio juego es capaz de decirle a iOS en qué disposición debe funcionar.
- --scale-hack=X: El factor de escala al que podemos aumentar la resolución del juego. No siempre funcionará, depende de cómo se haya programado el juego y las API que use.
- --deadzone=X: La "zona muerta" de los joystick, en la cual el emulador ignorará los inputs. Esto sirve para evitar movimientos involuntarios en el caso de que nuestro joystick tenga algo de holgura. Los valores van de 0 a 1. Es decir, si queremos un 10% de deadzone sería 0.1.
- --disable-analog-stick-tilt-controls: Por defecto, touchHLE usa el analógico izquierdo de un mando para simular el acelerómetro y la inclinación del iPhone. En el caso de que el dispositivo donde usemos tenga acelerómetro y mando, pero queramos usar solo el acelerómetro, deberemos usar esta opción.
- --x-tilt-range=X y --y-tilt-range=X: El rango máximo de inclinación que podemos simular con el joystick del mando. Por defecto son 60 (grados), algunos juegos podrían requerir más (normalmente 90).
- --x-tilt-offset=X y --y-tilt-offset=X: Esta es la inclinación de la partiremos para simular los gestos de movimiento. Por defecto son 45 (grados), que sería la forma natural de jugar, inclinando la pantalla hacia nuestra cara. Algunos juegos "creativos" pueden requerir otros valores.
- --button-to-touch=X. Esta opción nos permite mapear los controles del mando (DPadLeft, DPadUp, DPadRight, DPadDown, Start, LeftShoulder, A, B, X e Y) a coordenadas concretas de la pantalla, 240x320 en vertical y 320x240 en horizontal. De modo que, por ejemplo, --button-to-touch=A,470,310 mapearía el botón A al punto 470x310. El hack de escalar la resolución no afecta a esta opción, hablamos de la resolución original del iPhone emulado.
- --stabilize-virtual-cursor=X,X: Es complicado de explicar y raramente necesario. Leed mejor el archivo de ayuda ಠ_ಠ
- --preferred-languages=XX: El idioma en ISO639, que para español sería: es. Funcionará o no dependiendo de cómo esté programado el juego. Puede que el juego reconozca este valor, puede tener su propio selector de idiomas, puede tener solo inglés o programaciones/APIs más creativas.
- --fps-limit=XX. Sirve para limitar los frames por segundo a un valor determinado. Por defecto es 60. Algunos juegos pueden funcionar bien a framerates más altos, como 120, pero lo normal en los primeros tiempos de iOS es que el framerate sincronizara eventos del juego, de modo que no es muy recomendable tocarlo.
- --force-composition. Puede resolver problemas gráficos concretos a costa de un rendimiento menor.
- --allow-network-access. Permite a la aplicación acceder a internet. No sé si hay soporte de red aún, pero sí he visto que ciciplusplus está involucrado en reimplementar servidores de algunos juegos antiguos de iOS, quizá para soportarlos en un futuro.
- Hay algunas opciones de debug a mayores, no relevantes a nivel jugable.
En el caso de querer configurar estos valores a través del archivo de configuración, basta poner la ID del juego seguida de los parámetros, en cualquier parte del archivo de texto. Es decir, si quisiéramos lanzar Super Monkey Ball en pantalla completa, girado hacia la izquierda, indicando que el botón START pause el juego e inclinando el iPhone desde 25 grados, en vez de los 45 grados originales:
- com.ooi.supermonkeyball: --fullscreen --landscape-left --y-tilt-offset=25 --button-to-touch=Start,240,10
Si tenéis múltiples versiones del mismo juego que tengan la misma ID, al configuración se aplicará a todos ellos.
DESCARGA
La última versión estable de touchHLE data de hace más de un año, si bien Hikari tiene pensado publicar la siguiente versión estable próximamente. Para tener las versiones actualizadas hay que descargar las "Previews". Para ello deberemos tener cuenta de Github, de lo contrario no será posible descargar las versiones pre-compiladas desde Github Actions. La descarga ya incluye todos los archivos necesarios, salvo los juegos, para usar el emulador.
Versiones Estables (https://github.com/touchHLE/touchHLE/releases/tag/v0.2.2)
Versiones Preview (https://touchhle.org/download/)
iOSObscura (https://archive.org/download/iOSObscura/)
Respecto a los juegos, lamentablemente la "preservación" de iOS está muy fragmentada (con todo es infinitamente mejor que en Android) y no hay nada organizado como TOSEC o No-Intro. El mayor proyecto de preservación que he visto es iOS Obscura en Internet Archive, que tiene un poco casi todo lo importante que podáis necesitar, incluyendo todos los juegos soportados actualmente por touchHLE.
Revisad siempre la lista de compatibilidad de touchHLE (enlace (https://appdb.touchhle.org/)) porque ahí os indicarán exactamente la ID del juego comprobado y la versión concreta que funciona. A veces puede que una versión particular no funcione.
JUEGOS
Windows: Basta con mover los juegos a la carpeta touchHLE_apps, que deberemos crear en el mismo directorio que el ejecutable (touchHLE.exe). Deberán estar en formato IPA para que sean reconocidos por touchHLE. Una vez ejecutemos el emulador, nos saldrán directamente los iconos de los juegos correspondientes en la ventana.
Android: Aquí la cosa se complica un poco porque Google tiene la obsesión de cerrar Android, intentando que se parezca más a iOS con cada versión que pasa. Desde Android 10 ya no es posible acceder a las carpetas de datos de las aplicaciones instaladas. Tan solo es posible acceder a través del explorador de archivos nativo de AOSP (com.google.android.files), que desde Android 12 está convenientemente oculto, o bien a través de MTP, conectando el móvil por USB a un ordenador. Afortunadamente, touchHLE implementa en su interfaz el explorador Files para poder realizar la operación de mover los juego a su sitio correspondiente. El procedimiento sería el siguiente:
- Movemos el juego a la memoria interna del móvil o lo descargamos vía navegador.
- Ejecutamos touchHLE y presionamos en File Manager, en el menú principal.
- Vamos hasta donde tengamos el juego, mantenemos presionado sobre él y, cuando esté seleccionado, le damos a 'Mover a' en el desplegable de los tres puntos verticales (parte superior derecha de la pantalla).
- En la nueva instancia que se abre del explorador iremos al icono de las tres rayas horizontales (parte superior izquierda de la pantalla) y elegimos touchHLE.
- Entramos en touchHLE_apps y presionamos en el botón Mover, en la parte inferior. Y ya estaría.
(https://github.com/stranno/stranno.github.io/raw/refs/heads/main/touchhle-files.webp)
Si optáis por hacerlo por MTP (mucho más simple), basta con mover los juegos a Android/data/org.touchhle.android/files/touchHLE_apps
(https://i.imgur.com/j4mbQcw.png)
(https://i.imgur.com/gfh4OnA.gif) (https://i.imgur.com/rcmqWvz.gif)
(https://i.imgur.com/PKlYCKH.gif)
Tenía esto bastante abandonado y, efectivamente, el soporte ha aumentado considerablemente gracias a un colaborador llamado ciciplusplus, que ha estado los últimos meses añadiendo soporte para juegos de Gameloft. Hikari parece haberse centrado en el núcleo del emulador, más que en la compatibilidad. Aún así ya tenemos numerosos clásicos del estudio francés y también GitHub Actions, que son binarios (ejecutables) que se auto-compilan en los servidores de GitHub con cada commit (cada conjunto de cambios que se sube al repositorio) que se envía. De modo que ya no es necesario esperar a una versión estable, sino que podremos probar cada novedad.
Todo esto lo pondré en el OP en un rato, pero por aquí dejo unos links relacionados:
Actions. Tendréis que estar logados en GitHub para descargar los binarios.
https://github.com/touchHLE/touchHLE/actions
Twitter de ciciplusplus. Donde va colgando las novedades en las que trabaja, actualmente dando soporte a Asphalt 5 e Iron Man 2.
https://x.com/ciciplusplus
iOSObscura. El repositorio de juegos iOS en Archive donde encontraréis el 90%+ de los juegos que soporta y soportará, a medio plazo, touchHLE.
https://archive.org/download/iOSObscura/