mirror of
https://github.com/izzy2lost/Starship.git
synced 2026-07-05 15:19:42 -07:00
Fixed more even things
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
typedef struct {
|
||||
s32 msgId;
|
||||
u16* msgPtr;
|
||||
const char* path;
|
||||
} MsgLookup;
|
||||
|
||||
u16* Message_PtrFromId(u16 msgId);
|
||||
|
||||
@@ -1131,11 +1131,11 @@ void func_80015FD4(SequencePlayer* seqPlayer) {
|
||||
return;
|
||||
}
|
||||
seqPlayer->tempoAcc += seqPlayer->tempo;
|
||||
seqPlayer->tempoAcc = seqPlayer->tempoAcc + (s16) seqPlayer->tempoChange;
|
||||
seqPlayer->tempoAcc += seqPlayer->tempoChange;
|
||||
if (seqPlayer->tempoAcc < gMaxTempo) {
|
||||
return;
|
||||
}
|
||||
seqPlayer->tempoAcc = (seqPlayer->tempoAcc - gMaxTempo) & 0xFFFF; // fake?
|
||||
seqPlayer->tempoAcc -= (u16) gMaxTempo;
|
||||
if (seqPlayer->delay > 1) {
|
||||
seqPlayer->delay--;
|
||||
} else {
|
||||
@@ -1214,6 +1214,7 @@ void func_80015FD4(SequencePlayer* seqPlayer) {
|
||||
seqPlayer->transposition += (s8) func_800146C0(temp_s0);
|
||||
break;
|
||||
case 0xDD:
|
||||
// LTODO: The original tempo is 0x30 but you can change it to 0x19
|
||||
seqPlayer->tempo = func_800146C0(temp_s0) * 0x30;
|
||||
if (seqPlayer->tempo > gMaxTempo) {
|
||||
seqPlayer->tempo = gMaxTempo;
|
||||
|
||||
+170
-131
File diff suppressed because it is too large
Load Diff
@@ -401,7 +401,7 @@ void AudioThread_ProcessCmds(u32 msg) {
|
||||
case AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION:
|
||||
player->transposition = cmd->asSbyte;
|
||||
break;
|
||||
case 0x46: // AUDIOCMD_OP_SEQPLAYER_SET_IO?
|
||||
case AUDIOCMD_OP_SEQPLAYER_SET_IO:
|
||||
player->unk_07[cmd->arg2] = cmd->asSbyte;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ u16* Message_PtrFromId(u16 msgId) {
|
||||
|
||||
while (lookup->msgId != -1) {
|
||||
if (lookup->msgId == msgId) {
|
||||
return lookup->msgPtr;
|
||||
return lookup->path;
|
||||
}
|
||||
lookup++;
|
||||
}
|
||||
@@ -19,8 +19,14 @@ u16 Message_IdFromPtr(u16* msgPtr) {
|
||||
MsgLookup* lookup = (MsgLookup*) LOAD_ASSET(gMsgLookup);
|
||||
|
||||
while (lookup->msgPtr != NULL) {
|
||||
if (lookup->msgPtr == msgPtr) {
|
||||
return lookup->msgId;
|
||||
if(GameEngine_OTRSigCheck(msgPtr)){
|
||||
if(strcmp(((char*) msgPtr) + 7, lookup->path) == 0){
|
||||
return lookup->msgId;
|
||||
}
|
||||
} else {
|
||||
if (lookup->msgPtr == msgPtr) {
|
||||
return lookup->msgId;
|
||||
}
|
||||
}
|
||||
lookup++;
|
||||
}
|
||||
|
||||
@@ -57,9 +57,9 @@ void Radio_PlayMessage(u16* msg, RadioCharacterId character) {
|
||||
TeamId teamId;
|
||||
s32 pad;
|
||||
s32 priority;
|
||||
msg = LOAD_ASSET(msg);
|
||||
u16* lmsg = LOAD_ASSET(msg);
|
||||
|
||||
switch (msg[0]) {
|
||||
switch (lmsg[0]) {
|
||||
default:
|
||||
case MSGCHAR_PRI0:
|
||||
priority = 0;
|
||||
|
||||
@@ -17,9 +17,11 @@ std::shared_ptr<Ship::IResource> ResourceFactoryBinaryMessageLookupV0::ReadResou
|
||||
for (uint32_t i = 0; i < count - 1; i++) {
|
||||
SPDLOG_INFO("Reading message lookup table entry {}", i);
|
||||
auto id = reader->ReadInt32();
|
||||
auto crc = reader->ReadUInt64();
|
||||
|
||||
uint16_t* ptr = LoadChild<uint16_t*>(reader->ReadUInt64());
|
||||
table->mLookupTable.push_back({ id, ptr });
|
||||
uint16_t* ptr = LoadChild<uint16_t*>(crc);
|
||||
const char* name = ResourceGetNameByCrc(crc);
|
||||
table->mLookupTable.push_back({ id, ptr, strdup(name) });
|
||||
}
|
||||
|
||||
return table;
|
||||
|
||||
@@ -10,6 +10,14 @@
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
std::unordered_map<uint32_t, void*> gAudioCache;
|
||||
|
||||
void* StoreOnCache(uint32_t addr){
|
||||
if(gAudioCache.contains(addr)){
|
||||
return gAudioCache[addr];
|
||||
}
|
||||
}
|
||||
|
||||
Ship::BinaryReader Audio_MakeReader(const char* resource, u32 offset){
|
||||
auto data = (char*)ResourceGetDataByName(resource);
|
||||
auto size = ResourceGetSizeByName(resource);
|
||||
@@ -51,6 +59,10 @@ EnvelopePoint* Audio_LoadEnvelope(uint32_t addr) {
|
||||
extern "C" SoundFont* Audio_LoadFont(AudioTableEntry entry) {
|
||||
auto reader = Audio_MakeReader(gAudioBank, entry.romAddr);
|
||||
|
||||
if(gAudioCache.contains(entry.romAddr)){
|
||||
return (SoundFont*) gAudioCache[entry.romAddr];
|
||||
}
|
||||
|
||||
SoundFont* font = memalloc(SoundFont);
|
||||
|
||||
font->numInstruments = (entry.shortData2 >> 8) & 0xFFu;
|
||||
@@ -80,6 +92,7 @@ extern "C" SoundFont* Audio_LoadFont(AudioTableEntry entry) {
|
||||
|
||||
gSampleFontLoadStatus[font->sampleBankId1] = 2;
|
||||
|
||||
gAudioCache[entry.romAddr] = font;
|
||||
return font;
|
||||
}
|
||||
|
||||
@@ -181,6 +194,10 @@ extern "C" Instrument* Audio_LoadInstrument(uint32_t addr, AudioTableEntry entry
|
||||
}
|
||||
|
||||
extern "C" Drum* Audio_LoadDrum(uint32_t addr, AudioTableEntry entry, uint32_t sampleBankID) {
|
||||
if(addr == 0){
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto reader = Audio_MakeReader(gAudioBank, entry.romAddr + addr);
|
||||
Drum* drum = memalloc(Drum);
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ namespace SF64 {
|
||||
typedef struct {
|
||||
s32 msgId;
|
||||
u16* msgPtr;
|
||||
const char* path;
|
||||
} MsgLookup;
|
||||
|
||||
class Message : public Ship::Resource<void> {
|
||||
|
||||
Reference in New Issue
Block a user