Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

RTL Ski jumping 2004

Featured Replies

Hi. Does anyone have a script or tool to unpack pcfile.dat and commentcount.dat from RTL Ski Jumping 2004?

 

My scrpit doesn't work: 

import os
import struct

def extract_packfile(pack_path, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        
    print(f"Opening file: {pack_path}")
    
    with open(pack_path, 'rb') as f:
        # Read "PACK" magic header
        magic = f.read(4)
        if magic != b'PACK':
            print(f"ERROR: Not a valid PACK file! Header found: {magic}")
            return
            
        # Read version and file count (32-bit integers, Little-Endian)
        version = struct.unpack('<I', f.read(4))[0]
        file_count = struct.unpack('<I', f.read(4))[0]
        
        print(f"Archive version: {version}")
        print(f"Files to extract: {file_count}")
        print("-" * 50)
        
        files_metadata = []
        
        # Read File Allocation Table (FAT)
        for i in range(file_count):
            # File name takes exactly 64 bytes (0x40)
            name_bytes = f.read(64)
            # Decode name, stripping trailing null bytes (\x00)
            name = name_bytes.split(b'\x00')[0].decode('utf-8', errors='ignore').replace('\\', '/')
            
            # Read file offset and size
            offset = struct.unpack('<I', f.read(4))[0]
            size = struct.unpack('<I', f.read(4))[0]
            
            files_metadata.append((name, offset, size))
            
        # Extract files
        for name, offset, size in files_metadata:
            if size == 0:
                continue
                
            print(f"Extracting: {name} ({size} bytes)...")
            
            # Create directory structure if it doesn't exist
            full_output_path = os.path.join(output_dir, name)
            file_dir = os.path.dirname(full_output_path)
            if not os.path.exists(file_dir):
                os.makedirs(file_dir)
                
            # Seek to file position and read data
            f.seek(offset)
            file_data = f.read(size)
            
            # Write file to disk
            with open(full_output_path, 'wb') as out_file:
                out_file.write(file_data)
                
    print("-" * 50)
    print("Done! All files have been successfully extracted.")

if __name__ == "__main__":
    DATA_FILE = "packfile.dat"
    OUTPUT_FOLDER = "extracted_files"
    
    if os.path.exists(DATA_FILE):
        extract_packfile(DATA_FILE, OUTPUT_FOLDER)
    else:
        print(f"ERROR: Could not find '{DATA_FILE}' in this directory!")
        print("Please place this script inside the game folder next to packfile.dat.")

 

Links

https://www.dropbox.com/scl/fi/k96d1y55u70me01771his/pcfile.zip?rlkey=a2tsjy3mrhxlfjmu9hri076ow&st=2802e9i3&dl=0

commentcount.rar

  • Localization

I didn't get a notification for this for whatever reason but also this uses a different compression algo than the other RTL ski jumping games so be patient

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.