
Publicado: 2026-01-10
Etiquetas: Juegos, Mastodon, Python
Buenos días, tardes o noches:
En este artículo voy a contar un poco sobre un bot para Mastodon que publica frases del juego Animal Crossing de Switch. Lo hice hace un mes pero no lo había contado por aquí porque pensaba ampliarlo un poco pero después de investigar un poco he decidido dejarlo como está.
Lo primero que hice fue conseguir la ROM del juego. Lo bajé del eMule. En casa tenemos 3 veces el juego (dos en físico y una digital) así que realmente me bajé una "copia de seguridad".
Eran unos fichero con formato NSP. Uno era el juego y los otros DLCs según tengo entendido. El siguiente paso era extraer los ficheros de dentro para buscar los diálogos. No tenía ni idea de cuál era la estructura de las ROMs de Switch así que tuve que probar diversos programas para intentar extraer el contenido. Al final con el emulador Yuzu y unas claves lo conseguí.
Me sorprendió que en mi portátil de hace 10 años el emulador funcionaba y, aunque algo escaso de frames por segundo, el juego era funcional.
Con el contenido de la ROM desencriptado tenía que encontrar y extraer los diálogos. Había un directorio llamado "Message" que contenía un montón de ficheros con nombres que empezaban por "Dialog", "Talk" y cosas así. Era prometedor. Mi problema era que no sabía interpretar esos ficheros que estaban en un extraño formato y tenían la extensión ".zs".
Encontré un repositorio con código Python llamado AC-Dataparse que, según su propia descripción tiene:
Scripts for datamining dialogue files from Animal Crossing: New Horizons
Usé eso para extraer el contenido de los ficheros .zs aunque tuve que modificar el código porque esos scripts solo trabajan con algunos textos como los nombres de los objetos y yo quería conversaciones. Hice que extrajese también los diálogos de los personajes, que se limitase solo al español y arreglé algunos errores que ocurrían al parsear esos nuevos ficheros.
Por lo que vi, los textos en Animal Crossing contienen unos caracteres especiales que luego se reemplazan por cosas como el nombre de la isla, nuestro nombre y cosas así. También encontré un código que creo que se usa para poder alterar el diálogo dependiendo del género. Por ejemplo para cambiar "amigo" por "amiga" si está hablando con una chica. El código original de AC-Dataparse no necesitaba de muchos de esos códigos y fallaba al encontrarlos.
Mi idea era hacer un bot de Mastodon que, cada cierto tiempo, publicase un diálogo de algún personaje de Animal Crossing pero al extraer los textos me encontré que no hay frases para cada personaje sino que están divididos por tipos (normal, jock, cranky, sisterly, etc). Además los mensajes de gente de la aldea están cargados de código de control que tendría que procesar e inyectar los valores que tocase. Mucho trabajo.
Al final, ojeando los ficheros encontré los mensajes de Pascal una nutria que aparece en el mar y dice frases filosóficas o bromas a cambio de vieiras. Unos ejemplos:
Pascal tiene los diálogos perfecto para un pequeño bot.
Metí todas las frases en un fichero txt, una por línea. En un script de Python cargo todas con este código:
def readFile(path):
results = []
with open(path, 'r') as fin:
for line in fin:
line = line.strip()
lines = line.split('\\n')
line = '\n'.join(lines)
results.append(line)
return results
results = readFile('pascal.txt')
Luego dentro de un bucle infinito elijo una y uso la API de Mastodon para añadir el mensaje. Tras esto espero 11 horas antes de volver a publicar un mensaje para no saturar a la gente.
while True:
toot = random.choice(results)
toot = ':ac_pascal: ' + toot
mastodon = Mastodon(
access_token='secreto',
api_base_url='https://tkz.one'
)
mastodon.toot(toot)
time.sleep(11 * 60 * 60)
Y ya está. Ese es el bot entero. Ahora mismo se está ejecutando en mi ordenador en segundo plano así que solo publica mensajes si coincide que tengo el portátil encendido en ese momento. Debería trasladar el bot a mi servidor casero.
El ":ac_pascal:" que aparece en el script es un emoji que hay en la instancia de Mastodon que muestra la cara de Pascal. Los mensajes quedan así:

Estuve buscando otros posibles diálogos para el bot pero todos serían costosos de añadir por los código que utilizan. Por ejemplo en Navidad quería poner mensajes de Copito el muñeco de nieve pero vi que en muchos de ellos pone el nombre de la isla. Debería poner algún valor ahí cada vez y no sabía que poner. Mi isla se llama Cinnamon porque el día que empecé a jugar a Animal Crossing habíamos comido en un restaurante con ese nombre.
Los peces y bichos eran la mejor opción. Cuando pescas/cazas uno sale una pequeña rima y no parece que haya código extraños que necesite procesar. Probé a publicar alguno pero me gustaba más el estilo de las frases de Pascal así que los quité.
Por tanto, el bot se va a quedar únicamente con las frases Pascal por el momento. Hay 287 y poniendo una cada 11 horas hay contenido para mucho tiempo.