1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-16 12:54:40 +00:00

Merge branch 'main' into doc/cutscene_index

This commit is contained in:
feacur 2024-11-13 20:11:01 +01:00
commit bee188dcd8
53 changed files with 1078 additions and 927 deletions

18
Jenkinsfile vendored
View file

@ -29,10 +29,10 @@ pipeline {
// The ROMs are built in an order that maximizes compiler flags coverage in a "fail fast" approach. // The ROMs are built in an order that maximizes compiler flags coverage in a "fail fast" approach.
// Specifically we start with a retail ROM for BSS ordering, and make sure we cover all of // Specifically we start with a retail ROM for BSS ordering, and make sure we cover all of
// N64/GC/NTSC/PAL/MQ/DEBUG as quickly as possible. // N64/GC/NTSC/PAL/MQ/DEBUG as quickly as possible.
stage('Build ntsc-1.2') { stage('Build ntsc-1.0') {
steps { steps {
script { script {
build('ntsc-1.2', 'oot-ntsc-1.2-us.z64') build('ntsc-1.0', 'oot-ntsc-1.0-us.z64')
} }
} }
} }
@ -64,6 +64,13 @@ pipeline {
} }
} }
} }
stage('Build ntsc-1.2') {
steps {
script {
build('ntsc-1.2', 'oot-ntsc-1.2-us.z64')
}
}
}
stage('Build gc-us') { stage('Build gc-us') {
steps { steps {
script { script {
@ -99,6 +106,13 @@ pipeline {
} }
} }
} }
stage('Build ntsc-1.1') {
steps {
script {
build('ntsc-1.1', 'oot-ntsc-1.1-us.z64')
}
}
}
stage('Build gc-us-mq') { stage('Build gc-us-mq') {
steps { steps {
script { script {

View file

@ -23,6 +23,8 @@ ORIG_COMPILER ?= 0
COMPILER ?= ido COMPILER ?= ido
# Target game version. Ensure the corresponding input ROM is placed in baseroms/$(VERSION)/baserom.z64. # Target game version. Ensure the corresponding input ROM is placed in baseroms/$(VERSION)/baserom.z64.
# Currently the following versions are supported: # Currently the following versions are supported:
# ntsc-1.0 N64 NTSC 1.0 (Japan/US depending on REGION)
# ntsc-1.1 N64 NTSC 1.1 (Japan/US depending on REGION)
# pal-1.0 N64 PAL 1.0 (Europe) # pal-1.0 N64 PAL 1.0 (Europe)
# ntsc-1.2 N64 NTSC 1.2 (Japan/US depending on REGION) # ntsc-1.2 N64 NTSC 1.2 (Japan/US depending on REGION)
# pal-1.1 N64 PAL 1.1 (Europe) # pal-1.1 N64 PAL 1.1 (Europe)
@ -34,9 +36,6 @@ COMPILER ?= ido
# gc-eu GameCube Europe/PAL # gc-eu GameCube Europe/PAL
# gc-eu-mq GameCube Europe/PAL Master Quest # gc-eu-mq GameCube Europe/PAL Master Quest
# gc-jp-ce GameCube Japan (Collector's Edition disc) # gc-jp-ce GameCube Japan (Collector's Edition disc)
# The following versions are work-in-progress and not yet matching:
# ntsc-1.0 N64 NTSC 1.0 (Japan/US depending on REGION)
# ntsc-1.1 N64 NTSC 1.1 (Japan/US depending on REGION)
VERSION ?= gc-eu-mq-dbg VERSION ?= gc-eu-mq-dbg
# Number of threads to extract and compress with. # Number of threads to extract and compress with.
N_THREADS ?= $(shell nproc) N_THREADS ?= $(shell nproc)
@ -62,13 +61,11 @@ ifeq ($(VERSION),ntsc-1.0)
REGION ?= JP REGION ?= JP
PLATFORM := N64 PLATFORM := N64
DEBUG := 0 DEBUG := 0
COMPARE := 0
else ifeq ($(VERSION),ntsc-1.1) else ifeq ($(VERSION),ntsc-1.1)
REGIONAL_CHECKSUM := 1 REGIONAL_CHECKSUM := 1
REGION ?= JP REGION ?= JP
PLATFORM := N64 PLATFORM := N64
DEBUG := 0 DEBUG := 0
COMPARE := 0
else ifeq ($(VERSION),pal-1.0) else ifeq ($(VERSION),pal-1.0)
REGION ?= EU REGION ?= EU
PLATFORM := N64 PLATFORM := N64

View file

@ -29,6 +29,8 @@ It builds the following versions:
| Name | Build timestamp | Description | MD5 hash of input ROM(s) | | Name | Build timestamp | Description | MD5 hash of input ROM(s) |
|--------------|-------------------|-------------------------------------------|--------------------------| |--------------|-------------------|-------------------------------------------|--------------------------|
| ntsc-1.0 | 98-10-21 04:56:31 | NTSC 1.0 (Japan/US) | `9f04c8e68534b870f707c247fa4b50fc`<br>`5bd1fe107bf8106b2ab6650abecd54d6` |
| ntsc-1.1 | 98-10-26 10:58:45 | NTSC 1.1 (Japan/US) | `1bf5f42b98c3e97948f01155f12e2d88`<br>`721fdcc6f5f34be55c43a807f2a16af4` |
| pal-1.0 | 98-11-10 14:34:22 | PAL 1.0 (Europe) | `e040de91a74b61e3201db0e2323f768a` | | pal-1.0 | 98-11-10 14:34:22 | PAL 1.0 (Europe) | `e040de91a74b61e3201db0e2323f768a` |
| ntsc-1.2 | 98-11-12 18:17:03 | NTSC 1.2 (Japan/US) | `2258052847bdd056c8406a9ef6427f13`<br>`57a9719ad547c516342e1a15d5c28c3d` | | ntsc-1.2 | 98-11-12 18:17:03 | NTSC 1.2 (Japan/US) | `2258052847bdd056c8406a9ef6427f13`<br>`57a9719ad547c516342e1a15d5c28c3d` |
| pal-1.1 | 98-11-18 17:36:49 | PAL 1.1 (Europe) | `d714580dd74c2c033f5e1b6dc0aeac77` | | pal-1.1 | 98-11-18 17:36:49 | PAL 1.1 (Europe) | `d714580dd74c2c033f5e1b6dc0aeac77` |

View file

@ -2408,7 +2408,11 @@ CHAN_0EDC:
.layer LAYER_1029 .layer LAYER_1029
/* 0x1029 [0xC6 0x2F ] */ instr SF0_INST_47 /* 0x1029 [0xC6 0x2F ] */ instr SF0_INST_47
#if OOT_VERSION < PAL_1_0
/* 0x102B [0xCB 0x66 0x4C 0xF0 ] */ env ENVELOPE_664C, 240
#else
/* 0x102B [0xCB 0x66 0x4C 0xFF ] */ env ENVELOPE_664C, 255 /* 0x102B [0xCB 0x66 0x4C 0xFF ] */ env ENVELOPE_664C, 255
#endif
/* 0x102F [0x7E 0x0C 0x6C ] */ notedv PITCH_B5, FRAMERATE_CONST(12, 15), 108 /* 0x102F [0x7E 0x0C 0x6C ] */ notedv PITCH_B5, FRAMERATE_CONST(12, 15), 108
/* 0x1032 [0xFF ] */ end /* 0x1032 [0xFF ] */ end

View file

@ -603,7 +603,9 @@ LAYER_0452:
/* 0x046C [0xE9 0x0E ] */ notepri 0, 14 /* 0x046C [0xE9 0x0E ] */ notepri 0, 14
/* 0x046E [0xE5 0x01 ] */ reverbidx 1 /* 0x046E [0xE5 0x01 ] */ reverbidx 1
/* 0x0470 [0xD4 0x28 ] */ reverb 40 /* 0x0470 [0xD4 0x28 ] */ reverb 40
#if OOT_VERSION >= PAL_1_0
/* 0x0472 [0xC6 0x00 ] */ font Soundfont_0_ID /* 0x0472 [0xC6 0x00 ] */ font Soundfont_0_ID
#endif
/* 0x0474 [0xFC 0x01 0x56 ] */ call CHAN_0156 /* 0x0474 [0xFC 0x01 0x56 ] */ call CHAN_0156
/* 0x0477 [0xFD 0x60 ] */ delay 96 /* 0x0477 [0xFD 0x60 ] */ delay 96
/* 0x0479 [0xFC 0x01 0x56 ] */ call CHAN_0156 /* 0x0479 [0xFC 0x01 0x56 ] */ call CHAN_0156
@ -1147,7 +1149,7 @@ ENVELOPE_08BA:
point 20, 20000 point 20, 20000
hang hang
#if !OOT_PAL_N64 #if OOT_VERSION == NTSC_1_2 || PLATFORM_GC
.filter FILTER_0932 .filter FILTER_0932
filter 0, 0, 0, 0, 0, 0, 0, 0 filter 0, 0, 0, 0, 0, 0, 0, 0

View file

@ -1,433 +1,436 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_0" Index="0"> <SampleBank Name="SampleBank_0" Index="0">
<Sample Name="SAMPLE_0_0" FileName="Sample000" Offset="0x000000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_0" FileName="Sample000" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_1" FileName="Sample001" Offset="0x0005B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_1" FileName="Sample001" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_2" FileName="Sample002" Offset="0x000780" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_2" FileName="Sample002" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_3" FileName="Sample003" Offset="0x000C70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_3" FileName="Sample003" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_4" FileName="Sample004" Offset="0x001730" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_4" FileName="Sample004" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_5" FileName="Sample005" Offset="0x001ED0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_5" FileName="Sample005" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_6" FileName="Sample006" Offset="0x002D10" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_6" FileName="Sample006" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_7" FileName="Sample007" Offset="0x004250" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_7" FileName="Sample007" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_8" FileName="Sample008" Offset="0x005480" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_8" FileName="Sample008" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_9" FileName="Sample009" Offset="0x0077D0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_9" FileName="Sample009" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_10" FileName="Sample010" Offset="0x0097E0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_10" FileName="Sample010" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_11" FileName="Sample011" Offset="0x00B660" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_11" FileName="Sample011" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_12" FileName="Sample012" Offset="0x00BC80" SampleRate="32000" BaseNote="F3"/> <Sample Name="SAMPLE_0_12" FileName="Sample012" SampleRate="32000" BaseNote="F3"/>
<Sample Name="SAMPLE_0_13" FileName="Sample013" Offset="0x00E4B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_13" FileName="Sample013" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_14" FileName="Sample014" Offset="0x011D80" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_14" FileName="Sample014" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_15" FileName="Sample015" Offset="0x01C4A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_15" FileName="Sample015" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_16" FileName="Sample016" Offset="0x027DA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_16" FileName="Sample016" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_17" FileName="Sample017" Offset="0x033800" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_17" FileName="Sample017" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_18" FileName="Sample018" Offset="0x0393F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_18" FileName="Sample018" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_19" FileName="Sample019" Offset="0x03D090" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_19" FileName="Sample019" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_20" FileName="Sample020" Offset="0x03E360" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_20" FileName="Sample020" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_21" FileName="Sample021" Offset="0x03ECE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_21" FileName="Sample021" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_22" FileName="Sample022" Offset="0x03F770" SampleRate="16000" BaseNote="G4"/> <Sample Name="SAMPLE_0_22" FileName="Sample022" SampleRate="16000" BaseNote="G4"/>
<Sample Name="SAMPLE_0_23" FileName="Sample023" Offset="0x040000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_23" FileName="Sample023" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_24" FileName="Sample024" Offset="0x040AA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_24" FileName="Sample024" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_25" FileName="Sample025" Offset="0x0414F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_25" FileName="Sample025" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_26" FileName="Sample026" Offset="0x041A20" SampleRate="8000" BaseNote="G3"/> <Sample Name="SAMPLE_0_26" FileName="Sample026" SampleRate="8000" BaseNote="G3"/>
<Sample Name="SAMPLE_0_27" FileName="Sample027" Offset="0x041CD0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_27" FileName="Sample027" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_28" FileName="Sample028" Offset="0x0439A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_28" FileName="Sample028" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_29" FileName="Sample029" Offset="0x046810" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_29" FileName="Sample029" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_30" FileName="Sample030" Offset="0x048840" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_30" FileName="Sample030" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_31" FileName="Sample031" Offset="0x04A510" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_31" FileName="Sample031" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_32" FileName="Sample032" Offset="0x04A6A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_32" FileName="Sample032" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_33" FileName="Sample033" Offset="0x04F790" SampleRate="23220" BaseNote="C4"/> <Sample Name="SAMPLE_0_33" FileName="Sample033" SampleRate="23220" BaseNote="C4"/>
<Sample Name="SAMPLE_0_34" FileName="Sample034" Offset="0x053210" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_34" FileName="Sample034" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_35" FileName="Sample035" Offset="0x055BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_35" FileName="Sample035" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_36" FileName="Sample036" Offset="0x057D10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_36" FileName="Sample036" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_37" FileName="Sample037" Offset="0x05B590" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_37" FileName="Sample037" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_38" FileName="Sample038" Offset="0x05CBA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_38" FileName="Sample038" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_39" FileName="Sample039" Offset="0x060240" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_39" FileName="Sample039" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_40" FileName="Sample040" Offset="0x061B90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_40" FileName="Sample040" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_41" FileName="Sample041" Offset="0x063350" SampleRate="16000" BaseNote="AF4"/> <Sample Name="SAMPLE_0_41" FileName="Sample041" SampleRate="16000" BaseNote="AF4"/>
<Sample Name="SAMPLE_0_42" FileName="Sample042" Offset="0x063B70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_42" FileName="Sample042" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_43" FileName="Sample043" Offset="0x064600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_43" FileName="Sample043" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_44" FileName="Sample044" Offset="0x064F70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_44" FileName="Sample044" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_45" FileName="Sample045" Offset="0x065580" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_45" FileName="Sample045" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_46" FileName="Sample046" Offset="0x067FA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_46" FileName="Sample046" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_47" FileName="Sample047" Offset="0x068CC0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_47" FileName="Sample047" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_48" FileName="Sample048" Offset="0x069130" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_48" FileName="Sample048" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_49" FileName="Sample049" Offset="0x06A040" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_49" FileName="Sample049" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_50" FileName="Sample050" Offset="0x06BA00" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_50" FileName="Sample050" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_51" FileName="Sample051" Offset="0x06C3C0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_51" FileName="Sample051" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_52" FileName="Sample052" Offset="0x06D5B0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_52" FileName="Sample052" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_53" FileName="Sample053" Offset="0x071C70" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_53" FileName="Sample053" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_54" FileName="Sample054" Offset="0x0732A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_54" FileName="Sample054" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_55" FileName="Sample055" Offset="0x074790" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_55" FileName="Sample055" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_56" FileName="Sample056" Offset="0x077010" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_56" FileName="Sample056" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_57" FileName="Sample057" Offset="0x077BA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_57" FileName="Sample057" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_58" FileName="Sample058" Offset="0x07AFD0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_58" FileName="Sample058" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_59" FileName="Sample059" Offset="0x07D290" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_59" FileName="Sample059" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_60" FileName="Sample060" Offset="0x07F3F0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_60" FileName="Sample060" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_61" FileName="Sample061" Offset="0x07FC90" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_61" FileName="Sample061" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_62" FileName="Sample062" Offset="0x080E00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_62" FileName="Sample062" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_63" FileName="Sample063" Offset="0x082000" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_63" FileName="Sample063" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_64" FileName="Sample064" Offset="0x082ED0" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_64" FileName="Sample064" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_65" FileName="Sample065" Offset="0x084380" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_65" FileName="Sample065" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_66" FileName="Sample066" Offset="0x087030" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_66" FileName="Sample066" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_67" FileName="Sample067" Offset="0x087440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_67" FileName="Sample067" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_68" FileName="Sample068" Offset="0x088620" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_68" FileName="Sample068" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_69" FileName="Sample069" Offset="0x088A50" SampleRate="45530" BaseNote="F1"/> <Sample Name="SAMPLE_0_69" FileName="Sample069" SampleRate="45530" BaseNote="F1"/>
<Sample Name="SAMPLE_0_70" FileName="Sample070" Offset="0x08A4B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_70" FileName="Sample070" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_71" FileName="Sample071" Offset="0x08E160" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_71" FileName="Sample071" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_72" FileName="Sample072" Offset="0x08F6F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_72" FileName="Sample072" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_73" FileName="Sample073" Offset="0x093DB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_73" FileName="Sample073" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_74" FileName="Sample074" Offset="0x094B10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_74" FileName="Sample074" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_75" FileName="Sample075" Offset="0x098B00" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_75" FileName="Sample075" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_76" FileName="Sample076" Offset="0x09D5F0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_76" FileName="Sample076" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_77" FileName="Sample077" Offset="0x0A0260" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_77" FileName="Sample077" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_78" FileName="Sample078" Offset="0x0A14A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_78" FileName="Sample078" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_79" FileName="Sample079" Offset="0x0A2590" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_79" FileName="Sample079" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_80" FileName="Sample080" Offset="0x0A9EF0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_80" FileName="Sample080" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_81" FileName="Sample081" Offset="0x0AB9E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_81" FileName="Sample081" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_82" FileName="Sample082" Offset="0x0ADBA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_82" FileName="Sample082" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_83" FileName="Sample083" Offset="0x0AF0A0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_83" FileName="Sample083" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_84" FileName="Sample084" Offset="0x0B0960" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_84" FileName="Sample084" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_85" FileName="Sample085" Offset="0x0B3600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_85" FileName="Sample085" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_86" FileName="Sample086" Offset="0x0B3B10" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_86" FileName="Sample086" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_87" FileName="Sample087" Offset="0x0B4B90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_87" FileName="Sample087" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_88" FileName="Sample088" Offset="0x0B5A80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_88" FileName="Sample088" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_89" FileName="Sample089" Offset="0x0B8690" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_89" FileName="Sample089" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_90" FileName="Sample090" Offset="0x0BA0D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_90" FileName="Sample090" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_91" FileName="Sample091" Offset="0x0BBB00" SampleRate="32000" BaseNote="B1"/> <Sample Name="SAMPLE_0_91" FileName="Sample091" SampleRate="32000" BaseNote="B1"/>
<Sample Name="SAMPLE_0_92" FileName="Sample092" Offset="0x0C42B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_92" FileName="Sample092" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_93" FileName="Sample093" Offset="0x0C5140" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_93" FileName="Sample093" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_94" FileName="Sample094" Offset="0x0C88C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_94" FileName="Sample094" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_95" FileName="Sample095" Offset="0x0CAF60" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_95" FileName="Sample095" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_96" FileName="Sample096" Offset="0x0D16F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_96" FileName="Sample096" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_97" FileName="Sample097" Offset="0x0D2110" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_97" FileName="Sample097" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_98" FileName="Sample098" Offset="0x0D3DC0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_98" FileName="Sample098" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_99" FileName="Sample099" Offset="0x0D57A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_99" FileName="Sample099" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_100" FileName="Sample100" Offset="0x0DE0A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_100" FileName="Sample100" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_101" FileName="Sample101" Offset="0x0E01F0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_101" FileName="Sample101" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_102" FileName="Sample102" Offset="0x0E2510" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_102" FileName="Sample102" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_103" FileName="Sample103" Offset="0x0E44A0" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_103" FileName="Sample103" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_104" FileName="Sample104" Offset="0x0E4B00" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_104" FileName="Sample104" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_105" FileName="Sample105" Offset="0x0E5B70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_105" FileName="Sample105" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_106" FileName="Sample106" Offset="0x0EA760" SampleRate="8000" BaseNote="A0"/> <Sample Name="SAMPLE_0_106" FileName="Sample106" SampleRate="8000" BaseNote="A0"/>
<Sample Name="SAMPLE_0_107" FileName="Sample107" Offset="0x0EAFC0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_107" FileName="Sample107" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_108" FileName="Sample108" Offset="0x0EB5B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_108" FileName="Sample108" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_109" FileName="Sample109" Offset="0x0ECF40" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_109" FileName="Sample109" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_110" FileName="Sample110" Offset="0x0EEB80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_110" FileName="Sample110" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_111" FileName="Sample111" Offset="0x0F2FE0" SampleRate="22050" BaseNote="GF3"/> <Sample Name="SAMPLE_0_111" FileName="Sample111" SampleRate="22050" BaseNote="GF3"/>
<Sample Name="SAMPLE_0_112" FileName="Sample112" Offset="0x0F5350" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_112" FileName="Sample112" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_113" FileName="Sample113" Offset="0x0F5A90" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_113" FileName="Sample113" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_114" FileName="Sample114" Offset="0x0F72A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_114" FileName="Sample114" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_115" FileName="Sample115" Offset="0x0FAD40" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_115" FileName="Sample115" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_116" FileName="Sample116" Offset="0x0FDFC0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_116" FileName="Sample116" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_117" FileName="Sample117" Offset="0x1026F0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_117" FileName="Sample117" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_118" FileName="Sample118" Offset="0x106C20" SampleRate="22050" BaseNote="E3"/> <Sample Name="SAMPLE_0_118" FileName="Sample118" SampleRate="22050" BaseNote="E3"/>
<Sample Name="SAMPLE_0_119" FileName="Sample119" Offset="0x108690" SampleRate="32000" BaseNote="F2"/> <Sample Name="SAMPLE_0_119" FileName="Sample119" SampleRate="32000" BaseNote="F2"/>
<Sample Name="SAMPLE_0_120" FileName="Sample120" Offset="0x10CD20" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_120" FileName="Sample120" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_121" FileName="Sample121" Offset="0x10EFF0" SampleRate="32000" BaseNote="D4"/> <Sample Name="SAMPLE_0_121" FileName="Sample121" SampleRate="32000" BaseNote="D4"/>
<Sample Name="SAMPLE_0_122" FileName="Sample122" Offset="0x111520" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_122" FileName="Sample122" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_123" FileName="Sample123" Offset="0x1129E0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_123" FileName="Sample123" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_124" FileName="Sample124" Offset="0x114D70" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_124" FileName="Sample124" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_125" FileName="Sample125" Offset="0x1165E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_125" FileName="Sample125" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_126" FileName="Sample126" Offset="0x1176B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_126" FileName="Sample126" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_127" FileName="Sample127" Offset="0x118910" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_127" FileName="Sample127" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_128" FileName="Sample128" Offset="0x119870" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_128" FileName="Sample128" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_129" FileName="Sample129" Offset="0x11A270" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_129" FileName="Sample129" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_130" FileName="Sample130" Offset="0x11B0E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_130" FileName="Sample130" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_131" FileName="Sample131" Offset="0x11B790" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_131" FileName="Sample131" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_132" FileName="Sample132" Offset="0x11BE20" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_132" FileName="Sample132" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_133" FileName="Sample133" Offset="0x11D6D0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_133" FileName="Sample133" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_134" FileName="Sample134" Offset="0x11EE50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_134" FileName="Sample134" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_135" FileName="Sample135" Offset="0x11FB00" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_135" FileName="Sample135" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_136" FileName="Sample136" Offset="0x120D60" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_136" FileName="Sample136" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_137" FileName="Sample137" Offset="0x121BF0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_137" FileName="Sample137" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_138" FileName="Sample138" Offset="0x122C10" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_138" FileName="Sample138" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_139" FileName="Sample139" Offset="0x1243F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_139" FileName="Sample139" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_140" FileName="Sample140" Offset="0x125A90" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_140" FileName="Sample140" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_141" FileName="Sample141" Offset="0x126ED0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_141" FileName="Sample141" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_142" FileName="Sample142" Offset="0x128DA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_142" FileName="Sample142" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_143" FileName="Sample143" Offset="0x12AC80" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_143" FileName="Sample143" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_144" FileName="Sample144" Offset="0x12CD30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_144" FileName="Sample144" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_145" FileName="Sample145" Offset="0x133AB0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_145" FileName="Sample145" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_146" FileName="Sample146" Offset="0x139D70" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_146" FileName="Sample146" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_147" FileName="Sample147" Offset="0x13AF50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_147" FileName="Sample147" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_148" FileName="Sample148" Offset="0x13C040" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_148" FileName="Sample148" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_149" FileName="Sample149" Offset="0x13D3B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_149" FileName="Sample149" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_150" FileName="Sample150" Offset="0x13E870" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_150" FileName="Sample150" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_151" FileName="Sample151" Offset="0x13F6B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_151" FileName="Sample151" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_152" FileName="Sample152" Offset="0x140FC0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_152" FileName="Sample152" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_153" FileName="Sample153" Offset="0x141960" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_153" FileName="Sample153" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_154" FileName="Sample154" Offset="0x143690" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_154" FileName="Sample154" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_155" FileName="Sample155" Offset="0x146490" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_155" FileName="Sample155" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_156" FileName="Sample156" Offset="0x1478F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_156" FileName="Sample156" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_157" FileName="Sample157" Offset="0x148390" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_157" FileName="Sample157" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_158" FileName="Sample158" Offset="0x1493C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_158" FileName="Sample158" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_159" FileName="Sample159" Offset="0x14B440" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_159" FileName="Sample159" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_160" FileName="Sample160" Offset="0x14C250" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_160" FileName="Sample160" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_161" FileName="Sample161" Offset="0x151520" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_161" FileName="Sample161" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_162" FileName="Sample162" Offset="0x15A6A0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_162" FileName="Sample162" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_163" FileName="Sample163" Offset="0x15BE50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_163" FileName="Sample163" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_164" FileName="Sample164" Offset="0x15DCB0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_164" FileName="Sample164" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_165" FileName="Sample165" Offset="0x15F4B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_165" FileName="Sample165" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_166" FileName="Sample166" Offset="0x1617F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_166" FileName="Sample166" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_167" FileName="Sample167" Offset="0x163280" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_167" FileName="Sample167" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_168" FileName="Sample168" Offset="0x166790" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_168" FileName="Sample168" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_169" FileName="Sample169" Offset="0x167800" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_169" FileName="Sample169" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_170" FileName="Sample170" Offset="0x168650" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_170" FileName="Sample170" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_171" FileName="Sample171" Offset="0x1698E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_171" FileName="Sample171" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_172" FileName="Sample172" Offset="0x16A450" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_172" FileName="Sample172" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_173" FileName="Sample173" Offset="0x16AEA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_173" FileName="Sample173" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_174" FileName="Sample174" Offset="0x16B3E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_174" FileName="Sample174" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_175" FileName="Sample175" Offset="0x16CE20" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_175" FileName="Sample175" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_176" FileName="Sample176" Offset="0x16EEA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_176" FileName="Sample176" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_177" FileName="Sample177" Offset="0x16FE60" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_177" FileName="Sample177" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_178" FileName="Sample178" Offset="0x170E80" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_178" FileName="Sample178" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_179" FileName="Sample179" Offset="0x171DA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_179" FileName="Sample179" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_180" FileName="Sample180" Offset="0x173320" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_180" FileName="Sample180" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_181" FileName="Sample181" Offset="0x174240" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_181" FileName="Sample181" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_182" FileName="Sample182" Offset="0x175140" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_182" FileName="Sample182" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_183" FileName="Sample183" Offset="0x175C30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_183" FileName="Sample183" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_184" FileName="Sample184" Offset="0x177480" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_184" FileName="Sample184" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_185" FileName="Sample185" Offset="0x178D40" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_185" FileName="Sample185" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_186" FileName="Sample186" Offset="0x1795F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_186" FileName="Sample186" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_187" FileName="Sample187" Offset="0x17E6C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_187" FileName="Sample187" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_188" FileName="Sample188" Offset="0x182EC0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_188" FileName="Sample188" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_189" FileName="Sample189" Offset="0x1844E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_189" FileName="Sample189" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_190" FileName="Sample190" Offset="0x185BA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_190" FileName="Sample190" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_191" FileName="Sample191" Offset="0x188170" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_191" FileName="Sample191" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_192" FileName="Sample192" Offset="0x18A560" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_192" FileName="Sample192" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_193" FileName="Sample193" Offset="0x18B650" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_193" FileName="Sample193" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_194" FileName="Sample194" Offset="0x18D090" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_194" FileName="Sample194" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_195" FileName="Sample195" Offset="0x18E480" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_195" FileName="Sample195" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_196" FileName="Sample196" Offset="0x190200" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_196" FileName="Sample196" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_197" FileName="Sample197" Offset="0x193410" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_197" FileName="Sample197" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_198" FileName="Sample198" Offset="0x196950" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_198" FileName="Sample198" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_199" FileName="Sample199" Offset="0x1971A0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_199" FileName="Sample199" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_200" FileName="Sample200" Offset="0x197500" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_200" FileName="Sample200" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_201" FileName="Sample201" Offset="0x198F30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_201" FileName="Sample201" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_202" FileName="Sample202" Offset="0x19F6D0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_202" FileName="Sample202" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_203" FileName="Sample203" Offset="0x1A1670" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_203" FileName="Sample203" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_204" FileName="Sample204" Offset="0x1A2580" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_204" FileName="Sample204" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_205" FileName="Sample205" Offset="0x1A71E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_205" FileName="Sample205" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_206" FileName="Sample206" Offset="0x1A79C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_206" FileName="Sample206" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_207" FileName="Sample207" Offset="0x1AF2E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_207" FileName="Sample207" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_208" FileName="Sample208" Offset="0x1AFEE0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_208" FileName="Sample208" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_209" FileName="Sample209" Offset="0x1B3F50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_209" FileName="Sample209" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_210" FileName="Sample210" Offset="0x1B6530" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_210" FileName="Sample210" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_211" FileName="Sample211" Offset="0x1B7B40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_211" FileName="Sample211" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_212" FileName="Sample212" Offset="0x1B8DB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_212" FileName="Sample212" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_213" FileName="Sample213" Offset="0x1B9D70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_213" FileName="Sample213" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_214" FileName="Sample214" Offset="0x1BB410" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_214" FileName="Sample214" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_215" FileName="Sample215" Offset="0x1BC380" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_215" FileName="Sample215" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_216" FileName="Sample216" Offset="0x1BFA40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_216" FileName="Sample216" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_217" FileName="Sample217" Offset="0x1C0F80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_217" FileName="Sample217" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_218" FileName="Sample218" Offset="0x1C2510" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_218" FileName="Sample218" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_219" FileName="Sample219" Offset="0x1C6870" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_219" FileName="Sample219" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_220" FileName="Sample220" Offset="0x1CC560" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_220" FileName="Sample220" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_221" FileName="Sample221" Offset="0x1CF9C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_221" FileName="Sample221" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_222" FileName="Sample222" Offset="0x1D25C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_222" FileName="Sample222" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_223" FileName="Sample223" Offset="0x1D58F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_223" FileName="Sample223" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_224" FileName="Sample224" Offset="0x1D74B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_224" FileName="Sample224" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_225" FileName="Sample225" Offset="0x1D8420" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_225" FileName="Sample225" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_226" FileName="Sample226" Offset="0x1D9880" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_226" FileName="Sample226" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_227" FileName="Sample227" Offset="0x1DDA40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_227" FileName="Sample227" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_228" FileName="Sample228" Offset="0x1DE3C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_228" FileName="Sample228" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_229" FileName="Sample229" Offset="0x1DF040" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_229" FileName="Sample229" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_230" FileName="Sample230" Offset="0x1E0140" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_230" FileName="Sample230" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_231" FileName="Sample231" Offset="0x1E3160" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_231" FileName="Sample231" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_232" FileName="Sample232" Offset="0x1E48E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_232" FileName="Sample232" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_233" FileName="Sample233" Offset="0x1E55F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_233" FileName="Sample233" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_234" FileName="Sample234" Offset="0x1E6000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_234" FileName="Sample234" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_235" FileName="Sample235" Offset="0x1E7E90" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_235" FileName="Sample235" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_236" FileName="Sample236" Offset="0x1E9960" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_236" FileName="Sample236" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_237" FileName="Sample237" Offset="0x1EB6B0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_237" FileName="Sample237" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_238" FileName="Sample238" Offset="0x1EC2B0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_238" FileName="Sample238" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_239" FileName="Sample239" Offset="0x1EC990" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_239" FileName="Sample239" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_240" FileName="Sample240" Offset="0x1EE390" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_240" FileName="Sample240" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_241" FileName="Sample241" Offset="0x1EF1B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_241" FileName="Sample241" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_242" FileName="Sample242" Offset="0x1EFCE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_242" FileName="Sample242" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_243" FileName="Sample243" Offset="0x1F1600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_243" FileName="Sample243" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_244" FileName="Sample244" Offset="0x1F3020" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_244" FileName="Sample244" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_245" FileName="Sample245" Offset="0x1F4010" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_245" FileName="Sample245" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_246" FileName="Sample246" Offset="0x1F4EB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_246" FileName="Sample246" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_247" FileName="Sample247" Offset="0x1F5E50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_247" FileName="Sample247" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_248" FileName="Sample248" Offset="0x1F7220" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_248" FileName="Sample248" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_249" FileName="Sample249" Offset="0x1F9490" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_249" FileName="Sample249" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_250" FileName="Sample250" Offset="0x1FA230" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_250" FileName="Sample250" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_251" FileName="Sample251" Offset="0x1FB850" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_251" FileName="Sample251" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_252" FileName="Sample252" Offset="0x1FEA30" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_252" FileName="Sample252" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_253" FileName="Sample253" Offset="0x1FFD80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_253" FileName="Sample253" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_254" FileName="Sample254" Offset="0x200840" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_254" FileName="Sample254" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_255" FileName="Sample255" Offset="0x206D10" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_255" FileName="Sample255" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_256" FileName="Sample256" Offset="0x209E40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_256" FileName="Sample256" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_257" FileName="Sample257" Offset="0x20B580" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_257" FileName="Sample257" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_258" FileName="Sample258" Offset="0x20BDA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_258" FileName="Sample258" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_259" FileName="Sample259" Offset="0x20C9E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_259" FileName="Sample259" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_260" FileName="Sample260" Offset="0x20DE70" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_260" FileName="Sample260" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_261" FileName="Sample261" Offset="0x20F440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_261" FileName="Sample261" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_262" FileName="Sample262" Offset="0x2115A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_262" FileName="Sample262" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_263" FileName="Sample263" Offset="0x212040" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_263" FileName="Sample263" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_264" FileName="Sample264" Offset="0x2147A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_264" FileName="Sample264" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_265" FileName="Sample265" Offset="0x214E10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_265" FileName="Sample265" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_266" FileName="Sample266" Offset="0x215810" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_266" FileName="Sample266" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_267" FileName="Sample267" Offset="0x216210" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_267" FileName="Sample267" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_268" FileName="Sample268" Offset="0x216D00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_268" FileName="Sample268" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_269" FileName="Sample269" Offset="0x2187D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_269" FileName="Sample269" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_270" FileName="Sample270" Offset="0x2193E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_270" FileName="Sample270" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_271" FileName="Sample271" Offset="0x219F10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_271" FileName="Sample271" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_272" FileName="Sample272" Offset="0x21A810" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_272" FileName="Sample272" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_273" FileName="Sample273" Offset="0x21AA80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_273" FileName="Sample273" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_274" FileName="Sample274" Offset="0x21ACF0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_274" FileName="Sample274" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_275" FileName="Sample275" Offset="0x21B150" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_275" FileName="Sample275" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_276" FileName="Sample276" Offset="0x21B370" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_276" FileName="Sample276" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_277" FileName="Sample277" Offset="0x21BBC0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_277" FileName="Sample277" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_278" FileName="Sample278" Offset="0x21C330" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_278" FileName="Sample278" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_279" FileName="Sample279" Offset="0x21CF00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_279" FileName="Sample279" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_280" FileName="Sample280" Offset="0x21DDB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_280" FileName="Sample280" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_281" FileName="Sample281" Offset="0x220770" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_281" FileName="Sample281" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_282" FileName="Sample282" Offset="0x2222F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_282" FileName="Sample282" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_283" FileName="Sample283" Offset="0x222BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_283" FileName="Sample283" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_284" FileName="Sample284" Offset="0x2230B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_284" FileName="Sample284" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_285" FileName="Sample285" Offset="0x223C90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_285" FileName="Sample285" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_286" FileName="Sample286" Offset="0x224FD0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_286" FileName="Sample286" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_287" FileName="Sample287" Offset="0x228A70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_287" FileName="Sample287" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_288" FileName="Sample288" Offset="0x22C380" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_288" FileName="Sample288" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_289" FileName="Sample289" Offset="0x22DD50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_289" FileName="Sample289" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_290" FileName="Sample290" Offset="0x233280" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_290" FileName="Sample290" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_291" FileName="Sample291" Offset="0x236F80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_291" FileName="Sample291" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_292" FileName="Sample292" Offset="0x237BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_292" FileName="Sample292" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_293" FileName="Sample293" Offset="0x23AD60" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_293" FileName="Sample293" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_294" FileName="Sample294" Offset="0x23D490" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_294" FileName="Sample294" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_295" FileName="Sample295" Offset="0x240600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_295" FileName="Sample295" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_296" FileName="Sample296" Offset="0x241690" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_296" FileName="Sample296" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_297" FileName="Sample297" Offset="0x241C20" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_297" FileName="Sample297" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_298" FileName="Sample298" Offset="0x243440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_298" FileName="Sample298" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_299" FileName="Sample299" Offset="0x244DD0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_299" FileName="Sample299" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_300" FileName="Sample300" Offset="0x247290" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_300" FileName="Sample300" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_301" FileName="Sample301" Offset="0x249810" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_301" FileName="Sample301" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_302" FileName="Sample302" Offset="0x24AB70" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_302" FileName="Sample302" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_303" FileName="Sample303" Offset="0x24BBE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_303" FileName="Sample303" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_304" FileName="Sample304" Offset="0x24C2C0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_304" FileName="Sample304" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_305" FileName="Sample305" Offset="0x24E060" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_305" FileName="Sample305" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_306" FileName="Sample306" Offset="0x24F440" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_306" FileName="Sample306" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_307" FileName="Sample307" Offset="0x24FED0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_307" FileName="Sample307" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_308" FileName="Sample308" Offset="0x250E20" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_308" FileName="Sample308" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_309" FileName="Sample309" Offset="0x2516D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_309" FileName="Sample309" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_310" FileName="Sample310" Offset="0x252B10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_310" FileName="Sample310" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_311" FileName="Sample311" Offset="0x255720" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_311" FileName="Sample311" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_312" FileName="Sample312" Offset="0x2564A0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_312" FileName="Sample312" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_313" FileName="Sample313" Offset="0x2581C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_313" FileName="Sample313" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_314" FileName="Sample314" Offset="0x258360" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_314" FileName="Sample314" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_315" FileName="Sample315" Offset="0x259120" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_315" FileName="Sample315" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_316" FileName="Sample316" Offset="0x259BF0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_316" FileName="Sample316" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_317" FileName="Sample317" Offset="0x25AAC0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_317" FileName="Sample317" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_318" FileName="Sample318" Offset="0x25C140" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_318" FileName="Sample318" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_319" FileName="Sample319" Offset="0x25CD60" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_319" FileName="Sample319" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_320" FileName="Sample320" Offset="0x25DB50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_320" FileName="Sample320" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_321" FileName="Sample321" Offset="0x25E9E0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_321" FileName="Sample321" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_322" FileName="Sample322" Offset="0x25FC50" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_322" FileName="Sample322" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_323" FileName="Sample323" Offset="0x260420" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_323" FileName="Sample323" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_324" FileName="Sample324" Offset="0x261790" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_324" FileName="Sample324" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_325" FileName="Sample325" Offset="0x262170" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_325" FileName="Sample325" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_326" FileName="Sample326" Offset="0x263270" SampleRate="22050" BaseNote="BF3"/> <Sample Name="SAMPLE_0_326" FileName="Sample326" SampleRate="22050" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_327" FileName="Sample327" Offset="0x264B60" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_327" FileName="Sample327" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_328" FileName="Sample328" Offset="0x26A060" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_328" FileName="Sample328" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_329" FileName="Sample329" Offset="0x26AAD0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_329" FileName="Sample329" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_330" FileName="Sample330" Offset="0x26B960" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_330" FileName="Sample330" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_331" FileName="Sample331" Offset="0x26BEF0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_331" FileName="Sample331" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_332" FileName="Sample332" Offset="0x26CE70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_332" FileName="Sample332" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_333" FileName="Sample333" Offset="0x26DF40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_333" FileName="Sample333" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_334" FileName="Sample334" Offset="0x26FC60" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_334" FileName="Sample334" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_335" FileName="Sample335" Offset="0x270E40" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_335" FileName="Sample335" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_336" FileName="Sample336" Offset="0x271A70" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_336" FileName="Sample336" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_337" FileName="Sample337" Offset="0x273860" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_337" FileName="Sample337" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_338" FileName="Sample338" Offset="0x274EA0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_338" FileName="Sample338" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_339" FileName="Sample339" Offset="0x2765B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_339" FileName="Sample339" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_340" FileName="Sample340" Offset="0x27C0A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_340" FileName="Sample340" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_341" FileName="Sample341" Offset="0x27E260" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_341" FileName="Sample341" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_342" FileName="Sample342" Offset="0x280C70" SampleRate="16000" BaseNote="G3"/> <Sample Name="SAMPLE_0_342" FileName="Sample342" SampleRate="16000" BaseNote="G3"/>
<Sample Name="SAMPLE_0_343" FileName="Sample343" Offset="0x283440" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_343" FileName="Sample343" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_344" FileName="Sample344" Offset="0x2869C0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_344" FileName="Sample344" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_345" FileName="Sample345" Offset="0x28BF50" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_345" FileName="Sample345" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_346" FileName="Sample346" Offset="0x28CE90" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_346" FileName="Sample346" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_347" FileName="Sample347" Offset="0x2938F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_347" FileName="Sample347" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_348" FileName="Sample348" Offset="0x29B480" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_348" FileName="Sample348" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_349" FileName="Sample349" Offset="0x29EB20" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_349" FileName="Sample349" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_350" FileName="Sample350" Offset="0x29FE30" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_350" FileName="Sample350" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_351" FileName="Sample351" Offset="0x2A4D40" SampleRate="32000" BaseNote="G4"/> <Sample Name="SAMPLE_0_351" FileName="Sample351" SampleRate="32000" BaseNote="G4"/>
<Sample Name="SAMPLE_0_352" FileName="Sample352" Offset="0x2A8500" SampleRate="32000" BaseNote="C2"/> <Sample Name="SAMPLE_0_352" FileName="Sample352" SampleRate="32000" BaseNote="C2"/>
<Sample Name="SAMPLE_0_353" FileName="Sample353" Offset="0x2AF020" SampleRate="22050" BaseNote="GF4"/> <Sample Name="SAMPLE_0_353" FileName="Sample353" SampleRate="22050" BaseNote="GF4"/>
<Sample Name="SAMPLE_0_354" FileName="Sample354" Offset="0x2B43B0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_354" FileName="Sample354" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_355" FileName="Sample355" Offset="0x2B9E60" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_355" FileName="Sample355" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_356" FileName="Sample356" Offset="0x2C8510" SampleRate="22050" BaseNote="A5"/> <Sample Name="SAMPLE_0_356" FileName="Sample356" SampleRate="22050" BaseNote="A5"/>
<Sample Name="SAMPLE_0_357" FileName="Sample357" Offset="0x2CFEE0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_357" FileName="Sample357" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_358" FileName="Sample358" Offset="0x2D96A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_358" FileName="Sample358" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_359" FileName="Sample359" Offset="0x2DFF40" SampleRate="22050" BaseNote="G3"/> <Sample Name="SAMPLE_0_359" FileName="Sample359" SampleRate="22050" BaseNote="G3"/>
<Sample Name="SAMPLE_0_360" FileName="Sample360" Offset="0x2E7410" SampleRate="22050" BaseNote="DF3"/> <Sample Name="SAMPLE_0_360" FileName="Sample360" SampleRate="22050" BaseNote="DF3"/>
<Sample Name="SAMPLE_0_361" FileName="Sample361" Offset="0x2EF650" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_361" FileName="Sample361" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_362" FileName="Sample362" Offset="0x2F3300" SampleRate="32000" BaseNote="DF3"/> <Sample Name="SAMPLE_0_362" FileName="Sample362" SampleRate="32000" BaseNote="DF3"/>
<Sample Name="SAMPLE_0_363" FileName="Sample363" Offset="0x2F8690" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_363" FileName="Sample363" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_364" FileName="Sample364" Offset="0x2F9A90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_364" FileName="Sample364" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_365" FileName="Sample365" Offset="0x2FD270" SampleRate="32000" BaseNote="F3"/> <Sample Name="SAMPLE_0_365" FileName="Sample365" SampleRate="32000" BaseNote="F3"/>
<Sample Name="SAMPLE_0_366" FileName="Sample366" Offset="0x301EC0" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_366" FileName="Sample366" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_367" FileName="Sample367" Offset="0x304E30" SampleRate="22000" BaseNote="C4"/> <Sample Name="SAMPLE_0_367" FileName="Sample367" SampleRate="22000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_368" FileName="Sample368" Offset="0x309BD0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_368" FileName="Sample368" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_369" FileName="Sample369" Offset="0x30C360" SampleRate="32000" BaseNote="D4"/> <Sample Name="SAMPLE_0_369" FileName="Sample369" SampleRate="32000" BaseNote="D4"/>
<Sample Name="SAMPLE_0_370" FileName="Sample370" Offset="0x30EAF0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_370" FileName="Sample370" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_371" FileName="Sample371" Offset="0x317260" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_371" FileName="Sample371" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_372" FileName="Sample372" Offset="0x31F640" SampleRate="32000" BaseNote="C6"/> <Sample Name="SAMPLE_0_372" FileName="Sample372" SampleRate="32000" BaseNote="C6"/>
<Sample Name="SAMPLE_0_373" FileName="Sample373" Offset="0x324660" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_373" FileName="Sample373" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_374" FileName="Sample374" Offset="0x328D10" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_374" FileName="Sample374" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_375" FileName="Sample375" Offset="0x32CA00" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_375" FileName="Sample375" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_376" FileName="Sample376" Offset="0x32ECB0" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_376" FileName="Sample376" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_377" FileName="Sample377" Offset="0x332D10" SampleRate="32000" BaseNote="A2"/> <Sample Name="SAMPLE_0_377" FileName="Sample377" SampleRate="32000" BaseNote="A2"/>
<Sample Name="SAMPLE_0_378" FileName="Sample378" Offset="0x335740" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_378" FileName="Sample378" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_379" FileName="Sample379" Offset="0x337A10" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_379" FileName="Sample379" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_380" FileName="Sample380" Offset="0x338450" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_380" FileName="Sample380" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_381" FileName="Sample381" Offset="0x33A980" SampleRate="32000" BaseNote="AF2"/> <Sample Name="SAMPLE_0_381" FileName="Sample381" SampleRate="32000" BaseNote="AF2"/>
<Sample Name="SAMPLE_0_382" FileName="Sample382" Offset="0x33BC30" SampleRate="32000" BaseNote="EF5"/> <Sample Name="SAMPLE_0_382" FileName="Sample382" SampleRate="32000" BaseNote="EF5"/>
<Sample Name="SAMPLE_0_383" FileName="Sample383" Offset="0x33D130" SampleRate="32000" BaseNote="DF5"/> <Sample Name="SAMPLE_0_383" FileName="Sample383" SampleRate="32000" BaseNote="DF5"/>
<Sample Name="SAMPLE_0_384" FileName="Sample384" Offset="0x3403F0" SampleRate="32000" BaseNote="D3"/> <Sample Name="SAMPLE_0_384" FileName="Sample384" SampleRate="32000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_385" FileName="Sample385" Offset="0x343870" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_385" FileName="Sample385" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_386" FileName="Sample386" Offset="0x34D670" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_386" FileName="Sample386" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_387" FileName="Sample387" Offset="0x351810" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_387" FileName="Sample387" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_388" FileName="Sample388" Offset="0x359170" SampleRate="24000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_388" FileName="Sample388" SampleRate="24000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_389" FileName="Sample389" Offset="0x35C900" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_389" FileName="Sample389" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_390" FileName="Sample390" Offset="0x35D100" SampleRate="22050" BaseNote="A3"/> <Sample Name="SAMPLE_0_390" FileName="Sample390" SampleRate="32000" BaseNote="C4" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_391" FileName="Sample391" Offset="0x364580" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_391" FileName="Sample391" SampleRate="16000" BaseNote="C4" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_392" FileName="Sample392" Offset="0x36FE80" SampleRate="27777" BaseNote="C4"/> <Sample Name="SAMPLE_0_392" FileName="Sample392" SampleRate="16000" BaseNote="C2" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_393" FileName="Sample393" Offset="0x374C20" SampleRate="32000" BaseNote="D3"/> <Sample Name="SAMPLE_0_393" FileName="Sample393" SampleRate="22050" BaseNote="A3"/>
<Sample Name="SAMPLE_0_394" FileName="Sample394" Offset="0x378360" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_394" FileName="Sample394" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_395" FileName="Sample395" Offset="0x37A6B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_395" FileName="Sample395" SampleRate="27777" BaseNote="C4"/>
<Sample Name="SAMPLE_0_396" FileName="Sample396" Offset="0x37B2A0" SampleRate="32000" BaseNote="F4"/> <Sample Name="SAMPLE_0_396" FileName="Sample396" SampleRate="32000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_397" FileName="Sample397" Offset="0x382830" SampleRate="32000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_397" FileName="Sample397" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_398" FileName="Sample398" Offset="0x384ED0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_398" FileName="Sample398" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_399" FileName="Sample399" Offset="0x387060" SampleRate="48000" BaseNote="D3"/> <Sample Name="SAMPLE_0_399" FileName="Sample399" SampleRate="32000" BaseNote="F4"/>
<Sample Name="SAMPLE_0_400" FileName="Sample400" Offset="0x38F000" SampleRate="32000" BaseNote="BF4"/> <Sample Name="SAMPLE_0_400" FileName="Sample400" SampleRate="32000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_401" FileName="Sample401" Offset="0x3926D0" SampleRate="32000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_401" FileName="Sample401" SampleRate="32000" BaseNote="BF2"/>
<Sample Name="SAMPLE_0_402" FileName="Sample402" Offset="0x396F80" SampleRate="32000" BaseNote="C6"/> <Sample Name="SAMPLE_0_402" FileName="Sample402" SampleRate="48000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_403" FileName="Sample403" Offset="0x397FA0" SampleRate="32000" BaseNote="G5"/> <Sample Name="SAMPLE_0_403" FileName="Sample403" SampleRate="32000" BaseNote="BF4"/>
<Sample Name="SAMPLE_0_404" FileName="Sample404" Offset="0x399790" SampleRate="24000" BaseNote="GF5"/> <Sample Name="SAMPLE_0_404" FileName="Sample404" SampleRate="32000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_405" FileName="Sample405" Offset="0x39A6B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_405" FileName="Sample405" SampleRate="32000" BaseNote="C6"/>
<Sample Name="SAMPLE_0_406" FileName="Sample406" Offset="0x3A4BE0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_406" FileName="Sample406" SampleRate="32000" BaseNote="G5"/>
<Sample Name="SAMPLE_0_407" FileName="Sample407" Offset="0x3AA6E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_407" FileName="Sample407" SampleRate="24000" BaseNote="GF5"/>
<Sample Name="SAMPLE_0_408" FileName="Sample408" Offset="0x3ACC20" SampleRate="32000" BaseNote="DF4"/> <Sample Name="SAMPLE_0_408" FileName="Sample408" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_409" FileName="Sample409" Offset="0x3AE1C0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_409" FileName="Sample409" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_410" FileName="Sample410" Offset="0x3B45D0" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_410" FileName="Sample410" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_411" FileName="Sample411" Offset="0x3B5490" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_411" FileName="Sample411" SampleRate="32000" BaseNote="DF4"/>
<Sample Name="SAMPLE_0_412" FileName="Sample412" Offset="0x3B63F0" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_412" FileName="Sample412" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_413" FileName="Sample413" Offset="0x3B71F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_413" FileName="Sample413" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_414" FileName="Sample414" Offset="0x3B94B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_414" FileName="Sample414" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_415" FileName="Sample415" Offset="0x3BBC80" SampleRate="22050" BaseNote="F6"/> <Sample Name="SAMPLE_0_415" FileName="Sample415" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_416" FileName="Sample416" Offset="0x3BE750" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_416" FileName="Sample416" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_417" FileName="Sample417" Offset="0x3BF6A0" SampleRate="32000" BaseNote="A1"/> <Sample Name="SAMPLE_0_417" FileName="Sample417" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_418" FileName="Sample418" Offset="0x3C0360" SampleRate="24000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_418" FileName="Sample418" SampleRate="22050" BaseNote="F6"/>
<Sample Name="SAMPLE_0_419" FileName="Sample419" Offset="0x3C2B40" SampleRate="24000" BaseNote="F4"/> <Sample Name="SAMPLE_0_419" FileName="Sample419" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_420" FileName="Sample420" Offset="0x3C4D00" SampleRate="24000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_420" FileName="Sample420" SampleRate="32000" BaseNote="A1"/>
<Sample Name="SAMPLE_0_421" FileName="Sample421" Offset="0x3C6BD0" SampleRate="32000" BaseNote="EF3"/> <Sample Name="SAMPLE_0_421" FileName="Sample421" SampleRate="24000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_422" FileName="Sample422" Offset="0x3CAC50" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_422" FileName="Sample422" SampleRate="24000" BaseNote="F4"/>
<Sample Name="SAMPLE_0_423" FileName="Sample423" Offset="0x3CF8A0" SampleRate="16000" BaseNote="DF6"/> <Sample Name="SAMPLE_0_423" FileName="Sample423" SampleRate="24000" BaseNote="BF2"/>
<Sample Name="SAMPLE_0_424" FileName="Sample424" Offset="0x3D0140" SampleRate="22050" BaseNote="B5"/> <Sample Name="SAMPLE_0_424" FileName="Sample424" SampleRate="32000" BaseNote="EF3"/>
<Sample Name="SAMPLE_0_425" FileName="Sample425" Offset="0x3D0C00" SampleRate="32000" BaseNote="BF4"/> <Sample Name="SAMPLE_0_425" FileName="Sample425" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_426" FileName="Sample426" Offset="0x3D3A40" SampleRate="32000" BaseNote="EF4"/> <Sample Name="SAMPLE_0_426" FileName="Sample426" SampleRate="16000" BaseNote="DF6"/>
<Sample Name="SAMPLE_0_427" FileName="Sample427" Offset="0x3D62E0" SampleRate="16000" BaseNote="C2"/> <Sample Name="SAMPLE_0_427" FileName="Sample427" SampleRate="22050" BaseNote="B5"/>
<Sample Name="SAMPLE_0_428" FileName="Sample428" Offset="0x3E3F50" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_428" FileName="Sample428" SampleRate="32000" BaseNote="BF4"/>
<Sample Name="SAMPLE_0_429" FileName="Sample429" Offset="0x3E8BB0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_429" FileName="Sample429" SampleRate="32000" BaseNote="EF4"/>
<Sample Name="SAMPLE_0_430" FileName="Sample430" SampleRate="16000" BaseNote="C2" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_431" FileName="Sample431" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_432" FileName="Sample432" SampleRate="32000" BaseNote="BF2"/>
</SampleBank> </SampleBank>

View file

@ -1,4 +1,4 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_2" Index="2"> <SampleBank Name="SampleBank_2" Index="2">
<Sample Name="SAMPLE_2_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="F4"/> <Sample Name="SAMPLE_2_0" FileName="Sample0" SampleRate="32000" BaseNote="F4"/>
</SampleBank> </SampleBank>

View file

@ -1,8 +1,8 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_3" Index="3"> <SampleBank Name="SampleBank_3" Index="3">
<Sample Name="SAMPLE_3_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_0" FileName="Sample0" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_1" FileName="Sample1" Offset="0x008BC0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_1" FileName="Sample1" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_2" FileName="Sample2" Offset="0x00A590" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_2" FileName="Sample2" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_3" FileName="Sample3" Offset="0x00B3B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_3" FileName="Sample3" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_4" FileName="Sample4" Offset="0x016480" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_4" FileName="Sample4" SampleRate="32000" BaseNote="C4"/>
</SampleBank> </SampleBank>

View file

@ -1,8 +1,8 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_4" Index="4"> <SampleBank Name="SampleBank_4" Index="4">
<Sample Name="SAMPLE_4_0" FileName="Sample0" Offset="0x000000" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_4_0" FileName="Sample0" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_4_1" FileName="Sample1" Offset="0x006410" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_4_1" FileName="Sample1" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_4_2" FileName="Sample2" Offset="0x0072D0" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_4_2" FileName="Sample2" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_4_3" FileName="Sample3" Offset="0x008230" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_4_3" FileName="Sample3" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_4_4" FileName="Sample4" Offset="0x009030" SampleRate="32000" BaseNote="DF4"/> <Sample Name="SAMPLE_4_4" FileName="Sample4" SampleRate="32000" BaseNote="DF4"/>
</SampleBank> </SampleBank>

View file

@ -1,9 +1,9 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_5" Index="5"> <SampleBank Name="SampleBank_5" Index="5">
<Sample Name="SAMPLE_5_0" FileName="Sample0" Offset="0x000000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_5_0" FileName="Sample0" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_5_1" FileName="Sample1" Offset="0x002540" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_5_1" FileName="Sample1" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_5_2" FileName="Sample2" Offset="0x004800" SampleRate="22050" BaseNote="BF4"/> <Sample Name="SAMPLE_5_2" FileName="Sample2" SampleRate="22050" BaseNote="BF4"/>
<Sample Name="SAMPLE_5_3" FileName="Sample3" Offset="0x0072D0" SampleRate="16000" BaseNote="DF6"/> <Sample Name="SAMPLE_5_3" FileName="Sample3" SampleRate="16000" BaseNote="DF6"/>
<Sample Name="SAMPLE_5_4" FileName="Sample4" Offset="0x007B70" SampleRate="22050" BaseNote="B5"/> <Sample Name="SAMPLE_5_4" FileName="Sample4" SampleRate="22050" BaseNote="B5"/>
<Sample Name="SAMPLE_5_5" FileName="Sample5" Offset="0x008630" SampleRate="22050" BaseNote="A3"/> <Sample Name="SAMPLE_5_5" FileName="Sample5" SampleRate="22050" BaseNote="A3"/>
</SampleBank> </SampleBank>

View file

@ -1,10 +1,10 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_6" Index="6"> <SampleBank Name="SampleBank_6" Index="6">
<Sample Name="SAMPLE_6_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_0" FileName="Sample0" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_1" FileName="Sample1" Offset="0x00B0D0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_6_1" FileName="Sample1" SampleRate="32000" BaseNote="BF2"/>
<Sample Name="SAMPLE_6_2" FileName="Sample2" Offset="0x00E120" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_2" FileName="Sample2" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_3" FileName="Sample3" Offset="0x0103E0" SampleRate="22050" BaseNote="BF4"/> <Sample Name="SAMPLE_6_3" FileName="Sample3" SampleRate="22050" BaseNote="BF4"/>
<Sample Name="SAMPLE_6_4" FileName="Sample4" Offset="0x012EB0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_4" FileName="Sample4" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_5" FileName="Sample5" Offset="0x01D3E0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_6_5" FileName="Sample5" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_6" FileName="Sample6" Offset="0x022EE0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_6_6" FileName="Sample6" SampleRate="24000" BaseNote="C4"/>
</SampleBank> </SampleBank>

View file

@ -5,16 +5,19 @@
<Envelope Name="Env1"/> <Envelope Name="Env1"/>
<Envelope Name="Env2"/> <Envelope Name="Env2"/>
<Envelope Name="Env3"/> <Envelope Name="Env3"/>
<Envelope Name="Env4"/> <Envelope Name="Env4" VersionExclude="ntsc-1.0,ntsc-1.1"/>
</Envelopes> </Envelopes>
<Instruments> <Instruments>
<Instrument ProgramNumber="0" Name="INST_0" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="1" Name="INST_1" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="2" Name="INST_2" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="3" Name="INST_3"/> <Instrument ProgramNumber="3" Name="INST_3"/>
<Instrument ProgramNumber="5" Name="INST_5"/> <Instrument ProgramNumber="5" Name="INST_5"/>
<Instrument ProgramNumber="6" Name="INST_6"/> <Instrument ProgramNumber="6" Name="INST_6"/>
<Instrument ProgramNumber="10" Name="INST_10"/> <Instrument ProgramNumber="10" Name="INST_10" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="11" Name="INST_11"/> <Instrument ProgramNumber="11" Name="INST_11" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="12" Name="INST_12"/> <Instrument ProgramNumber="12" Name="INST_12" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="13" Name="INST_13"/> <Instrument ProgramNumber="13" Name="INST_13" VersionExclude="ntsc-1.0,ntsc-1.1"/>
</Instruments> </Instruments>
<Drums> <Drums>
<Drum Name="DRUM_0"/> <Drum Name="DRUM_0"/>

View file

@ -389,12 +389,18 @@ ALIGNED(4) typedef struct PreNmiBuff {
} PreNmiBuff; // size = 0x18 (actually osAppNMIBuffer is 0x40 bytes large but the rest is unused) } PreNmiBuff; // size = 0x18 (actually osAppNMIBuffer is 0x40 bytes large but the rest is unused)
typedef enum ViModeEditState { typedef enum ViModeEditState {
#if OOT_VERSION < PAL_1_0
/* -2 */ VI_MODE_EDIT_STATE_NEGATIVE_2 = -2, /* -2 */ VI_MODE_EDIT_STATE_NEGATIVE_2 = -2,
/* -1 */ VI_MODE_EDIT_STATE_NEGATIVE_1, /* -1 */ VI_MODE_EDIT_STATE_NEGATIVE_1,
/* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
/* 1 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
/* 2 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
#else
/* 0 */ VI_MODE_EDIT_STATE_INACTIVE, /* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
/* 1 */ VI_MODE_EDIT_STATE_ACTIVE, /* 1 */ VI_MODE_EDIT_STATE_ACTIVE,
/* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
/* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
#endif
} ViModeEditState; } ViModeEditState;
typedef struct ViMode { typedef struct ViMode {

View file

@ -146,8 +146,9 @@ typedef struct ActorShape {
// //
#define ACTOR_FLAG_10 (1 << 10) #define ACTOR_FLAG_10 (1 << 10)
// // A clump of grass (EN_KUSA) has been destroyed.
#define ACTOR_FLAG_ENKUSA_CUT (1 << 11) // This flag is used to communicate with the spawner actor (OBJ_MURE).
#define ACTOR_FLAG_GRASS_DESTROYED (1 << 11)
// Actor will not shake when a quake occurs // Actor will not shake when a quake occurs
#define ACTOR_FLAG_IGNORE_QUAKE (1 << 12) #define ACTOR_FLAG_IGNORE_QUAKE (1 << 12)
@ -155,11 +156,11 @@ typedef struct ActorShape {
// //
#define ACTOR_FLAG_13 (1 << 13) #define ACTOR_FLAG_13 (1 << 13)
// // When hit by an arrow, the actor will be able to attach to the arrow and fly with it in the air
#define ACTOR_FLAG_14 (1 << 14) #define ACTOR_FLAG_CAN_ATTACH_TO_ARROW (1 << 14)
// // Actor is currently attached to an arrow and flying with it in the air
#define ACTOR_FLAG_15 (1 << 15) #define ACTOR_FLAG_ATTACHED_TO_ARROW (1 << 15)
// Player automatically accepts a Talk Offer without needing to press the A button. // Player automatically accepts a Talk Offer without needing to press the A button.
// Player still has to meet all conditions to be able to receive a talk offer (for example, being in range). // Player still has to meet all conditions to be able to receive a talk offer (for example, being in range).

2
spec
View file

@ -219,7 +219,9 @@ beginseg
include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_35.o" include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_35.o"
include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_36.o" include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_36.o"
include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_37.o" include "$(BUILD_DIR)/assets/audio/soundfonts/Soundfont_37.o"
#if OOT_VERSION >= PAL_1_0
include "$(BUILD_DIR)/assets/audio/audiobank_padding.o" include "$(BUILD_DIR)/assets/audio/audiobank_padding.o"
#endif
endseg endseg
beginseg beginseg

View file

@ -1,6 +1,6 @@
#if PLATFORM_N64 #if PLATFORM_N64
#pragma increment_block_number "ntsc-1.2:0 pal-1.0:0 pal-1.1:0" #pragma increment_block_number "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#include "global.h" #include "global.h"
#include "fault.h" #include "fault.h"
@ -8,7 +8,7 @@
#include "stack.h" #include "stack.h"
#include "terminal.h" #include "terminal.h"
#pragma increment_block_number "ntsc-1.2:192 pal-1.0:192 pal-1.1:192" #pragma increment_block_number "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:96 pal-1.0:96 pal-1.1:96"
typedef struct FaultMgr { typedef struct FaultMgr {
OSThread thread; OSThread thread;

View file

@ -8,7 +8,7 @@
#define GFXPOOL_TAIL_MAGIC 0x5678 #define GFXPOOL_TAIL_MAGIC 0x5678
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:160 pal-1.0:160 pal-1.1:160" "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
/** /**
* The time at which the previous `Graph_Update` ended. * The time at which the previous `Graph_Update` ended.

View file

@ -5,7 +5,7 @@
extern uintptr_t gSegments[NUM_SEGMENTS]; extern uintptr_t gSegments[NUM_SEGMENTS];
#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \ #pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
extern struct PreNmiBuff* gAppNmiBufferPtr; extern struct PreNmiBuff* gAppNmiBufferPtr;
extern struct Scheduler gScheduler; extern struct Scheduler gScheduler;
@ -24,7 +24,7 @@ extern struct IrqMgr gIrqMgr;
#endif #endif
#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \ #pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
"ntsc-1.2:148 pal-1.0:146 pal-1.1:146" "ntsc-1.0:151 ntsc-1.1:151 ntsc-1.2:151 pal-1.0:149 pal-1.1:149"
extern u8 _buffersSegmentEnd[]; extern u8 _buffersSegmentEnd[];

View file

@ -6,7 +6,7 @@
#include "sys_math3d.h" #include "sys_math3d.h"
#pragma increment_block_number "gc-eu:103 gc-eu-mq:103 gc-jp:103 gc-jp-ce:103 gc-jp-mq:103 gc-us:103 gc-us-mq:103" \ #pragma increment_block_number "gc-eu:103 gc-eu-mq:103 gc-jp:103 gc-jp-ce:103 gc-jp-mq:103 gc-us:103 gc-us-mq:103" \
"ntsc-1.2:79 pal-1.0:80 pal-1.1:80" "ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:79 pal-1.0:80 pal-1.1:80"
s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB, s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB,
Vec3f* lineAClosestToB, Vec3f* lineBClosestToA); Vec3f* lineAClosestToB, Vec3f* lineBClosestToA);

View file

@ -12,7 +12,7 @@
#include "assets/objects/object_bdoor/object_bdoor.h" #include "assets/objects/object_bdoor/object_bdoor.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:0 pal-1.0:0 pal-1.1:0" "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
static CollisionPoly* sCurCeilingPoly; static CollisionPoly* sCurCeilingPoly;
static s32 sCurCeilingBgId; static s32 sCurCeilingBgId;
@ -2072,7 +2072,7 @@ s32 func_8002F9EC(PlayState* play, Actor* actor, CollisionPoly* poly, s32 bgId,
} }
#pragma increment_block_number "gc-eu:22 gc-eu-mq:22 gc-jp:22 gc-jp-ce:22 gc-jp-mq:22 gc-us:22 gc-us-mq:22" \ #pragma increment_block_number "gc-eu:22 gc-eu-mq:22 gc-jp:22 gc-jp-ce:22 gc-jp-mq:22 gc-us:22 gc-us-mq:22" \
"ntsc-1.2:22 pal-1.0:22 pal-1.1:22" "ntsc-1.0:22 ntsc-1.1:22 ntsc-1.2:22 pal-1.0:22 pal-1.1:22"
// Local data used for Farore's Wind light (stored in BSS) // Local data used for Farore's Wind light (stored in BSS)
LightInfo D_8015BC00; LightInfo D_8015BC00;

View file

@ -1,7 +1,7 @@
#include "global.h" #include "global.h"
#include "terminal.h" #include "terminal.h"
#pragma increment_block_number "ntsc-1.2:136" #pragma increment_block_number "ntsc-1.0:136 ntsc-1.1:136 ntsc-1.2:136"
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList); u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList);
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);

View file

@ -5,7 +5,7 @@
#include "overlays/actors/ovl_En_Horse/z_en_horse.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h"
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.2:192 pal-1.0:192 pal-1.1:192" "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags); s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange); s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) {
} }
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:90 pal-1.0:88 pal-1.1:88" "ntsc-1.0:93 ntsc-1.1:93 ntsc-1.2:93 pal-1.0:91 pal-1.1:91"
s32 Camera_KeepOn4(Camera* camera) { s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50; static Vec3f D_8015BD50;

View file

@ -16,7 +16,7 @@
#include "z_lib.h" #include "z_lib.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:96 pal-1.0:96 pal-1.1:96" "ntsc-1.0:104 ntsc-1.1:104 ntsc-1.2:104 pal-1.0:104 pal-1.1:104"
typedef s32 (*ColChkResetFunc)(PlayState*, Collider*); typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*); typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
@ -2225,7 +2225,7 @@ void CollisionCheck_ATTrisVsACCyl(PlayState* play, CollisionCheckContext* colChk
} }
#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \ #pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \
"ntsc-1.2:252 pal-1.0:252 pal-1.1:252" "ntsc-1.0:252 ntsc-1.1:252 ntsc-1.2:252 pal-1.0:252 pal-1.1:252"
void CollisionCheck_ATCylVsACQuad(PlayState* play, CollisionCheckContext* colChkCtx, Collider* atCol, Collider* acCol) { void CollisionCheck_ATCylVsACQuad(PlayState* play, CollisionCheckContext* colChkCtx, Collider* atCol, Collider* acCol) {
static TriNorm tri1; static TriNorm tri1;

View file

@ -3,7 +3,7 @@
#include "versions.h" #include "versions.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:192 pal-1.0:192 pal-1.1:192" "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
ALIGNED(16) SaveContext gSaveContext; ALIGNED(16) SaveContext gSaveContext;
u32 D_8015FA88; u32 D_8015FA88;

View file

@ -13,7 +13,7 @@ typedef struct InputCombo {
} InputCombo; // size = 0x4 } InputCombo; // size = 0x4
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.2:192 pal-1.0:192 pal-1.1:192" "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
RegEditor* gRegEditor; RegEditor* gRegEditor;

View file

@ -124,8 +124,8 @@ u16 gCamAtSplinePointsAppliedFrame;
u16 gCamEyePointAppliedFrame; u16 gCamEyePointAppliedFrame;
u16 gCamAtPointAppliedFrame; u16 gCamAtPointAppliedFrame;
#pragma increment_block_number "gc-eu:186 gc-eu-mq:176 gc-jp:188 gc-jp-ce:188 gc-jp-mq:176 gc-us:188 gc-us-mq:176" \ #pragma increment_block_number "gc-eu:188 gc-eu-mq:176 gc-jp:188 gc-jp-ce:188 gc-jp-mq:176 gc-us:188 gc-us-mq:176" \
"ntsc-1.2:80 pal-1.0:80 pal-1.1:80" "ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:80 pal-1.0:80 pal-1.1:80"
// Cam ID to return to when a scripted cutscene is finished // Cam ID to return to when a scripted cutscene is finished
s16 sReturnToCamId; s16 sReturnToCamId;

View file

@ -1,5 +1,5 @@
#pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ #pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
"ntsc-1.2:224 pal-1.0:224 pal-1.1:224" "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:224 pal-1.1:224"
#include "global.h" #include "global.h"
#include "terminal.h" #include "terminal.h"

View file

@ -1,5 +1,5 @@
#pragma increment_block_number "gc-eu:240 gc-eu-mq:240 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ #pragma increment_block_number "gc-eu:244 gc-eu-mq:244 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
"ntsc-1.2:224 pal-1.0:248 pal-1.1:248" "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:252 pal-1.1:252"
#include "global.h" #include "global.h"
#include "ultra64.h" #include "ultra64.h"
@ -215,7 +215,7 @@ s16 sSunDepthTestX;
s16 sSunDepthTestY; s16 sSunDepthTestY;
#pragma increment_block_number "gc-eu:240 gc-eu-mq:240 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ #pragma increment_block_number "gc-eu:240 gc-eu-mq:240 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
"ntsc-1.2:224 pal-1.0:240 pal-1.1:240" "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:240 pal-1.1:240"
LightNode* sNGameOverLightNode; LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo; LightInfo sNGameOverLightInfo;

View file

@ -8,7 +8,7 @@
#endif #endif
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:112 pal-1.0:128 pal-1.1:128" "ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:112 pal-1.0:128 pal-1.1:128"
#if !PLATFORM_GC #if !PLATFORM_GC
#define OCARINA_BUTTON_A_PRIM_1_R 80 #define OCARINA_BUTTON_A_PRIM_1_R 80

View file

@ -1190,7 +1190,13 @@ void Scene_DrawConfigKokiriForest(PlayState* play) {
spA3 = 255 - (u8)play->roomCtx.drawParams[0]; spA3 = 255 - (u8)play->roomCtx.drawParams[0];
} else if (gSaveContext.sceneLayer == 6) { } else if (gSaveContext.sceneLayer == 6) {
spA0 = play->roomCtx.drawParams[0] + 500; spA0 = play->roomCtx.drawParams[0] + 500;
} else if ((!IS_CUTSCENE_LAYER || LINK_IS_ADULT) && GET_EVENTCHKINF(EVENTCHKINF_07)) { } else if (
#if OOT_VERSION < PAL_1_0
!IS_CUTSCENE_LAYER && GET_EVENTCHKINF(EVENTCHKINF_07)
#else
(!IS_CUTSCENE_LAYER || LINK_IS_ADULT) && GET_EVENTCHKINF(EVENTCHKINF_07)
#endif
) {
spA0 = 2150; spA0 = 2150;
} }

View file

@ -6,7 +6,7 @@
#include "stack.h" #include "stack.h"
#include "versions.h" #include "versions.h"
#pragma increment_block_number "ntsc-1.2:128 pal-1.0:128 pal-1.1:128" #pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
typedef struct struct_801D9C30 { typedef struct struct_801D9C30 {
/* 0x000 */ s32 unk_000; // disk start /* 0x000 */ s32 unk_000; // disk start

View file

@ -101,22 +101,22 @@ static ColliderCylinderInit sLightBallCylinderInit = {
static u8 D_808E4C58[] = { 0, 12, 10, 12, 14, 16, 12, 14, 16, 12, 14, 16, 12, 14, 16, 10, 16, 14 }; static u8 D_808E4C58[] = { 0, 12, 10, 12, 14, 16, 12, 14, 16, 12, 14, 16, 12, 14, 16, 10, 16, 14 };
static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f }; static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:0" \ #pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
"pal-1.0:0 pal-1.1:0" "ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
static EnGanonMant* sCape; static EnGanonMant* sCape;
// TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving // TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving
// data around. It would be easier if we had more options for controlling BSS ordering in debug. // data around. It would be easier if we had more options for controlling BSS ordering in debug.
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
static s32 sSeed1; static s32 sSeed1;
static s32 sSeed2; static s32 sSeed2;
static s32 sSeed3; static s32 sSeed3;
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
static BossGanon* sGanondorf; static BossGanon* sGanondorf;

View file

@ -149,7 +149,7 @@ void EnArrow_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyQuad(play, &this->collider); Collider_DestroyQuad(play, &this->collider);
if ((this->hitActor != NULL) && (this->hitActor->update != NULL)) { if ((this->hitActor != NULL) && (this->hitActor->update != NULL)) {
this->hitActor->flags &= ~ACTOR_FLAG_15; this->hitActor->flags &= ~ACTOR_FLAG_ATTACHED_TO_ARROW;
} }
} }
@ -287,11 +287,11 @@ void EnArrow_Fly(EnArrow* this, PlayState* play) {
hitActor = this->collider.base.at; hitActor = this->collider.base.at;
if ((hitActor->update != NULL) && !(this->collider.base.atFlags & AT_BOUNCED) && if ((hitActor->update != NULL) && !(this->collider.base.atFlags & AT_BOUNCED) &&
(hitActor->flags & ACTOR_FLAG_14)) { (hitActor->flags & ACTOR_FLAG_CAN_ATTACH_TO_ARROW)) {
this->hitActor = hitActor; this->hitActor = hitActor;
EnArrow_CarryActor(this, play); EnArrow_CarryActor(this, play);
Math_Vec3f_Diff(&hitActor->world.pos, &this->actor.world.pos, &this->unk_250); Math_Vec3f_Diff(&hitActor->world.pos, &this->actor.world.pos, &this->unk_250);
hitActor->flags |= ACTOR_FLAG_15; hitActor->flags |= ACTOR_FLAG_ATTACHED_TO_ARROW;
this->collider.base.atFlags &= ~AT_HIT; this->collider.base.atFlags &= ~AT_HIT;
this->actor.speed /= 2.0f; this->actor.speed /= 2.0f;
this->actor.velocity.y /= 2.0f; this->actor.velocity.y /= 2.0f;
@ -353,14 +353,14 @@ void EnArrow_Fly(EnArrow* this, PlayState* play) {
this->hitActor->world.pos.y = hitPoint.y + ((sp54.y <= hitPoint.y) ? 1.0f : -1.0f); this->hitActor->world.pos.y = hitPoint.y + ((sp54.y <= hitPoint.y) ? 1.0f : -1.0f);
this->hitActor->world.pos.z = hitPoint.z + ((sp54.z <= hitPoint.z) ? 1.0f : -1.0f); this->hitActor->world.pos.z = hitPoint.z + ((sp54.z <= hitPoint.z) ? 1.0f : -1.0f);
Math_Vec3f_Diff(&this->hitActor->world.pos, &this->actor.world.pos, &this->unk_250); Math_Vec3f_Diff(&this->hitActor->world.pos, &this->actor.world.pos, &this->unk_250);
this->hitActor->flags &= ~ACTOR_FLAG_15; this->hitActor->flags &= ~ACTOR_FLAG_ATTACHED_TO_ARROW;
this->hitActor = NULL; this->hitActor = NULL;
} else { } else {
Math_Vec3f_Sum(&this->actor.world.pos, &this->unk_250, &this->hitActor->world.pos); Math_Vec3f_Sum(&this->actor.world.pos, &this->unk_250, &this->hitActor->world.pos);
} }
if (this->touchedPoly && (this->hitActor != NULL)) { if (this->touchedPoly && (this->hitActor != NULL)) {
this->hitActor->flags &= ~ACTOR_FLAG_15; this->hitActor->flags &= ~ACTOR_FLAG_ATTACHED_TO_ARROW;
this->hitActor = NULL; this->hitActor = NULL;
} }
} else { } else {

View file

@ -345,7 +345,7 @@ void EnBb_Init(Actor* thisx, PlayState* play) {
this->flamePrimBlue = this->flameEnvColor.b = 255; this->flamePrimBlue = this->flameEnvColor.b = 255;
thisx->world.pos.y += 50.0f; thisx->world.pos.y += 50.0f;
EnBb_SetupBlue(this); EnBb_SetupBlue(this);
thisx->flags |= ACTOR_FLAG_14; thisx->flags |= ACTOR_FLAG_CAN_ATTACH_TO_ARROW;
break; break;
case ENBB_RED: case ENBB_RED:
thisx->naviEnemyId = NAVI_ENEMY_RED_BUBBLE; thisx->naviEnemyId = NAVI_ENEMY_RED_BUBBLE;
@ -374,7 +374,7 @@ void EnBb_Init(Actor* thisx, PlayState* play) {
EnBb_SetupWhite(play, this); EnBb_SetupWhite(play, this);
EnBb_SetWaypoint(this, play); EnBb_SetWaypoint(this, play);
EnBb_FaceWaypoint(this); EnBb_FaceWaypoint(this);
thisx->flags |= ACTOR_FLAG_14; thisx->flags |= ACTOR_FLAG_CAN_ATTACH_TO_ARROW;
break; break;
case ENBB_GREEN_BIG: case ENBB_GREEN_BIG:
this->path = this->actionState >> 4; this->path = this->actionState >> 4;
@ -1237,7 +1237,7 @@ void EnBb_Update(Actor* thisx, PlayState* play2) {
if (this->actor.colChkInfo.damageEffect != 0xD) { if (this->actor.colChkInfo.damageEffect != 0xD) {
this->actionFunc(this, play); this->actionFunc(this, play);
if ((this->actor.params <= ENBB_BLUE) && (this->actor.speed >= -6.0f) && if ((this->actor.params <= ENBB_BLUE) && (this->actor.speed >= -6.0f) &&
((this->actor.flags & ACTOR_FLAG_15) == 0)) { !(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
Actor_MoveXZGravity(&this->actor); Actor_MoveXZGravity(&this->actor);
} }
if (this->moveMode == BBMOVE_NORMAL) { if (this->moveMode == BBMOVE_NORMAL) {

View file

@ -8,7 +8,8 @@
#include "versions.h" #include "versions.h"
#include "assets/objects/object_bl/object_bl.h" #include "assets/objects/object_bl/object_bl.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_14) #define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
void EnBili_Init(Actor* thisx, PlayState* play); void EnBili_Init(Actor* thisx, PlayState* play);
void EnBili_Destroy(Actor* thisx, PlayState* play); void EnBili_Destroy(Actor* thisx, PlayState* play);
@ -251,7 +252,7 @@ void EnBili_SetupFrozen(EnBili* this, PlayState* play) {
s32 i; s32 i;
Vec3f effectPos; Vec3f effectPos;
if (!(this->actor.flags & ACTOR_FLAG_15)) { if (!(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
this->actor.gravity = -1.0f; this->actor.gravity = -1.0f;
} }
@ -456,7 +457,7 @@ void EnBili_Recoil(EnBili* this, PlayState* play) {
void EnBili_Burnt(EnBili* this, PlayState* play) { void EnBili_Burnt(EnBili* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
if (this->actor.flags & ACTOR_FLAG_15) { if (this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW) {
this->actor.colorFilterTimer = 20; this->actor.colorFilterTimer = 20;
} else { } else {
if (this->timer != 0) { if (this->timer != 0) {
@ -477,7 +478,7 @@ void EnBili_Die(EnBili* this, PlayState* play) {
s32 i; s32 i;
if (this->actor.draw != NULL) { if (this->actor.draw != NULL) {
if (this->actor.flags & ACTOR_FLAG_15) { if (this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW) {
return; return;
} }
this->actor.draw = NULL; this->actor.draw = NULL;
@ -533,7 +534,7 @@ void EnBili_Frozen(EnBili* this, PlayState* play) {
this->timer--; this->timer--;
} }
if (!(this->actor.flags & ACTOR_FLAG_15)) { if (!(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
this->actor.gravity = -1.0f; this->actor.gravity = -1.0f;
} }

View file

@ -1,7 +1,8 @@
#include "z_en_crow.h" #include "z_en_crow.h"
#include "assets/objects/object_crow/object_crow.h" #include "assets/objects/object_crow/object_crow.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_14) #define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
void EnCrow_Init(Actor* thisx, PlayState* play); void EnCrow_Init(Actor* thisx, PlayState* play);
void EnCrow_Destroy(Actor* thisx, PlayState* play); void EnCrow_Destroy(Actor* thisx, PlayState* play);
@ -175,7 +176,7 @@ void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
} }
if (this->actor.flags & ACTOR_FLAG_15) { if (this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW) {
this->actor.speed = 0.0f; this->actor.speed = 0.0f;
} }
@ -329,7 +330,7 @@ void EnCrow_Damaged(EnCrow* this, PlayState* play) {
Math_StepToF(&this->actor.speed, 0.0f, 0.5f); Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->actor.colorFilterTimer = 40; this->actor.colorFilterTimer = 40;
if (!(this->actor.flags & ACTOR_FLAG_15)) { if (!(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
if (this->actor.colorFilterParams & 0x4000) { if (this->actor.colorFilterParams & 0x4000) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x4000, 0x200); Math_ScaledStepToS(&this->actor.shape.rot.x, 0x4000, 0x200);
this->actor.shape.rot.z += 0x1780; this->actor.shape.rot.z += 0x1780;

View file

@ -9,7 +9,8 @@
#include "assets/objects/object_firefly/object_firefly.h" #include "assets/objects/object_firefly/object_firefly.h"
#include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_14) #define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
void EnFirefly_Init(Actor* thisx, PlayState* play); void EnFirefly_Init(Actor* thisx, PlayState* play);
void EnFirefly_Destroy(Actor* thisx, PlayState* play); void EnFirefly_Destroy(Actor* thisx, PlayState* play);
@ -423,7 +424,7 @@ void EnFirefly_Fall(EnFirefly* this, PlayState* play) {
this->actor.colorFilterTimer = 40; this->actor.colorFilterTimer = 40;
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
Math_StepToF(&this->actor.speed, 0.0f, 0.5f); Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (this->actor.flags & ACTOR_FLAG_15) { if (this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW) {
this->actor.colorFilterTimer = 40; this->actor.colorFilterTimer = 40;
} else { } else {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x6800, 0x200); Math_ScaledStepToS(&this->actor.shape.rot.x, 0x6800, 0x200);
@ -687,7 +688,7 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play); this->actionFunc(this, play);
if (!(this->actor.flags & ACTOR_FLAG_15)) { if (!(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
if ((this->actor.colChkInfo.health == 0) || (this->actionFunc == EnFirefly_Stunned)) { if ((this->actor.colChkInfo.health == 0) || (this->actionFunc == EnFirefly_Stunned)) {
Actor_MoveXZGravity(&this->actor); Actor_MoveXZGravity(&this->actor);
} else { } else {

View file

@ -278,7 +278,7 @@ void EnKusa_SetupWaitForObject(EnKusa* this) {
void EnKusa_WaitForObject(EnKusa* this, PlayState* play) { void EnKusa_WaitForObject(EnKusa* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) { if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
if (this->actor.flags & ACTOR_FLAG_ENKUSA_CUT) { if (this->actor.flags & ACTOR_FLAG_GRASS_DESTROYED) {
EnKusa_SetupCut(this); EnKusa_SetupCut(this);
} else { } else {
EnKusa_SetupMain(this); EnKusa_SetupMain(this);
@ -317,7 +317,7 @@ void EnKusa_Main(EnKusa* this, PlayState* play) {
} }
EnKusa_SetupCut(this); EnKusa_SetupCut(this);
this->actor.flags |= ACTOR_FLAG_ENKUSA_CUT; this->actor.flags |= ACTOR_FLAG_GRASS_DESTROYED;
} else { } else {
if (!(this->collider.base.ocFlags1 & OC1_TYPE_PLAYER) && (this->actor.xzDistToPlayer > 12.0f)) { if (!(this->collider.base.ocFlags1 & OC1_TYPE_PLAYER) && (this->actor.xzDistToPlayer > 12.0f)) {
this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER; this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER;
@ -466,7 +466,7 @@ void EnKusa_SetupRegrow(EnKusa* this) {
EnKusa_SetupAction(this, EnKusa_Regrow); EnKusa_SetupAction(this, EnKusa_Regrow);
EnKusa_SetScaleSmall(this); EnKusa_SetScaleSmall(this);
this->actor.shape.rot = this->actor.home.rot; this->actor.shape.rot = this->actor.home.rot;
this->actor.flags &= ~ACTOR_FLAG_ENKUSA_CUT; this->actor.flags &= ~ACTOR_FLAG_GRASS_DESTROYED;
} }
void EnKusa_Regrow(EnKusa* this, PlayState* play) { void EnKusa_Regrow(EnKusa* this, PlayState* play) {
@ -490,7 +490,7 @@ void EnKusa_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play); this->actionFunc(this, play);
if (this->actor.flags & ACTOR_FLAG_ENKUSA_CUT) { if (this->actor.flags & ACTOR_FLAG_GRASS_DESTROYED) {
this->actor.shape.yOffset = -6.25f; this->actor.shape.yOffset = -6.25f;
} else { } else {
this->actor.shape.yOffset = 0.0f; this->actor.shape.yOffset = 0.0f;
@ -501,7 +501,7 @@ void EnKusa_Draw(Actor* thisx, PlayState* play) {
static Gfx* dLists[] = { gFieldBushDL, object_kusa_DL_000140, object_kusa_DL_000140 }; static Gfx* dLists[] = { gFieldBushDL, object_kusa_DL_000140, object_kusa_DL_000140 };
EnKusa* this = (EnKusa*)thisx; EnKusa* this = (EnKusa*)thisx;
if (this->actor.flags & ACTOR_FLAG_ENKUSA_CUT) { if (this->actor.flags & ACTOR_FLAG_GRASS_DESTROYED) {
Gfx_DrawDListOpa(play, object_kusa_DL_0002E0); Gfx_DrawDListOpa(play, object_kusa_DL_0002E0);
} else { } else {
Gfx_DrawDListOpa(play, dLists[PARAMS_GET_U(thisx->params, 0, 2)]); Gfx_DrawDListOpa(play, dLists[PARAMS_GET_U(thisx->params, 0, 2)]);

View file

@ -10,7 +10,7 @@
#define FLAGS \ #define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_9 | ACTOR_FLAG_IGNORE_QUAKE | \ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_9 | ACTOR_FLAG_IGNORE_QUAKE | \
ACTOR_FLAG_14) ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
void EnPoSisters_Init(Actor* thisx, PlayState* play); void EnPoSisters_Init(Actor* thisx, PlayState* play);
void EnPoSisters_Destroy(Actor* thisx, PlayState* play); void EnPoSisters_Destroy(Actor* thisx, PlayState* play);
@ -210,7 +210,7 @@ void EnPoSisters_Init(Actor* thisx, PlayState* play) {
this->collider.base.ocFlags1 = OC1_ON | OC1_TYPE_PLAYER; this->collider.base.ocFlags1 = OC1_ON | OC1_TYPE_PLAYER;
func_80AD9AA8(this, play); func_80AD9AA8(this, play);
} else { } else {
this->actor.flags &= ~(ACTOR_FLAG_9 | ACTOR_FLAG_14); this->actor.flags &= ~(ACTOR_FLAG_9 | ACTOR_FLAG_CAN_ATTACH_TO_ARROW);
this->collider.elem.elemMaterial = ELEM_MATERIAL_UNK4; this->collider.elem.elemMaterial = ELEM_MATERIAL_UNK4;
this->collider.elem.acDmgInfo.dmgFlags |= DMG_DEKU_NUT; this->collider.elem.acDmgInfo.dmgFlags |= DMG_DEKU_NUT;
this->collider.base.ocFlags1 = OC1_NONE; this->collider.base.ocFlags1 = OC1_NONE;
@ -701,7 +701,7 @@ void func_80ADA9E8(EnPoSisters* this, PlayState* play) {
} }
void func_80ADAAA4(EnPoSisters* this, PlayState* play) { void func_80ADAAA4(EnPoSisters* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime) && !(this->actor.flags & ACTOR_FLAG_15)) { if (SkelAnime_Update(&this->skelAnime) && !(this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW)) {
if (this->actor.colChkInfo.health != 0) { if (this->actor.colChkInfo.health != 0) {
if (this->unk_194 != 0) { if (this->unk_194 != 0) {
func_80AD96A4(this); func_80AD96A4(this);

View file

@ -798,7 +798,7 @@ void EnSt_Init(Actor* thisx, PlayState* play) {
this->actor.naviEnemyId = NAVI_ENEMY_SKULLTULA; this->actor.naviEnemyId = NAVI_ENEMY_SKULLTULA;
} }
EnSt_CheckCeilingPos(this, play); EnSt_CheckCeilingPos(this, play);
this->actor.flags |= ACTOR_FLAG_14; this->actor.flags |= ACTOR_FLAG_CAN_ATTACH_TO_ARROW;
this->actor.flags |= ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT; this->actor.flags |= ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT;
EnSt_SetColliderScale(this); EnSt_SetColliderScale(this);
this->actor.gravity = 0.0f; this->actor.gravity = 0.0f;
@ -1013,7 +1013,7 @@ void EnSt_Update(Actor* thisx, PlayState* play) {
s32 pad; s32 pad;
Color_RGBA8 color = { 0, 0, 0, 0 }; Color_RGBA8 color = { 0, 0, 0, 0 };
if (this->actor.flags & ACTOR_FLAG_15) { if (this->actor.flags & ACTOR_FLAG_ATTACHED_TO_ARROW) {
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
} else if (!EnSt_CheckColliders(this, play)) { } else if (!EnSt_CheckColliders(this, play)) {
// no collision has been detected. // no collision has been detected.

View file

@ -14,8 +14,8 @@
#include "assets/scenes/dungeons/ice_doukutu/ice_doukutu_scene.h" #include "assets/scenes/dungeons/ice_doukutu/ice_doukutu_scene.h"
#include "terminal.h" #include "terminal.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:0" \ #pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
"pal-1.0:0 pal-1.1:0" "ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#define FLAGS ACTOR_FLAG_4 #define FLAGS ACTOR_FLAG_4
@ -1397,7 +1397,7 @@ void func_80B3F3D8(void) {
} }
#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" \ #pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" \
"ntsc-1.2:64 pal-1.0:64 pal-1.1:64" "ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) { void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) {
static Vec3f D_80B42DA0; static Vec3f D_80B42DA0;

View file

@ -35,8 +35,8 @@
#include "cic6105.h" #include "cic6105.h"
#endif #endif
#pragma increment_block_number "gc-eu:177 gc-eu-mq:177 gc-jp:177 gc-jp-ce:177 gc-jp-mq:177 gc-us:177 gc-us-mq:177" \ #pragma increment_block_number "gc-eu:180 gc-eu-mq:180 gc-jp:180 gc-jp-ce:180 gc-jp-mq:180 gc-us:180 gc-us-mq:180" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS ACTOR_FLAG_4 #define FLAGS ACTOR_FLAG_4

View file

@ -161,7 +161,7 @@ void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, Actor_Spawn(&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z,
actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, sSpawnParams[this->type]); actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, sSpawnParams[this->type]);
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
this->children[i]->flags |= ACTOR_FLAG_ENKUSA_CUT; this->children[i]->flags |= ACTOR_FLAG_GRASS_DESTROYED;
this->children[i]->room = actor->room; this->children[i]->room = actor->room;
} else { } else {
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 359); PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 359);
@ -262,7 +262,7 @@ void ObjMure_CheckChildren(ObjMure* this, PlayState* play) {
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
if (this->childrenStates[i] == OBJMURE_CHILD_STATE_0) { if (this->childrenStates[i] == OBJMURE_CHILD_STATE_0) {
if (this->children[i]->update != NULL) { if (this->children[i]->update != NULL) {
if (this->children[i]->flags & ACTOR_FLAG_ENKUSA_CUT) { if (this->children[i]->flags & ACTOR_FLAG_GRASS_DESTROYED) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_2; this->childrenStates[i] = OBJMURE_CHILD_STATE_2;
} }
} else { } else {

View file

@ -343,21 +343,21 @@ void Player_Action_CsAction(Player* this, PlayState* play);
// .bss part 1 // .bss part 1
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:64 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
static s32 D_80858AA0; static s32 D_80858AA0;
// TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving // TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving
// data around. It would be easier if we had more options for controlling BSS ordering in debug. // data around. It would be easier if we had more options for controlling BSS ordering in debug.
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.2:192 pal-1.0:192 pal-1.1:192" "ntsc-1.0:192 ntsc-1.1:128 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
static s32 sSavedCurrentMask; static s32 sSavedCurrentMask;
static Vec3f sInteractWallCheckResult; static Vec3f sInteractWallCheckResult;
static Input* sControlInput; static Input* sControlInput;
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \ #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128" "ntsc-1.0:128 ntsc-1.1:192 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data // .data

View file

@ -5,6 +5,7 @@
*/ */
#include "z_eff_ss_en_ice.h" #include "z_eff_ss_en_ice.h"
#include "versions.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h" #include "assets/objects/gameplay_keep/gameplay_keep.h"
#define rLifespan regs[0] #define rLifespan regs[0]
@ -133,9 +134,9 @@ void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this) {
} }
void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) { void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) {
s16 rand; #if OOT_VERSION >= NTSC_1_1
if ((this->actor != NULL) && (this->actor->update != NULL)) { if ((this->actor != NULL) && (this->actor->update != NULL)) {
#endif
if ((this->life >= 9) && (this->actor->colorFilterTimer != 0) && !(this->actor->colorFilterParams & 0xC000)) { if ((this->life >= 9) && (this->actor->colorFilterTimer != 0) && !(this->actor->colorFilterParams & 0xC000)) {
this->pos.x = this->actor->world.pos.x + this->vec.x; this->pos.x = this->actor->world.pos.x + this->vec.x;
this->pos.y = this->actor->world.pos.y + this->vec.y; this->pos.y = this->actor->world.pos.y + this->vec.y;
@ -147,9 +148,11 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) {
this->accel.y = -1.5f; this->accel.y = -1.5f;
this->velocity.y = 5.0f; this->velocity.y = 5.0f;
} }
#if OOT_VERSION >= NTSC_1_1
} else { } else {
if (this->life >= 9) { if (this->life >= 9) {
rand = Rand_CenteredFloat(65535.0f); s16 rand = Rand_CenteredFloat(65535.0f);
this->accel.x = Math_SinS(rand) * (Rand_ZeroOne() + 1.0f); this->accel.x = Math_SinS(rand) * (Rand_ZeroOne() + 1.0f);
this->accel.z = Math_CosS(rand) * (Rand_ZeroOne() + 1.0f); this->accel.z = Math_CosS(rand) * (Rand_ZeroOne() + 1.0f);
this->life = 8; this->life = 8;
@ -157,6 +160,7 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) {
this->velocity.y = 5.0f; this->velocity.y = 5.0f;
} }
} }
#endif
} }
void EffectSsEnIce_Update(PlayState* play, u32 index, EffectSs* this) { void EffectSsEnIce_Update(PlayState* play, u32 index, EffectSs* this) {

View file

@ -5,6 +5,7 @@
*/ */
#include "z_eff_ss_kakera.h" #include "z_eff_ss_kakera.h"
#include "versions.h"
#define rReg0 regs[0] #define rReg0 regs[0]
#define rGravity regs[1] #define rGravity regs[1]
@ -54,7 +55,11 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
} else { } else {
PRINTF("shape_modelがNULL\n"); PRINTF("shape_modelがNULL\n");
#if OOT_VERSION < NTSC_1_1
LogUtils_HungupThread("../z_eff_kakera.c", 175);
#else
LogUtils_HungupThread("../z_eff_kakera.c", 178); LogUtils_HungupThread("../z_eff_kakera.c", 178);
#endif
} }
this->draw = EffectSsKakera_Draw; this->draw = EffectSsKakera_Draw;

View file

@ -63,7 +63,6 @@ void func_80800B08_unknown(MapSelectState* this, s32 arg1) {
} }
#endif #endif
// "Translation" (Actual name)
static SceneSelectEntry sScenes[] = { static SceneSelectEntry sScenes[] = {
{ " 1:SPOT00", MapSelect_LoadGame, ENTR_HYRULE_FIELD_0 }, { " 1:SPOT00", MapSelect_LoadGame, ENTR_HYRULE_FIELD_0 },
{ " 2:SPOT01", MapSelect_LoadGame, ENTR_KAKARIKO_VILLAGE_0 }, { " 2:SPOT01", MapSelect_LoadGame, ENTR_KAKARIKO_VILLAGE_0 },
@ -84,228 +83,189 @@ static SceneSelectEntry sScenes[] = {
{ "17:SPOT17", MapSelect_LoadGame, ENTR_DEATH_MOUNTAIN_CRATER_0 }, { "17:SPOT17", MapSelect_LoadGame, ENTR_DEATH_MOUNTAIN_CRATER_0 },
{ "18:SPOT18", MapSelect_LoadGame, ENTR_GORON_CITY_0 }, { "18:SPOT18", MapSelect_LoadGame, ENTR_GORON_CITY_0 },
{ "19:SPOT20", MapSelect_LoadGame, ENTR_LON_LON_RANCH_0 }, { "19:SPOT20", MapSelect_LoadGame, ENTR_LON_LON_RANCH_0 },
// "20: Chamber of Time" { "20:" T(GFXP_HIRAGANA "トキノマ", "Chamber of Time"), MapSelect_LoadGame, ENTR_TEMPLE_OF_TIME_0 },
{ "20:" GFXP_HIRAGANA "トキノマ", MapSelect_LoadGame, ENTR_TEMPLE_OF_TIME_0 }, { "21:" T(GFXP_HIRAGANA "ケンジャノマ", "Chamber of the Sages"), MapSelect_LoadGame, ENTR_CHAMBER_OF_THE_SAGES_0 },
// "21: Chamber of the Sages" { "22:" T(GFXP_HIRAGANA "シャテキジョウ", "Target Range"), MapSelect_LoadGame, ENTR_SHOOTING_GALLERY_0 },
{ "21:" GFXP_HIRAGANA "ケンジャノマ", MapSelect_LoadGame, ENTR_CHAMBER_OF_THE_SAGES_0 }, { "23:" T(GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム", "Hyrule Garden Game"), MapSelect_LoadGame,
// "22: Target Range"
{ "22:" GFXP_HIRAGANA "シャテキジョウ", MapSelect_LoadGame, ENTR_SHOOTING_GALLERY_0 },
// "23: Hyrule Garden Game"
{ "23:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム", MapSelect_LoadGame,
ENTR_CASTLE_COURTYARD_GUARDS_DAY_0 }, ENTR_CASTLE_COURTYARD_GUARDS_DAY_0 },
// "24: Grave Dive Hole" { "24:" T(GFXP_HIRAGANA "ハカシタトビコミアナ", "Grave Dive Hole"), MapSelect_LoadGame, ENTR_REDEAD_GRAVE_0 },
{ "24:" GFXP_HIRAGANA "ハカシタトビコミアナ", MapSelect_LoadGame, ENTR_REDEAD_GRAVE_0 }, { "25:" T(GFXP_HIRAGANA "ハカシタトビコミアナ 2", "Grave Dive Hole 2"), MapSelect_LoadGame,
// "25: Grave Dive Hole 2" ENTR_GRAVE_WITH_FAIRYS_FOUNTAIN_0 },
{ "25:" GFXP_HIRAGANA "ハカシタトビコミアナ 2", MapSelect_LoadGame, ENTR_GRAVE_WITH_FAIRYS_FOUNTAIN_0 }, { "26:" T(GFXP_HIRAGANA "オウケ ノ ハカアナ", "Royal Family's Grave"), MapSelect_LoadGame, ENTR_ROYAL_FAMILYS_TOMB_0 },
// "26: Royal Family's Grave" { "27:" T(GFXP_HIRAGANA "ダイヨウセイノイズミ", "Great Fairy's Fountain"), MapSelect_LoadGame,
{ "26:" GFXP_HIRAGANA "オウケ ノ ハカアナ", MapSelect_LoadGame, ENTR_ROYAL_FAMILYS_TOMB_0 }, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_0 },
// "27: Great Fairy's Fountain" { "28:" T(GFXP_HIRAGANA "トビコミ ヨウセイ アナ", "Fairy Dive Hole"), MapSelect_LoadGame, ENTR_FAIRYS_FOUNTAIN_0 },
{ "27:" GFXP_HIRAGANA "ダイヨウセイノイズミ", MapSelect_LoadGame, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_0 }, { "29:" T(GFXP_HIRAGANA "マホウセキ ヨウセイノイズミ", "Magic Stone Fairy's Fountain"), MapSelect_LoadGame,
// "28: Fairy Dive Hole" ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0 },
{ "28:" GFXP_HIRAGANA "トビコミ ヨウセイ アナ", MapSelect_LoadGame, ENTR_FAIRYS_FOUNTAIN_0 }, { "30:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン", "Final Battle With Ganon"), MapSelect_LoadGame,
// "29: Magic Stone Fairy's Fountain" ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0 },
{ "29:" GFXP_HIRAGANA "マホウセキ ヨウセイノイズミ", MapSelect_LoadGame, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0 }, { "31:" T(GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ナカニワ", "Hyrule Inner Garden"), MapSelect_LoadGame,
// "30: Final Battle With Ganon" ENTR_CASTLE_COURTYARD_ZELDA_0 },
{ "30:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン", MapSelect_LoadGame, ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0 }, { "32:" T(GFXP_HIRAGANA "ツリボリ", "Fishing"), MapSelect_LoadGame, ENTR_FISHING_POND_0 },
// "31: Hyrule Inner Garden" { "33:" T(GFXP_KATAKANA "ボムチュウボーリング", "Bombchu Bowling"), MapSelect_LoadGame, ENTR_BOMBCHU_BOWLING_ALLEY_0 },
{ "31:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ナカニワ", MapSelect_LoadGame, ENTR_CASTLE_COURTYARD_ZELDA_0 }, // Talon's House
// "32: Fishing" { "34:" T(GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 1", "Lon Lon Ranch - Storehouse 1"), MapSelect_LoadGame,
{ "32:" GFXP_HIRAGANA "ツリボリ", MapSelect_LoadGame, ENTR_FISHING_POND_0 }, ENTR_LON_LON_BUILDINGS_0 },
// "33: Bombchu Bowling" // Ranch Silo
{ "33:" GFXP_KATAKANA "ボムチュウボーリング", MapSelect_LoadGame, ENTR_BOMBCHU_BOWLING_ALLEY_0 }, { "35:" T(GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 2", "Lon Lon Ranch - Storehouse 2"), MapSelect_LoadGame,
// "34: Lon Lon Ranch - Storehouse 1" (Talon's House) ENTR_LON_LON_BUILDINGS_1 },
{ "34:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 1", MapSelect_LoadGame, ENTR_LON_LON_BUILDINGS_0 }, { "36:" T(GFXP_HIRAGANA "ミハリ ゴヤ", "Lookout Hut"), MapSelect_LoadGame, ENTR_MARKET_GUARD_HOUSE_0 },
// "35: Lon Lon Ranch - Storehouse 2" (Ranch Silo) { "37:" T(GFXP_HIRAGANA "マホウ ノ クスリヤ", "Magic Potion Shop"), MapSelect_LoadGame, ENTR_POTION_SHOP_GRANNY_0 },
{ "35:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 2", MapSelect_LoadGame, ENTR_LON_LON_BUILDINGS_1 }, { "38:" T(GFXP_HIRAGANA "タカラバコヤ", "Treasure Chest Shop"), MapSelect_LoadGame, ENTR_TREASURE_BOX_SHOP_0 },
// "36: Lookout Hut" { "39:" T(GFXP_HIRAGANA "キン " GFXP_KATAKANA "スタルチュラ ハウス", "Gold Skulltula House"), MapSelect_LoadGame,
{ "36:" GFXP_HIRAGANA "ミハリ ゴヤ", MapSelect_LoadGame, ENTR_MARKET_GUARD_HOUSE_0 }, ENTR_HOUSE_OF_SKULLTULA_0 },
// "37: Magic Potion Shop" { "40:" T(GFXP_HIRAGANA "ジョウカマチ イリグチ", "Castle Town - Entrance"), MapSelect_LoadGame,
{ "37:" GFXP_HIRAGANA "マホウ ノ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_GRANNY_0 }, ENTR_MARKET_ENTRANCE_DAY_0 },
// "38: Treasure Chest Shop" { "41:" T(GFXP_HIRAGANA "ジョウカマチ", "Castle Town"), MapSelect_LoadGame, ENTR_MARKET_DAY_0 },
{ "38:" GFXP_HIRAGANA "タカラバコヤ", MapSelect_LoadGame, ENTR_TREASURE_BOX_SHOP_0 }, { "42:" T(GFXP_HIRAGANA "ウラロジ", "Back Alley"), MapSelect_LoadGame, ENTR_BACK_ALLEY_DAY_0 },
// "39: Gold Skulltula House" { "43:" T(GFXP_HIRAGANA "トキノシンデン マエ", "In Front of the Temple of Time"), MapSelect_LoadGame,
{ "39:" GFXP_HIRAGANA "キン " GFXP_KATAKANA "スタルチュラ ハウス", MapSelect_LoadGame, ENTR_HOUSE_OF_SKULLTULA_0 }, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_0 },
// "40: Castle Town - Entrance" (Market Entrance) { "44:" T(GFXP_HIRAGANA "リンクノイエ", "Link's House"), MapSelect_LoadGame, ENTR_LINKS_HOUSE_0 },
{ "40:" GFXP_HIRAGANA "ジョウカマチ イリグチ", MapSelect_LoadGame, ENTR_MARKET_ENTRANCE_DAY_0 }, { "45:" T(GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラノナガヤ", "Kakariko Village Row House"), MapSelect_LoadGame,
// "41: Castle Town" (Market) ENTR_KAKARIKO_CENTER_GUEST_HOUSE_0 },
{ "41:" GFXP_HIRAGANA "ジョウカマチ", MapSelect_LoadGame, ENTR_MARKET_DAY_0 }, { "46:" T(GFXP_HIRAGANA "ウラロジノ イエ", "Back Alley House"), MapSelect_LoadGame, ENTR_BACK_ALLEY_HOUSE_0 },
// "42: Back Alley" (Back Alley) { "47:" T(GFXP_HIRAGANA "コキリノムラ モノシリキョウダイノイエ", "Kokiri Village - Know-It-All Brothers' House"), MapSelect_LoadGame,
{ "42:" GFXP_HIRAGANA "ウラロジ", MapSelect_LoadGame, ENTR_BACK_ALLEY_DAY_0 }, ENTR_KNOW_IT_ALL_BROS_HOUSE_0 },
// "43: In Front of the Temple of Time" (Temple of Time Exterior) { "48:" T(GFXP_HIRAGANA "コキリノムラ フタゴノイエ", "Kokiri Village - Twins' House"), MapSelect_LoadGame,
{ "43:" GFXP_HIRAGANA "トキノシンデン マエ", MapSelect_LoadGame, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_0 }, ENTR_TWINS_HOUSE_0 },
// "44: Link's House" { "49:" T(GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "ミド" GFXP_HIRAGANA "ノイエ", "Kokiri Village - Mido's House"),
{ "44:" GFXP_HIRAGANA "リンクノイエ", MapSelect_LoadGame, ENTR_LINKS_HOUSE_0 }, MapSelect_LoadGame, ENTR_MIDOS_HOUSE_0 },
// "45: Kakariko Village Row House" { "50:" T(GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "サリア" GFXP_HIRAGANA "ノイエ", "Kokiri Village - Saria's House"),
{ "45:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラノナガヤ", MapSelect_LoadGame, ENTR_KAKARIKO_CENTER_GUEST_HOUSE_0 }, MapSelect_LoadGame, ENTR_SARIAS_HOUSE_0 },
// "46: Back Alley House" { "51:" T(GFXP_HIRAGANA "ウマゴヤ", "Stable"), MapSelect_LoadGame, ENTR_STABLE_0 },
{ "46:" GFXP_HIRAGANA "ウラロジノ イエ", MapSelect_LoadGame, ENTR_BACK_ALLEY_HOUSE_0 }, { "52:" T(GFXP_HIRAGANA "ハカモリノイエ", "Grave Keeper's House"), MapSelect_LoadGame, ENTR_GRAVEKEEPERS_HUT_0 },
// "47: Kokiri Village - Know-It-All Brothers' House" { "53:" T(GFXP_HIRAGANA "ウラロジ イヌオバサンノイエ", "Back Alley - Dog Lady's House"), MapSelect_LoadGame,
{ "47:" GFXP_HIRAGANA "コキリノムラ モノシリキョウダイノイエ", MapSelect_LoadGame, ENTR_KNOW_IT_ALL_BROS_HOUSE_0 }, ENTR_DOG_LADY_HOUSE_0 },
// "48: Kokiri Village - Twins' House" { "54:" T(GFXP_HIRAGANA "カカリコムラ " GFXP_KATAKANA "インパ" GFXP_HIRAGANA "ノイエ", "Kakariko Village - Impa's House"),
{ "48:" GFXP_HIRAGANA "コキリノムラ フタゴノイエ", MapSelect_LoadGame, ENTR_TWINS_HOUSE_0 }, MapSelect_LoadGame, ENTR_IMPAS_HOUSE_0 },
// "49: Kokiri Village - Mido's House" { "55:" T(GFXP_KATAKANA "ハイリア" GFXP_HIRAGANA " ケンキュウジョ", "Hylia Laboratory"), MapSelect_LoadGame,
{ "49:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "ミド" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_MIDOS_HOUSE_0 }, ENTR_LAKESIDE_LABORATORY_0 },
// "50: Kokiri Village - Saria's House" { "56:" T(GFXP_KATAKANA "テント", "Tent"), MapSelect_LoadGame, ENTR_CARPENTERS_TENT_0 },
{ "50:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "サリア" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_SARIAS_HOUSE_0 }, { "57:" T(GFXP_HIRAGANA "タテノミセ", "Shield Shop"), MapSelect_LoadGame, ENTR_BAZAAR_0 },
// "51: Stable" { "58:" T(GFXP_HIRAGANA "コキリゾクノミセ", "Kokiri Shop"), MapSelect_LoadGame, ENTR_KOKIRI_SHOP_0 },
{ "51:" GFXP_HIRAGANA "ウマゴヤ", MapSelect_LoadGame, ENTR_STABLE_0 }, { "59:" T(GFXP_KATAKANA "ゴロン" GFXP_HIRAGANA "ノミセ", "Goron Shop"), MapSelect_LoadGame, ENTR_GORON_SHOP_0 },
// "52: Grave Keeper's House" { "60:" T(GFXP_KATAKANA "ゾーラ" GFXP_HIRAGANA "ノミセ", "Zora Shop"), MapSelect_LoadGame, ENTR_ZORA_SHOP_0 },
{ "52:" GFXP_HIRAGANA "ハカモリノイエ", MapSelect_LoadGame, ENTR_GRAVEKEEPERS_HUT_0 }, { "61:" T(GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラ クスリヤ", "Kakariko Village - Potion Shop"), MapSelect_LoadGame,
// "53: Back Alley - Dog Lady's House" ENTR_POTION_SHOP_KAKARIKO_0 },
{ "53:" GFXP_HIRAGANA "ウラロジ イヌオバサンノイエ", MapSelect_LoadGame, ENTR_DOG_LADY_HOUSE_0 }, { "62:" T(GFXP_HIRAGANA "ジョウカマチ クスリヤ", "Castle Town - Potion Shop"), MapSelect_LoadGame,
// "54: Kakariko Village - Impa's House" ENTR_POTION_SHOP_MARKET_0 },
{ "54:" GFXP_HIRAGANA "カカリコムラ " GFXP_KATAKANA "インパ" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_IMPAS_HOUSE_0 }, { "63:" T(GFXP_HIRAGANA "ウラロジ ヨルノミセ", "Back Alley - Night Shop"), MapSelect_LoadGame, ENTR_BOMBCHU_SHOP_0 },
// "55: Hylia Laboratory" { "64:" T(GFXP_HIRAGANA "オメンヤ", "Mask Shop"), MapSelect_LoadGame, ENTR_HAPPY_MASK_SHOP_0 },
{ "55:" GFXP_KATAKANA "ハイリア" GFXP_HIRAGANA " ケンキュウジョ", MapSelect_LoadGame, ENTR_LAKESIDE_LABORATORY_0 }, { "65:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ノシュウレンジョウ", "Gerudo Training Area"), MapSelect_LoadGame,
// "56: Tent" ENTR_GERUDO_TRAINING_GROUND_0 },
{ "56:" GFXP_KATAKANA "テント", MapSelect_LoadGame, ENTR_CARPENTERS_TENT_0 }, { "66:" T(GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン", "Fairy Tree Dungeon"), MapSelect_LoadGame,
// "57: Shield Shop" ENTR_DEKU_TREE_0 },
{ "57:" GFXP_HIRAGANA "タテノミセ", MapSelect_LoadGame, ENTR_BAZAAR_0 }, { "67:" T(GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン ボス", "Fairy Tree Dungeon - Boss"), MapSelect_LoadGame,
// "58: Kokiri Shop" ENTR_DEKU_TREE_BOSS_0 },
{ "58:" GFXP_HIRAGANA "コキリゾクノミセ", MapSelect_LoadGame, ENTR_KOKIRI_SHOP_0 }, { "68:" T(GFXP_KATAKANA "ドドンゴ ダンジョン", "Dondogo Dungeon"), MapSelect_LoadGame, ENTR_DODONGOS_CAVERN_0 },
// "59: Goron Shop" { "69:" T(GFXP_KATAKANA "ドドンゴ ダンジョン ボス", "Dondogo Dungeon - Boss"), MapSelect_LoadGame,
{ "59:" GFXP_KATAKANA "ゴロン" GFXP_HIRAGANA "ノミセ", MapSelect_LoadGame, ENTR_GORON_SHOP_0 }, ENTR_DODONGOS_CAVERN_BOSS_0 },
// "60: Zora Shop" { "70:" T(GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン", "Giant Fish Dungeon"), MapSelect_LoadGame,
{ "60:" GFXP_KATAKANA "ゾーラ" GFXP_HIRAGANA "ノミセ", MapSelect_LoadGame, ENTR_ZORA_SHOP_0 }, ENTR_JABU_JABU_0 },
// "61: Kakariko Village - Potion Shop" { "71:" T(GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン ボス", "Giant Fish Dungeon - Boss"), MapSelect_LoadGame,
{ "61:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_KAKARIKO_0 }, ENTR_JABU_JABU_BOSS_0 },
// "62: Castle Town - Potion Shop" { "72:" T(GFXP_HIRAGANA "モリノシンデン", "Forest Temple"), MapSelect_LoadGame, ENTR_FOREST_TEMPLE_0 },
{ "62:" GFXP_HIRAGANA "ジョウカマチ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_MARKET_0 }, { "73:" T(GFXP_HIRAGANA "モリノシンデン " GFXP_KATAKANA "ボス", "Forest Temple - Boss"), MapSelect_LoadGame,
// "63: Back Alley - Night Shop" ENTR_FOREST_TEMPLE_BOSS_0 },
{ "63:" GFXP_HIRAGANA "ウラロジ ヨルノミセ", MapSelect_LoadGame, ENTR_BOMBCHU_SHOP_0 }, { "74:" T(GFXP_HIRAGANA "イドシタ " GFXP_KATAKANA "ダンジョン", "Dungeon Below the Well"), MapSelect_LoadGame,
// "64: Mask Shop" ENTR_BOTTOM_OF_THE_WELL_0 },
{ "64:" GFXP_HIRAGANA "オメンヤ", MapSelect_LoadGame, ENTR_HAPPY_MASK_SHOP_0 }, { "75:" T(GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン", "Dungeon Beneath the Graves"), MapSelect_LoadGame,
// "65: Gerudo Training Area" ENTR_SHADOW_TEMPLE_0 },
{ "65:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ノシュウレンジョウ", MapSelect_LoadGame, ENTR_GERUDO_TRAINING_GROUND_0 }, { "76:" T(GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン ボス", "Dungeon Beneath the Graves - Boss"),
// "66: Fairy Tree Dungeon" MapSelect_LoadGame, ENTR_SHADOW_TEMPLE_BOSS_0 },
{ "66:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_DEKU_TREE_0 }, { "77:" T(GFXP_HIRAGANA "ヒノシンデン", "Fire Temple"), MapSelect_LoadGame, ENTR_FIRE_TEMPLE_0 },
// "67: Fairy Tree Dungeon - Boss" { "78:" T(GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", "Fire Temple - Boss"), MapSelect_LoadGame,
{ "67:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_DEKU_TREE_BOSS_0 }, ENTR_FIRE_TEMPLE_BOSS_0 },
// "68: Dondogo Dungeon" { "79:" T(GFXP_HIRAGANA "ミズノシンデン", "Water Temple"), MapSelect_LoadGame, ENTR_WATER_TEMPLE_0 },
{ "68:" GFXP_KATAKANA "ドドンゴ ダンジョン", MapSelect_LoadGame, ENTR_DODONGOS_CAVERN_0 }, { "80:" T(GFXP_HIRAGANA "ミズノシンデン " GFXP_KATAKANA "ボス", "Water Temple - Boss"), MapSelect_LoadGame,
// "69: Dondogo Dungeon - Boss" ENTR_WATER_TEMPLE_BOSS_0 },
{ "69:" GFXP_KATAKANA "ドドンゴ ダンジョン ボス", MapSelect_LoadGame, ENTR_DODONGOS_CAVERN_BOSS_0 }, { "81:" T(GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン", "Evil Goddess Statue Dungeon"), MapSelect_LoadGame,
// "70: Giant Fish Dungeon" ENTR_SPIRIT_TEMPLE_0 },
{ "70:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_JABU_JABU_0 }, // Iron Knuckle's Lair
// "71: Giant Fish Dungeon - Boss" { "82:" T(GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン アイアンナック", "Evil Goddess Statue Dungeon - Iron Knuckle"),
{ "71:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_JABU_JABU_BOSS_0 }, MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_0 },
// "72: Forest Temple" // Twinrova's Lair
{ "72:" GFXP_HIRAGANA "モリノシンデン", MapSelect_LoadGame, ENTR_FOREST_TEMPLE_0 }, { "83:" T(GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン ボス", "Evil Goddess Statue Dungeon - Boss"),
// "73: Forest Temple - Boss" MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_2 },
{ "73:" GFXP_HIRAGANA "モリノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_FOREST_TEMPLE_BOSS_0 }, { "84:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ", "Ganon's Tower"), MapSelect_LoadGame, ENTR_GANONS_TOWER_0 },
// "74: Dungeon Below the Well" { "85:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ" GFXP_KATAKANA "ボス", "Ganon's Tower - Boss"), MapSelect_LoadGame,
{ "74:" GFXP_HIRAGANA "イドシタ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_BOTTOM_OF_THE_WELL_0 }, ENTR_GANONDORF_BOSS_0 },
// "75: Dungeon Beneath the Graves" { "86:" T(GFXP_HIRAGANA "コオリノドウクツ", "Ice Cavern"), MapSelect_LoadGame, ENTR_ICE_CAVERN_0 },
{ "75:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_SHADOW_TEMPLE_0 }, // Dampé's Grave
// "76: Dungeon Beneath the Graves - Boss" { "87:" T(GFXP_HIRAGANA "ハカシタ" GFXP_KATAKANA "リレー", "Relay Beneath the Graves"), MapSelect_LoadGame,
{ "76:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_SHADOW_TEMPLE_BOSS_0 }, ENTR_WINDMILL_AND_DAMPES_GRAVE_0 },
// "77: Fire Temple" { "88:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ " GFXP_KATAKANA "ダンジョン", "Ganon's Basement Dungeon"),
{ "77:" GFXP_HIRAGANA "ヒノシンデン", MapSelect_LoadGame, ENTR_FIRE_TEMPLE_0 }, MapSelect_LoadGame, ENTR_INSIDE_GANONS_CASTLE_0 },
// "78: Fire Temple - Boss" { "89:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン " GFXP_KATAKANA "デモ & バトル",
{ "78:" GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_FIRE_TEMPLE_BOSS_0 }, "Final Battle With Ganon - Cutscene & Battle"),
// "79: Water Temple" MapSelect_LoadGame, ENTR_GANON_BOSS_0 },
{ "79:" GFXP_HIRAGANA "ミズノシンデン", MapSelect_LoadGame, ENTR_WATER_TEMPLE_0 }, { "90:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 1", "Ganon's Tower Aftermath 1"), MapSelect_LoadGame,
// "80: Water Temple - Boss"
{ "80:" GFXP_HIRAGANA "ミズノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_WATER_TEMPLE_BOSS_0 },
// "81: Evil Goddess Statue Dungeon"
{ "81:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_0 },
// "82: Evil Goddess Statue Dungeon - Iron Knuckle" (Iron Knuckle's Lair)
{ "82:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン アイアンナック", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_0 },
// "83: Evil Goddess Statue Dungeon - Boss" (Twinrova's Lair)
{ "83:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_2 },
// "84: Ganon's Tower"
{ "84:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ", MapSelect_LoadGame, ENTR_GANONS_TOWER_0 },
// "85: Ganon's Tower - Boss"
{ "85:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ" GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_GANONDORF_BOSS_0 },
// "86: Ice Cavern"
{ "86:" GFXP_HIRAGANA "コオリノドウクツ", MapSelect_LoadGame, ENTR_ICE_CAVERN_0 },
// "87: Relay Beneath the Graves" (Dampé's Grave)
{ "87:" GFXP_HIRAGANA "ハカシタ" GFXP_KATAKANA "リレー", MapSelect_LoadGame, ENTR_WINDMILL_AND_DAMPES_GRAVE_0 },
// "88: Ganon's Basement Dungeon"
{ "88:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame,
ENTR_INSIDE_GANONS_CASTLE_0 },
// "89: Final Battle With Ganon - Cutscene & Battle"
{ "89:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン " GFXP_KATAKANA "デモ & バトル", MapSelect_LoadGame,
ENTR_GANON_BOSS_0 },
// "90: Ganon's Tower Aftermath 1" (Escaping Ganon's Tower 1)
{ "90:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 1", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_0 }, ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_0 },
// "91: Ganon's Tower Aftermath 2" (Escaping Ganon's Tower 2) { "91:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 2", "Ganon's Tower Aftermath 2"), MapSelect_LoadGame,
{ "91:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 2", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_2 }, ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_2 },
// "92: Ganon's Tower Aftermath 3" (Escaping Ganon's Tower 3) { "92:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 3", "Ganon's Tower Aftermath 3"), MapSelect_LoadGame,
{ "92:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 3", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_4 }, ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_4 },
// "93: Ganon's Tower Aftermath 4" (Escaping Ganon's Tower 4) { "93:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 4", "Ganon's Tower Aftermath 4"), MapSelect_LoadGame,
{ "93:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 4", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_6 }, ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_6 },
// "94: Ganon's Basement Aftermath" { "94:" T(GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ ソノゴ", "Ganon's Basement Aftermath"), MapSelect_LoadGame,
{ "94:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ ソノゴ", MapSelect_LoadGame, ENTR_INSIDE_GANONS_CASTLE_COLLAPSE_0 }, ENTR_INSIDE_GANONS_CASTLE_COLLAPSE_0 },
// "95: Gerudo Passage 1-2" (Thieves' Hideout 1) { "95:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 1-2", "Gerudo Passage 1-2"), MapSelect_LoadGame,
{ "95:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 1-2", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_0 }, ENTR_THIEVES_HIDEOUT_0 },
// "96: Gerudo Passage 3-4 9-10" (Thieves' Hideout 2) { "96:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 3-4 9-10", "Gerudo Passage 3-4 9-10"), MapSelect_LoadGame,
{ "96:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 3-4 9-10", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_2 }, ENTR_THIEVES_HIDEOUT_2 },
// "97: Gerudo Passage 5-6" (Thieves' Hideout 3) { "97:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 5-6", "Gerudo Passage 5-6"), MapSelect_LoadGame,
{ "97:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 5-6", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_4 }, ENTR_THIEVES_HIDEOUT_4 },
// "98: Gerudo Passage 7-8" (Thieves' Hideout 4) { "98:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 7-8", "Gerudo Passage 7-8"), MapSelect_LoadGame,
{ "98:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 7-8", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_6 }, ENTR_THIEVES_HIDEOUT_6 },
// "99: Gerudo Passage 11-12" (Thieves' Hideout 5) { "99:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 11-12", "Gerudo Passage 11-12"), MapSelect_LoadGame,
{ "99:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 11-12", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_10 }, ENTR_THIEVES_HIDEOUT_10 },
// "100: Gerudo Passage 13" (Thieves' Hideout 6) { "100:" T(GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 13", "Gerudo Passage 13"), MapSelect_LoadGame,
{ "100:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 13", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_12 }, ENTR_THIEVES_HIDEOUT_12 },
// "101: Hidden Dive Hole 0" (Grotto 0 - Gossip Stone & Chest) // Gossip Stone & Chest Grotto
{ "101:" GFXP_HIRAGANA "カクシトビコミアナ 0", MapSelect_LoadGame, ENTR_GROTTOS_0 }, { "101:" T(GFXP_HIRAGANA "カクシトビコミアナ 0", "Hidden Dive Hole 0"), MapSelect_LoadGame, ENTR_GROTTOS_0 },
// "102: Hidden Dive Hole 1" (Grotto 1 - Skulltula & Gold Skulltula) // Skulltula & Gold Skulltula Grotto
{ "102:" GFXP_HIRAGANA "カクシトビコミアナ 1", MapSelect_LoadGame, ENTR_GROTTOS_1 }, { "102:" T(GFXP_HIRAGANA "カクシトビコミアナ 1", "Hidden Dive Hole 1"), MapSelect_LoadGame, ENTR_GROTTOS_1 },
// "103: Hidden Dive Hole 2" (Grotto 2 - Business Scrub & Heart Piece) // Business Scrub & Heart Piece Grotto
{ "103:" GFXP_HIRAGANA "カクシトビコミアナ 2", MapSelect_LoadGame, ENTR_GROTTOS_2 }, { "103:" T(GFXP_HIRAGANA "カクシトビコミアナ 2", "Hidden Dive Hole 2"), MapSelect_LoadGame, ENTR_GROTTOS_2 },
// "104: Hidden Dive Hole 3" (Grotto 3 - Redeads) // Redeads Grotto
{ "104:" GFXP_HIRAGANA "カクシトビコミアナ 3", MapSelect_LoadGame, ENTR_GROTTOS_3 }, { "104:" T(GFXP_HIRAGANA "カクシトビコミアナ 3", "Hidden Dive Hole 3"), MapSelect_LoadGame, ENTR_GROTTOS_3 },
// "105: Hidden Dive Hole 4" (Grotto 4 - 3 Business Scrubs) // 3 Business Scrubs Grotto
{ "105:" GFXP_HIRAGANA "カクシトビコミアナ 4", MapSelect_LoadGame, ENTR_GROTTOS_4 }, { "105:" T(GFXP_HIRAGANA "カクシトビコミアナ 4", "Hidden Dive Hole 4"), MapSelect_LoadGame, ENTR_GROTTOS_4 },
// "106: Hidden Dive Hole 5" (Grotto 5 - Gossip Stone, Skulltula, Cow) // Gossip Stone, Skulltula & Cow Grotto
{ "106:" GFXP_HIRAGANA "カクシトビコミアナ 5", MapSelect_LoadGame, ENTR_GROTTOS_5 }, { "106:" T(GFXP_HIRAGANA "カクシトビコミアナ 5", "Hidden Dive Hole 5"), MapSelect_LoadGame, ENTR_GROTTOS_5 },
// "107: Hidden Dive Hole 6" (Grotto 6 - Octorok) // Octorok Grotto
{ "107:" GFXP_HIRAGANA "カクシトビコミアナ 6", MapSelect_LoadGame, ENTR_GROTTOS_6 }, { "107:" T(GFXP_HIRAGANA "カクシトビコミアナ 6", "Hidden Dive Hole 6"), MapSelect_LoadGame, ENTR_GROTTOS_6 },
// "108: Hidden Dive Hole 7" (Grotto 7 - Business Scrub & Deku Nut Upgrade) // Business Scrub & Deku Nut Upgrade Grotto
{ "108:" GFXP_HIRAGANA "カクシトビコミアナ 7", MapSelect_LoadGame, ENTR_GROTTOS_7 }, { "108:" T(GFXP_HIRAGANA "カクシトビコミアナ 7", "Hidden Dive Hole 7"), MapSelect_LoadGame, ENTR_GROTTOS_7 },
// "109: Hidden Dive Hole 8" (Grotto 8 - 2 Wolfos) // 2 Wolfos Grotto
{ "109:" GFXP_HIRAGANA "カクシトビコミアナ 8", MapSelect_LoadGame, ENTR_GROTTOS_8 }, { "109:" T(GFXP_HIRAGANA "カクシトビコミアナ 8", "Hidden Dive Hole 8"), MapSelect_LoadGame, ENTR_GROTTOS_8 },
// "110: Hidden Dive Hole 9" (Grotto 9 - Bombable Walls) // Bombable Walls Grotto
{ "110:" GFXP_HIRAGANA "カクシトビコミアナ 9", MapSelect_LoadGame, ENTR_GROTTOS_9 }, { "110:" T(GFXP_HIRAGANA "カクシトビコミアナ 9", "Hidden Dive Hole 9"), MapSelect_LoadGame, ENTR_GROTTOS_9 },
// "111: Hidden Dive Hole 10" (Grotto 10 - 2 Business Scrubs) // 2 Business Scrubs Grotto
{ "111:" GFXP_HIRAGANA "カクシトビコミアナ 10", MapSelect_LoadGame, ENTR_GROTTOS_10 }, { "111:" T(GFXP_HIRAGANA "カクシトビコミアナ 10", "Hidden Dive Hole 10"), MapSelect_LoadGame, ENTR_GROTTOS_10 },
// "112: Hidden Dive Hole 11" (Grotto 11 - Tektite & Heart Piece) // Tektite & Heart Piece Grotto
{ "112:" GFXP_HIRAGANA "カクシトビコミアナ 11", MapSelect_LoadGame, ENTR_GROTTOS_11 }, { "112:" T(GFXP_HIRAGANA "カクシトビコミアナ 11", "Hidden Dive Hole 11"), MapSelect_LoadGame, ENTR_GROTTOS_11 },
// "113: Hidden Dive Hole 12" (Grotto 12 - Deku Stage) // Deku Stage Grotto
{ "113:" GFXP_HIRAGANA "カクシトビコミアナ 12", MapSelect_LoadGame, ENTR_GROTTOS_12 }, { "113:" T(GFXP_HIRAGANA "カクシトビコミアナ 12", "Hidden Dive Hole 12"), MapSelect_LoadGame, ENTR_GROTTOS_12 },
// "114: Hidden Dive Hole 13" (Grotto 13 - Rupees & Cow) // Rupees & Cow Grotto
{ "114:" GFXP_HIRAGANA "カクシトビコミアナ 13", MapSelect_LoadGame, ENTR_GROTTOS_13 }, { "114:" T(GFXP_HIRAGANA "カクシトビコミアナ 13", "Hidden Dive Hole 13"), MapSelect_LoadGame, ENTR_GROTTOS_13 },
// "115: Hyrule Cutscenes" { "115:" T(GFXP_KATAKANA "ハイラル デモ", "Hyrule Cutscenes"), MapSelect_LoadGame, ENTR_CUTSCENE_MAP_0 },
{ "115:" GFXP_KATAKANA "ハイラル デモ", MapSelect_LoadGame, ENTR_CUTSCENE_MAP_0 },
#if OOT_DEBUG #if OOT_DEBUG
// "116: Special Room (Treasure Chest Warp)" (Ganondorf Test Room) { "116:" T(GFXP_HIRAGANA "ベッシツ (タカラバコ" GFXP_KATAKANA "ワープ)", "Special Room (Treasure Chest Warp)"),
{ "116:" GFXP_HIRAGANA "ベッシツ (タカラバコ" GFXP_KATAKANA "ワープ)", MapSelect_LoadGame, ENTR_BESITU_0 }, MapSelect_LoadGame, ENTR_BESITU_0 },
// "117: Sasaki Test" (Sasa Test) { "117:" T(GFXP_HIRAGANA "ササ" GFXP_KATAKANA "テスト", "Sasaki Test"), MapSelect_LoadGame, ENTR_SASATEST_0 },
{ "117:" GFXP_HIRAGANA "ササ" GFXP_KATAKANA "テスト", MapSelect_LoadGame, ENTR_SASATEST_0 }, { "118:" T(GFXP_KATAKANA "テストマップ", "Test Map"), MapSelect_LoadGame, ENTR_TEST01_0 },
// "118: Test Map" (Jungle Gym) { "119:" T(GFXP_KATAKANA "テストルーム", "Test Room"), MapSelect_LoadGame, ENTR_TESTROOM_0 },
{ "118:" GFXP_KATAKANA "テストマップ", MapSelect_LoadGame, ENTR_TEST01_0 }, { "120:" T(GFXP_HIRAGANA "チュウ" GFXP_KATAKANA "スタロフォス" GFXP_HIRAGANA "ベヤ", "Stalfos Miniboss Room"),
// "119: Test Room" (Treasure Chest Room) MapSelect_LoadGame, ENTR_SYOTES_0 },
{ "119:" GFXP_KATAKANA "テストルーム", MapSelect_LoadGame, ENTR_TESTROOM_0 }, { "121:" T(GFXP_KATAKANA "ボススタロフォス" GFXP_HIRAGANA "ベヤ", "Boss Stalfos Room"), MapSelect_LoadGame,
// "120: Stalfos Miniboss Room" (Stalfos Miniboss Room) ENTR_SYOTES2_0 },
{ "120:" GFXP_HIRAGANA "チュウ" GFXP_KATAKANA "スタロフォス" GFXP_HIRAGANA "ベヤ", MapSelect_LoadGame, ENTR_SYOTES_0 }, { "122:" T("Sutaru", "Stal"), MapSelect_LoadGame, ENTR_SUTARU_0 },
// "121: Boss Stalfos Room" (Stalfos Boss Room) { "123:" T("jikkenjyou", "Test Area"), MapSelect_LoadGame, ENTR_TEST_SHOOTING_GALLERY_0 },
{ "121:" GFXP_KATAKANA "ボススタロフォス" GFXP_HIRAGANA "ベヤ", MapSelect_LoadGame, ENTR_SYOTES2_0 }, { "124:depth" T(GFXP_KATAKANA "テスト", "Test"), MapSelect_LoadGame, ENTR_DEPTH_TEST_0 },
// "122: Stal" (Sutaru) { "125:" T(GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム2", "Hyrule Garden Game 2"),
{ "122:Sutaru", MapSelect_LoadGame, ENTR_SUTARU_0 }, MapSelect_LoadGame, ENTR_HAIRAL_NIWA2_0 },
// "123: Test Area"
{ "123:jikkenjyou", MapSelect_LoadGame, ENTR_TEST_SHOOTING_GALLERY_0 },
// "124: Depth Test" (Depth Test)
{ "124:depth" GFXP_KATAKANA "テスト", MapSelect_LoadGame, ENTR_DEPTH_TEST_0 },
// "125: Hyrule Garden Game 2" (Early Hyrule Garden Game)
{ "125:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム2", MapSelect_LoadGame, ENTR_HAIRAL_NIWA2_0 },
#endif #endif
// "title" (Title Screen)
{ "title", (void*)MapSelect_LoadTitle, 0 }, { "title", (void*)MapSelect_LoadTitle, 0 },
#if PLATFORM_N64 #if PLATFORM_N64
{ "64DD TEST n64dd_SetDiskVersion(1)", (void*)func_80800AD0_unknown, 0 }, { "64DD TEST n64dd_SetDiskVersion(1)", (void*)func_80800AD0_unknown, 0 },
@ -554,30 +514,19 @@ void MapSelect_PrintMenu(MapSelectState* this, GfxPrint* printer) {
} }
static const char* sLoadingMessages[] = { static const char* sLoadingMessages[] = {
// "Please wait a minute" T(GFXP_HIRAGANA "シバラクオマチクダサイ", "Please wait a minute"),
GFXP_HIRAGANA "シバラクオマチクダサイ", T(GFXP_HIRAGANA "チョット マッテネ", "Hold on a sec"),
// "Hold on a sec" T(GFXP_KATAKANA "ウェイト ア モーメント", "Wait a moment"),
GFXP_HIRAGANA "チョット マッテネ", T(GFXP_KATAKANA "ロード" GFXP_HIRAGANA "チュウ", "Loading"),
// "Wait a moment" T(GFXP_HIRAGANA "ナウ ワーキング", "Now working"),
GFXP_KATAKANA "ウェイト ア モーメント", T(GFXP_HIRAGANA "イマ ツクッテマス", "Now creating"),
// "Loading" T(GFXP_HIRAGANA "コショウジャナイヨ", "It's not broken"),
GFXP_KATAKANA "ロード" GFXP_HIRAGANA "チュウ", T(GFXP_KATAKANA "コーヒー ブレイク", "Coffee Break"),
// "Now working" T(GFXP_KATAKANA "Bメンヲセットシテクダサイ", "Please set B side"),
GFXP_HIRAGANA "ナウ ワーキング", T(GFXP_HIRAGANA "ジット" GFXP_KATAKANA "ガマン" GFXP_HIRAGANA "" GFXP_KATAKANA "" GFXP_HIRAGANA "デアッタ",
// "Now creating" "Be patient, now"),
GFXP_HIRAGANA "イマ ツクッテマス", T(GFXP_HIRAGANA "イマシバラクオマチクダサイ", "Please wait just a minute"),
// "It's not broken" T(GFXP_HIRAGANA "アワテナイアワテナイ。ヒトヤスミヒトヤスミ。", "Don't worry, don't worry. Take a break, take a break."),
GFXP_HIRAGANA "コショウジャナイヨ",
// "Coffee Break"
GFXP_KATAKANA "コーヒー ブレイク",
// "Please set B side"
GFXP_KATAKANA "Bメンヲセットシテクダサイ",
// "Be patient, now"
GFXP_HIRAGANA "ジット" GFXP_KATAKANA "ガマン" GFXP_HIRAGANA "" GFXP_KATAKANA "" GFXP_HIRAGANA "デアッタ",
// "Please wait just a minute"
GFXP_HIRAGANA "イマシバラクオマチクダサイ",
// "Don't worry, don't worry. Take a break, take a break."
GFXP_HIRAGANA "アワテナイアワテナイ。ヒトヤスミヒトヤスミ。",
}; };
void MapSelect_PrintLoadingMessage(MapSelectState* this, GfxPrint* printer) { void MapSelect_PrintLoadingMessage(MapSelectState* this, GfxPrint* printer) {
@ -590,8 +539,8 @@ void MapSelect_PrintLoadingMessage(MapSelectState* this, GfxPrint* printer) {
} }
static const char* sAgeLabels[] = { static const char* sAgeLabels[] = {
GFXP_HIRAGANA "17(ワカモノ)", // "17(young)" T(GFXP_HIRAGANA "17(ワカモノ)", "17(young)"),
GFXP_HIRAGANA "5(ワカスギ)", // "5(very young)" T(GFXP_HIRAGANA "5(ワカスギ)", "5(very young)"),
}; };
void MapSelect_PrintAgeSetting(MapSelectState* this, GfxPrint* printer, s32 age) { void MapSelect_PrintAgeSetting(MapSelectState* this, GfxPrint* printer, s32 age) {
@ -608,48 +557,48 @@ void MapSelect_PrintCutsceneSetting(MapSelectState* this, GfxPrint* printer, u16
switch (csIndex) { switch (csIndex) {
case CS_INDEX_AUTO: case CS_INDEX_AUTO:
label = GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン"; label = T(GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン", "Night");
gSaveContext.save.dayTime = CLOCK_TIME(0, 0); gSaveContext.save.dayTime = CLOCK_TIME(0, 0);
break; break;
case CS_INDEX_UNUSED: case CS_INDEX_UNUSED:
// clang-format off // clang-format off
gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ"; gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = T(GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ", "Day");
// clang-format on // clang-format on
break; break;
case CS_INDEX_0: case CS_INDEX_0:
// clang-format off // clang-format off
gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = "デモ00"; gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = T("デモ00", "Demo 00");
// clang-format on // clang-format on
break; break;
case CS_INDEX_1: case CS_INDEX_1:
label = "デモ01"; label = T("デモ01", "Demo 01");
break; break;
case CS_INDEX_2: case CS_INDEX_2:
label = "デモ02"; label = T("デモ02", "Demo 02");
break; break;
case CS_INDEX_3: case CS_INDEX_3:
label = "デモ03"; label = T("デモ03", "Demo 03");
break; break;
case CS_INDEX_4: case CS_INDEX_4:
label = "デモ04"; label = T("デモ04", "Demo 04");
break; break;
case CS_INDEX_5: case CS_INDEX_5:
label = "デモ05"; label = T("デモ05", "Demo 05");
break; break;
case CS_INDEX_6: case CS_INDEX_6:
label = "デモ06"; label = T("デモ06", "Demo 06");
break; break;
case CS_INDEX_7: case CS_INDEX_7:
label = "デモ07"; label = T("デモ07", "Demo 07");
break; break;
case CS_INDEX_8: case CS_INDEX_8:
label = "デモ08"; label = T("デモ08", "Demo 08");
break; break;
case CS_INDEX_9: case CS_INDEX_9:
label = "デモ09"; label = T("デモ09", "Demo 09");
break; break;
case CS_INDEX_A: case CS_INDEX_A:
label = "デモ0A"; label = T("デモ0A", "Demo 0A");
break; break;
}; };
@ -731,8 +680,8 @@ void MapSelect_Main(GameState* thisx) {
void MapSelect_Destroy(GameState* thisx) { void MapSelect_Destroy(GameState* thisx) {
PRINTF("%c", BEL); PRINTF("%c", BEL);
// "view_cleanup will hang, so it won't be called" PRINTF(T("*** view_cleanupはハングアップするので、呼ばない ***\n",
PRINTF("*** view_cleanupはハングアップするので、呼ばない ***\n"); "*** view_cleanup will hang, so it won't be called ***\n"));
} }
void MapSelect_Init(GameState* thisx) { void MapSelect_Init(GameState* thisx) {

View file

@ -16,7 +16,7 @@
#include "terminal.h" #include "terminal.h"
#include "versions.h" #include "versions.h"
#pragma increment_block_number "ntsc-1.2:128 pal-1.0:128 pal-1.1:128" #pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#if !PLATFORM_GC #if !PLATFORM_GC
#define KALEIDO_PROMPT_CURSOR_R 100 #define KALEIDO_PROMPT_CURSOR_R 100

View file

@ -8,17 +8,18 @@ import os, shutil, time
from dataclasses import dataclass from dataclasses import dataclass
from multiprocessing.pool import ThreadPool from multiprocessing.pool import ThreadPool
from typing import Dict, List, Tuple, Union from typing import Dict, List, Tuple, Union
from xml.etree import ElementTree
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTable, AudioCodeTableEntry, AudioStorageMedium from .audio_tables import AudioCodeTable, AudioCodeTableEntry, AudioStorageMedium
from .audiotable import AudioTableData, AudioTableFile, AudioTableSample from .audiotable import AudioTableData, AudioTableFile, AudioTableSample
from .audiobank_file import AudiobankFile from .audiobank_file import AudiobankFile
from .disassemble_sequence import CMD_SPEC, SequenceDisassembler, SequenceTableSpec, MMLVersion from .disassemble_sequence import CMD_SPEC, SequenceDisassembler, SequenceTableSpec, MMLVersion
from .util import align, debugm, error, incbin, program_get, XMLWriter from .extraction_xml import ExtractionDescription, SampleBankExtractionDescription, SoundFontExtractionDescription, SequenceExtractionDescription
from .util import align, incbin, program_get, XMLWriter
@dataclass @dataclass
class GameVersionInfo: class GameVersionInfo:
# Version Name
version_name : str
# Music Macro Language Version # Music Macro Language Version
mml_version : MMLVersion mml_version : MMLVersion
# Soundfont table code offset # Soundfont table code offset
@ -49,7 +50,7 @@ BASEROM_DEBUG = False
# ====================================================================================================================== # ======================================================================================================================
def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo,
table : AudioCodeTable, samplebank_xmls : Dict[int, Tuple[str, Element]]): table : AudioCodeTable, samplebank_descs : Dict[int, SampleBankExtractionDescription]):
sample_banks : List[Union[AudioTableFile, int]] = [] sample_banks : List[Union[AudioTableFile, int]] = []
for i,entry in enumerate(table): for i,entry in enumerate(table):
@ -72,7 +73,7 @@ def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, versi
bug = i in version_info.audiotable_buffer_bugs bug = i in version_info.audiotable_buffer_bugs
bank = AudioTableFile(i, audiotable_seg, entry, table.rom_addr, buffer_bug=bug, bank = AudioTableFile(i, audiotable_seg, entry, table.rom_addr, buffer_bug=bug,
extraction_xml=samplebank_xmls.get(i, None)) extraction_desc=samplebank_descs.get(i, None))
if BASEROM_DEBUG: if BASEROM_DEBUG:
bank.dump_bin(f"{extracted_dir}/baserom_audiotest/audiotable_files/{bank.file_name}.bin") bank.dump_bin(f"{extracted_dir}/baserom_audiotest/audiotable_files/{bank.file_name}.bin")
@ -90,7 +91,7 @@ def bank_data_lookup(sample_banks : List[Union[AudioTableFile, int]], e : Union[
return e return e
def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo,
sound_font_table : AudioCodeTable, soundfont_xmls : Dict[int, Tuple[str, Element]], sound_font_table : AudioCodeTable, soundfont_descs : Dict[int, SoundFontExtractionDescription],
sample_banks : List[Union[AudioTableFile, int]]): sample_banks : List[Union[AudioTableFile, int]]):
soundfonts = [] soundfonts = []
@ -104,7 +105,7 @@ def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_
# Read the data # Read the data
soundfont = AudiobankFile(audiobank_seg, i, entry, sound_font_table.rom_addr, bank1, bank2, soundfont = AudiobankFile(audiobank_seg, i, entry, sound_font_table.rom_addr, bank1, bank2,
entry.sample_bank_id_1, entry.sample_bank_id_2, entry.sample_bank_id_1, entry.sample_bank_id_2,
extraction_xml=soundfont_xmls.get(i, None)) extraction_desc=soundfont_descs.get(i, None))
soundfonts.append(soundfont) soundfonts.append(soundfont)
if BASEROM_DEBUG: if BASEROM_DEBUG:
@ -186,7 +187,7 @@ def disassemble_one_sequence(extracted_dir : str, version_info : GameVersionInfo
def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, write_xml : bool, def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, write_xml : bool,
sequence_table : AudioCodeTable, sequence_font_table : memoryview, sequence_table : AudioCodeTable, sequence_font_table : memoryview,
sequence_xmls : Dict[int, Element], soundfonts : List[AudiobankFile]): sequence_descs : Dict[int, SequenceExtractionDescription], soundfonts : List[AudiobankFile]):
sequence_font_table_cvg = [0] * len(sequence_font_table) sequence_font_table_cvg = [0] * len(sequence_font_table)
@ -237,13 +238,13 @@ def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_in
with open(f"{extracted_dir}/baserom_audiotest/audioseq_files/seq_{i}{ext}.aseq", "wb") as outfile: with open(f"{extracted_dir}/baserom_audiotest/audioseq_files/seq_{i}{ext}.aseq", "wb") as outfile:
outfile.write(seq_data) outfile.write(seq_data)
extraction_xml = sequence_xmls.get(i, None) extraction_desc = sequence_descs.get(i, None)
if extraction_xml is None: if extraction_desc is None:
sequence_filename = f"seq_{i}" sequence_filename = f"seq_{i}"
sequence_name = f"Sequence_{i}" sequence_name = f"Sequence_{i}"
else: else:
sequence_filename = extraction_xml[0] sequence_filename = extraction_desc.file_name
sequence_name = extraction_xml[1].attrib["Name"] sequence_name = extraction_desc.name
# Write extraction xml entry # Write extraction xml entry
if write_xml: if write_xml:
@ -359,27 +360,22 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
# Collect extraction xmls # Collect extraction xmls
# ================================================================================================================== # ==================================================================================================================
samplebank_xmls : Dict[int, Tuple[str, Element]] = {} samplebank_descs : Dict[int, SampleBankExtractionDescription] = {}
soundfont_xmls : Dict[int, Tuple[str, Element]] = {} soundfont_descs : Dict[int, SoundFontExtractionDescription] = {}
sequence_xmls : Dict[int, Tuple[str, Element]] = {} sequence_descs : Dict[int, SequenceExtractionDescription] = {}
if read_xml: if read_xml:
# Read all present xmls # Read all present xmls
def walk_xmls(out_dict : Dict[int, Tuple[str, Element]], path : str, typename : str): def walk_xmls(T : type, out_dict : Dict[int, ExtractionDescription], path : str):
for root,_,files in os.walk(path): for root,_,files in os.walk(path):
for f in files: for f in files:
fullpath = os.path.join(root, f) desc : ExtractionDescription = T(os.path.join(root, f), f, version_info.version_name)
xml = ElementTree.parse(fullpath) out_dict[desc.index] = desc
xml_root = xml.getroot()
if xml_root.tag != typename or "Name" not in xml_root.attrib or "Index" not in xml_root.attrib: walk_xmls(SampleBankExtractionDescription, samplebank_descs, f"assets/xml/audio/samplebanks")
error(f"Malformed {typename} extraction xml: \"{fullpath}\"") walk_xmls(SoundFontExtractionDescription, soundfont_descs, f"assets/xml/audio/soundfonts")
out_dict[int(xml_root.attrib["Index"])] = (f.replace(".xml", ""), xml_root) walk_xmls(SequenceExtractionDescription, sequence_descs, f"assets/xml/audio/sequences")
walk_xmls(samplebank_xmls, f"assets/xml/audio/samplebanks", "SampleBank")
walk_xmls(soundfont_xmls, f"assets/xml/audio/soundfonts", "SoundFont")
walk_xmls(sequence_xmls, f"assets/xml/audio/sequences", "Sequence")
# TODO warn about any missing xmls or xmls with a bad index # TODO warn about any missing xmls or xmls with a bad index
@ -389,7 +385,7 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
if BASEROM_DEBUG: if BASEROM_DEBUG:
os.makedirs(f"{extracted_dir}/baserom_audiotest/audiotable_files", exist_ok=True) os.makedirs(f"{extracted_dir}/baserom_audiotest/audiotable_files", exist_ok=True)
sample_banks = collect_sample_banks(audiotable_seg, extracted_dir, version_info, sample_bank_table, samplebank_xmls) sample_banks = collect_sample_banks(audiotable_seg, extracted_dir, version_info, sample_bank_table, samplebank_descs)
# ================================================================================================================== # ==================================================================================================================
# Collect soundfonts # Collect soundfonts
@ -397,7 +393,7 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
if BASEROM_DEBUG: if BASEROM_DEBUG:
os.makedirs(f"{extracted_dir}/baserom_audiotest/audiobank_files", exist_ok=True) os.makedirs(f"{extracted_dir}/baserom_audiotest/audiobank_files", exist_ok=True)
soundfonts = collect_soundfonts(audiobank_seg, extracted_dir, version_info, sound_font_table, soundfont_xmls, soundfonts = collect_soundfonts(audiobank_seg, extracted_dir, version_info, sound_font_table, soundfont_descs,
sample_banks) sample_banks)
# ================================================================================================================== # ==================================================================================================================
@ -459,4 +455,4 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
print("Extracting sequences...") print("Extracting sequences...")
extract_sequences(audioseq_seg, extracted_dir, version_info, write_xml, sequence_table, sequence_font_table, extract_sequences(audioseq_seg, extracted_dir, version_info, write_xml, sequence_table, sequence_font_table,
sequence_xmls, soundfonts) sequence_descs, soundfonts)

View file

@ -5,13 +5,13 @@
# #
import struct import struct
from typing import Optional, Tuple from typing import Optional
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTableEntry from .audio_tables import AudioCodeTableEntry
from .audiobank_structs import AdpcmBook, AdpcmLoop, Drum, Instrument, SoundFontSample, SoundFontSound from .audiobank_structs import AdpcmBook, AdpcmLoop, Drum, Instrument, SoundFontSample, SoundFontSound
from .envelope import Envelope
from .audiotable import AudioTableFile, AudioTableSample from .audiotable import AudioTableFile, AudioTableSample
from .envelope import Envelope
from .extraction_xml import SoundFontExtractionDescription
from .tuning import pitch_names from .tuning import pitch_names
from .util import XMLWriter, align, debugm, merge_like_ranges, merge_ranges from .util import XMLWriter, align, debugm, merge_like_ranges, merge_ranges
@ -183,7 +183,7 @@ class AudiobankFile:
def __init__(self, audiobank_seg : memoryview, index : int, table_entry : AudioCodeTableEntry, def __init__(self, audiobank_seg : memoryview, index : int, table_entry : AudioCodeTableEntry,
seg_offset : int, bank1 : AudioTableFile, bank2 : AudioTableFile, bank1_num : int, bank2_num : int, seg_offset : int, bank1 : AudioTableFile, bank2 : AudioTableFile, bank1_num : int, bank2_num : int,
extraction_xml : Tuple[str, Element] = None): extraction_desc : Optional[SoundFontExtractionDescription] = None):
self.bank_num = index self.bank_num = index
self.table_entry : AudioCodeTableEntry = table_entry self.table_entry : AudioCodeTableEntry = table_entry
self.num_instruments = self.table_entry.num_instruments self.num_instruments = self.table_entry.num_instruments
@ -193,7 +193,7 @@ class AudiobankFile:
self.bank1_num = bank1_num self.bank1_num = bank1_num
self.bank2_num = bank2_num self.bank2_num = bank2_num
if extraction_xml is None: if extraction_desc is None:
self.file_name = f"Soundfont_{self.bank_num}" self.file_name = f"Soundfont_{self.bank_num}"
self.name = f"Soundfont_{self.bank_num}" self.name = f"Soundfont_{self.bank_num}"
@ -201,32 +201,22 @@ class AudiobankFile:
self.extraction_instruments_info = None self.extraction_instruments_info = None
self.extraction_drums_info = None self.extraction_drums_info = None
self.extraction_effects_info = None self.extraction_effects_info = None
self.extraction_envelopes_info_versions = []
self.extraction_instruments_info_versions = {}
self.extraction_drums_info_versions = []
self.extraction_effects_info_versions = []
else: else:
self.file_name = extraction_xml[0] self.file_name = extraction_desc.file_name
self.name = extraction_xml[1].attrib["Name"] self.name = extraction_desc.name
self.extraction_envelopes_info = [] self.extraction_envelopes_info = extraction_desc.envelopes_info
self.extraction_instruments_info = {} self.extraction_instruments_info = extraction_desc.instruments_info
self.extraction_drums_info = [] self.extraction_drums_info = extraction_desc.drums_info
self.extraction_effects_info = [] self.extraction_effects_info = extraction_desc.effects_info
self.extraction_envelopes_info_versions = extraction_desc.envelopes_info_versions
for item in extraction_xml[1]: self.extraction_instruments_info_versions = extraction_desc.instruments_info_versions
if item.tag == "Envelopes": self.extraction_drums_info_versions = extraction_desc.drums_info_versions
for env in item: self.extraction_effects_info_versions = extraction_desc.effects_info_versions
assert env.tag == "Envelope"
self.extraction_envelopes_info.append(env.attrib["Name"])
elif item.tag == "Instruments":
for instr in item:
assert instr.tag == "Instrument"
self.extraction_instruments_info[int(instr.attrib["ProgramNumber"])] = instr.attrib["Name"]
elif item.tag == "Drums":
for drum in item:
self.extraction_drums_info.append(drum.attrib["Name"])
elif item.tag == "Effects":
for effect in item:
self.extraction_effects_info.append(effect.attrib["Name"])
else:
assert False, item.tag
# Coverage consists of a list of itervals of the form [[start,type],[end,type]] # Coverage consists of a list of itervals of the form [[start,type],[end,type]]
self.coverage = [] self.coverage = []
@ -755,25 +745,25 @@ class AudiobankFile:
# TODO resolve decay/release index overrides? # TODO resolve decay/release index overrides?
def envelope_name(self, index): def envelope_name(self, index):
if self.extraction_envelopes_info is not None: if self.extraction_envelopes_info is not None and index < len(self.extraction_envelopes_info):
return self.extraction_envelopes_info[index] return self.extraction_envelopes_info[index]
else: else:
return f"Env{index}" return f"Env{index}"
def instrument_name(self, program_number): def instrument_name(self, program_number):
if self.extraction_instruments_info is not None: if self.extraction_instruments_info is not None and program_number in self.extraction_instruments_info:
return self.extraction_instruments_info[program_number] return self.extraction_instruments_info[program_number]
else: else:
return f"INST_{program_number}" return f"INST_{program_number}"
def drum_grp_name(self, index): def drum_grp_name(self, index):
if self.extraction_drums_info is not None: if self.extraction_drums_info is not None and index < len(self.extraction_drums_info):
return self.extraction_drums_info[index] return self.extraction_drums_info[index]
else: else:
return f"DRUM_{index}" return f"DRUM_{index}"
def effect_name(self, index): def effect_name(self, index):
if self.extraction_effects_info is not None: if self.extraction_effects_info is not None and index < len(self.extraction_effects_info):
return self.extraction_effects_info[index] return self.extraction_effects_info[index]
else: else:
return f"EFFECT_{index}" return f"EFFECT_{index}"
@ -905,21 +895,41 @@ class AudiobankFile:
# add contents for names # add contents for names
if len(self.envelopes) != 0: if len(self.envelopes) != 0 or len(self.extraction_envelopes_info_versions) != 0:
xml.write_start_tag("Envelopes") xml.write_start_tag("Envelopes")
for i in range(len(self.envelopes)): # First write envelopes that were defined in the extraction xml, possibly interleaved with envelopes
# we ignored for this version
i = 0
for envelope_entry,in_version in self.extraction_envelopes_info_versions:
xml.write_element("Envelope", envelope_entry)
# Count how many envelopes we saw that were defined for this version
i += in_version
# Write any remaining envelopes that weren't defined in the xml
for j in range(i, len(self.envelopes)):
xml.write_element("Envelope", { xml.write_element("Envelope", {
"Name" : self.envelope_name(i) "Name" : self.envelope_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()
if len(self.instruments) != 0: if len(self.instruments) != 0 or len(self.extraction_instruments_info_versions) != 0:
xml.write_start_tag("Instruments") xml.write_start_tag("Instruments")
# Write in struct order # Write in struct order
for instr in sorted(self.instruments, key=lambda instr : instr.struct_index): sorted_instruments = tuple(sorted(self.instruments, key=lambda instr : instr.struct_index))
# First write instruments that were defined in the extraction xml, possibly interleaved with instruments
# we ignored for this version
i = 0
for instr_entry,in_version in self.extraction_instruments_info_versions:
xml.write_element("Instrument", instr_entry)
# Count how many instruments we saw that were defined for this version
i += in_version
# Write any remaining instruments that weren't defined in the xml
for instr in sorted_instruments[i:]:
instr : Instrument instr : Instrument
if not instr.unused: if not instr.unused:
xml.write_element("Instrument", { xml.write_element("Instrument", {
@ -929,23 +939,39 @@ class AudiobankFile:
xml.write_end_tag() xml.write_end_tag()
if any(isinstance(dg, DrumGroup) for dg in self.drum_groups): if any(isinstance(dg, DrumGroup) for dg in self.drum_groups) or len(self.extraction_drums_info_versions):
xml.write_start_tag("Drums") xml.write_start_tag("Drums")
for i,drum_grp in enumerate(self.drum_groups): # First write drums that were defined in the extraction xml, possibly interleaved with drums
# we ignored for this version
i = 0
for drum_entry,in_version in self.extraction_drums_info_versions:
xml.write_element("Drum", drum_entry)
# Count how many drum groups we saw that were defined for this version
i += in_version
for j,drum_grp in enumerate(self.drum_groups[i:], i):
if isinstance(drum_grp, DrumGroup): if isinstance(drum_grp, DrumGroup):
xml.write_element("Drum", { xml.write_element("Drum", {
"Name" : self.drum_grp_name(i) "Name" : self.drum_grp_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()
if len(self.sfx) != 0: if len(self.sfx) != 0 or len(self.extraction_effects_info_versions):
xml.write_start_tag("Effects") xml.write_start_tag("Effects")
for i,sfx in enumerate(self.sfx): # First write effects that were defined in the extraction xml, possibly interleaved with effects
# we ignored for this version
i = 0
for sfx_entry,in_version in self.extraction_effects_info_versions:
xml.write_element("Effect", sfx_entry)
# Count how many effects we saw that were defined for this version
i += in_version
for j,sfx in enumerate(self.sfx[i:], i):
xml.write_element("Effect", { xml.write_element("Effect", {
"Name" : self.effect_name(i) "Name" : self.effect_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()

View file

@ -5,11 +5,11 @@
# #
import math, struct import math, struct
from typing import Dict, Tuple from typing import Dict, Optional
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTableEntry from .audio_tables import AudioCodeTableEntry
from .audiobank_structs import AudioSampleCodec, SoundFontSample, AdpcmBook, AdpcmLoop from .audiobank_structs import AudioSampleCodec, SoundFontSample, AdpcmBook, AdpcmLoop
from .extraction_xml import SampleBankExtractionDescription
from .tuning import pitch_names, note_z64_to_midi, recalc_tuning, rate_from_tuning, rank_rates_notes, BAD_FLOATS from .tuning import pitch_names, note_z64_to_midi, recalc_tuning, rate_from_tuning, rank_rates_notes, BAD_FLOATS
from .util import align, error, XMLWriter, f32_to_u32 from .util import align, error, XMLWriter, f32_to_u32
@ -207,7 +207,7 @@ class AudioTableSample(AudioTableData):
def base_note_number(self): def base_note_number(self):
return note_z64_to_midi(pitch_names.index(self.base_note)) return note_z64_to_midi(pitch_names.index(self.base_note))
def resolve_basenote_rate(self, extraction_sample_info : Dict[int, Dict[str,str]]): def resolve_basenote_rate(self, extraction_sample_info : Optional[Dict[str,str]]):
assert len(self.notes_rates) != 0 assert len(self.notes_rates) != 0
# rate_3ds = None # rate_3ds = None
@ -285,13 +285,9 @@ class AudioTableSample(AudioTableData):
final_rate,(final_note,) = rank_rates_notes(finalists) final_rate,(final_note,) = rank_rates_notes(finalists)
if extraction_sample_info is not None: if extraction_sample_info is not None:
if self.start in extraction_sample_info: assert "SampleRate" in extraction_sample_info and "BaseNote" in extraction_sample_info
entry = extraction_sample_info[self.start] final_rate = int(extraction_sample_info["SampleRate"])
if "SampleRate" in entry and "BaseNote" in entry: final_note = extraction_sample_info["BaseNote"]
final_rate = int(entry["SampleRate"])
final_note = entry["BaseNote"]
else:
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{self.start:X}")
# print(" ",len(FINAL_NOTES_RATES), FINAL_NOTES_RATES) # print(" ",len(FINAL_NOTES_RATES), FINAL_NOTES_RATES)
# if rate_3ds is not None and len(FINAL_NOTES_RATES) == 1: # if rate_3ds is not None and len(FINAL_NOTES_RATES) == 1:
@ -385,7 +381,8 @@ class AudioTableFile:
""" """
def __init__(self, bank_num : int, audiotable_seg : memoryview, table_entry : AudioCodeTableEntry, def __init__(self, bank_num : int, audiotable_seg : memoryview, table_entry : AudioCodeTableEntry,
seg_offset : int, buffer_bug : bool = False, extraction_xml : Tuple[str, Element] = None): seg_offset : int, buffer_bug : bool = False,
extraction_desc : Optional[SampleBankExtractionDescription] = None):
self.bank_num = bank_num self.bank_num = bank_num
self.table_entry : AudioCodeTableEntry = table_entry self.table_entry : AudioCodeTableEntry = table_entry
self.data = self.table_entry.data(audiotable_seg, seg_offset) self.data = self.table_entry.data(audiotable_seg, seg_offset)
@ -393,24 +390,18 @@ class AudioTableFile:
self.samples_final = None self.samples_final = None
if extraction_xml is None: if extraction_desc is None:
self.file_name = f"SampleBank_{self.bank_num}" self.file_name = f"SampleBank_{self.bank_num}"
self.name = f"SampleBank_{self.bank_num}" self.name = f"SampleBank_{self.bank_num}"
self.extraction_sample_info_versions = []
self.extraction_sample_info = None self.extraction_sample_info = None
self.extraction_blob_info = None self.extraction_blob_info = None
else: else:
self.file_name = extraction_xml[0] self.file_name = extraction_desc.file_name
self.name = extraction_xml[1].attrib["Name"] self.name = extraction_desc.name
self.extraction_sample_info_versions = extraction_desc.sample_info_versions
self.extraction_sample_info = {} self.extraction_sample_info = extraction_desc.sample_info
self.extraction_blob_info = {} self.extraction_blob_info = extraction_desc.blob_info
for item in extraction_xml[1]:
if item.tag == "Sample":
self.extraction_sample_info[int(item.attrib["Offset"], 16)] = item.attrib
elif item.tag == "Blob":
self.extraction_blob_info[int(item.attrib["Offset"], 16)] = item.attrib
else:
assert False
self.pointer_indices = [] self.pointer_indices = []
@ -461,28 +452,24 @@ class AudioTableFile:
return self.samples[offset] return self.samples[offset]
def sample_name(self, sample : AudioTableSample, index : int): def sample_name(self, sample : AudioTableSample, index : int):
if self.extraction_sample_info is not None: if self.extraction_sample_info is not None and index < len(self.extraction_sample_info):
if sample.start in self.extraction_sample_info: return self.extraction_sample_info[index]["Name"]
return self.extraction_sample_info[sample.start]["Name"]
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}")
return f"SAMPLE_{self.bank_num}_{index}" return f"SAMPLE_{self.bank_num}_{index}"
def sample_filename(self, sample : AudioTableSample, index : int): def sample_filename(self, sample : AudioTableSample, index : int):
ext = sample.codec_file_extension_compressed() ext = sample.codec_file_extension_compressed()
if self.extraction_sample_info is not None: if self.extraction_sample_info is not None and index < len(self.extraction_sample_info):
if sample.start in self.extraction_sample_info: return self.extraction_sample_info[index]["FileName"] + ext
return self.extraction_sample_info[sample.start]["FileName"] + ext
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}")
npad = int(math.floor(1 + math.log10(len(self.samples)))) if len(self.samples) != 0 else 0 npad = int(math.floor(1 + math.log10(len(self.samples)))) if len(self.samples) != 0 else 0
return f"Sample{index:0{npad}}{ext}" return f"Sample{index:0{npad}}{ext}"
def blob_filename(self, start, end): def blob_filename(self, start, end, index):
if self.extraction_blob_info is not None: if self.extraction_blob_info is not None and index < len(self.extraction_blob_info):
if start in self.extraction_blob_info: return self.extraction_blob_info[index]["Name"]
return self.extraction_blob_info[start]["Name"]
print(f"WARNING: Missing extraction xml entry for blob at offset=0x{start:X}")
return f"UNACCOUNTED_{start:X}_{end:X}" return f"UNACCOUNTED_{start:X}_{end:X}"
def finalize_samples(self): def finalize_samples(self):
@ -490,7 +477,7 @@ class AudioTableFile:
for i,sample in enumerate(self.samples_final): for i,sample in enumerate(self.samples_final):
sample : AudioTableSample sample : AudioTableSample
sample.resolve_basenote_rate(self.extraction_sample_info) sample.resolve_basenote_rate(self.extraction_sample_info[i] if self.extraction_sample_info is not None else None)
def finalize_coverage(self, all_sample_banks): def finalize_coverage(self, all_sample_banks):
if len(self.coverage) != 0: if len(self.coverage) != 0:
@ -577,6 +564,7 @@ class AudioTableFile:
def assign_names(self): def assign_names(self):
i = 0 i = 0
j = 0
for sample in self.samples_final: for sample in self.samples_final:
if isinstance(sample, AudioTableSample): if isinstance(sample, AudioTableSample):
sample : AudioTableSample sample : AudioTableSample
@ -587,9 +575,10 @@ class AudioTableFile:
else: else:
sample : AudioTableData sample : AudioTableData
name = self.blob_filename(sample.start, sample.end) name = self.blob_filename(sample.start, sample.end, j)
sample.name = name sample.name = name
sample.filename = f"{name}.bin" sample.filename = f"{name}.bin"
j += 1
def to_xml(self, base_path): def to_xml(self, base_path):
xml = XMLWriter() xml = XMLWriter()
@ -635,33 +624,36 @@ class AudioTableFile:
xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/") xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/")
start = { xml.write_start_tag("SampleBank", {
"Name" : self.name, "Name" : self.name,
"Index" : self.bank_num, "Index" : self.bank_num,
} })
xml.write_start_tag("SampleBank", start)
# Write elements from the old xml version verbatim
i = 0 i = 0
for sample in self.samples_final: for entry_name,entry_attrs,in_version in self.extraction_sample_info_versions:
xml.write_element(entry_name, entry_attrs)
i += in_version
# Write any new elements
for sample in self.samples_final[i:]:
if isinstance(sample, AudioTableSample): if isinstance(sample, AudioTableSample):
sample : AudioTableSample sample : AudioTableSample
xml.write_element("Sample", { attrs = {
"Name" : sample.name, "Name" : sample.name,
"FileName" : sample.filename.replace(sample.codec_file_extension_compressed(), ""), "FileName" : sample.filename.replace(sample.codec_file_extension_compressed(), ""),
"Offset" : f"0x{sample.start:06X}",
"SampleRate" : sample.sample_rate, "SampleRate" : sample.sample_rate,
"BaseNote" : sample.base_note, "BaseNote" : sample.base_note,
}) }
i += 1 xml.write_element("Sample", attrs)
else: else:
sample : AudioTableData sample : AudioTableData
xml.write_element("Blob", { attrs = {
"Name" : sample.name, "Name" : sample.name,
"Offset" : f"0x{sample.start:06X}", }
"Size" : f"0x{sample.end - sample.start:X}", xml.write_element("Blob", attrs)
})
xml.write_end_tag() xml.write_end_tag()

View file

@ -0,0 +1,135 @@
# SPDX-FileCopyrightText: © 2024 ZeldaRET
# SPDX-License-Identifier: CC0-1.0
#
#
#
from xml.etree import ElementTree
from xml.etree.ElementTree import Element
from .util import error
class ExtractionDescription:
def __init__(self, file_path : str, file_name : str, version_name : str) -> None:
self.type_name = type(self).__name__.replace("ExtractionDescription", "")
self.file_name = file_name.replace(".xml", "")
self.file_path = file_path
xml_root = ElementTree.parse(file_path).getroot()
if xml_root.tag != self.type_name or "Name" not in xml_root.attrib or "Index" not in xml_root.attrib:
error(f"Malformed {self.type_name} extraction xml: \"{file_path}\"")
self.name = xml_root.attrib["Name"]
self.index = int(xml_root.attrib["Index"])
self.post_init(xml_root, version_name)
def post_init(self, xml_root : Element, version_name : str):
raise NotImplementedError() # Implement in subclass
def in_version(self, version_include, version_exclude, version_name : str):
if version_include == "":
version_include = "All"
if version_exclude == "":
version_exclude = "None"
# Determine if this layout is the one we need
if version_include != "All":
version_include = version_include.split(",")
if version_exclude != "None":
version_exclude = version_exclude.split(",")
included = version_include == "All" or version_name in version_include
excluded = version_exclude != "None" and version_name in version_exclude
return included and not excluded
class SampleBankExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
self.included_version = None
self.sample_info = []
self.sample_info_versions = []
self.blob_info = []
for item in xml_root:
if item.tag == "Sample":
version_include = item.attrib.get("VersionInclude", "")
version_exclude = item.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.sample_info.append(item.attrib)
self.sample_info_versions.append((item.tag, item.attrib, in_version))
elif item.tag == "Blob":
version_include = item.attrib.get("VersionInclude", "")
version_exclude = item.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.blob_info.append(item.attrib)
self.sample_info_versions.append((item.attrib, in_version))
else:
print(xml_root.attrib)
assert False, item.tag
class SoundFontExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
self.envelopes_info = []
self.instruments_info = {}
self.drums_info = []
self.effects_info = []
self.envelopes_info_versions = []
self.instruments_info_versions = []
self.drums_info_versions = []
self.effects_info_versions = []
for item in xml_root:
if item.tag == "Envelopes":
for env in item:
assert env.tag == "Envelope"
version_include = env.attrib.get("VersionInclude", "")
version_exclude = env.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.envelopes_info.append(env.attrib["Name"])
self.envelopes_info_versions.append((env.attrib, in_version))
elif item.tag == "Instruments":
for instr in item:
assert instr.tag == "Instrument"
prg_num = int(instr.attrib["ProgramNumber"])
version_include = instr.attrib.get("VersionInclude", "")
version_exclude = instr.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.instruments_info[prg_num] = instr.attrib["Name"]
self.instruments_info_versions.append((instr.attrib, in_version))
elif item.tag == "Drums":
for drum in item:
assert drum.tag == "Drum"
version_include = drum.attrib.get("VersionInclude", "")
version_exclude = drum.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.drums_info.append(drum.attrib["Name"])
self.drums_info_versions.append((drum.attrib, in_version))
elif item.tag == "Effects":
for effect in item:
assert effect.tag == "Effect"
version_include = effect.attrib.get("VersionInclude", "")
version_exclude = effect.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.effects_info.append(effect.attrib["Name"])
self.effects_info_versions.append((effect.attrib, in_version))
else:
assert False, item.tag
class SequenceExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
pass

View file

@ -184,7 +184,8 @@ if __name__ == '__main__':
), ),
} }
version_info = GameVersionInfo(MMLVersion.OOT, version_info = GameVersionInfo(version,
MMLVersion.OOT,
soundfont_table_code_offset, soundfont_table_code_offset,
seq_font_table_code_offset, seq_font_table_code_offset,
seq_table_code_offset, seq_table_code_offset,