mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
Properly parse and cache ubersounds, and don't cache resources that must be always loaded to avoid filling up sound indexes
This commit is contained in:
parent
becf9f5d8c
commit
d3212c55a0
5 changed files with 196 additions and 91 deletions
|
@ -4189,15 +4189,16 @@ void ClientGameCommandManager::CacheFont(Event *ev)
|
|||
//===============
|
||||
void AliasResource(dtiki_t *pmdl, const char *alias, const char *realname, const char *parameters)
|
||||
{
|
||||
if (pmdl) {
|
||||
if (!pmdl->a->alias_list) {
|
||||
pmdl->a->alias_list = cgi.AliasList_New(pmdl->a->name);
|
||||
}
|
||||
|
||||
cgi.Alias_ListAdd((AliasList_t *)pmdl->a->alias_list, alias, realname, parameters);
|
||||
} else {
|
||||
if (!pmdl) {
|
||||
cgi.Alias_Add(alias, realname, parameters);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pmdl->a->alias_list) {
|
||||
pmdl->a->alias_list = cgi.AliasList_New(pmdl->a->name);
|
||||
}
|
||||
|
||||
cgi.Alias_ListAdd((AliasList_t*)pmdl->a->alias_list, alias, realname, parameters);
|
||||
}
|
||||
|
||||
qboolean bLoadForMap(const char *psMapsBuffer, const char *name)
|
||||
|
@ -4258,19 +4259,32 @@ void ClientGameCommandManager::AliasCache(Event *ev)
|
|||
psMapsBuffer = NULL;
|
||||
|
||||
for (i = 3; i <= ev->NumArgs(); i++) {
|
||||
if (!strcmp(ev->GetToken(i).c_str(), "maps")) {
|
||||
str s = ev->GetString(i);
|
||||
|
||||
if (!s.icmp("maps")) {
|
||||
i++;
|
||||
psMapsBuffer = ev->GetToken(i);
|
||||
} else if (!strcmp(ev->GetToken(i).c_str(), "always")) {
|
||||
bAlwaysLoaded = true;
|
||||
} else {
|
||||
strcat(parmbuffer, ev->GetToken(i));
|
||||
strcat(parmbuffer, " ");
|
||||
psMapsBuffer = (char *)ev->GetToken(i).c_str();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!s.icmp("always")) {
|
||||
bAlwaysLoaded = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
strcat(parmbuffer, s);
|
||||
strcat(parmbuffer, " ");
|
||||
}
|
||||
|
||||
if (bAlwaysLoaded || bLoadForMap(psMapsBuffer, ev->GetString(1))) {
|
||||
if (bAlwaysLoaded) {
|
||||
AliasResource(current_tiki, ev->GetString(1), ev->GetString(2), parmbuffer);
|
||||
}
|
||||
|
||||
if (bLoadForMap(psMapsBuffer, ev->GetString(1))) {
|
||||
if (!bAlwaysLoaded) {
|
||||
AliasResource(current_tiki, ev->GetString(1), ev->GetString(2), parmbuffer);
|
||||
}
|
||||
|
||||
CacheResource(ev->GetString(2));
|
||||
}
|
||||
}
|
||||
|
@ -4300,28 +4314,33 @@ void ClientGameCommandManager::Alias(Event *ev)
|
|||
psMapsBuffer = NULL;
|
||||
|
||||
for (i = 3; i <= ev->NumArgs(); i++) {
|
||||
if (!strcmp(ev->GetToken(i).c_str(), "maps")) {
|
||||
str s = ev->GetString(i);
|
||||
|
||||
if (!s.icmp("maps")) {
|
||||
i++;
|
||||
psMapsBuffer = ev->GetToken(i);
|
||||
} else if (!strcmp(ev->GetToken(i).c_str(), "always")) {
|
||||
psMapsBuffer = (char *)ev->GetToken(i).c_str();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!s.icmp("always")) {
|
||||
bAlwaysLoaded = true;
|
||||
} else if (subtitle) {
|
||||
strcat(parmbuffer, "\"");
|
||||
strcat(parmbuffer, s);
|
||||
strcat(parmbuffer, "\" ");
|
||||
|
||||
subtitle = 0;
|
||||
} else {
|
||||
subtitle = s.icmp("subtitle") == 0;
|
||||
|
||||
if (!subtitle) {
|
||||
if (!Q_stricmp(ev->GetToken(i), "subtitle") || !Q_stricmp(ev->GetToken(i), "forcesubtitle")) {
|
||||
subtitle = qtrue;
|
||||
strcat(parmbuffer, ev->GetToken(i));
|
||||
} else {
|
||||
strcat(parmbuffer, ev->GetToken(i));
|
||||
}
|
||||
} else {
|
||||
strcat(parmbuffer, "\"");
|
||||
strcat(parmbuffer, ev->GetToken(i));
|
||||
strcat(parmbuffer, "\"");
|
||||
subtitle = qfalse;
|
||||
subtitle = s.icmp("forcesubtitle") == 0;
|
||||
}
|
||||
|
||||
strcat(parmbuffer, " ");
|
||||
strcat(parmbuffer, s);
|
||||
}
|
||||
|
||||
strcat(parmbuffer, " ");
|
||||
}
|
||||
|
||||
if (bAlwaysLoaded || bLoadForMap(psMapsBuffer, ev->GetString(1))) {
|
||||
|
|
|
@ -205,48 +205,72 @@ void CG_RegisterCvars(void)
|
|||
cgs.localServer = temp->integer;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
CG_RegisterSoundsForFile
|
||||
|
||||
Register the specified ubersound source file
|
||||
================
|
||||
*/
|
||||
void CG_RegisterSoundsForFile(const char *name)
|
||||
{
|
||||
int startTime;
|
||||
int endTime;
|
||||
|
||||
Com_Printf("\n\n-----------PARSING '%s'------------\n", name);
|
||||
Com_Printf(
|
||||
"Any SetCurrentTiki errors means that tiki wasn't prefetched and tiki-specific sounds for it won't work. To "
|
||||
"fix prefetch the tiki. Ignore if you don't use that tiki on this level.\n"
|
||||
);
|
||||
|
||||
startTime = cgi.Milliseconds();
|
||||
CG_Command_ProcessFile(name, qfalse, NULL);
|
||||
endTime = cgi.Milliseconds();
|
||||
|
||||
Com_Printf("Parse/Load time: %f seconds.\n", (float)(endTime - startTime) / 1000.0);
|
||||
Com_Printf("-------------PARSING '%s' DONE---------------\n\n", name);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
qsort_compare_strings
|
||||
|
||||
perform case-insensitive sorting
|
||||
=================
|
||||
*/
|
||||
int qsort_compare_strings(const void *s1, const void *s2)
|
||||
{
|
||||
return Q_stricmp(*(const char **)s1, *(const char **)s2);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
CG_RegisterSounds
|
||||
|
||||
called during a precache command
|
||||
Called during a precache command
|
||||
=================
|
||||
*/
|
||||
void CG_RegisterSounds(void)
|
||||
{
|
||||
int startTime;
|
||||
int endTime;
|
||||
char filename[MAX_QPATH];
|
||||
char **fileList;
|
||||
int numFiles;
|
||||
int i;
|
||||
|
||||
Com_Printf("\n\n-----------PARSING UBERSOUND------------\n");
|
||||
Com_Printf(
|
||||
"Any SetCurrentTiki errors means that tiki wasn't prefetched and "
|
||||
"tiki-specific sounds for it won't work. To fix prefe"
|
||||
"tch the tiki. Ignore if you don't use that tiki on this level.\n"
|
||||
);
|
||||
Com_sprintf(filename, sizeof(filename), "ubersound/ubersound.scr");
|
||||
fileList = cgi.FS_ListFilteredFiles("ubersound/", "scr", "*.scr", qfalse, &numFiles, qtrue);
|
||||
if (cgs.gametype != GT_SINGLE_PLAYER) {
|
||||
cgi.Alias_Clear();
|
||||
}
|
||||
|
||||
qsort(fileList, numFiles, sizeof(char *), &qsort_compare_strings);
|
||||
|
||||
startTime = cgi.Milliseconds();
|
||||
CG_Command_ProcessFile(filename, 0, 0);
|
||||
endTime = cgi.Milliseconds();
|
||||
for (i = 0; i < numFiles; i++) {
|
||||
// Added in 2.0
|
||||
// Since 2.0, all files in the ubersound folder
|
||||
// are parsed
|
||||
CG_RegisterSoundsForFile(va("ubersound/%s", fileList[i]));
|
||||
}
|
||||
|
||||
Com_Printf("Parse/Load time: %f seconds.\n", (endTime - startTime) / 1000.0f);
|
||||
|
||||
Com_Printf("-------------UBERSOUND DONE---------------\n\n");
|
||||
Com_Printf("\n\n-----------PARSING UBERDIALOG------------\n");
|
||||
Com_Printf(
|
||||
"Any SetCurrentTiki errors means that tiki wasn't prefetched and "
|
||||
"tiki-specific sounds for it won't work. To fix prefe"
|
||||
"tch the tiki. Ignore if you don't use that tiki on this level.\n"
|
||||
);
|
||||
Com_sprintf(filename, sizeof(filename), "ubersound/uberdialog.scr");
|
||||
|
||||
startTime = cgi.Milliseconds();
|
||||
CG_Command_ProcessFile(filename, 0, 0);
|
||||
endTime = cgi.Milliseconds() - startTime;
|
||||
|
||||
Com_Printf("Parse/Load time: %f seconds.\n", endTime / 1000.0f);
|
||||
Com_Printf("-------------UBERDIALOG DONE---------------\n\n");
|
||||
cgi.FS_FreeFileList(fileList);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -977,6 +977,7 @@ qboolean G_Command_ProcessFile(const char *filename, qboolean quiet)
|
|||
const char *bufstart;
|
||||
const char *token;
|
||||
int numTokens = 0;
|
||||
char tempName[65];
|
||||
|
||||
if (gi.FS_ReadFile(filename, (void **)&buffer, quiet) == -1) {
|
||||
return qfalse;
|
||||
|
@ -988,6 +989,9 @@ qboolean G_Command_ProcessFile(const char *filename, qboolean quiet)
|
|||
|
||||
bufstart = buffer;
|
||||
|
||||
Com_sprintf(tempName, sizeof(tempName), "m%s", filename);
|
||||
gi.LoadResource(tempName);
|
||||
|
||||
while (1) {
|
||||
// grab each line as we go
|
||||
token = COM_ParseExt(&buffer, qtrue);
|
||||
|
@ -1024,6 +1028,9 @@ qboolean G_Command_ProcessFile(const char *filename, qboolean quiet)
|
|||
|
||||
gi.FS_FreeFile((void *)bufstart);
|
||||
|
||||
Com_sprintf(tempName, sizeof(tempName), "o%s", filename);
|
||||
gi.LoadResource(tempName);
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
|
|
|
@ -440,24 +440,27 @@ static int bLoadForMap(char *psMapsBuffer, const char *name)
|
|||
return false;
|
||||
}
|
||||
|
||||
void ScriptMaster::RegisterAliasInternal(Event *ev, bool bCache)
|
||||
void ScriptMaster::RegisterAliasAndCache(Event *ev)
|
||||
{
|
||||
int i;
|
||||
char parameters[MAX_STRING_CHARS];
|
||||
char *psMapsBuffer;
|
||||
int subtitle;
|
||||
bool bAlwaysLoaded = false;
|
||||
int i;
|
||||
char parameters[MAX_STRING_CHARS];
|
||||
char *psMapsBuffer;
|
||||
bool bAlwaysLoaded = false;
|
||||
|
||||
if (ev->NumArgs() < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the parameters for this alias command
|
||||
|
||||
parameters[0] = 0;
|
||||
subtitle = 0;
|
||||
psMapsBuffer = NULL;
|
||||
|
||||
for (i = 3; i <= ev->NumArgs(); i++) {
|
||||
str s;
|
||||
|
||||
// MOHAA doesn't check that
|
||||
// Added in OPM
|
||||
// MOHAA doesn't check that
|
||||
if (ev->IsListenerAt(i)) {
|
||||
Listener *l = ev->GetListener(i);
|
||||
|
||||
|
@ -470,44 +473,97 @@ void ScriptMaster::RegisterAliasInternal(Event *ev, bool bCache)
|
|||
s = ev->GetString(i);
|
||||
}
|
||||
|
||||
if (subtitle) {
|
||||
if (!s.icmp("maps")) {
|
||||
i++;
|
||||
psMapsBuffer = (char *)ev->GetToken(i).c_str();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!s.icmp("always")) {
|
||||
bAlwaysLoaded = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
strcat(parameters, s);
|
||||
strcat(parameters, " ");
|
||||
}
|
||||
|
||||
if (bAlwaysLoaded) {
|
||||
gi.GlobalAlias_Add(ev->GetString(1), ev->GetString(2), parameters);
|
||||
}
|
||||
|
||||
if (bLoadForMap(psMapsBuffer, ev->GetString(1))) {
|
||||
if (!bAlwaysLoaded) {
|
||||
gi.GlobalAlias_Add(ev->GetString(1), ev->GetString(2), parameters);
|
||||
}
|
||||
|
||||
CacheResource(ev->GetString(2));
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptMaster::RegisterAlias(Event *ev)
|
||||
{
|
||||
int i;
|
||||
char parameters[MAX_STRING_CHARS];
|
||||
char *psMapsBuffer;
|
||||
qboolean subtitle;
|
||||
bool bAlwaysLoaded = false;
|
||||
|
||||
if (ev->NumArgs() < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the parameters for this alias command
|
||||
|
||||
parameters[0] = 0;
|
||||
subtitle = 0;
|
||||
psMapsBuffer = NULL;
|
||||
|
||||
for (i = 3; i <= ev->NumArgs(); i++) {
|
||||
str s;
|
||||
|
||||
// Added in OPM
|
||||
// MOHAA doesn't check that
|
||||
if (ev->IsListenerAt(i)) {
|
||||
Listener *l = ev->GetListener(i);
|
||||
|
||||
if (l && l == Director.CurrentThread()) {
|
||||
s = "local";
|
||||
} else {
|
||||
s = ev->GetString(i);
|
||||
}
|
||||
} else {
|
||||
s = ev->GetString(i);
|
||||
}
|
||||
|
||||
if (!s.icmp("maps")) {
|
||||
i++;
|
||||
psMapsBuffer = (char *)ev->GetToken(i).c_str();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!s.icmp("always")) {
|
||||
bAlwaysLoaded = true;
|
||||
} else if (subtitle) {
|
||||
strcat(parameters, "\"");
|
||||
strcat(parameters, s);
|
||||
strcat(parameters, "\" ");
|
||||
|
||||
subtitle = 0;
|
||||
} else if (!s.icmp("maps")) {
|
||||
i++;
|
||||
psMapsBuffer = (char *)ev->GetToken(i).c_str();
|
||||
} else if (!s.icmp("always")) {
|
||||
bAlwaysLoaded = true;
|
||||
} else {
|
||||
subtitle = s.icmp("subtitle") == 0;
|
||||
|
||||
strcat(parameters, s);
|
||||
strcat(parameters, " ");
|
||||
}
|
||||
|
||||
strcat(parameters, " ");
|
||||
}
|
||||
|
||||
if (bAlwaysLoaded || bLoadForMap(psMapsBuffer, ev->GetString(1))) {
|
||||
gi.GlobalAlias_Add(ev->GetString(1), ev->GetString(2), parameters);
|
||||
|
||||
if (bCache) {
|
||||
CacheResource(ev->GetString(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptMaster::RegisterAliasAndCache(Event *ev)
|
||||
{
|
||||
RegisterAliasInternal(ev, true);
|
||||
}
|
||||
|
||||
void ScriptMaster::RegisterAlias(Event *ev)
|
||||
{
|
||||
RegisterAliasInternal(ev);
|
||||
}
|
||||
|
||||
void ScriptMaster::Cache(Event *ev)
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
|
|
|
@ -82,7 +82,6 @@ protected:
|
|||
void Cache(Event *ev);
|
||||
void RegisterAliasAndCache(Event *ev);
|
||||
void RegisterAlias(Event *ev);
|
||||
void RegisterAliasInternal(Event *ev, bool bCache = false);
|
||||
|
||||
public:
|
||||
CLASS_PROTOTYPE(ScriptMaster);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue