Índice/ Códigos Fuente/ Houdini: el código y la documentación de los ficheros de PCF original, ya en abierto
Edición

Houdini: el código y la documentación de los ficheros de PCF original, ya en abierto

5 mensajes · 108 vistas
#1 por jordirubo » 26 oct 2026, 11:13
Hola a todos.

Hoy publico en abierto la base técnica sobre la que he construido el editor Houdini: todo lo que he ido descubriendo de cómo están hechos por dentro los ficheros de los PC Fútbol clásicos, y una biblioteca que los lee y los escribe sin romperlos.

👉 Entra para ver el enlace

Es gratis, es libre (licencia AGPL-3.0) y cualquiera puede usarlo, estudiarlo y mejorarlo.

Qué es (y qué no es)

No es un editor. No vais a encontrar ventanas ni botones. Es la pieza que hay debajo de un editor: la que sabe en qué byte está la media de un jugador, cómo se cifra un nombre, dónde guarda el ejecutable las plazas de cada división o por qué un fichero deja de cargar si un texto crece un carácter.

El editor Houdini Entra para ver el enlace se basa en esta documentación. Si lo que quieres es editar tu PC Fútbol, usa el editor. Si quieres entender cómo funciona por dentro, hacer tu propia herramienta o ayudarme a descubrir lo que todavía no sé, esto es para ti.

Qué ediciones cubre

FamiliaEdiciones
PC Fútbol 3.0La de DOS, temporada 94-95
PC Fútbol 4.0 y 4.5Un fichero por equipo, escudos y camisetas propios y el simulador 2D
PC Fútbol 5.0 y 6.0Con sus ediciones de Oro, y también PC Calcio y PC Premier
PC Fútbol 7, 2000 y 2001La familia de los ficheros .FDI
De cada una he documentado los equipos, los jugadores, los entrenadores, los textos, los escudos, las fotos, las camisetas, las paletas de color, el sonido y lo que vive dentro del ejecutable: divisiones, competiciones, año de la temporada y límites como el de extracomunitarios.

Qué hay en el repositorio

Son dos partes:

1. La wiki (carpeta wiki/). 44 páginas escritas para leer, no para programar. Es lo primero que os recomiendo:
  • Reglas de oro: las cinco cosas que hay que tener claras antes de tocar un byte. Si solo leéis una página, que sea esta.
  • Qué hay dentro de cada edición: el mapa de ficheros, qué guarda cada uno y cuál te interesa según lo que quieras cambiar.
  • Páginas concretas sobre la ficha del jugador, el bloque de equipo, el texto, las imágenes, el sonido y el ejecutable, con tablas de posiciones y campos.
2. El motor (carpeta engine/). Una biblioteca en Python que lee y escribe todos esos formatos. Su regla básica es el round-trip byte a byte: si abres un fichero y lo guardas sin tocar nada, sale idéntico al original. Si cambias algo, solo cambian esos bytes. Así me aseguro de que nada se rompe por accidente.

Cómo entenderlo: cuatro ideas clave

Si nunca habéis abierto un fichero de PC Fútbol con un editor hexadecimal, estas cuatro ideas os ahorrarán muchas horas (a mí me habrían ahorrado unas cuantas):
  1. El tamaño manda. El juego localiza casi todo por posición, no buscando. Si un nombre crece y el bloque se alarga, todo lo que va detrás se desplaza y el juego lee basura. Por eso se edita "en el sitio", sin cambiar longitudes salvo donde el formato lo permite.
  2. Los textos no van en claro. Ningún nombre se guarda tal cual: en casi todas las ediciones cada byte va pasado por un XOR fijo, y en la 3.0 depende de la longitud y la posición. No es ninguna protección, es una codificación que se descubre en cinco minutos, pero explica por qué al abrir un fichero no ves ni un nombre reconocible.
  3. Los equipos se identifican por su puntero. Cada club tiene un número fijo (el Barcelona es el 1, el Real Madrid el 4…) y es lo que usan las competiciones, las fichas y el ejecutable para referirse a él. Cambiar el nombre no cambia el equipo; cambiar el puntero sí.
  4. No todo está en la base de datos. Cuántos equipos tiene cada división, quién juega cada copa o en qué año empieza la temporada están escritos en el propio ejecutable del juego. Por eso añadir equipos a la base no basta para que aparezcan en la liga. En la wiki explico dónde está cada cosa en cada ejecutable.

Cómo usarlo

Si solo quieres entenderlo: abre la carpeta wiki/paginas en GitHub y empieza por reglas-de-oro.md y por la página "qué hay dentro" de tu edición. Se lee directamente en la web, no hace falta instalar nada.

Si quieres programar con él: hace falta Python 3.11 o superior. Las instrucciones para instalarlo están en el README del repositorio. Con el motor puedes abrir un fichero del juego, recorrer sus equipos y jugadores, consultar o cambiar cualquier campo (medias, aforo, nombres, tácticas…) y volver a guardarlo con la garantía de que solo cambia lo que has tocado.

Importante: los ficheros del juego

El repositorio no incluye ningún fichero de los juegos: ni ejecutables, ni bases de datos, ni gráficos, ni sonido. Solo trae unas pocas tablas técnicas que hacen falta para entender los formatos. Cada uno trabaja sobre su propia copia del juego.

Los cambios que describo en el ejecutable tocan solo reglas de juego (divisiones, competiciones, límites, años de nacimiento…). Ninguno toca la protección anticopia.

PC Fútbol es una marca de sus titulares y este proyecto no está afiliado a ellos.

Cómo participar

  • ¿Has encontrado un error o un dato que falta? Abre un issue en GitHub con la edición del juego, el fichero y qué esperabas ver, o coméntalo en este hilo.
  • ¿Sabes algo que no está documentado? Hay datos marcados como "sin confirmar" en la wiki. Si los puedes verificar con tu juego, me ayudas muchísimo.
  • ¿Programas? Los pull requests son bienvenidos.

Gracias

Casi todo lo que sé de estos formatos se lo debo a años de trabajo de la comunidad: carky12, peu7510, pcnimdock (FUTBOL_RELOAD), 1Simo1 (MultiEditorPCC), Pablinho (EPCF7), josewolf22, Mourg5, Jordi Gironés, Marchi (LSSL), lupus y la gente de pcfutbolmania, TRONIC, KeksPatch y PCx-Utils. El detalle está en el fichero NOTICE.md del repositorio. Si eres autor de alguno de esos trabajos y quieres que te cite de otra forma, dímelo.

Cualquier duda, por aquí.

Un saludo.
#2 por Simo » Ayer, 15:56
Hola Jordi.

Antes que nada, no hablo español; soy italiano, concretamente. Estoy usando el Traductor de Google para navegar por el foro y escribir este mensaje, así que pido disculpas de antemano por cualquier error gramatical en tu idioma.

Soy 1Simo1 en GitHub, y muchas gracias por mencionarme. Lo aprecio mucho. El proyecto (en desarrollo) está vinculado a un foro italiano. Por respeto a las normas, no lo mencionaré aquí porque no sé si infringiría la regla de spam. Sin embargo, lo mencionaremos pronto en una sección dedicada a PCFSite.

(Por consiguiente, a lo largo de los años, el estudio y las consideraciones sobre los distintos formatos se han basado en gran medida en PC Calcio; a veces hay pequeñas diferencias con respecto al PC Futbol original).

Espero no haberte aburrido hasta ahora , así que pasaré a algunas consideraciones técnicas sobre la documentación de la wiki, que, enhorabuena, me parece realmente excelente. Probablemente lo he leído casi por completo, pero me gustaría hacer un par de preguntas rápidas sobre algo que he intentado comprender examinando los archivos. Empezaré con los "archivos CPT". Los llamo así porque parece una ruta como muchas otras que permiten copiar archivos a carpetas específicas sin modificar el gestor y que los cambios se mantengan en el juego, pero nunca he entendido el formato. Lo mencionas brevemente y, quizás por problemas de traducción del español, no logro descifrar si es posible escribir archivos CPT en una carpeta llamada "actliga" o similar y así modificar la programación. (Mi idea inicial era escribir un calendario en un archivo externo que también modificara el número de equipos en una liga, pero no creo que sea posible, y estoy de acuerdo contigo en esto). Ahora bien, el otro aspecto —y tengo un archivo de documentación muy parcial compartido en el foro italiano— es el archivo de guardado main.dat, del que sé muy poco, pero por otro lado, es muy fácil tener una partida guardada, salir, modificar el archivo y decidir desde qué temporada empezar. A diferencia del archivo .exe, en el archivo main.dat, las fechas ocupan un byte para el día, un byte para el mes y dos bytes para el año de cada partido. Puede que se me haya pasado por alto, pero no he visto ninguna mención de formatos de archivos de guardado en la wiki; si la hay, con gusto compartiré la poca información que tengo (entre otras cosas, supongo que la codificación de texto es diferente a la de otros archivos).

