import struct
import pandas as pd

def read_string(f):
    length = struct.unpack("B", f.read(1))[0]
    str = f.read(length).decode("utf-8")
    return str

def read_int_old(f, size=4):
    integer = int.from_bytes(f.read(size), byteorder="big")
    return integer

def read_int(f, size=4):
    result = " ".join(f"{b:02X}" for b in f.read(size))
    return result

def read_byte(f):
    result = " ".join(f"{b:02X}" for b in f.read(1))
    return result

def parse_pak_file(file_path, output_xlsx):
    with open(file_path, "rb") as f:
        num_elements = read_int_old(f, 2)
        data = []
        
        for _ in range(num_elements):
            entry = {
                "Field1": read_int(f),
                "Field2": read_byte(f),
                "Field3": read_int(f),
                "Field4": read_byte(f),
                "String1": read_string(f),
                "String2": read_string(f),
                "String3": read_string(f),
                "String4": read_string(f),
                "String5": read_string(f),
                "String6": read_string(f),
                "Field5": read_int(f, 9),
                "Field7": read_byte(f),
                "Field8": read_int(f),
                "Field9": read_byte(f),
                "Field10": read_byte(f),
                "Field11": read_int(f),
                "Field12": read_int(f),
                "Field13": read_int(f),
                "Field14": read_int(f),
                "Field15": read_byte(f),
                "Field16": read_byte(f),
                "Field17": read_int(f),
                "Field18": read_int(f),
                "Field19": read_byte(f),
                "Field20": read_int(f),
                "Field21": read_byte(f),
                "Field22": read_int(f),
                "Field23": read_int(f),
                "Field24": read_byte(f),
                "Field25": read_int(f),
                "Field26": read_int(f),
                "Field27": read_byte(f),
                "Field28": read_int(f),
                "Field29": read_int(f),
                "Field30": read_byte(f),
                "Field31": read_int(f),
                "Field32": read_int(f),
                "Field33": read_int(f),
                "Field34": read_byte(f),
                "Field35": read_int(f),
                "Field36": read_int(f),
                "Field37": read_int(f, 2),
                "Field38": read_int(f)
            }

            data.append(entry)

    df = pd.DataFrame(data)
    df.to_excel(output_xlsx, index=False)

parse_pak_file("player.dat", "player.xlsx")