diff --git a/code/cgame/cg_consolecmds.c b/code/cgame/cg_consolecmds.c index 6e302ce..4b56d9f 100644 --- a/code/cgame/cg_consolecmds.c +++ b/code/cgame/cg_consolecmds.c @@ -915,5 +915,8 @@ void CG_InitConsoleCommands( void ) { trap_AddCommand("selfdestruct"); trap_AddCommand("shipdamage"); trap_AddCommand("shiphealth"); + + /* precacheFile */ + trap_AddCommand("generatePrecacheFile"); } diff --git a/code/cgame/cg_main.c b/code/cgame/cg_main.c index 9a94299..325ba68 100644 --- a/code/cgame/cg_main.c +++ b/code/cgame/cg_main.c @@ -350,7 +350,7 @@ void CG_PrecacheRemapShaders(void) { len = trap_FS_FOpenFile(filepath, &f, FS_READ); - if(!len) { + if(!f) { CG_Printf("No precache file ...\n"); return; } @@ -371,7 +371,8 @@ void CG_PrecacheRemapShaders(void) { ptr = data; token = COM_Parse(&ptr); while(token != NULL) { - CG_Printf("\t%s\n", token); + if(!token[0]) break; + trap_R_RegisterShader(token); token = COM_Parse(&ptr); diff --git a/code/game/g_cmds.c b/code/game/g_cmds.c index beb941a..c1af20f 100644 --- a/code/game/g_cmds.c +++ b/code/game/g_cmds.c @@ -7346,6 +7346,72 @@ void Cmd_CamtestEnd_f(gentity_t *ent) { } // END CCAM +extern target_alert_Shaders_s alertShaders; +void Cmd_GeneratePrecacheFile(gentity_t *ent) { + int i; + char info[MAX_INFO_STRING]; + char file[MAX_QPATH]; + fileHandle_t f; + + trap_GetServerinfo(info, MAX_INFO_STRING); + Com_sprintf(file, MAX_QPATH, "maps/%s.precache", Info_ValueForKey(info, "mapname")); + trap_FS_FOpenFile(file, &f, FS_APPEND); + if(!f) { + G_Printf(S_COLOR_RED "[Error] - Could not create/open 'maps/%s.precache'\n", file); + return; + } + + G_Printf("Generating precache file '%s' ...\n", file); + + for(i = 0; i < alertShaders.numShaders; i++) { + G_Printf("\t%s\n", alertShaders.greenShaders[i]); + G_Printf("\t%s\n", alertShaders.blueShaders[i]); + G_Printf("\t%s\n", alertShaders.redShaders[i]); + G_Printf("\t%s\n", alertShaders.yellowShaders[i]); + + trap_FS_Write("\"", 1, f); + trap_FS_Write(alertShaders.greenShaders[i], strlen(alertShaders.greenShaders[i]), f); + trap_FS_Write("\"\n\"", 3, f); + trap_FS_Write(alertShaders.blueShaders[i], strlen(alertShaders.blueShaders[i]), f); + trap_FS_Write("\"\n\"", 3, f); + trap_FS_Write(alertShaders.redShaders[i], strlen(alertShaders.redShaders[i]), f); + trap_FS_Write("\"\n\"", 3, f); + trap_FS_Write(alertShaders.yellowShaders[i], strlen(alertShaders.yellowShaders[i]), f); + trap_FS_Write("\"\n", 2, f); + } + + for(i = 0; i < MAX_GENTITIES; i++) { + if(!g_entities[i].inuse) continue; + + if(g_entities[i].classname != NULL && !strcmp(g_entities[i].classname, "target_turbolift")) { + if(g_entities[i].falsename != NULL && g_entities[i].falsename[0] != 0) { + G_Printf("\t%s\n", g_entities[i].falsename); + trap_FS_Write("\"", 1, f); + trap_FS_Write(g_entities[i].falsename, strlen(g_entities[i].falsename), f); + trap_FS_Write("\"\n", 2, f); + } + if(g_entities[i].truename != NULL && g_entities[i].truename[0] != 0) { + G_Printf("\t%s\n", g_entities[i].truename); + trap_FS_Write("\"", 1, f); + trap_FS_Write(g_entities[i].truename, strlen(g_entities[i].truename), f); + trap_FS_Write("\"\n", 2, f); + } + continue; + } + + if(g_entities[i].targetShaderNewName != NULL && g_entities[i].targetShaderNewName[0] != 0) { + G_Printf("\t%s\n", g_entities[i].targetShaderNewName); + trap_FS_Write("\"", 1, f); + trap_FS_Write(g_entities[i].targetShaderNewName, strlen(g_entities[i].targetShaderNewName), f); + trap_FS_Write("\"\n", 2, f); + } + } + + G_Printf("Done.\n"); + + trap_FS_FCloseFile(f); +} + /* ================= G_Client_Command @@ -7606,6 +7672,9 @@ void G_Client_Command( int clientNum ) else if (Q_stricmp(cmd, "camtestend") == 0) Cmd_CamtestEnd_f(ent); // END CCAM + else if (Q_stricmp (cmd, "generatePrecacheFile") == 0) { + Cmd_GeneratePrecacheFile(ent); + } else if (Q_strncmp (cmd, "\n", 1) == 0 || Q_strncmp (cmd, " ", 1) == 0 || Q_strncmp (cmd, "\0", 1) == 0) // sorry (void)(0); else diff --git a/code/game/g_local.h b/code/game/g_local.h index 13d6296..438df73 100644 --- a/code/game/g_local.h +++ b/code/game/g_local.h @@ -2102,4 +2102,13 @@ struct timedMessage_s { char* message; } timedMessage_s; +/* alert shaders */ +typedef struct { + char *greenShaders[10]; + char *redShaders[10]; + char *yellowShaders[10]; + char *blueShaders[10]; + int numShaders; +} target_alert_Shaders_s; + #endif //_G_LOCAL_H_ diff --git a/code/game/g_target.c b/code/game/g_target.c index 673c9ba..8e5a9d4 100644 --- a/code/game/g_target.c +++ b/code/game/g_target.c @@ -1133,7 +1133,7 @@ static void target_turbolift_endMove ( gentity_t *ent ) } // check for shader remaps - if(rpg_calcLiftTravelDuration.integer) { + if(rpg_calcLiftTravelDuration.integer || level.overrideCalcLiftTravelDuration) { if((ent->truename && otherLift->truename) || (ent->falsename && otherLift->falsename)) { f = level.time * 0.001; AddRemap(ent->targetShaderName, ent->targetShaderName, f); @@ -1403,7 +1403,7 @@ static void target_turbolift_startMove ( gentity_t *ent ) } // check for shader remaps - if(rpg_calcLiftTravelDuration.integer) { + if(rpg_calcLiftTravelDuration.integer || level.overrideCalcLiftTravelDuration) { if(time2 < 0 && ent->truename && otherLift->truename) { f = level.time * 0.001; AddRemap(ent->targetShaderName, ent->truename, f); @@ -1858,15 +1858,8 @@ shader remapping: You can remap multiple shaders by separating them with \n. Example: "greenshader" "textures/alert/green1\ntextures/alert/green2" */ -typedef struct { - char *greenShaders[10]; - char *redShaders[10]; - char *yellowShaders[10]; - char *blueShaders[10]; - int numShaders; -} target_alert_Shaders_s; -static target_alert_Shaders_s alertShaders; +target_alert_Shaders_s alertShaders; void target_alert_remapShaders(int target_condition) { float f = 0;