Gracias de nuevo por el excelente trabajo, especialmente por la sección de tácticas. Hasta ahora, solo conocía el número de bytes para las tácticas (1760 o 176, según la versión).

¡Hola a todos!
#3 por jordirubo » Ayer, 16:52
🇮🇹 In italiano

Ciao Simo.

Grazie mille per il messaggio, e non preoccuparti per la lingua: ti rispondo anche in italiano, così è più semplice (sotto trovi la versione in spagnolo per gli altri).

Mi fa molto piacere che la wiki ti sia utile. Il tuo MultiEditorPCC mi ha aiutato parecchio. Per esempio, il modello del giocatore di PCF7 con le sue 16 medie l'ho confermato proprio grazie al tuo codice.

Una domanda: per verificare i formati ho usato anche alcuni schemi italiani, schemi_file_fdi_700.pdf, schemi_file_pkf.pdf e schemi_main_dat_pcc7+.pdf. Sono tuoi o del tuo forum? Se mi dici chi li ha fatti, li aggiungo ai crediti (NOTICE.md) con il nome che preferisci.

E quando la presentazione del progetto sarà pronta, vai pure: tutta la comunità di PC Calcio è più che benvenuta su PCFSite. Questa è casa vostra in Spagna.

I file .CPT

Hai ragione, nella wiki li cito solo di sfuggita. Ho guardato più a fondo l'eseguibile di PC Fútbol 7 e questo è quello che ho trovato:
  • Il gioco cerca il file nella cartella actliga, dentro la cartella del gioco, con nomi come FIRST001.CPT o CCCUP001.CPT. Il numero viene da un campo di 2 byte che ogni competizione conserva.
  • Se il file esiste, il gioco lo carica con la stessa routine che legge quella competizione dentro il salvataggio. Il blocco inizia con un'etichetta di 8 byte (per esempio CHARITY) seguita da quel numero di 2 byte.
  • Credo che fosse il sistema degli aggiornamenti ufficiali di Dinamic, per inserire calendario e stato delle competizioni senza toccare l'eseguibile.
Quindi la tua idea di scrivere un calendario in un .CPT potrebbe avere senso. Quello che invece non credo sia possibile è cambiare il numero di squadre: i posti di ogni divisione sono fissati nell'eseguibile e il .CPT non li modifica. Tutto questo però non l'ho ancora provato nel gioco: è quello che deduco dal codice.

Il main.dat

