Fix NameDB and Voice related crashes

This commit is contained in:
Phillip Stephens 2018-09-01 20:45:46 -07:00
parent 1884e0ca7a
commit d9018e2d2e
3 changed files with 13 additions and 7 deletions

View File

@ -63,7 +63,7 @@ std::pair<ObjToken<SampleEntryData>, const unsigned char*>
const_cast<SampleEntry*>(sample)->loadLooseData(basePath); const_cast<SampleEntry*>(sample)->loadLooseData(basePath);
return {sample->m_data, sample->m_data->m_looseData.get()}; return {sample->m_data, sample->m_data->m_looseData.get()};
} }
return std::make_pair(ObjToken<SampleEntryData>(), m_samp + sample->m_data->m_sampleOff); return {sample->m_data, m_samp + sample->m_data->m_sampleOff};
} }
SampleFileState AudioGroup::getSampleFileState(SampleId sfxId, const SampleEntry* sample, SystemString* pathOut) const SampleFileState AudioGroup::getSampleFileState(SampleId sfxId, const SampleEntry* sample, SystemString* pathOut) const

View File

@ -46,7 +46,8 @@ static void ReadRangedObjectIds(NameDB* db, athena::io::IStreamReader& r, NameDB
useId.id |= 0x8000; useId.id |= 0x8000;
else if (tp == NameDB::Type::Keymap) else if (tp == NameDB::Type::Keymap)
useId.id |= 0x4000; useId.id |= 0x4000;
db->registerPair(NameDB::generateName(useId, tp), useId); if (db)
db->registerPair(NameDB::generateName(useId, tp), useId);
} }
} }
else else
@ -55,7 +56,8 @@ static void ReadRangedObjectIds(NameDB* db, athena::io::IStreamReader& r, NameDB
id |= 0x8000; id |= 0x8000;
else if (tp == NameDB::Type::Keymap) else if (tp == NameDB::Type::Keymap)
id |= 0x4000; id |= 0x4000;
db->registerPair(NameDB::generateName(id, tp), id); if (db)
db->registerPair(NameDB::generateName(id, tp), id);
} }
} }
@ -97,7 +99,8 @@ AudioGroupProject::AudioGroupProject(athena::io::IStreamReader& r, GCNDataTag)
GroupHeader<athena::Big> header; GroupHeader<athena::Big> header;
header.read(r); header.read(r);
GroupId::CurNameDB->registerPair(NameDB::generateName(header.groupId, NameDB::Type::Group), header.groupId); if (GroupId::CurNameDB)
GroupId::CurNameDB->registerPair(NameDB::generateName(header.groupId, NameDB::Type::Group), header.groupId);
/* Sound Macros */ /* Sound Macros */
r.seek(header.soundMacroIdsOff, athena::Begin); r.seek(header.soundMacroIdsOff, athena::Begin);
@ -156,7 +159,8 @@ AudioGroupProject::AudioGroupProject(athena::io::IStreamReader& r, GCNDataTag)
std::array<SongGroupIndex::MIDISetup, 16>& setup = idx->m_midiSetups[songId]; std::array<SongGroupIndex::MIDISetup, 16>& setup = idx->m_midiSetups[songId];
for (int i = 0; i < 16 ; ++i) for (int i = 0; i < 16 ; ++i)
setup[i].read(r); setup[i].read(r);
SongId::CurNameDB->registerPair(NameDB::generateName(songId, NameDB::Type::Song), songId); if (SongId::CurNameDB)
SongId::CurNameDB->registerPair(NameDB::generateName(songId, NameDB::Type::Song), songId);
} }
} }
else if (header.type == GroupType::SFX) else if (header.type == GroupType::SFX)
@ -174,7 +178,8 @@ AudioGroupProject::AudioGroupProject(athena::io::IStreamReader& r, GCNDataTag)
SFXGroupIndex::SFXEntryDNA<athena::Big> entry; SFXGroupIndex::SFXEntryDNA<athena::Big> entry;
entry.read(r); entry.read(r);
idx->m_sfxEntries[entry.sfxId.id] = entry; idx->m_sfxEntries[entry.sfxId.id] = entry;
SFXId::CurNameDB->registerPair( if (SFXId::CurNameDB)
SFXId::CurNameDB->registerPair(
NameDB::generateName(entry.sfxId.id, NameDB::Type::SFX), entry.sfxId.id); NameDB::generateName(entry.sfxId.id, NameDB::Type::SFX), entry.sfxId.id);
} }
} }

View File

@ -51,7 +51,8 @@ AudioGroupSampleDirectory::AudioGroupSampleDirectory(athena::io::IStreamReader&
EntryDNA<athena::Big> ent; EntryDNA<athena::Big> ent;
ent.read(r); ent.read(r);
m_entries[ent.m_sfxId] = MakeObj<Entry>(ent); m_entries[ent.m_sfxId] = MakeObj<Entry>(ent);
SampleId::CurNameDB->registerPair(NameDB::generateName(ent.m_sfxId, NameDB::Type::Sample), ent.m_sfxId); if (SampleId::CurNameDB)
SampleId::CurNameDB->registerPair(NameDB::generateName(ent.m_sfxId, NameDB::Type::Sample), ent.m_sfxId);
} }
for (auto& p : m_entries) for (auto& p : m_entries)