[jak2] Fix unicode issue with GAME.CGO load (#3254)

Fix for https://github.com/open-goal/jak-project/issues/3244
This commit is contained in:
water111
2023-12-09 18:11:24 -05:00
committed by GitHub
parent 168afa0e2e
commit f17427bc26
19 changed files with 116 additions and 115 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ void load_and_link_dgo_from_c_fast(const char* name,
// open the DGO file:
auto file_path = file_util::get_jak_project_dir() / "out" / game_version_names[g_game_version] /
"iso" / name_on_cd;
auto fp = fopen(file_path.string().c_str(), "rb");
auto fp = file_util::open_file(file_path, "rb");
if (!fp) {
lg::die("Failed to open DGO: {}, path {}\n", name, file_path.string());
}
+1
View File
@@ -1,6 +1,7 @@
#include "srpc.h"
#include <cstring>
#include "game/sound/sndshim.h"
// added
+1 -1
View File
@@ -235,7 +235,7 @@ void ee_runner(SystemThreadInterface& iface) {
void ee_worker_runner(SystemThreadInterface& iface) {
iface.initialization_complete();
while (!iface.get_want_exit()) {
const auto queues_weres_empty = g_background_worker.process_queues();
const auto queues_weres_empty = !g_background_worker.process_queues();
if (queues_weres_empty) {
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
+6 -6
View File
@@ -13,11 +13,11 @@ u64 SoundFlavaHack = 0;
u8 GlobalExcite = 0;
AmeHandler::AmeHandler(MultiMidi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank)
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank)
: m_sound(sound), m_bank(bank), m_header(block), m_vm(vm), m_repeats(sound.Repeats) {
if (vol == VOLUME_DONT_CHANGE) {
vol = 1024;
@@ -59,7 +59,7 @@ void AmeHandler::StartSegment(u32 id) {
u32 type = (midi.SoundHandle >> 24) & 0xf;
if (type == 1 || type == 3) {
m_midis.emplace(id, std::make_unique<MidiHandler>(static_cast<Midi*>(&midi), m_vm, m_sound,
m_vol, m_pan, m_bank, this));
m_vol, m_pan, m_bank, this));
}
}
}
+6 -6
View File
@@ -5,9 +5,9 @@
#include "loader.h"
#include "midi_handler.h"
#include "musicbank.h"
#include "sound_handler.h"
#include "vagvoice.h"
#include "musicbank.h"
#include "common/common_types.h"
@@ -24,11 +24,11 @@ class AmeHandler : public SoundHandler {
public:
AmeHandler(MultiMidi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank);
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank);
bool Tick() override;
SoundBank& Bank() override { return m_bank; };
+5 -5
View File
@@ -11,11 +11,11 @@ namespace snd {
std::array<s8, 32> g_block_reg{};
BlockSoundHandler::BlockSoundHandler(SoundBank& bank,
SFXBlock::SFX& sfx,
VoiceManager& vm,
s32 sfx_vol,
s32 sfx_pan,
SndPlayParams& params)
SFXBlock::SFX& sfx,
VoiceManager& vm,
s32 sfx_vol,
s32 sfx_pan,
SndPlayParams& params)
: m_group(sfx.VolGroup), m_sfx(sfx), m_vm(vm), m_bank(bank) {
s32 vol, pan, pitch_mod, pitch_bend;
if (sfx_vol == -1) {
+13 -13
View File
@@ -23,11 +23,11 @@ namespace snd {
*/
MidiHandler::MidiHandler(Midi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank)
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank)
: m_sound(sound), m_repeats(sound.Repeats), m_bank(bank), m_header(block), m_vm(vm) {
if (vol == VOLUME_DONT_CHANGE) {
vol = 1024;
@@ -48,12 +48,12 @@ MidiHandler::MidiHandler(Midi* block,
}
MidiHandler::MidiHandler(Midi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank,
std::optional<AmeHandler*> parent)
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank,
std::optional<AmeHandler*> parent)
: m_parent(parent),
m_sound(sound),
m_vol(vol),
@@ -163,7 +163,7 @@ void MidiHandler::SetVolPan(s32 vol, s32 pan) {
voice->basevol =
m_vm.MakeVolumeB(m_vol, voice->velocity * m_chanvol[voice->channel] / 127, pan,
voice->prog.Vol, voice->prog.Pan, voice->tone.Vol, voice->tone.Pan);
voice->prog.Vol, voice->prog.Pan, voice->tone.Vol, voice->tone.Pan);
auto left = m_vm.AdjustVolToGroup(voice->basevol.left, voice->group);
auto right = m_vm.AdjustVolToGroup(voice->basevol.right, voice->group);
@@ -232,7 +232,7 @@ void MidiHandler::NoteOn() {
auto voice = std::make_shared<midi_voice>(t, program);
voice->basevol = m_vm.MakeVolumeB(m_vol, (velocity * m_chanvol[channel]) / 0x7f, pan,
program.Vol, program.Pan, t.Vol, t.Pan);
program.Vol, program.Pan, t.Vol, t.Pan);
voice->note = note;
voice->channel = channel;
+11 -11
View File
@@ -30,19 +30,19 @@ class AmeHandler;
class MidiHandler : public SoundHandler {
public:
MidiHandler(Midi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank);
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank);
MidiHandler(Midi* block,
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank,
std::optional<AmeHandler*> parent);
VoiceManager& vm,
MusicBank::MIDISound& sound,
s32 vol,
s32 pan,
SoundBank& bank,
std::optional<AmeHandler*> parent);
~MidiHandler() override {
for (auto& p : m_voices) {
+9 -9
View File
@@ -8,11 +8,11 @@
namespace snd {
std::optional<std::unique_ptr<SoundHandler>> MusicBank::MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
auto& sound = Sounds[sound_id];
// FIXME: global midi list
@@ -39,10 +39,10 @@ std::optional<std::unique_ptr<SoundHandler>> MusicBank::MakeHandler(VoiceManager
}
std::optional<std::unique_ptr<SoundHandler>> MusicBank::MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) {
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) {
return std::nullopt;
}
+9 -9
View File
@@ -68,16 +68,16 @@ class MusicBank : public SoundBank {
nonstd::span<u8> midi_data);
std::optional<std::unique_ptr<SoundHandler>> MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) override;
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) override;
std::optional<std::unique_ptr<SoundHandler>> MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) override;
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) override;
};
} // namespace snd
+12 -12
View File
@@ -55,8 +55,8 @@ void Player::InitCubeb() {
return;
}
err = cubeb_stream_init(mCtx, &mStream, "OpenGOAL", nullptr, nullptr, nullptr, &outparam,
latency, &sound_callback, &state_callback, this);
err = cubeb_stream_init(mCtx, &mStream, "OpenGOAL", nullptr, nullptr, nullptr, &outparam, latency,
&sound_callback, &state_callback, this);
if (err != CUBEB_OK) {
lg::error("Cubeb init failed");
return;
@@ -150,12 +150,12 @@ u32 Player::PlaySound(BankHandle bank_id, u32 sound_id, s32 vol, s32 pan, s32 pm
}
u32 Player::PlaySoundByName(BankHandle bank_id,
char* bank_name,
char* sound_name,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
char* bank_name,
char* sound_name,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
std::scoped_lock lock(mTickLock);
SoundBank* bank = nullptr;
if (bank_id == 0 && bank_name != nullptr) {
@@ -331,10 +331,10 @@ void Player::StopAllSounds() {
}
s32 Player::GetSoundUserData(BankHandle block_handle,
char* block_name,
s32 sound_id,
char* sound_name,
SFXUserData* dst) {
char* block_name,
s32 sound_id,
char* sound_name,
SFXUserData* dst) {
std::scoped_lock lock(mTickLock);
SoundBank* bank = nullptr;
if (block_handle == nullptr && block_name != nullptr) {
+10 -10
View File
@@ -36,12 +36,12 @@ class Player {
u32 PlaySound(BankHandle bank, u32 sound, s32 vol, s32 pan, s32 pm, s32 pb);
u32 PlaySoundByName(BankHandle bank,
char* bank_name,
char* sound_name,
s32 vol,
s32 pan,
s32 pm,
s32 pb);
char* bank_name,
char* sound_name,
s32 vol,
s32 pan,
s32 pm,
s32 pb);
void SetSoundReg(u32 sound_id, u8 reg, u8 value);
void SetGlobalExcite(u8 value) { GlobalExcite = value; };
bool SoundStillActive(u32 sound_id);
@@ -62,10 +62,10 @@ class Player {
s32 GetTick() { return mTick; };
void StopAllSounds();
s32 GetSoundUserData(BankHandle block_handle,
char* block_name,
s32 sound_id,
char* sound_name,
SFXUserData* dst);
char* block_name,
s32 sound_id,
char* sound_name,
SFXUserData* dst);
private:
std::recursive_mutex mTickLock; // TODO does not need to recursive with some light restructuring
+4 -4
View File
@@ -8,10 +8,10 @@
namespace snd {
std::optional<std::unique_ptr<SoundHandler>> SFXBlock::MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) {
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) {
auto& SFX = Sounds[sound_id];
if (SFX.Grains.empty()) {
+4 -4
View File
@@ -49,10 +49,10 @@ class SFXBlock : public SoundBank {
static SFXBlock* ReadBlock(nonstd::span<u8> bank_data, nonstd::span<u8> samples);
std::optional<std::unique_ptr<SoundHandler>> MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) override;
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) override;
std::optional<std::string_view> GetName() override { return Name; };
std::optional<u32> GetSoundByName(const char* name) override;
+1 -1
View File
@@ -69,7 +69,7 @@ int main(int argc, char* argv[]) {
printf("invalid args\n");
} else {
player.SetSoundReg(std::atoi(parts[1].c_str()), std::atoi(parts[2].c_str()),
std::atoi(parts[3].c_str()));
std::atoi(parts[3].c_str()));
}
}
+9 -9
View File
@@ -54,11 +54,11 @@ class SoundBank {
s8 BankNum;
virtual std::optional<std::unique_ptr<SoundHandler>> MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
u32 sound_id,
s32 vol,
s32 pan,
s32 pm,
s32 pb) {
SndPlayParams params{};
params.vol = vol;
params.pan = pan;
@@ -69,10 +69,10 @@ class SoundBank {
};
virtual std::optional<std::unique_ptr<SoundHandler>> MakeHandler(VoiceManager& vm,
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) = 0;
u32 sound_id,
s32 vol,
s32 pan,
SndPlayParams& params) = 0;
virtual std::optional<std::string_view> GetName() { return std::nullopt; };
virtual std::optional<u32> GetSoundByName(const char* /*name*/) { return std::nullopt; };
+6 -6
View File
@@ -98,12 +98,12 @@ VolPair VoiceManager::MakeVolume(int vol1, int pan1, int vol2, int pan2, int vol
}
VolPair VoiceManager::MakeVolumeB(int sound_vol,
int velocity_volume,
int pan,
int prog_vol,
int prog_pan,
int tone_vol,
int tone_pan) {
int velocity_volume,
int pan,
int prog_vol,
int prog_pan,
int tone_vol,
int tone_pan) {
// Scale up as close as we can to max positive 16bit volume
// I'd have just used shifting but I guess this does get closer
+6 -6
View File
@@ -57,12 +57,12 @@ class VoiceManager {
// This is super silly, but it's what 989snd does
VolPair MakeVolumeB(int sound_vol,
int velocity_volume,
int pan,
int prog_vol,
int prog_pan,
int tone_vol,
int tone_pan);
int velocity_volume,
int pan,
int prog_vol,
int prog_pan,
int tone_vol,
int tone_pan);
void SetMasterVol(u8 group, s32 volume);
void SetPlaybackMode(s32 mode) { mStereoOrMono = mode; }
+2 -2
View File
@@ -167,7 +167,7 @@ s32 snd_PlaySoundByNameVolPanPMPB(snd::BankHandle bank_handle,
s32 pitch_bend) {
if (player) {
return player->PlaySoundByName(bank_handle, bank_name, sound_name, vol, pan, pitch_mod,
pitch_bend);
pitch_bend);
} else {
return 0;
}
@@ -248,7 +248,7 @@ s32 snd_GetSoundUserData(snd::BankHandle block_handle,
SFXUserData* dst) {
if (player) {
return player->GetSoundUserData(block_handle, block_name, sound_id, sound_name,
(snd::SFXUserData*)dst);
(snd::SFXUserData*)dst);
}
return 0;
}