Non ti è sfuggito niente: i salvataggi non sono documentati nella wiki. Se vuoi condividere quello che hai, mi piacerebbe molto aggiungerlo come pagina nuova, con il tuo credito. La questione delle date (1 byte per il giorno, 1 per il mese e 2 per l'anno) coincide con quello che ho visto in altre parti del gioco.

Se ti è più comodo, puoi anche aprire una issue o una pull request su GitHub.

Un saluto e grazie ancora.
🇪🇸 En castellano

Ciao Simo.

Muchas gracias por escribir, y no te preocupes por el idioma: te contesto también en italiano para ponértelo más fácil.

Me alegra mucho que la wiki te sea útil. Tu MultiEditorPCC me ayudó bastante. Por ejemplo, el modelo del jugador de PCF7 con sus 16 medias lo confirmé gracias a tu código.

Una pregunta: para contrastar los formatos también usé unos esquemas italianos, schemi_file_fdi_700.pdf, schemi_file_pkf.pdf y schemi_main_dat_pcc7+.pdf. ¿Son tuyos o de tu foro? Si me dices de quién son, los añado a los créditos (NOTICE.md) con el nombre que prefieras.

Y cuando tengas lista la presentación del proyecto, adelante: toda la comunidad de PC Calcio es más que bienvenida en PCFSite. Esta es vuestra casa en España.

Los ficheros .CPT

Tienes razón, en la wiki solo los menciono de pasada. He mirado más a fondo el ejecutable de PC Fútbol 7 y esto es lo que he visto:
  • El juego busca el fichero en la carpeta actliga dentro de la carpeta del juego, con nombres como FIRST001.CPT o CCCUP001.CPT. El número sale de un campo de 2 bytes que guarda cada competición.
  • Si el fichero existe, lo carga con la misma rutina que lee esa competición dentro de la partida guardada. El bloque empieza con una etiqueta de 8 bytes (por ejemplo CHARITY) seguida de ese número de 2 bytes.
  • Creo que era el sistema de las actualizaciones oficiales de Dinamic, para meter calendario y estado de las competiciones sin tocar el ejecutable.
Así que tu idea de escribir un calendario en un .CPT puede tener sentido. Lo que no creo que se pueda es cambiar el número de equipos: las plazas de cada división están fijadas en el ejecutable y el .CPT no las cambia. Todo esto aún no lo he probado en el juego; es lo que deduzco del código.

El main.dat

Tampoco se te ha pasado nada: las partidas guardadas no están documentadas en la wiki. Si quieres compartir lo que tienes, me encantaría añadirlo como página nueva, con tu crédito. Lo de las fechas (1 byte día, 1 byte mes, 2 bytes año) encaja con lo que he visto en otras partes del juego.

También puedes abrir un issue o un pull request en GitHub, como te resulte más cómodo.

Un saludo y gracias otra vez.
#4 por Simo » Ayer, 17:54
🇮🇹 In italiano

Grazie a te per la risposta.

Sì, i file che elenchi li ho scritti io (infatti all'inizio dei file c'è una parentesi con il mio nome, Simone, che porta alla pagina di profilo del mio utente del forum di cui dicevo prima, e nel forum stesso ci sono varie sezioni tra cui una dedicata ai vari formati di file, con link esterni ai PDF, tra cui quelli che hai letto tu)

Ora ho aperto la nuova sezione dove indico anche questo sito e questo forum

Entra para ver el enlace

Siete i benvenuti

Ti condivido il link al documento PDF con le pochissime informazioni (molte da verificare) che ho sul file main.dat

Entra para ver el enlace

Penso che siano molto poche le informazioni sicure per aprire una nuova pagina della tua wiki, ti ringrazio per le ulteriori informazioni sui CPT.

🇪🇸 En español (lo intentaré, usando el Traductor de Google, pero no puedo garantizar nada) 😁

Gracias por tu respuesta.

Sí, yo escribí los archivos que mencionas (de hecho, al principio de cada archivo hay un paréntesis con mi nombre, Simone, que enlaza con el perfil de mi usuario del foro que mencioné antes. En el foro hay varias secciones, incluyendo una dedicada a diferentes formatos de archivo, con enlaces externos a PDF, incluidos los que leíste).

Ahora he abierto una nueva sección donde también he incluido este sitio y este foro.

Entra para ver el enlace

De nada.

Te comparto el enlace al documento PDF con la poca información (que aún debe verificarse) que tengo sobre el archivo main.dat.

Entra para ver el enlace

Creo que hay muy poca información fiable para abrir una nueva página en tu wiki. Gracias por la información adicional sobre CPT.
#5 por jordirubo » Ayer, 19:57
🇮🇹 In italiano

Ciao Simone.

Grazie per la conferma. Ti ho già aggiunto ai crediti del repository (NOTICE.md Entra para ver el enlace) come autore degli schemi FDI 700, PKF e main.dat, con il link a PC Calcio 4 Ever.

E grazie di cuore per aver aperto una sezione dedicata a noi nel vostro forum: è un gesto bellissimo, ed è proprio così che si fa comunità. Qui siete a casa vostra.

Sul main.dat sono d'accordo: con quello che c'è di confermato è ancora presto per una pagina nella wiki. Il tuo PDF me lo tengo. Se un giorno provo la cosa dei .CPT nel gioco o confermo qualcosa del main.dat, te lo racconto qui e, se ti va, la pagina la facciamo insieme con quello che sarà verificato.

Un saluto.
🇪🇸 En castellano

Ciao Simone.

Gracias por confirmarlo. Ya te he añadido a los créditos del repositorio (NOTICE.md Entra para ver el enlace) como autor de los esquemas FDI 700, PKF y main.dat, con el enlace a PC Calcio 4 Ever.

Y muchísimas gracias por abrir una sección dedicada a nosotros en vuestro foro: es un detalle enorme, y así es como se hace comunidad. Aquí estáis en vuestra casa.

Sobre el main.dat estoy de acuerdo: con lo que hay confirmado todavía es pronto para una página en la wiki. Me guardo tu PDF. Si algún día pruebo lo de los .CPT en el juego o confirmo algo del main.dat, te lo cuento aquí y, si te parece, montamos la página juntos con lo que esté verificado.

Un saludo.