mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
sync. run make forceextractassets to re extract everythig to c files properly
This commit is contained in:
1 parent
e565375ed4
commit
9fbe1fd5a8
1291 files changed
+131225
-67809
No files matched your search
@@ -0,0 +1,284 @@
|
||||
# Image Build System
|
||||
|
||||
## Overview
|
||||
|
||||
The image build system synchronizes data between `imagelist.u.csv` (ROM offsets/sizes) and `assets/images.def` (image names and properties). The system:
|
||||
- Uses ROM offsets and sizes from imagelist.u.csv as ground truth for positioning
|
||||
- Uses image names from images.def for proper file naming
|
||||
- Maintains original ROM structure for byte-perfect matching
|
||||
- Pads combined.bin to 16-byte (0x10) boundary as required by ROM
|
||||
|
||||
## Key Files
|
||||
|
||||
- **`imagelist.u.csv`** - Ground truth for ROM offsets and sizes
|
||||
- Format: `offset,size,path,0,1`
|
||||
- Contains absolute ROM offsets (starting at 9403888 / 0x8F6D50)
|
||||
- 2699 entries total (2698 images + 1 dummy for padding calculation)
|
||||
|
||||
- **`assets/images.def`** - Ground truth for image names and properties
|
||||
- Format: `IMAGE(NAME, SIZE, HIT_SOUND, HIT_TYPE, F3, F4, F5, F6)`
|
||||
- Order in this file must match imagelist.u.csv order
|
||||
- SIZE field should match CSV but CSV is authoritative
|
||||
- 2698 IMAGE() entries
|
||||
|
||||
- **`assets/images/split/*.bin`** - Individual texture files
|
||||
- Named using IMAGE_ enum name (e.g., `COPYICON.bin`)
|
||||
- Must match names in images.def
|
||||
- Extracted from ROM using imagelist.u.csv offsets/sizes
|
||||
|
||||
- **`build/u/imagelist.csv`** - Build-time generated file
|
||||
- Auto-generated by syncing imagelist.u.csv with images.def
|
||||
- Combines ROM offsets/sizes with proper file names
|
||||
- Format: `offset,size,path,0,1`
|
||||
|
||||
## Scripts
|
||||
|
||||
### `scripts/make/sync_imagelist_with_def.py`
|
||||
|
||||
Primary script that synchronizes imagelist.u.csv with images.def.
|
||||
|
||||
**Features:**
|
||||
- Reads image names from images.def (in order)
|
||||
- Reads ROM offsets from imagelist.u.csv (for ROM images only)
|
||||
- Recalculates ALL sizes from actual .bin files on disk
|
||||
- Generates build imagelist with proper names, ROM offsets, and current sizes
|
||||
- Validates that entry counts match (warns if mismatch)
|
||||
- CSV offsets preserved for ROM layout, but sizes always reflect actual files
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
python3 scripts/make/sync_imagelist_with_def.py build/u/imagelist.csv
|
||||
```
|
||||
|
||||
**Output Format:**
|
||||
```
|
||||
9403888,1876,assets/images/split/COPYICON.bin,0,1
|
||||
9405764,362,assets/images/split/X.bin,0,1
|
||||
...
|
||||
```
|
||||
|
||||
### `scripts/make/combine_images_named.sh`
|
||||
|
||||
Combines individual .bin files into single combined.bin.
|
||||
|
||||
**Features:**
|
||||
- Reads imagelist.csv for correct ordering
|
||||
- Concatenates files in exact order
|
||||
- Pads output to 16-byte (0x10) boundary
|
||||
- Warns about missing files (skips them)
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
scripts/make/combine_images_named.sh build/u/imagelist.csv assets/images/combined
|
||||
```
|
||||
|
||||
**Padding:**
|
||||
The script automatically pads combined.bin to the next 16-byte boundary, which is required for proper ROM alignment.
|
||||
|
||||
## Makefile Integration
|
||||
|
||||
```makefile
|
||||
# Generate imagelist by syncing imagelist.u.csv (ROM offsets/sizes) with images.def (names)
|
||||
$(BUILD_DIR)/imagelist.csv: imagelist.u.csv assets/images.def
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
python3 scripts/make/sync_imagelist_with_def.py $@
|
||||
|
||||
assets/images/combined/combined.bin: $(BUILD_DIR)/imagelist.csv
|
||||
scripts/make/combine_images_named.sh $(BUILD_DIR)/imagelist.csv assets/images/combined
|
||||
```
|
||||
|
||||
**Dependency Chain:**
|
||||
1. `imagelist.u.csv` (ROM offsets/sizes) + `assets/images.def` (names)
|
||||
2. → `build/u/imagelist.csv` (synced build list)
|
||||
3. → `assets/images/combined/combined.bin` (final combined texture with 0x10 padding)
|
||||
|
||||
## Workflow
|
||||
|
||||
### Initial ROM Extraction
|
||||
|
||||
To extract images from the original ROM:
|
||||
|
||||
```bash
|
||||
# This will extract all images with proper names using ROM offsets
|
||||
./scripts/extract_baserom.u.sh
|
||||
```
|
||||
|
||||
The extraction script:
|
||||
1. Runs `sync_imagelist_with_def.py` to generate imagelist with proper names
|
||||
2. Extracts each image from ROM using the offset/size from imagelist.u.csv
|
||||
3. Creates named .bin files in `assets/images/split/`
|
||||
|
||||
### Adding a New Image
|
||||
|
||||
**New images can be added by simply updating `images.def`!** The CSV is only used for initial ROM extraction.
|
||||
|
||||
1. Add entry to `assets/images.def` (at end or desired position):
|
||||
```c
|
||||
IMAGE(MY_NEW_TEXTURE, 0x1000, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0)
|
||||
```
|
||||
- SIZE will be auto-detected from actual .bin file
|
||||
- Position in file determines position in combined binary
|
||||
|
||||
2. Create the .bin file:
|
||||
```bash
|
||||
cp my_texture.bin assets/images/split/MY_NEW_TEXTURE.bin
|
||||
```
|
||||
|
||||
3. Rebuild:
|
||||
```bash
|
||||
make assets/images/combined/combined.bin
|
||||
```
|
||||
|
||||
The build system will:
|
||||
- Use ROM offsets from `imagelist.u.csv` for original 2698 images
|
||||
- **Recalculate ALL sizes** from actual .bin files (not from CSV)
|
||||
- Calculate new offsets for additional images based on actual file sizes
|
||||
- Automatically detect the file size if the .bin exists
|
||||
- Use a default size (0x1000) if the .bin doesn't exist yet
|
||||
- CSV offsets are preserved (for ROM layout) but sizes are always current
|
||||
|
||||
**Adding images after ROM images:**
|
||||
- Original ROM images: Use data from imagelist.u.csv (positions 0-2697)
|
||||
- New images: Automatically positioned after ROM images with calculated offsets
|
||||
- Combined.bin will be larger, breaking ROM matching (expected for mods)
|
||||
|
||||
**Inserting images within ROM range:**
|
||||
To insert a new image within the original 2698 ROM images, you must update `imagelist.u.csv` to adjust offsets. Simply appending new images to the end is much easier.
|
||||
|
||||
### Updating an Existing Image (Same Size)
|
||||
|
||||
1. Replace the .bin file:
|
||||
```bash
|
||||
cp new_version.bin assets/images/split/COPYICON.bin
|
||||
```
|
||||
|
||||
2. Rebuild:
|
||||
```bash
|
||||
make assets/images/combined/combined.bin
|
||||
```
|
||||
|
||||
If the replacement has the **exact same size**, the ROM will remain matching.
|
||||
|
||||
### Updating an Existing Image (Different Size)
|
||||
|
||||
**Important:** Changing image sizes breaks ROM matching.
|
||||
|
||||
1. Update size in `imagelist.u.csv` for the image
|
||||
2. Update all subsequent image offsets in imagelist.u.csv
|
||||
3. Update SIZE in corresponding IMAGE() entry in images.def
|
||||
4. Replace the .bin file
|
||||
5. Rebuild
|
||||
|
||||
This is only for development/modding purposes.
|
||||
|
||||
### Checking for Issues
|
||||
|
||||
The sync_imagelist_with_def.py script will report:
|
||||
- Entry count mismatches between CSV and .def
|
||||
- Missing .bin files during combine (warns but continues)
|
||||
- Total combined size and padding
|
||||
|
||||
### Verifying ROM Matching
|
||||
|
||||
To verify the image system produces byte-perfect matching:
|
||||
|
||||
```bash
|
||||
# Extract image section from ROM
|
||||
dd if=baserom.u.z64 bs=1 skip=9403888 count=3075864 2>/dev/null | sha1sum
|
||||
|
||||
# Compare with built combined.bin (excluding padding)
|
||||
head -c 3075864 assets/images/combined/combined.bin | sha1sum
|
||||
```
|
||||
|
||||
Both should produce: `044fca472bf6ef6691fa02ff1b65ff474d86a9fa`
|
||||
|
||||
## Key Features
|
||||
|
||||
**Current System:**
|
||||
- Uses ROM offsets/sizes from imagelist.u.csv (preserves original ROM structure)
|
||||
- Uses proper names from images.def (better than image0.bin numbering)
|
||||
- Automatically syncs both sources during build
|
||||
- Pads combined.bin to 0x10 boundary as required by ROM
|
||||
- Maintains byte-perfect ROM matching
|
||||
- Named images (COPYICON.bin, DELICON.bin, etc.)
|
||||
|
||||
**Design Philosophy:**
|
||||
- `imagelist.u.csv` = ROM offset database (tracks baserom addresses, never modified during build)
|
||||
- `images.def` = Complete image database (names, properties, and all images including new ones)
|
||||
- Build system uses CSV offsets for ROM images, recalculates ALL sizes from actual files
|
||||
- CSV sizes are informational/historical only - actual file sizes always used
|
||||
- New images can be added to images.def without touching CSV
|
||||
- Extraction uses ROM data to create named .bin files
|
||||
- Modding-friendly: just add entries to images.def and provide .bin files
|
||||
- File modifications automatically reflected in build (sizes recalculated every time)
|
||||
|
||||
## C Code Integration
|
||||
|
||||
The `images.def` file is included in C code to generate:
|
||||
|
||||
1. **Image ID enum** (`src/bondconstants.h`):
|
||||
```c
|
||||
#define IMAGE(NAME, SZ, HS, HT, F3, F4, F5, F6) IMAGE_ ## NAME,
|
||||
typedef enum IMAGEIDS {
|
||||
#include <assets/images.def>
|
||||
IMAGEIDS_COUNT
|
||||
} IMAGEIDS;
|
||||
```
|
||||
|
||||
2. **Image size enum** (`src/bondconstants.h`):
|
||||
```c
|
||||
#define IMAGE(NAME, SZ, HS, HT, F3, F4, F5, F6) IMAGE_ ## NAME ## _SIZE = SZ,
|
||||
typedef enum IMGAGESIZES {
|
||||
#include <assets/images.def>
|
||||
IMGAGESIZES_COUNT
|
||||
} IMGAGESIZES;
|
||||
```
|
||||
|
||||
3. **Image properties table** (`src/game/image.c`):
|
||||
```c
|
||||
#define IMAGE(NAME, SZ, HS, HT, F3, F4, F5, F6) {HS, HT, SZ, F3, F4, F5, F6 },
|
||||
struct image_entry g_Textures[] = {
|
||||
#include <assets/images.def>
|
||||
{HIT_DEFAULT, HIT_DEFAULT,0xFFFF,0,0,0,0}
|
||||
};
|
||||
```
|
||||
|
||||
This is why the SIZE field must remain in images.def (it's used by C code), but it's now automatically maintained.
|
||||
|
||||
## Testing
|
||||
|
||||
To verify the system works:
|
||||
|
||||
```bash
|
||||
# Clean and rebuild
|
||||
make dataclean
|
||||
make assets/images/combined/combined.bin
|
||||
|
||||
# Check output
|
||||
ls -lh assets/images/combined/combined.bin
|
||||
head build/u/imagelist.csv
|
||||
tail build/u/imagelist.csv
|
||||
```
|
||||
|
||||
Expected output:
|
||||
- combined.bin should be 3075872 bytes (3075864 + 8 padding to 0x10 boundary)
|
||||
- imagelist.csv should show ROM offsets starting at 9403888
|
||||
- imagelist.csv should have 2698 entries with proper names
|
||||
- No errors about missing files (unless images are actually missing)
|
||||
|
||||
Example imagelist.csv entries:
|
||||
```
|
||||
9403888,1876,assets/images/split/COPYICON.bin,0,1
|
||||
9405764,362,assets/images/split/X.bin,0,1
|
||||
...
|
||||
12477898,513,assets/images/split/2696.bin,0,1
|
||||
12478411,1341,assets/images/split/2697.bin,0,1
|
||||
```
|
||||
|
||||
## File Sizes
|
||||
|
||||
- **ROM image section:** 3075864 bytes (0x8F6D50 to 0xBE5C18)
|
||||
- **Combined.bin (with padding):** 3075872 bytes (0x2EEF20)
|
||||
- **Padding:** 8 bytes to align to 0x10 boundary
|
||||
- **Number of images:** 2698
|
||||
- **CSV entries:** 2699 (2698 images + 1 dummy for offset calculation)
|
||||
Binary file not shown.
@@ -27,9 +27,14 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then
|
||||
fi
|
||||
|
||||
if [ "$DOALL" == "1" ] || [ $1 == 'images' ]; then
|
||||
# Generate imagelist if it doesn't exist
|
||||
if [ ! -f build/u/imagelist.csv ]; then
|
||||
mkdir -p build/u
|
||||
python3 scripts/make/generate_imagelist.py build/u/imagelist.csv
|
||||
fi
|
||||
while IFS=, read -r offset size name compressed extract
|
||||
do
|
||||
echo "removing $name"
|
||||
rm -f $name
|
||||
done < imagelist.u.csv
|
||||
done < build/u/imagelist.csv
|
||||
fi
|
||||
@@ -77,18 +77,24 @@ fi
|
||||
|
||||
if [ "$DOALL" == "1" ] || [ $1 == 'images' ]; then
|
||||
echo "Processing Images"
|
||||
# Generate imagelist with proper names from images.def and offsets from imagelist.u.csv
|
||||
echo "Syncing imagelist.u.csv with images.def names..."
|
||||
mkdir -p build/u
|
||||
python3 scripts/make/sync_imagelist_with_def.py build/u/imagelist.csv
|
||||
|
||||
if [ -x tools/extractor/extractor ]; then
|
||||
tools/extractor/extractor "$BASEROM" imagelist.u.csv
|
||||
tools/extractor/extractor "$BASEROM" build/u/imagelist.csv
|
||||
else
|
||||
while IFS=, read -r offset size name
|
||||
while IFS=, read -r offset size name rest
|
||||
do
|
||||
echo "Extracting $name, $size bytes..."
|
||||
echo "Extracting $name, $size bytes from offset $offset..."
|
||||
mkdir -p "$(dirname "$name")"
|
||||
dd bs=1 skip=$offset count=$size if="$BASEROM" of=$name status=none
|
||||
echo "Successfully Extracted $name"
|
||||
done < imagelist.u.csv
|
||||
done < build/u/imagelist.csv
|
||||
fi
|
||||
#imageslist.u.csv should follow pattern of:
|
||||
#offset,size,name,compressed,extract
|
||||
#imagelist.csv is generated by syncing imagelist.u.csv (ROM offsets/sizes) with images.def (names)
|
||||
#offset,size,name,compressed,extract format
|
||||
#formatting matters, no comments, no extra lines, unix line endings only
|
||||
#and always end with a newline
|
||||
fi
|
||||
|
||||
@@ -339,9 +339,9 @@
|
||||
8097024,512,assets/obseg/prop/Pcard_box1Z,1,1
|
||||
8097536,576,assets/obseg/prop/Pcard_box2Z,1,1
|
||||
8098112,496,assets/obseg/prop/Pcard_box3Z,1,1
|
||||
8098608,432,assets/obseg/prop/Pcard_box4Z,1,1
|
||||
8099040,512,assets/obseg/prop/Pcard_box5Z,1,1
|
||||
8099552,496,assets/obseg/prop/Pcard_box6Z,1,1
|
||||
8098608,432,assets/obseg/prop/Pcard_box4_lgZ,1,1
|
||||
8099040,512,assets/obseg/prop/Pcard_box5_lgZ,1,1
|
||||
8099552,496,assets/obseg/prop/Pcard_box6_lgZ,1,1
|
||||
8100048,3072,assets/obseg/prop/PcarescortZ,1,1
|
||||
8103120,3120,assets/obseg/prop/PcargolfZ,1,1
|
||||
8106240,4416,assets/obseg/prop/PcarweirdZ,1,1
|
||||
|
||||
|
+12
-12
@@ -96,24 +96,24 @@
|
||||
4424612,700,assets/music/Mfrigate_outro.bin,1,1
|
||||
4425312,69104,assets/obseg/bg/bg_sev_all_p.bin,0,0
|
||||
4494416,331584,assets/obseg/bg/bg_silo_all_p.bin,0,0
|
||||
4826000,139472,assets/obseg/bg/bg_stat_all_p.bin,0,1
|
||||
4826000,139472,assets/obseg/bg/bg_stat_all_p.bin,0,0
|
||||
4965472,189312,assets/obseg/bg/bg_arec_all_p.bin,0,0
|
||||
5154784,154352,assets/obseg/bg/bg_arch_all_p.bin,0,0
|
||||
5309136,132464,assets/obseg/bg/bg_tra_all_p.bin,0,1
|
||||
5441600,186816,assets/obseg/bg/bg_dest_all_p.bin,0,1
|
||||
5309136,132464,assets/obseg/bg/bg_tra_all_p.bin,0,0
|
||||
5441600,186816,assets/obseg/bg/bg_dest_all_p.bin,0,0
|
||||
5628416,109984,assets/obseg/bg/bg_sevb_all_p.bin,0,0
|
||||
5738400,137808,assets/obseg/bg/bg_azt_all_p.bin,0,0
|
||||
5876208,105520,assets/obseg/bg/bg_pete_all_p.bin,0,1
|
||||
5981728,182640,assets/obseg/bg/bg_depo_all_p.bin,0,1
|
||||
5876208,105520,assets/obseg/bg/bg_pete_all_p.bin,0,0
|
||||
5981728,182640,assets/obseg/bg/bg_depo_all_p.bin,0,0
|
||||
6164368,38416,assets/obseg/bg/bg_ref_all_p.bin,0,0
|
||||
6202784,87728,assets/obseg/bg/bg_cryp_all_p.bin,0,0
|
||||
6290512,197024,assets/obseg/bg/bg_dam_all_p.bin,0,1
|
||||
6487536,200576,assets/obseg/bg/bg_ark_all_p.bin,0,1
|
||||
6290512,197024,assets/obseg/bg/bg_dam_all_p.bin,0,0
|
||||
6487536,200576,assets/obseg/bg/bg_ark_all_p.bin,0,0
|
||||
6688112,41936,assets/obseg/bg/bg_run_all_p.bin,0,0
|
||||
6730048,116176,assets/obseg/bg/bg_sevx_all_p.bin,0,0
|
||||
6846224,86352,assets/obseg/bg/bg_jun_all_p.bin,0,1
|
||||
6846224,86352,assets/obseg/bg/bg_jun_all_p.bin,0,0
|
||||
6932576,18544,assets/obseg/bg/bg_dish_all_p.bin,0,0
|
||||
6951120,148720,assets/obseg/bg/bg_cave_all_p.bin,0,1
|
||||
6951120,148720,assets/obseg/bg/bg_cave_all_p.bin,0,0
|
||||
7099840,21808,assets/obseg/bg/bg_cat_all_p.bin,0,0
|
||||
7121648,66384,assets/obseg/bg/bg_crad_all_p.bin,0,0
|
||||
7188032,0,assets/obseg/bg/bg_imp_all_p.bin,0,1
|
||||
@@ -340,9 +340,9 @@
|
||||
8093664,512,assets/obseg/prop/Pcard_box1Z.bin,1,1
|
||||
8094176,576,assets/obseg/prop/Pcard_box2Z.bin,1,1
|
||||
8094752,496,assets/obseg/prop/Pcard_box3Z.bin,1,1
|
||||
8095248,432,assets/obseg/prop/Pcard_box4Z.bin,1,1
|
||||
8095680,512,assets/obseg/prop/Pcard_box5Z.bin,1,1
|
||||
8096192,496,assets/obseg/prop/Pcard_box6Z.bin,1,1
|
||||
8095248,432,assets/obseg/prop/Pcard_box4_lgZ.bin,1,1
|
||||
8095680,512,assets/obseg/prop/Pcard_box5_lgZ.bin,1,1
|
||||
8096192,496,assets/obseg/prop/Pcard_box6_lgZ.bin,1,1
|
||||
8096688,3072,assets/obseg/prop/PcarescortZ.bin,1,1
|
||||
8099760,3120,assets/obseg/prop/PcargolfZ.bin,1,1
|
||||
8102880,4416,assets/obseg/prop/PcarweirdZ.bin,1,1
|
||||
|
||||
|
@@ -208,11 +208,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/vi.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/vi.o
|
||||
70bc8f4b72a86921468bf8e8441dce51,.data,build/e/src/vi.o
|
||||
3890dff1c2a5913504508f6cf5c6760b,.rodata,build/e/src/vi.o
|
||||
a147ff55f19da8d2fed990b18129a648,.text,build/e/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/bg2.o
|
||||
a147ff55f19da8d2fed990b18129a648,.text,build/e/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/bgapply.o
|
||||
9240de9a33e878f40c644949d7de8654,.text,build/e/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bg.o
|
||||
@@ -248,11 +248,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/bondwalk2.o
|
||||
9d42a7113bd006426034da5a7aa868f0,.text,build/e/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/cheat_buttons.o
|
||||
a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/e/src/game/cheat_buttons.o
|
||||
c5b2b76e78b0ea1ec779b5a3066c8e21,.rodata,build/e/src/game/cheat_buttons.o
|
||||
9d42a7113bd006426034da5a7aa868f0,.text,build/e/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/cheat.o
|
||||
a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/e/src/game/cheat.o
|
||||
c5b2b76e78b0ea1ec779b5a3066c8e21,.rodata,build/e/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.text,build/e/src/game/chraidata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chraidata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chraidata.o
|
||||
@@ -268,21 +268,21 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/chr_b.o
|
||||
54c85123dad8457678af007c7c7d4026,.rodata,build/e/src/game/chr_b.o
|
||||
deeb43b73c956a7075b73fcb430590b3,.text,build/e/src/game/chrlv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chrlv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chrlv.o
|
||||
873553fec38e500fd0459ed32ba07065,.data,build/e/src/game/chrlv.o
|
||||
4b19fa1dae08ccfdd3edee708e229736,.rodata,build/e/src/game/chrlv.o
|
||||
deeb43b73c956a7075b73fcb430590b3,.text,build/e/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chraction.o
|
||||
873553fec38e500fd0459ed32ba07065,.data,build/e/src/game/chraction.o
|
||||
4b19fa1dae08ccfdd3edee708e229736,.rodata,build/e/src/game/chraction.o
|
||||
8660bb860ea4f7566c93fb67e5940ba5,.text,build/e/src/game/chr.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chr.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chr.o
|
||||
3d3dd3bc067d8f01ebfb0ee1d6c26367,.data,build/e/src/game/chr.o
|
||||
54fab24da3412524600790cb45098c86,.rodata,build/e/src/game/chr.o
|
||||
4a1d645498475cb76e7c98e9dfaa8749,.text,build/e/src/game/chrobjhandler.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chrobjhandler.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chrobjhandler.o
|
||||
d6999d725ff5515f392fcd371be980b7,.data,build/e/src/game/chrobjhandler.o
|
||||
5dbada9e88e9f509d67d7897c405a348,.rodata,build/e/src/game/chrobjhandler.o
|
||||
4a1d645498475cb76e7c98e9dfaa8749,.text,build/e/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/propobj.o
|
||||
d6999d725ff5515f392fcd371be980b7,.data,build/e/src/game/propobj.o
|
||||
5dbada9e88e9f509d67d7897c405a348,.rodata,build/e/src/game/propobj.o
|
||||
e51cbd1536b829abf8760560fe767afb,.text,build/e/src/game/chrObjRandom.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/chrObjRandom.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/chrObjRandom.o
|
||||
@@ -363,11 +363,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/file.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/file.o
|
||||
eeec347630f5896aa34d74a8014be746,.data,build/e/src/game/file.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/file.o
|
||||
143c261f10b0b00603716758a0f6b68b,.text,build/e/src/game/fog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/fog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/fog.o
|
||||
30190137abb989a8a57d7162e5034896,.data,build/e/src/game/fog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/e/src/game/fog.o
|
||||
143c261f10b0b00603716758a0f6b68b,.text,build/e/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bgfog.o
|
||||
30190137abb989a8a57d7162e5034896,.data,build/e/src/game/bgfog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/e/src/game/bgfog.o
|
||||
c86ebccb63ba06aadd701e4e406b1f6c,.text,build/e/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/front.o
|
||||
@@ -558,16 +558,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/loadobjectmodel.o
|
||||
758dd27724bf2441991958a52d84b620,.rodata,build/e/src/game/loadobjectmodel.o
|
||||
212326d3ed52096121ffd86d88081ced,.text,build/e/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/lvl.o
|
||||
cb33046d54a9f8ed61e67f71efd83590,.data,build/e/src/game/lvl.o
|
||||
b5a6b6bf5d76d70428f163f7ed1893c6,.rodata,build/e/src/game/lvl.o
|
||||
085bf29f55c534a4f8a303eb44f209c4,.text,build/e/src/game/lvl_text.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/lvl_text.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/lvl_text.o
|
||||
b608913d417cf5898f46d451d2ee7e36,.data,build/e/src/game/lvl_text.o
|
||||
81a4488f274aeb6eee9aad4234c415b1,.rodata,build/e/src/game/lvl_text.o
|
||||
212326d3ed52096121ffd86d88081ced,.text,build/e/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/lv.o
|
||||
cb33046d54a9f8ed61e67f71efd83590,.data,build/e/src/game/lv.o
|
||||
b5a6b6bf5d76d70428f163f7ed1893c6,.rodata,build/e/src/game/lv.o
|
||||
085bf29f55c534a4f8a303eb44f209c4,.text,build/e/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/language.o
|
||||
b608913d417cf5898f46d451d2ee7e36,.data,build/e/src/game/language.o
|
||||
81a4488f274aeb6eee9aad4234c415b1,.rodata,build/e/src/game/language.o
|
||||
623da8353735cbacda28be429ee6d8f5,.text,build/e/src/game/math_asinacos.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/math_asinacos.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/math_asinacos.o
|
||||
@@ -618,11 +618,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/mp_music.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/mp_music.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/e/src/game/mp_music.o
|
||||
da72f47e2d834ded22a4837a4ae77a74,.rodata,build/e/src/game/mp_music.o
|
||||
a2e63cd441c5064ed070edde79e47df1,.text,build/e/src/game/mp_watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/mp_watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/mp_watch.o
|
||||
73fd6c08f30314bfa70d1800c88309b3,.data,build/e/src/game/mp_watch.o
|
||||
0175f5015d4bbd3659819bea4577395c,.rodata,build/e/src/game/mp_watch.o
|
||||
a2e63cd441c5064ed070edde79e47df1,.text,build/e/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/mpmenu.o
|
||||
73fd6c08f30314bfa70d1800c88309b3,.data,build/e/src/game/mpmenu.o
|
||||
0175f5015d4bbd3659819bea4577395c,.rodata,build/e/src/game/mpmenu.o
|
||||
30f3bfd31d453c60e9ff7fff181ae693,.text,build/e/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/mp_weapon.o
|
||||
@@ -678,16 +678,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/othermodemicrocode.o
|
||||
68d0cd46011653e6d810f11c93f2c981,.rodata,build/e/src/game/othermodemicrocode.o
|
||||
bd682d63f7774b5fcb3ea109c3db46fa,.text,build/e/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/player_2.o
|
||||
365e0bdf973d4c3d274a7959b980bb4d,.rodata,build/e/src/game/player_2.o
|
||||
e280ac92f12cb566d43d47d9e1c00896,.text,build/e/src/game/player.o
|
||||
bd682d63f7774b5fcb3ea109c3db46fa,.text,build/e/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/player.o
|
||||
67676416313718e9b8eb723b754a3f00,.rodata,build/e/src/game/player.o
|
||||
365e0bdf973d4c3d274a7959b980bb4d,.rodata,build/e/src/game/player.o
|
||||
e280ac92f12cb566d43d47d9e1c00896,.text,build/e/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/sky.o
|
||||
67676416313718e9b8eb723b754a3f00,.rodata,build/e/src/game/sky.o
|
||||
e6962f02e5f239114544446d7948c05c,.text,build/e/src/game/playerstats_007770.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/playerstats_007770.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/playerstats_007770.o
|
||||
@@ -768,11 +768,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/cleanplayersound.o
|
||||
7e46aa3c9b889a57f29a750575d15d57,.text,build/e/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_01B0E0.o
|
||||
7e46aa3c9b889a57f29a750575d15d57,.text,build/e/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/rle.o
|
||||
e8b537a19dbef522cab0d218d9e0cd28,.text,build/e/src/game/unk_01B240.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01B240.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01B240.o
|
||||
@@ -788,16 +788,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bondhead.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bondhead.o
|
||||
1f41ef4e892dded7bd385975a10cc847,.data,build/e/src/game/bondhead.o
|
||||
99f9db7514cd824a3f06abb74d0c6f50,.rodata,build/e/src/game/bondhead.o
|
||||
eba52185e5d35cafd4ae341cc5808a3f,.text,build/e/src/game/unk_091080.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_091080.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_091080.o
|
||||
8b28117b30ba1eb01aece3db381370ae,.data,build/e/src/game/unk_091080.o
|
||||
79936c25e933da15f6d69407363f5b1b,.rodata,build/e/src/game/unk_091080.o
|
||||
9edfef9597ffff8486766db887b8a448,.text,build/e/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_092890.o
|
||||
eba52185e5d35cafd4ae341cc5808a3f,.text,build/e/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/debug_camera.o
|
||||
8b28117b30ba1eb01aece3db381370ae,.data,build/e/src/game/debug_camera.o
|
||||
79936c25e933da15f6d69407363f5b1b,.rodata,build/e/src/game/debug_camera.o
|
||||
9edfef9597ffff8486766db887b8a448,.text,build/e/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/line_tri_intersect.o
|
||||
efbf56789085058c727ff9d392ecdb23,.text,build/e/src/game/unk_092E50.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_092E50.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_092E50.o
|
||||
@@ -808,36 +808,36 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_09B7A0.o
|
||||
8729ba49ddeb23c78aea1637f63dc141,.text,build/e/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/explosions.o
|
||||
936be08f5889c63a526c321318fc9faf,.data,build/e/src/game/explosions.o
|
||||
b2fd1845c472814ec726c1af888609fc,.rodata,build/e/src/game/explosions.o
|
||||
23385f419194c856b05f3c42c2fa5f00,.text,build/e/src/game/unk_0A1DA0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0A1DA0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0A1DA0.o
|
||||
7449248de18da3f5a96c70e5dd0570e9,.data,build/e/src/game/unk_0A1DA0.o
|
||||
f24e06584948c22cf900812499c2ad10,.rodata,build/e/src/game/unk_0A1DA0.o
|
||||
1831614af3ecf8f4acf0243a62d0e460,.text,build/e/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_0B3200.o
|
||||
58beed8ba05634d9511690c0a476f146,.rodata,build/e/src/game/unk_0B3200.o
|
||||
ca3ac22c71d840741611612bb9ecc4f8,.text,build/e/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_0BC530.o
|
||||
ebaae1631d39621f19696b589ec26cc4,.text,build/e/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0C0A70.o
|
||||
dbe188a25ed7345150b6cb020396b89a,.data,build/e/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_0C0A70.o
|
||||
67dbacb3028281856d2e39a06130c582,.text,build/e/src/game/unk_0CC4C0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0CC4C0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0CC4C0.o
|
||||
3276b0ae12d43e34773e3e7340fd7eb7,.data,build/e/src/game/unk_0CC4C0.o
|
||||
649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/e/src/game/unk_0CC4C0.o
|
||||
8729ba49ddeb23c78aea1637f63dc141,.text,build/e/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/explosion.o
|
||||
936be08f5889c63a526c321318fc9faf,.data,build/e/src/game/explosion.o
|
||||
b2fd1845c472814ec726c1af888609fc,.rodata,build/e/src/game/explosion.o
|
||||
23385f419194c856b05f3c42c2fa5f00,.text,build/e/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/glass.o
|
||||
7449248de18da3f5a96c70e5dd0570e9,.data,build/e/src/game/glass.o
|
||||
f24e06584948c22cf900812499c2ad10,.rodata,build/e/src/game/glass.o
|
||||
1831614af3ecf8f4acf0243a62d0e460,.text,build/e/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/stanintersection.o
|
||||
58beed8ba05634d9511690c0a476f146,.rodata,build/e/src/game/stanintersection.o
|
||||
ca3ac22c71d840741611612bb9ecc4f8,.text,build/e/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/bgroomtrans.o
|
||||
ebaae1631d39621f19696b589ec26cc4,.text,build/e/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/frametiming.o
|
||||
dbe188a25ed7345150b6cb020396b89a,.data,build/e/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/frametiming.o
|
||||
67dbacb3028281856d2e39a06130c582,.text,build/e/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/tex.o
|
||||
3276b0ae12d43e34773e3e7340fd7eb7,.data,build/e/src/game/tex.o
|
||||
649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/e/src/game/tex.o
|
||||
16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/e/src/game/speedgraphrenderer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/speedgraphrenderer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/speedgraphrenderer.o
|
||||
@@ -848,11 +848,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/viewport.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/viewport.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/e/src/game/viewport.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/viewport.o
|
||||
21c3087f06453e75712485864f371d27,.text,build/e/src/game/watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/watch.o
|
||||
5761f5a56e201189104122ad0642a536,.data,build/e/src/game/watch.o
|
||||
d4fddb03ec50f64a2c4659b04a5296a6,.rodata,build/e/src/game/watch.o
|
||||
21c3087f06453e75712485864f371d27,.text,build/e/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/options.o
|
||||
5761f5a56e201189104122ad0642a536,.data,build/e/src/game/options.o
|
||||
d4fddb03ec50f64a2c4659b04a5296a6,.rodata,build/e/src/game/options.o
|
||||
5508daba9a3b7bb3e82a637ae59a43bb,.text,build/e/src/game/zlib.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/zlib.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/zlib.o
|
||||
|
||||
|
@@ -203,11 +203,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/vi.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/vi.o
|
||||
7fd04b9095026981c5f4433e9eb658c4,.data,build/j/src/vi.o
|
||||
3890dff1c2a5913504508f6cf5c6760b,.rodata,build/j/src/vi.o
|
||||
a147ff55f19da8d2fed990b18129a648,.text,build/j/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/bg2.o
|
||||
a147ff55f19da8d2fed990b18129a648,.text,build/j/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/bgapply.o
|
||||
0a3e9300d0406ae8036a97b5596f3f5c,.text,build/j/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bg.o
|
||||
@@ -243,11 +243,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/bondwalk2.o
|
||||
19082883303dd3426f3bacef41cf6698,.text,build/j/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/cheat_buttons.o
|
||||
a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/j/src/game/cheat_buttons.o
|
||||
c5b2b76e78b0ea1ec779b5a3066c8e21,.rodata,build/j/src/game/cheat_buttons.o
|
||||
19082883303dd3426f3bacef41cf6698,.text,build/j/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/cheat.o
|
||||
a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/j/src/game/cheat.o
|
||||
c5b2b76e78b0ea1ec779b5a3066c8e21,.rodata,build/j/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.text,build/j/src/game/chraidata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chraidata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chraidata.o
|
||||
@@ -263,21 +263,21 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/chr_b.o
|
||||
54c85123dad8457678af007c7c7d4026,.rodata,build/j/src/game/chr_b.o
|
||||
c47c3f7e7df5d676bb11821040a9c543,.text,build/j/src/game/chrlv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chrlv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chrlv.o
|
||||
873553fec38e500fd0459ed32ba07065,.data,build/j/src/game/chrlv.o
|
||||
2d8d6c08fb98cb9ead0a31d01d9b5311,.rodata,build/j/src/game/chrlv.o
|
||||
c47c3f7e7df5d676bb11821040a9c543,.text,build/j/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chraction.o
|
||||
873553fec38e500fd0459ed32ba07065,.data,build/j/src/game/chraction.o
|
||||
2d8d6c08fb98cb9ead0a31d01d9b5311,.rodata,build/j/src/game/chraction.o
|
||||
758116d9fa7204b955e8b2facc891d71,.text,build/j/src/game/chr.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chr.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chr.o
|
||||
3d3dd3bc067d8f01ebfb0ee1d6c26367,.data,build/j/src/game/chr.o
|
||||
75c67eb457d560a91d450778f4899607,.rodata,build/j/src/game/chr.o
|
||||
50c4cec1013ce8d71011702384db6080,.text,build/j/src/game/chrobjhandler.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chrobjhandler.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chrobjhandler.o
|
||||
d6999d725ff5515f392fcd371be980b7,.data,build/j/src/game/chrobjhandler.o
|
||||
671a2a10bd7cd065b476c2fb2f5cbe45,.rodata,build/j/src/game/chrobjhandler.o
|
||||
50c4cec1013ce8d71011702384db6080,.text,build/j/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/propobj.o
|
||||
d6999d725ff5515f392fcd371be980b7,.data,build/j/src/game/propobj.o
|
||||
671a2a10bd7cd065b476c2fb2f5cbe45,.rodata,build/j/src/game/propobj.o
|
||||
e51cbd1536b829abf8760560fe767afb,.text,build/j/src/game/chrObjRandom.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/chrObjRandom.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/chrObjRandom.o
|
||||
@@ -358,11 +358,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/file.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/file.o
|
||||
eeec347630f5896aa34d74a8014be746,.data,build/j/src/game/file.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/file.o
|
||||
6262372c48959b0d142d7bd9512818d7,.text,build/j/src/game/fog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/fog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/fog.o
|
||||
3334c40f44aa232d8e19c8e008dea37a,.data,build/j/src/game/fog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/j/src/game/fog.o
|
||||
6262372c48959b0d142d7bd9512818d7,.text,build/j/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bgfog.o
|
||||
3334c40f44aa232d8e19c8e008dea37a,.data,build/j/src/game/bgfog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/j/src/game/bgfog.o
|
||||
8679caf9ef3762d37f3912e639047c41,.text,build/j/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/front.o
|
||||
@@ -553,16 +553,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/loadobjectmodel.o
|
||||
758dd27724bf2441991958a52d84b620,.rodata,build/j/src/game/loadobjectmodel.o
|
||||
95c1b1d6cbe5110e3639adaed964f09e,.text,build/j/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/lvl.o
|
||||
cb33046d54a9f8ed61e67f71efd83590,.data,build/j/src/game/lvl.o
|
||||
b2ee8eedf397a9d2e590f7be30ec60e0,.rodata,build/j/src/game/lvl.o
|
||||
085bf29f55c534a4f8a303eb44f209c4,.text,build/j/src/game/lvl_text.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/lvl_text.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/lvl_text.o
|
||||
cacc291010ccd3e1a9a6ae3fe074ff64,.data,build/j/src/game/lvl_text.o
|
||||
02a3f90183d88a10b9038d5ebc53aa14,.rodata,build/j/src/game/lvl_text.o
|
||||
95c1b1d6cbe5110e3639adaed964f09e,.text,build/j/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/lv.o
|
||||
cb33046d54a9f8ed61e67f71efd83590,.data,build/j/src/game/lv.o
|
||||
b2ee8eedf397a9d2e590f7be30ec60e0,.rodata,build/j/src/game/lv.o
|
||||
085bf29f55c534a4f8a303eb44f209c4,.text,build/j/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/language.o
|
||||
cacc291010ccd3e1a9a6ae3fe074ff64,.data,build/j/src/game/language.o
|
||||
02a3f90183d88a10b9038d5ebc53aa14,.rodata,build/j/src/game/language.o
|
||||
623da8353735cbacda28be429ee6d8f5,.text,build/j/src/game/math_asinacos.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/math_asinacos.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/math_asinacos.o
|
||||
@@ -613,11 +613,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/mp_music.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/mp_music.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/j/src/game/mp_music.o
|
||||
da72f47e2d834ded22a4837a4ae77a74,.rodata,build/j/src/game/mp_music.o
|
||||
512745e538795f36db5a92662e3b2acf,.text,build/j/src/game/mp_watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/mp_watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/mp_watch.o
|
||||
73fd6c08f30314bfa70d1800c88309b3,.data,build/j/src/game/mp_watch.o
|
||||
0175f5015d4bbd3659819bea4577395c,.rodata,build/j/src/game/mp_watch.o
|
||||
512745e538795f36db5a92662e3b2acf,.text,build/j/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/mpmenu.o
|
||||
73fd6c08f30314bfa70d1800c88309b3,.data,build/j/src/game/mpmenu.o
|
||||
0175f5015d4bbd3659819bea4577395c,.rodata,build/j/src/game/mpmenu.o
|
||||
30f3bfd31d453c60e9ff7fff181ae693,.text,build/j/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/mp_weapon.o
|
||||
@@ -673,16 +673,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/othermodemicrocode.o
|
||||
68d0cd46011653e6d810f11c93f2c981,.rodata,build/j/src/game/othermodemicrocode.o
|
||||
fb3af80d534fc12b46ee409aaea86bfb,.text,build/j/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/player_2.o
|
||||
f874444d8bfd10718f57b02b19629fea,.rodata,build/j/src/game/player_2.o
|
||||
bc9076ade55250dfd5030b23ed331646,.text,build/j/src/game/player.o
|
||||
fb3af80d534fc12b46ee409aaea86bfb,.text,build/j/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/player.o
|
||||
02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/j/src/game/player.o
|
||||
f874444d8bfd10718f57b02b19629fea,.rodata,build/j/src/game/player.o
|
||||
bc9076ade55250dfd5030b23ed331646,.text,build/j/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/sky.o
|
||||
02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/j/src/game/sky.o
|
||||
e6962f02e5f239114544446d7948c05c,.text,build/j/src/game/playerstats_007770.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/playerstats_007770.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/playerstats_007770.o
|
||||
@@ -763,11 +763,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/cleanplayersound.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/cleanplayersound.o
|
||||
7e46aa3c9b889a57f29a750575d15d57,.text,build/j/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_01B0E0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_01B0E0.o
|
||||
7e46aa3c9b889a57f29a750575d15d57,.text,build/j/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/rle.o
|
||||
e8b537a19dbef522cab0d218d9e0cd28,.text,build/j/src/game/unk_01B240.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01B240.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01B240.o
|
||||
@@ -783,16 +783,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bondhead.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bondhead.o
|
||||
1f41ef4e892dded7bd385975a10cc847,.data,build/j/src/game/bondhead.o
|
||||
eb5394271972e0dc98385a7f324e03b8,.rodata,build/j/src/game/bondhead.o
|
||||
eba52185e5d35cafd4ae341cc5808a3f,.text,build/j/src/game/unk_091080.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_091080.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_091080.o
|
||||
8b28117b30ba1eb01aece3db381370ae,.data,build/j/src/game/unk_091080.o
|
||||
79936c25e933da15f6d69407363f5b1b,.rodata,build/j/src/game/unk_091080.o
|
||||
9edfef9597ffff8486766db887b8a448,.text,build/j/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_092890.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_092890.o
|
||||
eba52185e5d35cafd4ae341cc5808a3f,.text,build/j/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/debug_camera.o
|
||||
8b28117b30ba1eb01aece3db381370ae,.data,build/j/src/game/debug_camera.o
|
||||
79936c25e933da15f6d69407363f5b1b,.rodata,build/j/src/game/debug_camera.o
|
||||
9edfef9597ffff8486766db887b8a448,.text,build/j/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/line_tri_intersect.o
|
||||
8240067a2619e260e6153d7b9de421f7,.text,build/j/src/game/unk_092E50.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_092E50.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_092E50.o
|
||||
@@ -803,36 +803,36 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_09B7A0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_09B7A0.o
|
||||
8729ba49ddeb23c78aea1637f63dc141,.text,build/j/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/explosions.o
|
||||
fbda85eb8d9891c2efde432e0336946e,.data,build/j/src/game/explosions.o
|
||||
b2fd1845c472814ec726c1af888609fc,.rodata,build/j/src/game/explosions.o
|
||||
e31ee3e91af13777d6da868054f4fdc5,.text,build/j/src/game/unk_0A1DA0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0A1DA0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0A1DA0.o
|
||||
7449248de18da3f5a96c70e5dd0570e9,.data,build/j/src/game/unk_0A1DA0.o
|
||||
91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/j/src/game/unk_0A1DA0.o
|
||||
1831614af3ecf8f4acf0243a62d0e460,.text,build/j/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0B3200.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_0B3200.o
|
||||
58beed8ba05634d9511690c0a476f146,.rodata,build/j/src/game/unk_0B3200.o
|
||||
b8e29d8a733d631a70c9776164049ab8,.text,build/j/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_0BC530.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_0BC530.o
|
||||
e782a28e0f6b9282d7c31863df6a073b,.text,build/j/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0C0A70.o
|
||||
dbe188a25ed7345150b6cb020396b89a,.data,build/j/src/game/unk_0C0A70.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_0C0A70.o
|
||||
67dbacb3028281856d2e39a06130c582,.text,build/j/src/game/unk_0CC4C0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0CC4C0.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0CC4C0.o
|
||||
3276b0ae12d43e34773e3e7340fd7eb7,.data,build/j/src/game/unk_0CC4C0.o
|
||||
649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/j/src/game/unk_0CC4C0.o
|
||||
8729ba49ddeb23c78aea1637f63dc141,.text,build/j/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/explosion.o
|
||||
fbda85eb8d9891c2efde432e0336946e,.data,build/j/src/game/explosion.o
|
||||
b2fd1845c472814ec726c1af888609fc,.rodata,build/j/src/game/explosion.o
|
||||
e31ee3e91af13777d6da868054f4fdc5,.text,build/j/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/glass.o
|
||||
7449248de18da3f5a96c70e5dd0570e9,.data,build/j/src/game/glass.o
|
||||
91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/j/src/game/glass.o
|
||||
1831614af3ecf8f4acf0243a62d0e460,.text,build/j/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/stanintersection.o
|
||||
58beed8ba05634d9511690c0a476f146,.rodata,build/j/src/game/stanintersection.o
|
||||
b8e29d8a733d631a70c9776164049ab8,.text,build/j/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/bgroomtrans.o
|
||||
e782a28e0f6b9282d7c31863df6a073b,.text,build/j/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/frametiming.o
|
||||
dbe188a25ed7345150b6cb020396b89a,.data,build/j/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/frametiming.o
|
||||
67dbacb3028281856d2e39a06130c582,.text,build/j/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/tex.o
|
||||
3276b0ae12d43e34773e3e7340fd7eb7,.data,build/j/src/game/tex.o
|
||||
649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/j/src/game/tex.o
|
||||
16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/j/src/game/speedgraphrenderer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/speedgraphrenderer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/speedgraphrenderer.o
|
||||
@@ -843,11 +843,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/viewport.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/viewport.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/j/src/game/viewport.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/viewport.o
|
||||
61cfd6c76f4ebffa1dae51935814afbe,.text,build/j/src/game/watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/watch.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/watch.o
|
||||
5761f5a56e201189104122ad0642a536,.data,build/j/src/game/watch.o
|
||||
e23037ca08a07cb8c6e503d28d738542,.rodata,build/j/src/game/watch.o
|
||||
61cfd6c76f4ebffa1dae51935814afbe,.text,build/j/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/options.o
|
||||
5761f5a56e201189104122ad0642a536,.data,build/j/src/game/options.o
|
||||
e23037ca08a07cb8c6e503d28d738542,.rodata,build/j/src/game/options.o
|
||||
5508daba9a3b7bb3e82a637ae59a43bb,.text,build/j/src/game/zlib.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/zlib.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/zlib.o
|
||||
|
||||
|
@@ -208,7 +208,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/alloc_window_pieces.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/alloc_window_pieces.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/alloc_window_pieces.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/alloc_window_pieces.o
|
||||
68a7438bd0d19d37c608750626578bdb,.text,build/u/src/game/bg.o
|
||||
24a7f13aff1807605ab3c310053ea433,.text,build/u/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg.o
|
||||
bd127dd2e420266918d4e0fc29c3aec1,.data,build/u/src/game/bg.o
|
||||
@@ -218,6 +218,21 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg2.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bg2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bg2.o
|
||||
a147ff55f19da8d2fed990b18129a648,.text,build/u/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgapply.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bgapply.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bgapply.o
|
||||
6262372c48959b0d142d7bd9512818d7,.text,build/u/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgfog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgfog.o
|
||||
3334c40f44aa232d8e19c8e008dea37a,.data,build/u/src/game/bgfog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/u/src/game/bgfog.o
|
||||
b8e29d8a733d631a70c9776164049ab8,.text,build/u/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bgroomtrans.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bgroomtrans.o
|
||||
fe503f7412d15ae04b09165052627104,.text,build/u/src/game/blood_animation.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/blood_animation.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/blood_animation.o
|
||||
@@ -253,6 +268,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bondwalk2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bondwalk2.o
|
||||
071eefa7f0a5f685ebad34c2340204ad,.text,build/u/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cheat.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cheat.o
|
||||
a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/u/src/game/cheat.o
|
||||
3bb27c0cde12447e0dedd3ddd829314b,.rodata,build/u/src/game/cheat.o
|
||||
071eefa7f0a5f685ebad34c2340204ad,.text,build/u/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cheat_buttons.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cheat_buttons.o
|
||||
@@ -273,6 +293,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr_b.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/chr_b.o
|
||||
54c85123dad8457678af007c7c7d4026,.rodata,build/u/src/game/chr_b.o
|
||||
89198a9e01688e7a382abfd44782e2c7,.text,build/u/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chraction.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chraction.o
|
||||
873553fec38e500fd0459ed32ba07065,.data,build/u/src/game/chraction.o
|
||||
365e4726f2a4e1b80043f9fbedc3657b,.rodata,build/u/src/game/chraction.o
|
||||
b39b9ec278ea21267f13af8d74631e37,.text,build/u/src/game/chrai.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrai.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrai.o
|
||||
@@ -363,6 +388,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/deb_loadallmodels.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/deb_loadallmodels.o
|
||||
01cd947cf3226f6d98ed4471ef102c8e,.data,build/u/src/game/deb_loadallmodels.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/deb_loadallmodels.o
|
||||
dd242b32c8416fd08783a347d95b57b5,.text,build/u/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debug_camera.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debug_camera.o
|
||||
8b28117b30ba1eb01aece3db381370ae,.data,build/u/src/game/debug_camera.o
|
||||
79936c25e933da15f6d69407363f5b1b,.rodata,build/u/src/game/debug_camera.o
|
||||
2d5153c05c3882aee1d16ece9db88570,.text,build/u/src/game/debugmenu_08FE00.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debugmenu_08FE00.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debugmenu_08FE00.o
|
||||
@@ -388,6 +418,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ejectedcartridges.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ejectedcartridges.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/ejectedcartridges.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/ejectedcartridges.o
|
||||
611b9b73637f8add35cf24f49abd88f7,.text,build/u/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosion.o
|
||||
fbda85eb8d9891c2efde432e0336946e,.data,build/u/src/game/explosion.o
|
||||
9b1db0ae34ae1901b30b1cb9163c1f66,.rodata,build/u/src/game/explosion.o
|
||||
611b9b73637f8add35cf24f49abd88f7,.text,build/u/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosions.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosions.o
|
||||
@@ -408,6 +443,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/fog.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/fog.o
|
||||
3334c40f44aa232d8e19c8e008dea37a,.data,build/u/src/game/fog.o
|
||||
63a41286331e03e597726bae6bd57d73,.rodata,build/u/src/game/fog.o
|
||||
5f0314fc8dd209051e24975482e3b763,.text,build/u/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/frametiming.o
|
||||
0245cdd8c5a57e8097d2a659cfe4e5a9,.data,build/u/src/game/frametiming.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/frametiming.o
|
||||
ffa8cb5c91f127dcc58c8ed8239b9bd9,.text,build/u/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/front.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/front.o
|
||||
@@ -418,6 +458,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/game_debug.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/game_debug.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/game_debug.o
|
||||
9b7ce57fe7617597f32ff056b43202c4,.rodata,build/u/src/game/game_debug.o
|
||||
b41030c1904e701bcdeab30ed5c5148d,.text,build/u/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/glass.o
|
||||
7449248de18da3f5a96c70e5dd0570e9,.data,build/u/src/game/glass.o
|
||||
91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/u/src/game/glass.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata.o
|
||||
@@ -428,7 +473,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata2.o
|
||||
5b486cfa5049803b6e6480dc1db84c6c,.data,build/u/src/game/gobjdata2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata2.o
|
||||
f2e086150b6210e1be45fca167f5954c,.text,build/u/src/game/gun.o
|
||||
328b98f1fdabe1c489d36f7c34de979b,.text,build/u/src/game/gun.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gun.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gun.o
|
||||
0289c36e967840bba7f6fbd026dda001,.data,build/u/src/game/gun.o
|
||||
@@ -573,16 +618,31 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initweaponanigroups.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initweaponanigroups.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initweaponanigroups.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initweaponanigroups.o
|
||||
08a5bb8287043d4e671605f88cc077c1,.text,build/u/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/language.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/language.o
|
||||
b608913d417cf5898f46d451d2ee7e36,.data,build/u/src/game/language.o
|
||||
02a3f90183d88a10b9038d5ebc53aa14,.rodata,build/u/src/game/language.o
|
||||
82621e294a3ff34195d75bbcbb2a746f,.text,build/u/src/game/lightfixture.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lightfixture.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lightfixture.o
|
||||
70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/game/lightfixture.o
|
||||
5feb1f52242be6ca00278aea97630cc2,.rodata,build/u/src/game/lightfixture.o
|
||||
9edfef9597ffff8486766db887b8a448,.text,build/u/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/line_tri_intersect.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/line_tri_intersect.o
|
||||
f93afdcea6b3baecd3e8bd0c79b93e12,.text,build/u/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/loadobjectmodel.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/loadobjectmodel.o
|
||||
758dd27724bf2441991958a52d84b620,.rodata,build/u/src/game/loadobjectmodel.o
|
||||
43fa0dd4d48b7f01f50dd922d167d229,.text,build/u/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lv.o
|
||||
778b187770df6551fc254a75c066d47a,.data,build/u/src/game/lv.o
|
||||
43ee36987e8d9804ad1f15d27b6e0171,.rodata,build/u/src/game/lv.o
|
||||
43fa0dd4d48b7f01f50dd922d167d229,.text,build/u/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lvl.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lvl.o
|
||||
@@ -638,7 +698,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath_misc.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath_misc.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/matrixmath_misc.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/matrixmath_misc.o
|
||||
41136aa1b2bcb087addaabc3eb4e3048,.text,build/u/src/game/model.o
|
||||
a252a9d335a8471918264868c8ff61b0,.text,build/u/src/game/model.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/model.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/model.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/model.o
|
||||
@@ -658,6 +718,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_weapon.o
|
||||
04cfbf991d3d23ca47eaaca1adc4f01f,.data,build/u/src/game/mp_weapon.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/mp_weapon.o
|
||||
99b616ded0340b1539d2f41654a92d1f,.text,build/u/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mpmenu.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mpmenu.o
|
||||
73fd6c08f30314bfa70d1800c88309b3,.data,build/u/src/game/mpmenu.o
|
||||
0175f5015d4bbd3659819bea4577395c,.rodata,build/u/src/game/mpmenu.o
|
||||
ef12b800e133e094a649de9ca4466108,.text,build/u/src/game/music_0D2720.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/music_0D2720.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/music_0D2720.o
|
||||
@@ -668,7 +733,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/null_007970.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/null_007970.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/null_007970.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/null_007970.o
|
||||
cba5efed93aaade1e6ee6bcd720e8492,.text,build/u/src/game/ob.o
|
||||
81b0883c0454e8dd88e9b265bda740c1,.text,build/u/src/game/ob.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ob.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ob.o
|
||||
c2028385babc92baad8fcbe57e4a7882,.data,build/u/src/game/ob.o
|
||||
@@ -698,6 +763,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status2.o
|
||||
4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/objective_status2.o
|
||||
66c72a9f52883a35821c069094d98950,.rodata,build/u/src/game/objective_status2.o
|
||||
e5efaca4f99364758f1e20aebf293455,.text,build/u/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/options.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/options.o
|
||||
5761f5a56e201189104122ad0642a536,.data,build/u/src/game/options.o
|
||||
d775c8a4c52b2462c520e410957f1280,.rodata,build/u/src/game/options.o
|
||||
4383ca9144751d6b8bed63a299117578,.text,build/u/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/othermodemicrocode.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/othermodemicrocode.o
|
||||
@@ -708,11 +778,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/padhalllv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/padhalllv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/padhalllv.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/padhalllv.o
|
||||
8a06ff554d3f774a1d5c3efec9c18d15,.text,build/u/src/game/player.o
|
||||
c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player.o
|
||||
02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/u/src/game/player.o
|
||||
f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player.o
|
||||
c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player_2.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player_2.o
|
||||
@@ -733,6 +803,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/prop.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/prop.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/prop.o
|
||||
4e1b4af471bd96e1e321f0e73fea029a,.rodata,build/u/src/game/prop.o
|
||||
c4dc3f426c18a44d32504f15465a2a8d,.text,build/u/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/propobj.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/propobj.o
|
||||
d6999d725ff5515f392fcd371be980b7,.data,build/u/src/game/propobj.o
|
||||
1520b85ea7306a448406364f3c51fe95,.rodata,build/u/src/game/propobj.o
|
||||
bd0039e95325cb3f211f8b04cdfaa9fa,.text,build/u/src/game/quaternion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/quaternion.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/quaternion.o
|
||||
@@ -748,6 +823,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ramromreplay.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ramromreplay.o
|
||||
cb415e05b85be31494ae1bc233beb58b,.data,build/u/src/game/ramromreplay.o
|
||||
c90adc466041f6e464269a31165d0499,.rodata,build/u/src/game/ramromreplay.o
|
||||
7e46aa3c9b889a57f29a750575d15d57,.text,build/u/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/rle.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/room_model_buffer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/room_model_buffer.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/room_model_buffer.o
|
||||
@@ -763,7 +843,12 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/setguscale.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/setguscale.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/setguscale.o
|
||||
d509d7dba6c1a819411b224d38e40828,.rodata,build/u/src/game/setguscale.o
|
||||
4d4363058cd9f96f42165107f7bd3371,.text,build/u/src/game/spectrum.o
|
||||
8a06ff554d3f774a1d5c3efec9c18d15,.text,build/u/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/sky.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/sky.o
|
||||
02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/u/src/game/sky.o
|
||||
e7c619938dcc1b4d6d953528540da8a7,.text,build/u/src/game/spectrum.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/spectrum.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/spectrum.o
|
||||
2ce81ebe3ddf133df9e5efc28f0e99ad,.data,build/u/src/game/spectrum.o
|
||||
@@ -778,7 +863,17 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/stan.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/stan.o
|
||||
3b98c643ab1cb4391d44340cbc01d0e6,.data,build/u/src/game/stan.o
|
||||
11748dd8e62697e481a5479b151d491e,.rodata,build/u/src/game/stan.o
|
||||
08713b0f072e700371ba7dcfd5897eaf,.text,build/u/src/game/textrelated.o
|
||||
d5263986657df7aac13742312709305d,.text,build/u/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/stanintersection.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/stanintersection.o
|
||||
58beed8ba05634d9511690c0a476f146,.rodata,build/u/src/game/stanintersection.o
|
||||
67dbacb3028281856d2e39a06130c582,.text,build/u/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/tex.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/tex.o
|
||||
3276b0ae12d43e34773e3e7340fd7eb7,.data,build/u/src/game/tex.o
|
||||
649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/u/src/game/tex.o
|
||||
72e03b6f6d784f9cbafa221c2bc74eb3,.text,build/u/src/game/textrelated.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/textrelated.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/textrelated.o
|
||||
5b2be5a4a56e5d047ddd92f749836d87,.data,build/u/src/game/textrelated.o
|
||||
@@ -992,6 +1087,15 @@ e3270c14ece27e5f15f0bf54e20f000b,.data,build/u/assets/obseg/setup/Ump_setupcradZ
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupcrypZ.o
|
||||
baf4a21c4c3a50dfc68dd4bb79e1a4e4,.data,build/u/assets/obseg/setup/Ump_setupcrypZ.o
|
||||
25568bb18b99a852d18fba045213caa4,.rodata,build/u/assets/obseg/setup/Ump_setupcrypZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdamZ.o
|
||||
5d8b43300e7b701a21629ccee455aa44,.data,build/u/assets/obseg/setup/Ump_setupdamZ.o
|
||||
f351df409b29d7b80f07b28b2b39c19d,.rodata,build/u/assets/obseg/setup/Ump_setupdamZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdepotZ.o
|
||||
d371b61f3ef254edc288c388a8dc6898,.data,build/u/assets/obseg/setup/Ump_setupdepotZ.o
|
||||
bce3c8f75bf884451c11c5992d3d76bf,.rodata,build/u/assets/obseg/setup/Ump_setupdepotZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdestZ.o
|
||||
ac0f775f3312808d3f479dc5c8542142,.data,build/u/assets/obseg/setup/Ump_setupdestZ.o
|
||||
6b1258f76736d8ab71a948030a16e689,.rodata,build/u/assets/obseg/setup/Ump_setupdestZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdishZ.o
|
||||
52738bf0cf907b44c5c304bdb71b5635,.data,build/u/assets/obseg/setup/Ump_setupdishZ.o
|
||||
db0620822dd4f53ca244a0997bd92f9d,.rodata,build/u/assets/obseg/setup/Ump_setupdishZ.o
|
||||
@@ -1004,6 +1108,9 @@ d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupoatZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuprefZ.o
|
||||
a192e4098a04675dc0406394441c5596,.data,build/u/assets/obseg/setup/Ump_setuprefZ.o
|
||||
acc9011f897a5b3b45cad7c1ea4b4715,.rodata,build/u/assets/obseg/setup/Ump_setuprefZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuprunZ.o
|
||||
b14e999c1634c7fd7cf5f3b2f3a56513,.data,build/u/assets/obseg/setup/Ump_setuprunZ.o
|
||||
d8dd467ddada77c0a04028e782a49e22,.rodata,build/u/assets/obseg/setup/Ump_setuprunZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupsevbZ.o
|
||||
fa7a848eb5dac0a60671450aa46df0aa,.data,build/u/assets/obseg/setup/Ump_setupsevbZ.o
|
||||
44b3c131f9627281b5d1e3d72ddd50d2,.rodata,build/u/assets/obseg/setup/Ump_setupsevbZ.o
|
||||
@@ -1145,6 +1252,9 @@ d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sevb_all_
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o
|
||||
42c5b0307eec8549956b0a75397ade93,.data,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o
|
||||
570a958a10b9e6962b0d55449f62ea3f,.data,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o
|
||||
f0a204c9b33851d045971d5b33d0b9cd,.data,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o
|
||||
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o
|
||||
|
||||
|
Executable
+192
@@ -0,0 +1,192 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Character Model Parser for GoldenEye 007
|
||||
|
||||
Parses N64 binary character files (CnameZ.bin) and generates C source code (Model.c).
|
||||
|
||||
Binary Format (same as props):
|
||||
Offset 0x00: Switches array (if numSwitches > 0)
|
||||
Offset 0x??: Texture table (ModelFileTextures[numtextures])
|
||||
Offset 0x??: RootNode and complete ModelNode tree with embedded data
|
||||
|
||||
All pointers in the binary are stored as offsets from base address 0x05000000.
|
||||
|
||||
Usage:
|
||||
python3 scripts/generate_chr_c.py [--dry-run] [--force] [--cleanup] [chr ...]
|
||||
"""
|
||||
|
||||
import struct
|
||||
import sys
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Tuple, Optional, Any
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
# Add parent directory to path and import prop parser
|
||||
import importlib.util
|
||||
spec = importlib.util.spec_from_file_location("generate_prop_model_c", Path(__file__).parent / "generate_prop_model_c.py")
|
||||
prop_module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(prop_module)
|
||||
|
||||
# Import needed functions and classes from prop parser
|
||||
BinaryModelParser = prop_module.BinaryModelParser
|
||||
load_image_map = prop_module.load_image_map
|
||||
generate_model_c = prop_module.generate_model_c
|
||||
|
||||
def generate_chr_c(chr_name: str, parsed_model: Dict, metadata: Dict, image_map: Dict, binary_data: bytes) -> str:
|
||||
"""Generate C source code for a character model - uses prop generator with chr-specific header"""
|
||||
|
||||
# Use the prop model generator but replace the header include
|
||||
c_code = generate_model_c(chr_name, parsed_model, metadata, image_map, binary_data)
|
||||
|
||||
# Replace prop-specific header include with chr-specific one
|
||||
c_code = c_code.replace(
|
||||
f'#include "{chr_name}/ModelFileHeader.inc.c"',
|
||||
f'#include "{chr_name}/modelFileHeader.inc.c"'
|
||||
)
|
||||
|
||||
# Update the source file reference
|
||||
c_code = c_code.replace(
|
||||
f"// Source: P{chr_name}Z.bin",
|
||||
f"// Source: C{chr_name}Z.bin"
|
||||
)
|
||||
|
||||
return c_code
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="Generate Model.c from binary chr files")
|
||||
parser.add_argument('chrs', nargs='*', help="Character names to process (default: all)")
|
||||
parser.add_argument('--dry-run', action='store_true', help="Show what would be done")
|
||||
parser.add_argument('--force', action='store_true', help="Overwrite existing Model.c files")
|
||||
parser.add_argument('--cleanup', action='store_true', help="Delete source CnameZ.bin files after successful conversion")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Load image mapping
|
||||
image_map = load_image_map()
|
||||
print(f"Loaded {len(image_map)} image definitions")
|
||||
|
||||
# Find all chrs
|
||||
chr_dir = Path("assets/obseg/chr")
|
||||
all_chrs = []
|
||||
chr_name_map = {} # lowercase -> actual case
|
||||
|
||||
for bin_file in chr_dir.glob("C*Z.bin"):
|
||||
# Extract name between C and Z, preserve original case
|
||||
actual_name = bin_file.stem[1:-1]
|
||||
lower_name = actual_name.lower()
|
||||
all_chrs.append(lower_name)
|
||||
chr_name_map[lower_name] = actual_name
|
||||
|
||||
chrs_to_process = args.chrs if args.chrs else all_chrs
|
||||
|
||||
stats = {'processed': 0, 'skipped': 0, 'errors': 0}
|
||||
|
||||
for chr_name_input in sorted(chrs_to_process):
|
||||
chr_name_lower = chr_name_input.lower()
|
||||
|
||||
# Get the actual case from the binary file
|
||||
if chr_name_lower not in chr_name_map:
|
||||
print(f" ✗ {chr_name_input}: Binary file not found")
|
||||
stats['errors'] += 1
|
||||
continue
|
||||
|
||||
actual_chr_name = chr_name_map[chr_name_lower]
|
||||
bin_file = chr_dir / f"C{actual_chr_name}Z.bin"
|
||||
|
||||
# Find the actual directory name (case-insensitive search)
|
||||
chr_subdirs = list(chr_dir.glob(f"{actual_chr_name}"))
|
||||
if not chr_subdirs:
|
||||
# Try case-insensitive
|
||||
chr_subdirs = [d for d in chr_dir.iterdir()
|
||||
if d.is_dir() and d.name.lower() == chr_name_lower]
|
||||
|
||||
if not chr_subdirs:
|
||||
print(f" ⊘ {actual_chr_name}: Missing metadata directory")
|
||||
stats['skipped'] += 1
|
||||
continue
|
||||
|
||||
actual_dir_name = chr_subdirs[0].name
|
||||
|
||||
# Parse metadata using the actual directory name
|
||||
# Note: chr uses different metadata file names
|
||||
metadata_dir = chr_dir / actual_dir_name
|
||||
metadata = {}
|
||||
|
||||
# Check for chr-specific metadata files
|
||||
header_file = metadata_dir / "modelFileHeader.inc.c"
|
||||
if header_file.exists():
|
||||
with open(header_file, 'r') as f:
|
||||
header_content = f.read()
|
||||
metadata['header'] = header_content
|
||||
|
||||
# Parse MODELFILEHEADER macro to extract num_switches and num_textures
|
||||
# Format: MODELFILEHEADER(name, rootnode, skeleton, switches, numswitches, nummatrices, boundingradius, numrecords, numtextures)
|
||||
match = re.search(r'MODELFILEHEADER\([^,]+,\s*[^,]+,\s*[^,]+,\s*[^,]+,\s*(\d+|0x[0-9A-Fa-f]+),\s*[^,]+,\s*[^,]+,\s*[^,]+,\s*(\d+|0x[0-9A-Fa-f]+)\)', header_content)
|
||||
if match:
|
||||
num_switches = int(match.group(1), 0) # 0 base auto-detects hex/decimal
|
||||
num_textures = int(match.group(2), 0)
|
||||
metadata['num_switches'] = num_switches
|
||||
metadata['num_textures'] = num_textures
|
||||
|
||||
if not metadata or 'num_switches' not in metadata:
|
||||
print(f" ⊘ {actual_chr_name}: Missing or invalid metadata files")
|
||||
stats['skipped'] += 1
|
||||
continue
|
||||
|
||||
output_file = chr_dir / actual_dir_name / "Model.c"
|
||||
if output_file.exists() and not args.force:
|
||||
print(f" ⊘ {actual_chr_name}: Model.c already exists (use --force)")
|
||||
stats['skipped'] += 1
|
||||
continue
|
||||
|
||||
try:
|
||||
# Parse binary (same format as props)
|
||||
with open(bin_file, 'rb') as f:
|
||||
binary_data = f.read()
|
||||
|
||||
parser = BinaryModelParser(binary_data, metadata, image_map)
|
||||
parsed_model = parser.parse()
|
||||
|
||||
# Generate C code
|
||||
c_code = generate_chr_c(actual_dir_name, parsed_model, metadata, image_map, binary_data)
|
||||
|
||||
if args.dry_run:
|
||||
if len(parsed_model['switches']) > 0:
|
||||
print(f" ✓ {actual_chr_name}: Would generate Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)")
|
||||
else:
|
||||
print(f" ✓ {actual_chr_name}: Would generate Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures)")
|
||||
else:
|
||||
output_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(c_code)
|
||||
|
||||
# Report generation
|
||||
if len(parsed_model['switches']) > 0:
|
||||
print(f" ✓ {actual_chr_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)")
|
||||
else:
|
||||
print(f" ✓ {actual_chr_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures)")
|
||||
|
||||
# Clean up source binary file after successful conversion
|
||||
if args.cleanup and bin_file.exists():
|
||||
bin_file.unlink()
|
||||
print(f" Cleaned up {bin_file.name}")
|
||||
|
||||
stats['processed'] += 1
|
||||
|
||||
except Exception as e:
|
||||
print(f" ✗ {actual_chr_name}: Error - {e}")
|
||||
stats['errors'] += 1
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
print(f"\n=== Summary ===")
|
||||
print(f"Processed: {stats['processed']}")
|
||||
print(f"Skipped: {stats['skipped']}")
|
||||
print(f"Errors: {stats['errors']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Executable
+297
@@ -0,0 +1,297 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Gun Model Parser for GoldenEye 007
|
||||
|
||||
Parses N64 binary gun files (GnameZ.bin) and generates C source code (Model.c).
|
||||
|
||||
Binary Format (same as props):
|
||||
Offset 0x00: Switches array (if numSwitches > 0)
|
||||
Offset 0x??: Texture table (ModelFileTextures[numtextures])
|
||||
Offset 0x??: RootNode and complete ModelNode tree with embedded data
|
||||
|
||||
All pointers in the binary are stored as offsets from base address 0x05000000.
|
||||
|
||||
Usage:
|
||||
python3 scripts/generate_gun_c.py [--dry-run] [--force] [--cleanup] [gun ...]
|
||||
"""
|
||||
|
||||
import struct
|
||||
import sys
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Tuple, Optional, Any
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
# Add parent directory to path and import prop parser
|
||||
import importlib.util
|
||||
spec = importlib.util.spec_from_file_location("generate_prop_model_c", Path(__file__).parent / "generate_prop_model_c.py")
|
||||
prop_module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(prop_module)
|
||||
|
||||
# Import needed functions and classes from prop parser
|
||||
BinaryModelParser = prop_module.BinaryModelParser
|
||||
load_image_map = prop_module.load_image_map
|
||||
generate_model_c = prop_module.generate_model_c
|
||||
|
||||
def generate_gun_c(gun_name: str, parsed_model: Dict, metadata: Dict, image_map: Dict, binary_data: bytes) -> str:
|
||||
"""Generate C source code for a gun model - uses prop generator with gun-specific header"""
|
||||
|
||||
# Use the prop model generator but replace the header include
|
||||
c_code = generate_model_c(gun_name, parsed_model, metadata, image_map, binary_data)
|
||||
|
||||
# Replace prop-specific header include with gun-specific one
|
||||
c_code = c_code.replace(
|
||||
f'#include "{gun_name}/ModelFileHeader.inc.c"',
|
||||
f'#include "{gun_name}/ModelFileHeader.inc.c"' # Gun uses same case as prop
|
||||
)
|
||||
|
||||
# Update the source file reference
|
||||
c_code = c_code.replace(
|
||||
f"// Source: P{gun_name}Z.bin",
|
||||
f"// Source: G{gun_name}Z.bin"
|
||||
)
|
||||
|
||||
return c_code
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="Generate Model.c from binary gun files")
|
||||
parser.add_argument('guns', nargs='*', help="Gun names to process (default: all)")
|
||||
parser.add_argument('--dry-run', action='store_true', help="Show what would be done")
|
||||
parser.add_argument('--force', action='store_true', help="Overwrite existing Model.c files")
|
||||
parser.add_argument('--cleanup', action='store_true', help="Delete source GnameZ.bin files after successful conversion")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Load image mapping
|
||||
image_map = load_image_map()
|
||||
print(f"Loaded {len(image_map)} image definitions")
|
||||
|
||||
# Find all guns
|
||||
gun_dir = Path("assets/obseg/gun")
|
||||
all_guns = []
|
||||
gun_name_map = {} # lowercase -> actual case
|
||||
|
||||
for bin_file in gun_dir.glob("G*Z.bin"):
|
||||
# Extract name between G and Z, preserve original case
|
||||
actual_name = bin_file.stem[1:-1]
|
||||
lower_name = actual_name.lower()
|
||||
all_guns.append(lower_name)
|
||||
gun_name_map[lower_name] = actual_name
|
||||
|
||||
guns_to_process = args.guns if args.guns else all_guns
|
||||
|
||||
stats = {'processed': 0, 'skipped': 0, 'errors': 0}
|
||||
|
||||
for gun_name_input in sorted(guns_to_process):
|
||||
gun_name_lower = gun_name_input.lower()
|
||||
|
||||
# Get the actual case from the binary file
|
||||
if gun_name_lower not in gun_name_map:
|
||||
print(f" ✗ {gun_name_input}: Binary file not found")
|
||||
stats['errors'] += 1
|
||||
continue
|
||||
|
||||
actual_gun_name = gun_name_map[gun_name_lower]
|
||||
bin_file = gun_dir / f"G{actual_gun_name}Z.bin"
|
||||
|
||||
# Find the actual directory name (case-insensitive search)
|
||||
gun_subdirs = list(gun_dir.glob(f"{actual_gun_name}"))
|
||||
if not gun_subdirs:
|
||||
# Try case-insensitive
|
||||
gun_subdirs = [d for d in gun_dir.iterdir()
|
||||
if d.is_dir() and d.name.lower() == gun_name_lower]
|
||||
|
||||
if not gun_subdirs:
|
||||
print(f" ⊘ {actual_gun_name}: Missing metadata directory")
|
||||
stats['skipped'] += 1
|
||||
continue
|
||||
|
||||
actual_dir_name = gun_subdirs[0].name
|
||||
|
||||
# Parse metadata using the actual directory name
|
||||
metadata_dir = gun_dir / actual_dir_name
|
||||
metadata = {}
|
||||
|
||||
# Check for gun-specific metadata files (same format as prop)
|
||||
header_file = metadata_dir / "ModelFileHeader.inc.c"
|
||||
estimated_metadata = False
|
||||
|
||||
if header_file.exists():
|
||||
with open(header_file, 'r') as f:
|
||||
header_content = f.read()
|
||||
metadata['header'] = header_content
|
||||
|
||||
# Parse MODELFILEHEADER macro to extract metadata
|
||||
# Format: MODELFILEHEADER(name, rootnode, skeleton, switches, numswitches, nummatrices, boundingradius, numrecords, numtextures)
|
||||
match = re.search(r'MODELFILEHEADER\([^,]+,\s*([^,]+),\s*[^,]+,\s*([^,]+),\s*(\d+|0x[0-9A-Fa-f]+),\s*[^,]+,\s*([^,]+),\s*[^,]+,\s*(\d+|0x[0-9A-Fa-f]+)\)', header_content)
|
||||
if match:
|
||||
rootnode = match.group(1).strip()
|
||||
switches_ptr = match.group(2).strip()
|
||||
num_switches = int(match.group(3), 0) # 0 base auto-detects hex/decimal
|
||||
bounding_radius = match.group(4).strip()
|
||||
num_textures = int(match.group(5), 0)
|
||||
metadata['rootnode'] = rootnode
|
||||
metadata['switches_ptr'] = switches_ptr
|
||||
metadata['num_switches'] = num_switches
|
||||
metadata['bounding_radius'] = bounding_radius
|
||||
metadata['num_textures'] = num_textures
|
||||
|
||||
# If no metadata, try to estimate from binary
|
||||
if not metadata or 'num_switches' not in metadata:
|
||||
print(f" ⚙ {actual_gun_name}: Estimating metadata from binary...")
|
||||
try:
|
||||
with open(bin_file, 'rb') as f:
|
||||
binary_data = f.read()
|
||||
|
||||
# Estimate parameters by scanning binary structure
|
||||
# First, find where actual data starts (after null padding)
|
||||
# Switches are at the start, followed by optional texture table, then nodes
|
||||
|
||||
base_addr = 0x05000000
|
||||
num_textures = 0
|
||||
num_switches = 0
|
||||
|
||||
# Find first non-zero 4-byte word to determine switch array size
|
||||
data_start = 0
|
||||
for offset in range(0, min(len(binary_data) - 3, 0x200), 4):
|
||||
word = struct.unpack('>I', binary_data[offset:offset+4])[0]
|
||||
if word != 0:
|
||||
data_start = offset
|
||||
break
|
||||
|
||||
# Number of switches = data_start / 4
|
||||
if data_start > 0:
|
||||
num_switches = data_start // 4
|
||||
|
||||
# Check if there's a texture table after switches
|
||||
# Texture table has 12-byte entries, and the first word should be a pointer
|
||||
# Look at what's right after the switch array
|
||||
if data_start > 0 and data_start + 12 <= len(binary_data):
|
||||
# Check if data_start looks like a node (has node type marker)
|
||||
# or a texture table (has multiple valid pointers)
|
||||
first_word = struct.unpack('>I', binary_data[data_start:data_start+4])[0]
|
||||
|
||||
# If first word looks like a node type (0x0401, 0x0501, etc), no texture table
|
||||
if first_word < 0x1000:
|
||||
num_textures = 0
|
||||
else:
|
||||
# Try to count texture entries
|
||||
test_offset = data_start
|
||||
while test_offset + 12 <= len(binary_data):
|
||||
try:
|
||||
tex_data = struct.unpack('>III', binary_data[test_offset:test_offset+12])
|
||||
# All three words should be valid addresses
|
||||
if (tex_data[0] >= base_addr and tex_data[0] < base_addr + 0x100000 and
|
||||
tex_data[1] >= base_addr and tex_data[1] < base_addr + 0x100000 and
|
||||
tex_data[2] >= base_addr and tex_data[2] < base_addr + 0x100000):
|
||||
num_textures += 1
|
||||
test_offset += 12
|
||||
else:
|
||||
break
|
||||
except:
|
||||
break
|
||||
|
||||
# Estimate bounding radius from vertex data
|
||||
# For now use a default value
|
||||
bounding_radius = "100.0"
|
||||
|
||||
metadata = {
|
||||
'rootnode': f'&ROOTNODE({actual_dir_name})',
|
||||
'switches_ptr': '0' if num_switches == 0 else f'SWITCHES({actual_dir_name})',
|
||||
'num_switches': num_switches,
|
||||
'bounding_radius': bounding_radius,
|
||||
'num_textures': num_textures,
|
||||
'header': '// Estimated metadata (not compiled)\n'
|
||||
}
|
||||
estimated_metadata = True
|
||||
|
||||
print(f" Estimated: {num_switches} switches, {num_textures} textures, radius {bounding_radius}")
|
||||
|
||||
except Exception as e:
|
||||
print(f" ✗ {actual_gun_name}: Could not estimate metadata - {e}")
|
||||
stats['errors'] += 1
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
continue
|
||||
|
||||
output_file = gun_dir / actual_dir_name / "Model.c"
|
||||
if output_file.exists() and not args.force:
|
||||
print(f" ⊘ {actual_gun_name}: Model.c already exists (use --force)")
|
||||
stats['skipped'] += 1
|
||||
continue
|
||||
|
||||
try:
|
||||
# Parse binary (same format as props)
|
||||
with open(bin_file, 'rb') as f:
|
||||
binary_data = f.read()
|
||||
|
||||
parser = BinaryModelParser(binary_data, metadata, image_map)
|
||||
parsed_model = parser.parse()
|
||||
|
||||
# Generate C code
|
||||
c_code = generate_gun_c(actual_dir_name, parsed_model, metadata, image_map, binary_data)
|
||||
|
||||
if args.dry_run:
|
||||
if len(parsed_model['switches']) > 0:
|
||||
print(f" ✓ {actual_gun_name}: Would generate Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)")
|
||||
else:
|
||||
print(f" ✓ {actual_gun_name}: Would generate Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures)")
|
||||
else:
|
||||
output_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(c_code)
|
||||
|
||||
# If metadata was estimated, create commented header file
|
||||
if estimated_metadata:
|
||||
header_file = metadata_dir / "ModelFileHeader.inc.c"
|
||||
switches_ptr = metadata['switches_ptr']
|
||||
num_switches_hex = f"0x{metadata['num_switches']:02X}"
|
||||
num_textures_hex = f"0x{metadata['num_textures']:02X}"
|
||||
bounding_radius = metadata['bounding_radius']
|
||||
|
||||
with open(header_file, 'w') as f:
|
||||
f.write(f"// Estimated metadata - decoded from G{actual_gun_name}Z.bin\n")
|
||||
f.write(f"// This is NOT compiled - uncomment and verify values if needed\n")
|
||||
f.write(f"//\n")
|
||||
f.write(f"// MODELFILEHEADER({actual_gun_name},\n")
|
||||
f.write(f"// &ROOTNODE({actual_gun_name}),\n")
|
||||
f.write(f"// &SKELETON(standard_gun),\n")
|
||||
f.write(f"// {switches_ptr},\n")
|
||||
f.write(f"// {num_switches_hex},\n")
|
||||
f.write(f"// 4,\n")
|
||||
f.write(f"// {bounding_radius},\n")
|
||||
f.write(f"// 0,\n")
|
||||
f.write(f"// {num_textures_hex}\n")
|
||||
f.write(f"// )\n")
|
||||
|
||||
print(f" Created commented ModelFileHeader.inc.c")
|
||||
|
||||
# Report generation
|
||||
if len(parsed_model['switches']) > 0:
|
||||
print(f" ✓ {actual_gun_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)")
|
||||
else:
|
||||
print(f" ✓ {actual_gun_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures)")
|
||||
|
||||
# Clean up source binary file after successful conversion
|
||||
if args.cleanup and bin_file.exists():
|
||||
bin_file.unlink()
|
||||
print(f" Cleaned up {bin_file.name}")
|
||||
|
||||
stats['processed'] += 1
|
||||
|
||||
except Exception as e:
|
||||
print(f" ✗ {actual_gun_name}: Error - {e}")
|
||||
stats['errors'] += 1
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
print(f"\n=== Summary ===")
|
||||
print(f"Processed: {stats['processed']}")
|
||||
print(f"Skipped: {stats['skipped']}")
|
||||
print(f"Errors: {stats['errors']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Executable
+2253
File diff suppressed because it is too large.
Load diff
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
# $1: directory containing .bin files, one per each image, in "natural" sort order (image8, image9, image10, ...)
|
||||
# $2: output directory for combined .bin
|
||||
|
||||
SPLIT_DIR=$1
|
||||
COMBINE_DIR=$2
|
||||
|
||||
if [ -z ${SPLIT_DIR} ]; then echo "$0: missing argument: SPLIT_DIR"; exit 1; fi
|
||||
if [ -z ${COMBINE_DIR} ]; then echo "$0: missing argument: COMBINE_DIR"; exit 1; fi
|
||||
|
||||
echo "combining split image .bin files into single .bin"
|
||||
|
||||
pushd .
|
||||
|
||||
echo "cd ${SPLIT_DIR}"
|
||||
cd "${SPLIT_DIR}"
|
||||
|
||||
echo "rm -f combined.bin"
|
||||
rm -f combined.bin
|
||||
|
||||
echo "combining ..."
|
||||
ls -1dv image* | xargs -I {} cat {} >> combined.bin
|
||||
|
||||
popd
|
||||
|
||||
mkdir -p "${COMBINE_DIR}"
|
||||
|
||||
echo "rm -f ${COMBINE_DIR}/combined.bin"
|
||||
rm -f "${COMBINE_DIR}/combined.bin"
|
||||
|
||||
echo "mv ${SPLIT_DIR}/combined.bin ${COMBINE_DIR}/"
|
||||
mv "${SPLIT_DIR}/combined.bin" "${COMBINE_DIR}/"
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Combine image .bin files in the correct order using imagelist
|
||||
# $1: imagelist CSV file (with paths in 3rd column)
|
||||
# $2: output directory for combined .bin
|
||||
|
||||
IMAGELIST=$1
|
||||
COMBINE_DIR=$2
|
||||
|
||||
if [ -z "${IMAGELIST}" ]; then echo "$0: missing argument: IMAGELIST"; exit 1; fi
|
||||
if [ -z "${COMBINE_DIR}" ]; then echo "$0: missing argument: COMBINE_DIR"; exit 1; fi
|
||||
|
||||
if [ ! -f "${IMAGELIST}" ]; then
|
||||
echo "$0: imagelist file not found: ${IMAGELIST}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Combining image .bin files into single .bin using ${IMAGELIST}"
|
||||
|
||||
mkdir -p "${COMBINE_DIR}"
|
||||
COMBINED_BIN="${COMBINE_DIR}/combined.bin"
|
||||
|
||||
echo "rm -f ${COMBINED_BIN}"
|
||||
rm -f "${COMBINED_BIN}"
|
||||
|
||||
echo "Combining images in order..."
|
||||
# Read imagelist and concatenate files in order
|
||||
while IFS=, read -r offset size filepath remainder; do
|
||||
if [ -f "${filepath}" ]; then
|
||||
cat "${filepath}" >> "${COMBINED_BIN}"
|
||||
else
|
||||
echo "Warning: ${filepath} not found, skipping"
|
||||
fi
|
||||
done < "${IMAGELIST}"
|
||||
|
||||
COMBINED_SIZE=$(stat -c%s "${COMBINED_BIN}" 2>/dev/null || stat -f%z "${COMBINED_BIN}" 2>/dev/null)
|
||||
echo "Combined ${COMBINED_SIZE} bytes into ${COMBINED_BIN}"
|
||||
|
||||
# Pad to next 0x10 (16-byte) multiple
|
||||
PADDING=$((16 - (COMBINED_SIZE % 16)))
|
||||
if [ ${PADDING} -ne 16 ]; then
|
||||
echo "Padding ${PADDING} bytes to align to 0x10 boundary"
|
||||
dd if=/dev/zero bs=1 count=${PADDING} >> "${COMBINED_BIN}" 2>/dev/null
|
||||
PADDED_SIZE=$(stat -c%s "${COMBINED_BIN}" 2>/dev/null || stat -f%z "${COMBINED_BIN}" 2>/dev/null)
|
||||
echo "Final size: ${PADDED_SIZE} bytes (0x$(printf '%X' ${PADDED_SIZE}))"
|
||||
fi
|
||||
@@ -49,7 +49,7 @@ dirs=(
|
||||
assets/music
|
||||
assets/ramrom
|
||||
assets/images
|
||||
assets/images/split
|
||||
assets/images/combined
|
||||
assets/font
|
||||
assets/embedded
|
||||
assets/embedded/skeletons
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate imagelist.csv from images.def (ground truth).
|
||||
Reads images.def to get image names and order, gets sizes from actual files,
|
||||
generates offsets automatically. Also updates images.def with calculated sizes.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def parse_images_def(images_def_path):
|
||||
"""Parse images.def and extract IMAGE names and sizes in order"""
|
||||
image_entries = []
|
||||
|
||||
with open(images_def_path, 'r') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line.startswith('IMAGE('):
|
||||
# Extract: IMAGE(NAME, SIZE, ...)
|
||||
content = line[6:-1] # Remove "IMAGE(" and ")"
|
||||
parts = [p.strip() for p in content.split(',', 2)]
|
||||
|
||||
if len(parts) >= 2:
|
||||
name = parts[0]
|
||||
size_str = parts[1]
|
||||
# Parse hex size (0xHEX format)
|
||||
if size_str.startswith('0x'):
|
||||
size = int(size_str, 16)
|
||||
else:
|
||||
size = int(size_str)
|
||||
image_entries.append({'name': name, 'size': size})
|
||||
|
||||
return image_entries
|
||||
|
||||
def get_image_size(image_path):
|
||||
"""Get size of image file, return 0 if doesn't exist"""
|
||||
path = Path(image_path)
|
||||
if path.exists():
|
||||
return path.stat().st_size
|
||||
else:
|
||||
return 0
|
||||
|
||||
def generate_imagelist(images_def, split_dir, output_csv, update_def=True):
|
||||
"""Generate imagelist.csv with offsets and sizes, optionally update images.def"""
|
||||
|
||||
image_entries = parse_images_def(images_def)
|
||||
|
||||
print(f"Found {len(image_entries)} images in images.def")
|
||||
|
||||
# Calculate offsets and actual sizes
|
||||
current_offset = 0
|
||||
entries = []
|
||||
missing_files = []
|
||||
size_mismatches = []
|
||||
|
||||
for entry in image_entries:
|
||||
name = entry['name']
|
||||
def_size = entry['size']
|
||||
image_path = f"{split_dir}/{name}.bin"
|
||||
actual_size = get_image_size(image_path)
|
||||
|
||||
if actual_size == 0:
|
||||
missing_files.append(name)
|
||||
# Use size from .def if file missing
|
||||
size_to_use = def_size
|
||||
else:
|
||||
size_to_use = actual_size
|
||||
# Check for mismatch
|
||||
if actual_size != def_size:
|
||||
size_mismatches.append({
|
||||
'name': name,
|
||||
'def_size': def_size,
|
||||
'actual_size': actual_size
|
||||
})
|
||||
|
||||
entries.append({
|
||||
'offset': current_offset,
|
||||
'size': size_to_use,
|
||||
'path': image_path,
|
||||
'name': name
|
||||
})
|
||||
|
||||
current_offset += size_to_use
|
||||
|
||||
# Write CSV
|
||||
with open(output_csv, 'w') as f:
|
||||
for entry in entries:
|
||||
# Format: offset,size,path,0,1
|
||||
f.write(f"{entry['offset']},{entry['size']},{entry['path']},0,1\n")
|
||||
|
||||
print(f"Generated {output_csv}")
|
||||
print(f"Total size: {current_offset} bytes ({current_offset // 1024}KB)")
|
||||
|
||||
if missing_files:
|
||||
print(f"\nWarning: {len(missing_files)} images missing files:")
|
||||
for name in missing_files[:10]: # Show first 10
|
||||
print(f" - {name}.bin")
|
||||
if len(missing_files) > 10:
|
||||
print(f" ... and {len(missing_files) - 10} more")
|
||||
|
||||
if size_mismatches and update_def:
|
||||
print(f"\nUpdating {len(size_mismatches)} size mismatches in {images_def}")
|
||||
update_images_def_sizes(images_def, size_mismatches)
|
||||
|
||||
def update_images_def_sizes(images_def_path, mismatches):
|
||||
"""Update images.def with corrected sizes"""
|
||||
# Create lookup dict
|
||||
mismatch_dict = {m['name']: m['actual_size'] for m in mismatches}
|
||||
|
||||
# Read and update
|
||||
lines = []
|
||||
with open(images_def_path, 'r') as f:
|
||||
for line in f:
|
||||
stripped = line.strip()
|
||||
if stripped.startswith('IMAGE('):
|
||||
# Extract name
|
||||
content = stripped[6:-1]
|
||||
parts = [p.strip() for p in content.split(',', 2)]
|
||||
if len(parts) >= 2:
|
||||
name = parts[0]
|
||||
if name in mismatch_dict:
|
||||
# Update size
|
||||
new_size = f"0x{mismatch_dict[name]:X}"
|
||||
rest = parts[2] if len(parts) > 2 else ""
|
||||
lines.append(f"IMAGE({name}, {new_size}, {rest})\n")
|
||||
continue
|
||||
lines.append(line)
|
||||
|
||||
# Write back
|
||||
with open(images_def_path, 'w') as f:
|
||||
f.writelines(lines)
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(f"Usage: {sys.argv[0]} <output_csv>")
|
||||
print(f" Reads: assets/images.def")
|
||||
print(f" Scans: assets/images/split/")
|
||||
print(f" Writes: <output_csv>")
|
||||
sys.exit(1)
|
||||
|
||||
output_csv = sys.argv[1]
|
||||
|
||||
generate_imagelist(
|
||||
'assets/images.def',
|
||||
'assets/images/split',
|
||||
output_csv
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Executable
+183
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Sync imagelist.u.csv with images.def:
|
||||
1. Read names from images.def (in order)
|
||||
2. Read offsets/sizes from imagelist.u.csv
|
||||
3. Generate new imagelist.csv with proper names and ROM offsets
|
||||
4. Update images.def with actual sizes from CSV
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def parse_images_def(images_def_path):
|
||||
"""Parse images.def and extract IMAGE names in order"""
|
||||
image_names = []
|
||||
|
||||
with open(images_def_path, 'r') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line.startswith('IMAGE('):
|
||||
# Extract: IMAGE(NAME, SIZE, ...)
|
||||
content = line[6:-1] # Remove "IMAGE(" and ")"
|
||||
parts = [p.strip() for p in content.split(',', 2)]
|
||||
|
||||
if len(parts) >= 1:
|
||||
name = parts[0]
|
||||
image_names.append(name)
|
||||
|
||||
return image_names
|
||||
|
||||
def read_old_imagelist(csv_path):
|
||||
"""Read old imagelist.u.csv and extract offset/size pairs"""
|
||||
entries = []
|
||||
|
||||
with open(csv_path, 'r') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line:
|
||||
parts = line.split(',')
|
||||
if len(parts) >= 2:
|
||||
offset = int(parts[0])
|
||||
size = int(parts[1])
|
||||
entries.append({'offset': offset, 'size': size})
|
||||
|
||||
return entries
|
||||
|
||||
def generate_named_imagelist(image_names, old_entries, output_csv, split_dir):
|
||||
"""Generate new imagelist.csv with proper names and actual sizes
|
||||
|
||||
Uses CSV offsets for ROM images, but recalculates ALL sizes from actual files.
|
||||
CSV offsets preserved (for ROM layout), but sizes updated from disk.
|
||||
images.def is the complete database - CSV is only for initial extraction offsets.
|
||||
"""
|
||||
import os
|
||||
|
||||
rom_image_count = len(old_entries)
|
||||
total_images = len(image_names)
|
||||
|
||||
if total_images < rom_image_count:
|
||||
print(f"WARNING: images.def has {total_images} images but CSV has {rom_image_count} entries")
|
||||
print(f"Using first {total_images} entries from CSV")
|
||||
rom_image_count = total_images
|
||||
elif total_images > rom_image_count:
|
||||
print(f"INFO: images.def has {total_images} images, CSV has {rom_image_count} (ROM) entries")
|
||||
print(f"Will calculate offsets for {total_images - rom_image_count} new images")
|
||||
|
||||
# Start offset calculation from beginning
|
||||
current_offset = old_entries[0]['offset'] if rom_image_count > 0 else 0
|
||||
|
||||
with open(output_csv, 'w') as f:
|
||||
# Write ROM images with CSV offsets but recalculated sizes
|
||||
for i in range(rom_image_count):
|
||||
name = image_names[i]
|
||||
path = f"{split_dir}/{name}.bin"
|
||||
|
||||
# Use ROM offset from CSV
|
||||
offset = old_entries[i]['offset']
|
||||
|
||||
# Get actual file size (recalculate, don't trust CSV)
|
||||
if os.path.exists(path):
|
||||
size = os.path.getsize(path)
|
||||
else:
|
||||
# Fall back to CSV size if file missing
|
||||
size = old_entries[i]['size']
|
||||
print(f"WARNING: {path} not found, using CSV size 0x{size:X}")
|
||||
|
||||
f.write(f"{offset},{size},{path},0,1\n")
|
||||
|
||||
# Track offset for new images
|
||||
if i == rom_image_count - 1:
|
||||
current_offset = offset + size
|
||||
|
||||
# Write new images with calculated offsets and actual sizes
|
||||
for i in range(rom_image_count, total_images):
|
||||
name = image_names[i]
|
||||
path = f"{split_dir}/{name}.bin"
|
||||
|
||||
# Get actual file size
|
||||
if os.path.exists(path):
|
||||
size = os.path.getsize(path)
|
||||
else:
|
||||
# Default size if file doesn't exist yet
|
||||
size = 0x1000
|
||||
print(f"WARNING: {path} not found, using default size 0x{size:X}")
|
||||
|
||||
f.write(f"{current_offset},{size},{path},0,1\n")
|
||||
current_offset += size
|
||||
|
||||
print(f"Generated {output_csv} with {total_images} entries ({rom_image_count} from ROM, {total_images - rom_image_count} new)")
|
||||
print(f"All sizes recalculated from actual .bin files (CSV offsets preserved for ROM images)")
|
||||
return total_images
|
||||
|
||||
def update_images_def_sizes(images_def_path, sizes):
|
||||
"""Update images.def with actual sizes from CSV"""
|
||||
|
||||
lines = []
|
||||
image_index = 0
|
||||
|
||||
with open(images_def_path, 'r') as f:
|
||||
for line in f:
|
||||
if line.strip().startswith('IMAGE('):
|
||||
# Extract and rebuild with new size
|
||||
content = line[line.index('(')+1:line.rindex(')')]
|
||||
parts = [p.strip() for p in content.split(',')]
|
||||
|
||||
if len(parts) >= 2 and image_index < len(sizes):
|
||||
# Update size (keep as hex)
|
||||
new_size = sizes[image_index]
|
||||
parts[1] = f"0x{new_size:X}"
|
||||
|
||||
# Rebuild line
|
||||
new_content = ', '.join(parts)
|
||||
line = f"IMAGE({new_content})\n"
|
||||
image_index += 1
|
||||
|
||||
lines.append(line)
|
||||
|
||||
# Write back
|
||||
with open(images_def_path, 'w') as f:
|
||||
f.writelines(lines)
|
||||
|
||||
print(f"Updated {image_index} image sizes in {images_def_path}")
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: sync_imagelist_with_def.py <output_csv> [--update-def]")
|
||||
print("Example: sync_imagelist_with_def.py build/u/imagelist.csv --update-def")
|
||||
sys.exit(1)
|
||||
|
||||
output_csv = sys.argv[1]
|
||||
update_def = '--update-def' in sys.argv
|
||||
|
||||
# Paths
|
||||
images_def = 'assets/images.def'
|
||||
old_csv = 'imagelist.u.csv'
|
||||
split_dir = 'assets/images/split'
|
||||
|
||||
# Read data
|
||||
print(f"Reading image names from {images_def}...")
|
||||
image_names = parse_images_def(images_def)
|
||||
print(f"Found {len(image_names)} image names")
|
||||
|
||||
print(f"\nReading ROM offsets/sizes from {old_csv}...")
|
||||
old_entries = read_old_imagelist(old_csv)
|
||||
print(f"Found {len(old_entries)} ROM entries (for initial extraction)")
|
||||
|
||||
# Generate new CSV with names
|
||||
print(f"\nGenerating {output_csv}...")
|
||||
count = generate_named_imagelist(image_names, old_entries, output_csv, split_dir)
|
||||
|
||||
# Optionally update images.def with sizes
|
||||
if update_def:
|
||||
print(f"\nUpdating {images_def} with sizes from CSV...")
|
||||
sizes = [entry['size'] for entry in old_entries[:len(image_names)]]
|
||||
update_images_def_sizes(images_def, sizes)
|
||||
print("✓ images.def updated")
|
||||
else:
|
||||
print("\nSkipping images.def update (use --update-def to enable)")
|
||||
|
||||
print(f"\n✓ Done! Generated {count} entries")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in new issue
Block a user