The C version is for mass-identification, while the Python version is GUI-based and meant for information on single files.

### --------------------------------------------

`joy_identifybsp.c`

### What it is for
Recursively scans a folder for `.bsp` files and writes out the ones whose **5th byte** is **not `0x26`**.

That makes it a bulk “identify BSPs that are probably not Kingpin/Quake II-format BSPs” tool. 

### C version
### Usage
After compiling:
```bash
joy_identifybsp.exe <directory>
```

### Arguments
- `<directory>`  
  Required. Root directory to scan recursively.

### What it checks
For each `.bsp`, it reads the first 5 bytes and inspects byte index 4.

If that byte is:
- `0x26` -> treated as valid / expected, not listed
- `0x2E` -> annotated as `Quake3, STVEF, or NExuiz`
- `0x29` -> annotated as `Daikatana`
- `0x2F` -> annotated as `RTCW`

### Output
Creates:
- `invalid_BSPs.txt`

in the current working directory.

Each line contains the file path, plus an optional annotation.

### Good use case
Run this on a mixed archive of BSPs to quickly find files that are probably from the wrong engine family.

### --------------------------------------------

`joy_identifybsp.py`

### Python version
### Dependencies
```bash
pip install PyQt5
```

### Usage
```bash
python joy_identifybsp.py <directory>
```
GUI version of the BSP identifier above.

Instead of scanning a whole folder recursively, this one lets you drag `.bsp` files into a window and shows the ones whose 5th byte is not `0x26`.

### Dependencies
```bash
pip install PyQt5
```

### Usage
```bash
python joyidentifybsp.py
```

### How to use
1. Launch the program.
2. Drag `.bsp` files into the window.
3. The output box lists only the files that do **not** have `0x26` as the 5th byte.
4. Click **Copy List to Clipboard** to copy the results.

### Arguments
None. This is GUI-only.

### Annotations
Same byte annotations as the C version:
- `0x2E` -> Quake3 / STVEF / NExuiz
- `0x29` -> Daikatana
- `0x2F` -> RTCW

### Output
No files are written automatically. Results are displayed in the text box and can be copied to the clipboard.