• 1 voto(s) - 4 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Ayuda] Conversor de formato PC Fútbol a entendible y de formato entendible a PC Fútbol
#1
Hola a todos.

Estoy intentando hacer una aplicación que pueda hacer un dump de los jugadores que aparecen en el archivo dbdat/EQ022022.PKF.

He visto que la mayoría usa el archivo PCF.map (hay enlaces al archivo en este foro).

Como no tengo acceso a Windows (uso Linux + Wine para jugar al PCF6) y por lo tanto, al editor que usáis, pues he tenido que hacer un script:

https://lpaste.net/2419377583465431040

que es capaz de traducir el fichero binario (entero) a formato entendible de esta forma:

Código:
cat ../dbdat/EQ022022.PKF | ./Translate.hs

(el código va más rápido si es compilado)

Una cosa que se ve a primera vista, es que el archivo PCF.map no es completo, y por lo que solo se pueden divisar, los textos son correctos menos las tildes (a partir de 0xC0, 192 decimal, no hay ningun byte asignado).

Me pregunto si hay alguien que tenga esta información?

Por cierto, también he notado "mucho secretismo" con el código y las herramientas. Yo como fiel defensor del código abierto y siendo mienbro de la FSF, todo lo que haga, se hará público y para el disfrute de toda la comunidad !!! :)
  Responder
#2
No hay ningún secretismo, todo lo que sabemos está en tutoriales e incluso el código fuente de mi editor estuvo muchísimo tiempo disponible para descargar directamente desde el foro. Ahora no está pero a todo el que lo solicita se lo envío avisando primero que es una mierda de código y necesita rehacerse desde cero xD.

El map que dices es heredado de la época de PCFSite. Si quieres puedo pasarte el método que uso en el editor para hacer la transformación que creo recordar que llega hasta el 255 (lo digo de memoria)


Enviado desde mi iPhone utilizando Tapatalk
  Responder
#3
(16-08-2018, 06:49 PM)Pablinho escribió: No hay ningún secretismo, todo lo que sabemos está  en tutoriales e incluso el código fuente de mi editor estuvo muchísimo tiempo disponible para descargar directamente desde el foro. Ahora no está pero a todo el que lo solicita se lo envío avisando primero que es una mierda de código y necesita rehacerse desde cero xD.

Todo código después de un periodo de 6 meses tiende a ser una mierda xD (es una Ley Universal)

(16-08-2018, 06:49 PM)Pablinho escribió: El map que dices es heredado de la época de PCFSite. Si quieres puedo pasarte el método que uso en el editor para hacer la transformación que creo recordar que llega hasta el 255 (lo digo de memoria)

De acuerdo :)

Como hace años que no uso foros, me puedes mandar el pedazo de código como privado no? Si no, por privado ya te doy mi correo electrónico.
  Responder
#4
(16-08-2018, 06:49 PM)Pablinho escribió: Si quieres puedo pasarte el método que uso en el editor para hacer la transformación que creo recordar que llega hasta el 255 (lo digo de memoria)

He mirado un poco por el foro y he dado con Editor_PCF2001.rar:

https://www.pcfutbolmania.com/thread-1967.html

que es una aplicación Java almacenada en un archivo JAR. He conseguido extraer el código del susodicho archivo y que tiene las dos siguientes funciones:

Código:
public String convCadenaAsciiPCF(int[] cadena)
public int[] convCadenaPCFAscii(String cadena)

He implementado el algoritmo solo usando bytes, y me dado cuenta de que la dos funciones son bijectivas, y por lo tanto equivalentes. La función sería la siguiente:

Código:
module Data.PCFutbol.Byte.Rotate
 ( bijective
 ) where

--------------------------------------------------------------------------------

import           Data.Bits
   ( (.&.)
   )
import           Data.Word
   ( Word8
   )

--------------------------------------------------------------------------------

bijective :: Word8 -> Word8

--------------------------------------------------------------------------------

bijective b
 | 032  >  b = if b .&. 01 == 0 then b + 97 else b + 95
 | 064  >  b = if b .&. 01 == 0 then b + 33 else b + 31
 | 096  >  b = if b .&. 01 == 0 then b - 31 else b - 33
 | 128  >  b = if b .&. 01 == 0 then b - 95 else b - 97
 | 160  >  b = if b .&. 01 == 0 then b + 97 else b + 95
 | 192  >  b = if b .&. 01 == 0 then b + 33 else b + 31
 | 224  >  b = if b .&. 01 == 0 then b - 31 else b - 33
 | otherwise = if b .&. 01 == 0 then b - 95 else b - 97

que cumple con la propiedad:

Código:
#!/usr/bin/env stack
{- stack
  --resolver lts-12.0
  --install-ghc
  script
  --package bytestring
  --package hspec
  --package QuickCheck
  --ghc-options -threaded
  --ghc-options -Werror
  --ghc-options -Wall
  --
-}

--------------------------------------------------------------------------------

module Spec (main) where

--------------------------------------------------------------------------------

import           Data.Word
   ( Word8
   )
import           Test.Hspec
   ( describe
   , hspec
   , it
   )
import           Test.QuickCheck
   ( property
   )

import           Data.PCFutbol.Byte.Rotate
   ( bijective
   )

--------------------------------------------------------------------------------

main
 :: IO ()

--------------------------------------------------------------------------------

main = hspec $
 do
   describe ("PC Fútbol Byte Rotate") $
     do
       it ("(bijective . bijective) byte == byte") $
         property bijection
   where
     bijection :: Word8 -> Bool
     bijection =
       \ b -> (bijective . bijective) b == b

Output de ejecutar el test de propiedad:
Código:
PC Fútbol Byte Rotate
 (bijective . bijective) byte == byte
   +++ OK, passed 100 tests.

Finished in 0.0026 seconds
1 example, 0 failures

Sobre lo de las tildes, me he dado cuenta de que al ser una lista de bytes, pues el texto es almacenado como single byte y no multiple byte (UTF-8).

Ahora supongo que ya podré sacar datos (miraré un poco más en el código de tu proyecto (Editor_PCF2001) a ver como extraes cosas, y en un futuro, posiblemente también mirare lo de actualizar.

Gracias por tu respuesta, sin la cual aún estaría dando tumbos good.gif
  Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)