mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
6901e80e7f
Some cleanup of vag related functions in overlord.
255 lines
6.1 KiB
C++
255 lines
6.1 KiB
C++
#include "iso_api.h"
|
|
|
|
#include <cstring>
|
|
|
|
#include "common/util/FileUtil.h"
|
|
|
|
#include "game/overlord/common/srpc.h"
|
|
#include "game/overlord/jak2/iso_queue.h"
|
|
#include "game/overlord/jak2/streamlist.h"
|
|
#include "game/overlord/jak2/vag.h"
|
|
#include "game/sce/iop.h"
|
|
#include "game/sound/sndshim.h"
|
|
|
|
using namespace iop;
|
|
|
|
namespace jak2 {
|
|
void EEVagAndVagwad(char* name, VagCmd* cmd) {
|
|
char name_buff[16];
|
|
|
|
int name_len;
|
|
if (*name != '$') {
|
|
name_len = strlen(name);
|
|
if (8 < name_len) {
|
|
file_util::ISONameFromAnimationName(name_buff, name);
|
|
goto LAB_0000cc60;
|
|
}
|
|
}
|
|
|
|
name_len = strlen(name);
|
|
if (*name == '$') {
|
|
name = name + 1;
|
|
}
|
|
if ((int)name_len < 9) {
|
|
memset(name_buff, 0x20, 8);
|
|
memcpy(name_buff, name, name_len);
|
|
} else {
|
|
memcpy(name_buff, name, 8);
|
|
}
|
|
{
|
|
int iVar3 = 0;
|
|
char* pbVar4 = name_buff;
|
|
do {
|
|
*pbVar4 = ::toupper(*pbVar4);
|
|
iVar3 = iVar3 + 1;
|
|
pbVar4 = (name_buff + iVar3);
|
|
} while (iVar3 < 8);
|
|
}
|
|
|
|
LAB_0000cc60:
|
|
cmd->vag_dir_entry = FindVAGFile(name_buff);
|
|
memcpy(name_buff, "VAGWAD ", 8);
|
|
strncpy(name_buff + 8, gLanguage, 4);
|
|
cmd->file_record = (isofs->find_in)(name_buff);
|
|
}
|
|
|
|
void QueueVAGStream(VagStrListNode* param_1) {
|
|
char bVar1;
|
|
int iVar2;
|
|
char* pcVar3;
|
|
char* pbVar4;
|
|
VagCmd cmd;
|
|
char local_20[12];
|
|
|
|
cmd.header.cmd_kind = 0x400;
|
|
cmd.header.mbx_to_reply = 0;
|
|
cmd.header.thread_id = 0;
|
|
if (param_1->sound_handler == 0) {
|
|
EEVagAndVagwad(param_1->name, &cmd);
|
|
cmd.vol_multiplier = 0x400;
|
|
} else {
|
|
pcVar3 = param_1->name;
|
|
strcpy(local_20, " ");
|
|
pbVar4 = local_20;
|
|
do {
|
|
bVar1 = *pcVar3;
|
|
pcVar3 = pcVar3 + 1;
|
|
*pbVar4 = bVar1;
|
|
pbVar4 = pbVar4 + 1;
|
|
if (*pcVar3 == 0x2e)
|
|
break;
|
|
} while (*pcVar3 != 0);
|
|
iVar2 = 0;
|
|
pbVar4 = local_20;
|
|
do {
|
|
if (*pbVar4 - 0x61 < 0x1a) {
|
|
*pbVar4 = *pbVar4 - 0x20;
|
|
}
|
|
iVar2 = iVar2 + 1;
|
|
pbVar4 = (local_20 + iVar2);
|
|
} while (iVar2 < 0xc);
|
|
cmd.vag_dir_entry = FindVAGFile(local_20);
|
|
strcpy(local_20, "VAGWAD ");
|
|
strncpy(local_20 + 8, gLanguage, 3);
|
|
cmd.file_record = (isofs->find_in)(local_20);
|
|
cmd.vol_multiplier = param_1->vol_multiplier;
|
|
cmd.unk_176 = param_1->unk_100;
|
|
}
|
|
strncpy(cmd.name, param_1->name, 0x30);
|
|
cmd.sound_handler = param_1->sound_handler;
|
|
cmd.id = param_1->id;
|
|
cmd.plugin_id = param_1->unk_68;
|
|
cmd.priority = param_1->prio;
|
|
cmd.unk_288 = param_1->unk_76;
|
|
cmd.unk_292 = param_1->unk_80;
|
|
if (cmd.unk_288 != 0) {
|
|
cmd.byte10 = '\x01';
|
|
}
|
|
if (cmd.unk_292 != 0) {
|
|
cmd.unk_232 = '\x01';
|
|
}
|
|
cmd.unk_296 = 0;
|
|
IsoQueueVagStream(&cmd, 1);
|
|
}
|
|
|
|
int LoadISOFileToIOP(FileRecord* fr, uint8_t* addr, int len) {
|
|
int iVar1;
|
|
CmdLoadSingleIop cmd;
|
|
|
|
cmd.header.cmd_kind = 0x101;
|
|
cmd.header.mbx_to_reply = 0;
|
|
cmd.header.thread_id = GetThreadId();
|
|
cmd.file_record = fr;
|
|
cmd.dest_addr = addr;
|
|
cmd.length = len;
|
|
SendMbx(iso_mbx, &cmd);
|
|
SleepThread();
|
|
iVar1 = 0;
|
|
if (cmd.header.status == 0) {
|
|
iVar1 = cmd.length_to_copy;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
int LoadISOFileToEE(FileRecord* param_1, uint32_t param_2, int param_3) {
|
|
int iVar1;
|
|
CmdLoadSingleIop auStack88;
|
|
|
|
auStack88.header.cmd_kind = 0x100;
|
|
auStack88.header.mbx_to_reply = 0;
|
|
auStack88.header.thread_id = GetThreadId();
|
|
auStack88.file_record = param_1;
|
|
auStack88.dest_addr = (u8*)(u64)param_2;
|
|
auStack88.length = param_3;
|
|
SendMbx(iso_mbx, &auStack88);
|
|
SleepThread();
|
|
iVar1 = 0;
|
|
if (auStack88.header.status == 0) {
|
|
iVar1 = auStack88.length_to_copy;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
int LoadISOFileChunkToEE(FileRecord* param_1, uint32_t param_2, int param_3, int param_4) {
|
|
int iVar1;
|
|
CmdLoadSingleIop auStack96;
|
|
|
|
auStack96.header.cmd_kind = 0x102;
|
|
auStack96.header.mbx_to_reply = 0;
|
|
auStack96.header.thread_id = GetThreadId();
|
|
auStack96.file_record = param_1;
|
|
auStack96.dest_addr = (u8*)(u64)param_2;
|
|
auStack96.length = param_3;
|
|
auStack96.offset = param_4;
|
|
SendMbx(iso_mbx, &auStack96);
|
|
SleepThread();
|
|
iVar1 = 0;
|
|
if (auStack96.header.status == 0) {
|
|
iVar1 = auStack96.length_to_copy;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
void PauseVAGStreams() {
|
|
VagCmd* inasdf;
|
|
|
|
inasdf = GetVAGCommand();
|
|
(inasdf->header).cmd_kind = 0x403;
|
|
(inasdf->header).mbx_to_reply = 0;
|
|
(inasdf->header).thread_id = 0;
|
|
SendMbx(iso_mbx, inasdf);
|
|
}
|
|
|
|
void UnpauseVAGStreams() {
|
|
auto* inasdf = GetVAGCommand();
|
|
(inasdf->header).cmd_kind = 0x404;
|
|
(inasdf->header).mbx_to_reply = 0;
|
|
(inasdf->header).thread_id = 0;
|
|
SendMbx(iso_mbx, inasdf);
|
|
}
|
|
|
|
void SetVAGStreamPitch(int param_1, int param_2) {
|
|
auto* inasdf = GetVAGCommand();
|
|
(inasdf->header).cmd_kind = 0x406;
|
|
(inasdf->header).mbx_to_reply = 0;
|
|
(inasdf->header).thread_id = 0;
|
|
inasdf->id = param_1;
|
|
inasdf->unk_256_pitch2 = param_2;
|
|
SendMbx(iso_mbx, inasdf);
|
|
}
|
|
|
|
void SetDialogVolume(int param_1) {
|
|
auto* inasdf = GetVAGCommand();
|
|
(inasdf->header).cmd_kind = 0x407;
|
|
(inasdf->header).mbx_to_reply = 0;
|
|
(inasdf->header).thread_id = 0;
|
|
inasdf->vol_multiplier = param_1;
|
|
SendMbx(iso_mbx, inasdf);
|
|
}
|
|
|
|
void LoadSoundBank(char* param_1, SoundBank* param_2) {
|
|
CmdLoadSoundBank auStack80;
|
|
auStack80.header.cmd_kind = 0x300;
|
|
auStack80.header.mbx_to_reply = 0;
|
|
auStack80.header.thread_id = GetThreadId();
|
|
strncpy(auStack80.bank_name, param_1, 0x10);
|
|
auStack80.bank = param_2;
|
|
SendMbx(iso_mbx, &auStack80);
|
|
SleepThread();
|
|
}
|
|
|
|
void LoadMusic(char* param_1, snd::BankHandle* param_2) {
|
|
CmdLoadMusic auStack88;
|
|
|
|
auStack88.header.cmd_kind = 0x380;
|
|
auStack88.header.mbx_to_reply = 0;
|
|
auStack88.header.thread_id = GetThreadId();
|
|
strncpy(auStack88.name, param_1, 0x10);
|
|
auStack88.handle = param_2;
|
|
SendMbx(iso_mbx, &auStack88);
|
|
SleepThread();
|
|
|
|
for (u32 i = 0; i < gMusicTweakInfo.TweakCount; i++) {
|
|
if (!strcmp(gMusicTweakInfo.MusicTweak[i].MusicName, param_1)) {
|
|
gMusicTweak = gMusicTweakInfo.MusicTweak[i].VolumeAdjust;
|
|
return;
|
|
}
|
|
}
|
|
|
|
gMusicTweak = 0x80;
|
|
}
|
|
|
|
void UnLoadMusic(snd::BankHandle* param_1) {
|
|
gMusicFadeDir = -1;
|
|
if (gMusicFade != 0) {
|
|
do {
|
|
DelayThread(1000);
|
|
} while (gMusicFade != 0);
|
|
}
|
|
snd_UnloadBank(*param_1);
|
|
snd_ResolveBankXREFS();
|
|
*param_1 = 0;
|
|
}
|
|
|
|
} // namespace jak2
|