X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=b03292c934bdc417c7b6d827f7b832edc4bdc9e2;hb=a51a70c2254b27a68e5fe74cc5985b02dc36e1e9;hp=2aede84a19ede8ea906900938d8a113271a4db19;hpb=b64a47fd50ff44fcbd04b6a4288eba135177081a;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index 2aede84a..b03292c9 100644 --- a/cl_main.c +++ b/cl_main.c @@ -27,6 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "r_shadow.h" #include "libcurl.h" #include "snd_main.h" +#include "cdaudio.h" // we need to declare some mouse variables here, because the menu system // references them even when on a unix system. @@ -701,7 +702,7 @@ void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float } } -void CL_AllocLightFlash(entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags) +void CL_AllocLightFlash(entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, char *cubemapname, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags) { int i; dlight_t *dl; @@ -738,10 +739,9 @@ void CL_AllocLightFlash(entity_render_t *ent, matrix4x4_t *matrix, float radius, dl->die = cl.time + lifetime; else dl->die = 0; - if (cubemapnum > 0) - dpsnprintf(dl->cubemapname, sizeof(dl->cubemapname), "cubemaps/%i", cubemapnum); - else - dl->cubemapname[0] = 0; + dl->cubemapname[0] = 0; + if (cubemapname && cubemapname[0]) + strlcpy(dl->cubemapname, cubemapname, sizeof(dl->cubemapname)); dl->style = style; dl->shadow = shadowenable; dl->corona = corona; @@ -2195,7 +2195,7 @@ static void CL_Locs_Save_f(cmd_state_t *cmd) if (VectorCompare(loc->mins, loc->maxs)) break; if (loc) - Con_Printf("Warning: writing loc file containing a mixture of qizmo-style points and proquake-style boxes may not work in qizmo or proquake!\n"); + Con_Warnf("Warning: writing loc file containing a mixture of qizmo-style points and proquake-style boxes may not work in qizmo or proquake!\n"); } for (loc = cl.locnodes;loc;loc = loc->next) { @@ -2401,7 +2401,7 @@ static void CL_MeshEntities_Init(void) ent->state_current.active = true; ent->render.model = cl_meshentitymodels + i; Mod_Mesh_Create(ent->render.model, cl_meshentitynames[i]); - ent->render.alpha = 0.999999f; + ent->render.alpha = 1; ent->render.flags = RENDER_SHADOW | RENDER_LIGHT; ent->render.framegroupblend[0].lerp = 1; ent->render.frameblend[0].lerp = 1; @@ -2489,6 +2489,7 @@ static void CL_UpdateEntityShading_Entity(entity_render_t *ent) for (q = 0; q < 3; q++) a[q] = c[q] = dir[q] = 0; + ent->render_lightgrid = false; ent->render_modellight_forced = false; ent->render_rtlight_disabled = false; @@ -2569,6 +2570,12 @@ static void CL_UpdateEntityShading_Entity(entity_render_t *ent) ent->render_modellight_forced = true; ent->render_rtlight_disabled = true; } + else if (((ent->model && !ent->model->lit) || (ent->model == r_refdef.scene.worldmodel ? mod_q3bsp_lightgrid_world_surfaces.integer : mod_q3bsp_lightgrid_bsp_surfaces.integer)) + && r_refdef.scene.worldmodel && r_refdef.scene.worldmodel->lit && r_refdef.scene.worldmodel->brushq3.lightgridtexture && mod_q3bsp_lightgrid_texture.integer) + { + ent->render_lightgrid = true; + // no need to call R_CompleteLightPoint as we base it on render_lightmap_* + } else if (r_refdef.scene.worldmodel && r_refdef.scene.worldmodel->lit && r_refdef.scene.worldmodel->brush.LightPoint) R_CompleteLightPoint(a, c, dir, shadingorigin, LP_LIGHTMAP, r_refdef.scene.lightmapintensity, r_refdef.scene.ambientintensity); else if (r_fullbright_directed.integer) @@ -2637,116 +2644,142 @@ CL_Init */ void CL_Init (void) { + if (cls.state == ca_dedicated) + { + Cmd_AddCommand(CMD_SERVER, "disconnect", CL_Disconnect_f, "disconnect from server (or disconnect all clients if running a server)"); + } + else + { + Con_DPrintf("Initializing client\n"); - cls.levelmempool = Mem_AllocPool("client (per-level memory)", 0, NULL); - cls.permanentmempool = Mem_AllocPool("client (long term memory)", 0, NULL); - - memset(&r_refdef, 0, sizeof(r_refdef)); - // max entities sent to renderer per frame - r_refdef.scene.maxentities = MAX_EDICTS + 256 + 512; - r_refdef.scene.entities = (entity_render_t **)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t *) * r_refdef.scene.maxentities); - - // max temp entities - r_refdef.scene.maxtempentities = MAX_TEMPENTITIES; - r_refdef.scene.tempentities = (entity_render_t *)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t) * r_refdef.scene.maxtempentities); - - CL_InitInput (); - -// -// register our commands -// - Cvar_RegisterVariable (&cl_upspeed); - Cvar_RegisterVariable (&cl_forwardspeed); - Cvar_RegisterVariable (&cl_backspeed); - Cvar_RegisterVariable (&cl_sidespeed); - Cvar_RegisterVariable (&cl_movespeedkey); - Cvar_RegisterVariable (&cl_yawspeed); - Cvar_RegisterVariable (&cl_pitchspeed); - Cvar_RegisterVariable (&cl_anglespeedkey); - Cvar_RegisterVariable (&cl_shownet); - Cvar_RegisterVariable (&cl_nolerp); - Cvar_RegisterVariable (&cl_lerpexcess); - Cvar_RegisterVariable (&cl_lerpanim_maxdelta_server); - Cvar_RegisterVariable (&cl_lerpanim_maxdelta_framegroups); - Cvar_RegisterVariable (&cl_deathfade); - Cvar_RegisterVariable (&lookspring); - Cvar_RegisterVariable (&lookstrafe); - Cvar_RegisterVariable (&sensitivity); - Cvar_RegisterVariable (&freelook); - - Cvar_RegisterVariable (&m_pitch); - Cvar_RegisterVariable (&m_yaw); - Cvar_RegisterVariable (&m_forward); - Cvar_RegisterVariable (&m_side); - - Cvar_RegisterVariable (&cl_itembobspeed); - Cvar_RegisterVariable (&cl_itembobheight); - - Cmd_AddCommand(&cmd_client, "entities", CL_PrintEntities_f, "print information on network entities known to client"); - Cmd_AddCommand(&cmd_client, "disconnect", CL_Disconnect_f, "disconnect from server (or disconnect all clients if running a server)"); - Cmd_AddCommand(&cmd_client, "record", CL_Record_f, "record a demo"); - Cmd_AddCommand(&cmd_client, "stop", CL_Stop_f, "stop recording or playing a demo"); - Cmd_AddCommand(&cmd_client, "playdemo", CL_PlayDemo_f, "watch a demo file"); - Cmd_AddCommand(&cmd_client, "timedemo", CL_TimeDemo_f, "play back a demo as fast as possible and save statistics to benchmark.log"); - - // Support Client-side Model Index List - Cmd_AddCommand(&cmd_client, "cl_modelindexlist", CL_ModelIndexList_f, "list information on all models in the client modelindex"); - // Support Client-side Sound Index List - Cmd_AddCommand(&cmd_client, "cl_soundindexlist", CL_SoundIndexList_f, "list all sounds in the client soundindex"); - - Cvar_RegisterVariable (&cl_autodemo); - Cvar_RegisterVariable (&cl_autodemo_nameformat); - Cvar_RegisterVariable (&cl_autodemo_delete); - - Cmd_AddCommand(&cmd_client, "fog", CL_Fog_f, "set global fog parameters (density red green blue [alpha [mindist [maxdist [top [fadedepth]]]]])"); - Cmd_AddCommand(&cmd_client, "fog_heighttexture", CL_Fog_HeightTexture_f, "set global fog parameters (density red green blue alpha mindist maxdist top depth textures/mapname/fogheight.tga)"); - - // LadyHavoc: added pausedemo - Cmd_AddCommand(&cmd_client, "pausedemo", CL_PauseDemo_f, "pause demo playback (can also safely pause demo recording if using QUAKE, QUAKEDP or NEHAHRAMOVIE protocol, useful for making movies)"); - - Cmd_AddCommand(&cmd_client, "cl_areastats", CL_AreaStats_f, "prints statistics on entity culling during collision traces"); - - Cvar_RegisterVariable(&r_draweffects); - Cvar_RegisterVariable(&cl_explosions_alpha_start); - Cvar_RegisterVariable(&cl_explosions_alpha_end); - Cvar_RegisterVariable(&cl_explosions_size_start); - Cvar_RegisterVariable(&cl_explosions_size_end); - Cvar_RegisterVariable(&cl_explosions_lifetime); - Cvar_RegisterVariable(&cl_stainmaps); - Cvar_RegisterVariable(&cl_stainmaps_clearonload); - Cvar_RegisterVariable(&cl_beams_polygons); - Cvar_RegisterVariable(&cl_beams_quakepositionhack); - Cvar_RegisterVariable(&cl_beams_instantaimhack); - Cvar_RegisterVariable(&cl_beams_lightatend); - Cvar_RegisterVariable(&cl_noplayershadow); - Cvar_RegisterVariable(&cl_dlights_decayradius); - Cvar_RegisterVariable(&cl_dlights_decaybrightness); - - Cvar_RegisterVariable(&cl_prydoncursor); - Cvar_RegisterVariable(&cl_prydoncursor_notrace); - - Cvar_RegisterVariable(&cl_deathnoviewmodel); - - // for QW connections - Cvar_RegisterVariable(&qport); - Cvar_SetValueQuick(&qport, (rand() * RAND_MAX + rand()) & 0xffff); - - Cmd_AddCommand(&cmd_client, "timerefresh", CL_TimeRefresh_f, "turn quickly and print rendering statistcs"); - - Cvar_RegisterVariable(&cl_locs_enable); - Cvar_RegisterVariable(&cl_locs_show); - Cmd_AddCommand(&cmd_client, "locs_add", CL_Locs_Add_f, "add a point or box location (usage: x y z[ x y z] \"name\", if two sets of xyz are supplied it is a box, otherwise point)"); - Cmd_AddCommand(&cmd_client, "locs_removenearest", CL_Locs_RemoveNearest_f, "remove the nearest point or box (note: you need to be very near a box to remove it)"); - Cmd_AddCommand(&cmd_client, "locs_clear", CL_Locs_Clear_f, "remove all loc points/boxes"); - Cmd_AddCommand(&cmd_client, "locs_reload", CL_Locs_Reload_f, "reload .loc file for this map"); - Cmd_AddCommand(&cmd_client, "locs_save", CL_Locs_Save_f, "save .loc file for this map containing currently defined points and boxes"); - - Cvar_RegisterVariable(&csqc_polygons_defaultmaterial_nocullface); - - CL_Parse_Init(); - CL_Particles_Init(); - CL_Screen_Init(); - CL_MeshEntities_Init(); - - CL_Video_Init(); + R_Modules_Init(); + Palette_Init(); +#ifdef CONFIG_MENU + MR_Init_Commands(); +#endif + VID_Shared_Init(); + VID_Init(); + Render_Init(); + S_Init(); + CDAudio_Init(); + Key_Init(); + + + cls.levelmempool = Mem_AllocPool("client (per-level memory)", 0, NULL); + cls.permanentmempool = Mem_AllocPool("client (long term memory)", 0, NULL); + + memset(&r_refdef, 0, sizeof(r_refdef)); + // max entities sent to renderer per frame + r_refdef.scene.maxentities = MAX_EDICTS + 256 + 512; + r_refdef.scene.entities = (entity_render_t **)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t *) * r_refdef.scene.maxentities); + + // max temp entities + r_refdef.scene.maxtempentities = MAX_TEMPENTITIES; + r_refdef.scene.tempentities = (entity_render_t *)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t) * r_refdef.scene.maxtempentities); + + CL_InitInput (); + + // + // register our commands + // + Cvar_RegisterVariable (&cl_upspeed); + Cvar_RegisterVariable (&cl_forwardspeed); + Cvar_RegisterVariable (&cl_backspeed); + Cvar_RegisterVariable (&cl_sidespeed); + Cvar_RegisterVariable (&cl_movespeedkey); + Cvar_RegisterVariable (&cl_yawspeed); + Cvar_RegisterVariable (&cl_pitchspeed); + Cvar_RegisterVariable (&cl_anglespeedkey); + Cvar_RegisterVariable (&cl_shownet); + Cvar_RegisterVariable (&cl_nolerp); + Cvar_RegisterVariable (&cl_lerpexcess); + Cvar_RegisterVariable (&cl_lerpanim_maxdelta_server); + Cvar_RegisterVariable (&cl_lerpanim_maxdelta_framegroups); + Cvar_RegisterVariable (&cl_deathfade); + Cvar_RegisterVariable (&lookspring); + Cvar_RegisterVariable (&lookstrafe); + Cvar_RegisterVariable (&sensitivity); + Cvar_RegisterVariable (&freelook); + + Cvar_RegisterVariable (&m_pitch); + Cvar_RegisterVariable (&m_yaw); + Cvar_RegisterVariable (&m_forward); + Cvar_RegisterVariable (&m_side); + + Cvar_RegisterVariable (&cl_itembobspeed); + Cvar_RegisterVariable (&cl_itembobheight); + + Cmd_AddCommand(CMD_CLIENT, "entities", CL_PrintEntities_f, "print information on network entities known to client"); + Cmd_AddCommand(CMD_CLIENT, "disconnect", CL_Disconnect_f, "disconnect from server (or disconnect all clients if running a server)"); + Cmd_AddCommand(CMD_CLIENT, "record", CL_Record_f, "record a demo"); + Cmd_AddCommand(CMD_CLIENT, "stop", CL_Stop_f, "stop recording or playing a demo"); + Cmd_AddCommand(CMD_CLIENT, "playdemo", CL_PlayDemo_f, "watch a demo file"); + Cmd_AddCommand(CMD_CLIENT, "timedemo", CL_TimeDemo_f, "play back a demo as fast as possible and save statistics to benchmark.log"); + + // Support Client-side Model Index List + Cmd_AddCommand(CMD_CLIENT, "cl_modelindexlist", CL_ModelIndexList_f, "list information on all models in the client modelindex"); + // Support Client-side Sound Index List + Cmd_AddCommand(CMD_CLIENT, "cl_soundindexlist", CL_SoundIndexList_f, "list all sounds in the client soundindex"); + + Cvar_RegisterVariable (&cl_autodemo); + Cvar_RegisterVariable (&cl_autodemo_nameformat); + Cvar_RegisterVariable (&cl_autodemo_delete); + + Cmd_AddCommand(CMD_CLIENT, "fog", CL_Fog_f, "set global fog parameters (density red green blue [alpha [mindist [maxdist [top [fadedepth]]]]])"); + Cmd_AddCommand(CMD_CLIENT, "fog_heighttexture", CL_Fog_HeightTexture_f, "set global fog parameters (density red green blue alpha mindist maxdist top depth textures/mapname/fogheight.tga)"); + + // LadyHavoc: added pausedemo + Cmd_AddCommand(CMD_CLIENT, "pausedemo", CL_PauseDemo_f, "pause demo playback (can also safely pause demo recording if using QUAKE, QUAKEDP or NEHAHRAMOVIE protocol, useful for making movies)"); + + Cmd_AddCommand(CMD_CLIENT, "cl_areastats", CL_AreaStats_f, "prints statistics on entity culling during collision traces"); + + Cvar_RegisterVariable(&r_draweffects); + Cvar_RegisterVariable(&cl_explosions_alpha_start); + Cvar_RegisterVariable(&cl_explosions_alpha_end); + Cvar_RegisterVariable(&cl_explosions_size_start); + Cvar_RegisterVariable(&cl_explosions_size_end); + Cvar_RegisterVariable(&cl_explosions_lifetime); + Cvar_RegisterVariable(&cl_stainmaps); + Cvar_RegisterVariable(&cl_stainmaps_clearonload); + Cvar_RegisterVariable(&cl_beams_polygons); + Cvar_RegisterVariable(&cl_beams_quakepositionhack); + Cvar_RegisterVariable(&cl_beams_instantaimhack); + Cvar_RegisterVariable(&cl_beams_lightatend); + Cvar_RegisterVariable(&cl_noplayershadow); + Cvar_RegisterVariable(&cl_dlights_decayradius); + Cvar_RegisterVariable(&cl_dlights_decaybrightness); + + Cvar_RegisterVariable(&cl_prydoncursor); + Cvar_RegisterVariable(&cl_prydoncursor_notrace); + + Cvar_RegisterVariable(&cl_deathnoviewmodel); + + // for QW connections + Cvar_RegisterVariable(&qport); + Cvar_SetValueQuick(&qport, (rand() * RAND_MAX + rand()) & 0xffff); + + Cmd_AddCommand(CMD_CLIENT, "timerefresh", CL_TimeRefresh_f, "turn quickly and print rendering statistcs"); + + Cvar_RegisterVariable(&cl_locs_enable); + Cvar_RegisterVariable(&cl_locs_show); + Cmd_AddCommand(CMD_CLIENT, "locs_add", CL_Locs_Add_f, "add a point or box location (usage: x y z[ x y z] \"name\", if two sets of xyz are supplied it is a box, otherwise point)"); + Cmd_AddCommand(CMD_CLIENT, "locs_removenearest", CL_Locs_RemoveNearest_f, "remove the nearest point or box (note: you need to be very near a box to remove it)"); + Cmd_AddCommand(CMD_CLIENT, "locs_clear", CL_Locs_Clear_f, "remove all loc points/boxes"); + Cmd_AddCommand(CMD_CLIENT, "locs_reload", CL_Locs_Reload_f, "reload .loc file for this map"); + Cmd_AddCommand(CMD_CLIENT, "locs_save", CL_Locs_Save_f, "save .loc file for this map containing currently defined points and boxes"); + + Cvar_RegisterVariable(&csqc_polygons_defaultmaterial_nocullface); + + CL_Parse_Init(); + CL_Particles_Init(); + CL_Screen_Init(); + CL_MeshEntities_Init(); + + CL_Video_Init(); + Host_StartVideo(); + + #ifdef CONFIG_MENU + Cbuf_InsertText(&cmd_client,"menu_start\n"); + #endif + } }