/* =========================================================================== Copyright (C) 1997-2001 Id Software, Inc. This file is part of Quake 2 source code. Quake 2 source code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Quake 2 source code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Quake 2 source code; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ // menu_options_effects.c -- the effects options menu #include #ifdef _WIN32 #include #endif #include "../client/client.h" #include "ui_local.h" /* ======================================================================= EFFECTS MENU ======================================================================= */ static menuframework_s s_options_effects_menu; static menuseparator_s s_options_effects_header; static menulist_s s_options_effects_blood_box; static menulist_s s_options_effects_oldexplosions_box; static menulist_s s_options_effects_plasmaexplosound_box; static menulist_s s_options_effects_itembob_box; static menuslider_s s_options_effects_decal_slider; static menuslider_s s_options_effects_particle_comp_slider; static menulist_s s_options_effects_railtrail_box; static menuslider_s s_options_effects_railcolor_slider[3]; static menulist_s s_options_effects_footstep_box; static menuaction_s s_options_effects_defaults_action; static menuaction_s s_options_effects_back_action; static void BloodFunc (void *unused) { Cvar_SetValue( "cl_blood", s_options_effects_blood_box.curvalue ); } static void OldExplosionFunc (void *unused) { Cvar_SetValue( "cl_old_explosions", s_options_effects_oldexplosions_box.curvalue ); } static void PlasmaExploSoundFunc (void *unused) { Cvar_SetValue( "cl_plasma_explo_sound", s_options_effects_plasmaexplosound_box.curvalue ); } static void ItemBobFunc (void *unused) { Cvar_SetValue( "cl_item_bobbing", s_options_effects_itembob_box.curvalue ); } static void ParticleCompFunc (void *unused) { // Cvar_SetValue( "cl_particle_scale", (s_options_effects_particle_comp_slider.curvalue-3)*-1+3); Cvar_SetValue( "cl_particle_scale", UI_MenuSlider_GetValue(&s_options_effects_particle_comp_slider) ); } static void DecalCallback (void *unused) { // Cvar_SetValue( "r_decals", s_options_effects_decal_slider.curvalue * 50); Cvar_SetValue( "r_decals", UI_MenuSlider_GetValue(&s_options_effects_decal_slider) ); } // Psychospaz's changeable rail trail static void RailTrailFunc (void *unused) { Cvar_SetValue( "cl_railtype", s_options_effects_railtrail_box.curvalue ); } static void RailColorRedFunc (void *unused) { // Cvar_SetValue( "cl_railred", s_options_effects_railcolor_slider[0].curvalue*16 ); Cvar_SetValue( "cl_railred", UI_MenuSlider_GetValue(&s_options_effects_railcolor_slider[0]) ); } static void RailColorGreenFunc (void *unused) { // Cvar_SetValue( "cl_railgreen", s_options_effects_railcolor_slider[1].curvalue*16 ); Cvar_SetValue( "cl_railgreen", UI_MenuSlider_GetValue(&s_options_effects_railcolor_slider[1]) ); } static void RailColorBlueFunc (void *unused) { // Cvar_SetValue( "cl_railblue", s_options_effects_railcolor_slider[2].curvalue*16 ); Cvar_SetValue( "cl_railblue", UI_MenuSlider_GetValue(&s_options_effects_railcolor_slider[2]) ); } // foostep override option static void FootStepFunc (void *unused) { Cvar_SetValue( "cl_footstep_override", s_options_effects_footstep_box.curvalue ); } //======================================================================= static void EffectsSetMenuItemValues (void) { Cvar_SetValue( "cl_blood", ClampCvar( 0, 4, Cvar_VariableValue("cl_blood") ) ); s_options_effects_blood_box.curvalue = Cvar_VariableValue("cl_blood"); Cvar_SetValue( "cl_old_explosions", ClampCvar( 0, 1, Cvar_VariableValue("cl_old_explosions") ) ); s_options_effects_oldexplosions_box.curvalue = Cvar_VariableValue("cl_old_explosions"); Cvar_SetValue( "cl_plasma_explo_sound", ClampCvar( 0, 1, Cvar_VariableValue("cl_plasma_explo_sound") ) ); s_options_effects_plasmaexplosound_box.curvalue = Cvar_VariableValue("cl_plasma_explo_sound"); Cvar_SetValue( "cl_item_bobbing", ClampCvar( 0, 1, Cvar_VariableValue("cl_item_bobbing") ) ); s_options_effects_itembob_box.curvalue = Cvar_VariableValue("cl_item_bobbing"); Cvar_SetValue( "r_decals", ClampCvar (0, 1000, Cvar_VariableValue("r_decals")) ); // s_options_effects_decal_slider.curvalue = Cvar_VariableValue("r_decals") / 50; UI_MenuSlider_SetValue (&s_options_effects_decal_slider, Cvar_VariableValue("r_decals")); Cvar_SetValue( "cl_particle_scale", ClampCvar( 0, 5, Cvar_VariableValue("cl_particle_scale") ) ); // s_options_effects_particle_comp_slider.curvalue = (Cvar_VariableValue("cl_particle_scale") -3)*-1+3; UI_MenuSlider_SetValue (&s_options_effects_particle_comp_slider, Cvar_VariableValue("cl_particle_scale")); Cvar_SetValue( "cl_railtype", ClampCvar( 0, 2, Cvar_VariableValue("cl_railtype") ) ); s_options_effects_railtrail_box.curvalue = Cvar_VariableValue("cl_railtype"); // s_options_effects_railcolor_slider[0].curvalue = Cvar_VariableValue("cl_railred")/16; // s_options_effects_railcolor_slider[1].curvalue = Cvar_VariableValue("cl_railgreen")/16; // s_options_effects_railcolor_slider[2].curvalue = Cvar_VariableValue("cl_railblue")/16; UI_MenuSlider_SetValue (&s_options_effects_railcolor_slider[0], Cvar_VariableValue("cl_railred")); UI_MenuSlider_SetValue (&s_options_effects_railcolor_slider[1], Cvar_VariableValue("cl_railgreen")); UI_MenuSlider_SetValue (&s_options_effects_railcolor_slider[2], Cvar_VariableValue("cl_railblue")); Cvar_SetValue( "cl_footstep_override", ClampCvar( 0, 1, Cvar_VariableValue("cl_footstep_override") ) ); s_options_effects_footstep_box.curvalue = Cvar_VariableValue("cl_footstep_override"); } static void EffectsResetDefaultsFunc (void *unused) { Cvar_SetToDefault ("cl_blood"); Cvar_SetToDefault ("cl_old_explosions"); Cvar_SetToDefault ("cl_plasma_explo_sound"); Cvar_SetToDefault ("cl_item_bobbing"); Cvar_SetToDefault ("r_decals"); Cvar_SetToDefault ("cl_particle_scale"); Cvar_SetToDefault ("cl_railtype"); Cvar_SetToDefault ("cl_railred"); Cvar_SetToDefault ("cl_railgreen"); Cvar_SetToDefault ("cl_railblue"); Cvar_SetToDefault ("cl_footstep_override"); EffectsSetMenuItemValues (); } void Options_Effects_MenuInit (void) { static const char *yesno_names[] = { "no", "yes", 0 }; static const char *blood_names[] = { "none", "puff", "splat", "bleed", "gore", 0 }; static const char *railtrail_names[] = { "colored spiral", "colored beam", // laser "colored devrail", 0 }; int y = 3*MENU_LINE_SIZE; s_options_effects_menu.x = SCREEN_WIDTH*0.5; s_options_effects_menu.y = SCREEN_HEIGHT*0.5 - 58; s_options_effects_menu.nitems = 0; s_options_effects_header.generic.type = MTYPE_SEPARATOR; s_options_effects_header.generic.textSize = MENU_HEADER_FONT_SIZE; s_options_effects_header.generic.name = "Effects"; s_options_effects_header.generic.x = MENU_HEADER_FONT_SIZE/2 * (int)strlen(s_options_effects_header.generic.name); s_options_effects_header.generic.y = -2*MENU_LINE_SIZE; // 0 s_options_effects_blood_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_blood_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_blood_box.generic.x = 0; s_options_effects_blood_box.generic.y = y; s_options_effects_blood_box.generic.name = "blood type"; s_options_effects_blood_box.generic.callback = BloodFunc; s_options_effects_blood_box.itemnames = blood_names; s_options_effects_blood_box.generic.statusbar = "changes blood effect type"; s_options_effects_oldexplosions_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_oldexplosions_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_oldexplosions_box.generic.x = 0; s_options_effects_oldexplosions_box.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_oldexplosions_box.generic.name = "old style explosions"; s_options_effects_oldexplosions_box.generic.callback = OldExplosionFunc; s_options_effects_oldexplosions_box.itemnames = yesno_names; s_options_effects_oldexplosions_box.generic.statusbar = "brings back those cheesy model explosions"; s_options_effects_plasmaexplosound_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_plasmaexplosound_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_plasmaexplosound_box.generic.x = 0; s_options_effects_plasmaexplosound_box.generic.y = y += MENU_LINE_SIZE; s_options_effects_plasmaexplosound_box.generic.name = "unique plasma explode sound"; s_options_effects_plasmaexplosound_box.generic.callback = PlasmaExploSoundFunc; s_options_effects_plasmaexplosound_box.itemnames = yesno_names; s_options_effects_plasmaexplosound_box.generic.statusbar = "gives Phalanx Cannon plasma explosions a unique sound"; s_options_effects_itembob_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_itembob_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_itembob_box.generic.x = 0; s_options_effects_itembob_box.generic.y = y += MENU_LINE_SIZE; s_options_effects_itembob_box.generic.name = "item bobbing"; s_options_effects_itembob_box.generic.callback = ItemBobFunc; s_options_effects_itembob_box.itemnames = yesno_names; s_options_effects_itembob_box.generic.statusbar = "adds bobbing effect to rotating items"; s_options_effects_decal_slider.generic.type = MTYPE_SLIDER; s_options_effects_decal_slider.generic.textSize = MENU_FONT_SIZE; s_options_effects_decal_slider.generic.x = 0; s_options_effects_decal_slider.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_decal_slider.generic.name = "decal quantity"; s_options_effects_decal_slider.generic.callback = DecalCallback; // s_options_effects_decal_slider.minvalue = 0; // s_options_effects_decal_slider.maxvalue = 20; s_options_effects_decal_slider.maxPos = 20; s_options_effects_decal_slider.baseValue = 0.0f; s_options_effects_decal_slider.increment = 50.0f; s_options_effects_decal_slider.displayAsPercent = false; s_options_effects_decal_slider.generic.statusbar = "how many decals to display at once (max = 1000)"; s_options_effects_particle_comp_slider.generic.type = MTYPE_SLIDER; s_options_effects_particle_comp_slider.generic.textSize = MENU_FONT_SIZE; s_options_effects_particle_comp_slider.generic.x = 0; s_options_effects_particle_comp_slider.generic.y = y += MENU_LINE_SIZE; s_options_effects_particle_comp_slider.generic.name = "particle effect complexity"; s_options_effects_particle_comp_slider.generic.callback = ParticleCompFunc; // s_options_effects_particle_comp_slider.minvalue = 1; // s_options_effects_particle_comp_slider.maxvalue = 5; s_options_effects_particle_comp_slider.maxPos = 4; s_options_effects_particle_comp_slider.baseValue = 5.0f; s_options_effects_particle_comp_slider.increment = -1.0f; s_options_effects_particle_comp_slider.displayAsPercent = false; s_options_effects_particle_comp_slider.generic.statusbar = "lower = faster performance"; // Psychospaz's changeable rail trail s_options_effects_railtrail_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_railtrail_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_railtrail_box.generic.x = 0; s_options_effects_railtrail_box.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_railtrail_box.generic.name = "railtrail type"; s_options_effects_railtrail_box.generic.callback = RailTrailFunc; s_options_effects_railtrail_box.itemnames = railtrail_names; s_options_effects_railtrail_box.generic.statusbar = "changes railgun particle effect"; s_options_effects_railcolor_slider[0].generic.type = MTYPE_SLIDER; s_options_effects_railcolor_slider[0].generic.textSize = MENU_FONT_SIZE; s_options_effects_railcolor_slider[0].generic.x = 0; s_options_effects_railcolor_slider[0].generic.y = y += MENU_LINE_SIZE; s_options_effects_railcolor_slider[0].generic.name = "railtrail - red"; s_options_effects_railcolor_slider[0].generic.callback = RailColorRedFunc; // s_options_effects_railcolor_slider[0].minvalue = 0; // s_options_effects_railcolor_slider[0].maxvalue = 16; s_options_effects_railcolor_slider[0].maxPos = 64; s_options_effects_railcolor_slider[0].baseValue = 0.0f; s_options_effects_railcolor_slider[0].increment = 4.0f; s_options_effects_railcolor_slider[0].displayAsPercent = false; s_options_effects_railcolor_slider[0].generic.statusbar = "changes railtrail red component"; s_options_effects_railcolor_slider[1].generic.type = MTYPE_SLIDER; s_options_effects_railcolor_slider[1].generic.textSize = MENU_FONT_SIZE; s_options_effects_railcolor_slider[1].generic.x = 0; s_options_effects_railcolor_slider[1].generic.y = y += MENU_LINE_SIZE; s_options_effects_railcolor_slider[1].generic.name = "railtrail - green"; s_options_effects_railcolor_slider[1].generic.callback = RailColorGreenFunc; // s_options_effects_railcolor_slider[1].minvalue = 0; // s_options_effects_railcolor_slider[1].maxvalue = 16; s_options_effects_railcolor_slider[1].maxPos = 64; s_options_effects_railcolor_slider[1].baseValue = 0.0f; s_options_effects_railcolor_slider[1].increment = 4.0f; s_options_effects_railcolor_slider[1].displayAsPercent = false; s_options_effects_railcolor_slider[1].generic.statusbar = "changes railtrail green component"; s_options_effects_railcolor_slider[2].generic.type = MTYPE_SLIDER; s_options_effects_railcolor_slider[2].generic.textSize = MENU_FONT_SIZE; s_options_effects_railcolor_slider[2].generic.x = 0; s_options_effects_railcolor_slider[2].generic.y = y += MENU_LINE_SIZE; s_options_effects_railcolor_slider[2].generic.name = "railtrail - blue"; s_options_effects_railcolor_slider[2].generic.callback = RailColorBlueFunc; // s_options_effects_railcolor_slider[2].minvalue = 0; // s_options_effects_railcolor_slider[2].maxvalue = 16; s_options_effects_railcolor_slider[2].maxPos = 64; s_options_effects_railcolor_slider[2].baseValue = 0.0f; s_options_effects_railcolor_slider[2].increment = 4.0f; s_options_effects_railcolor_slider[2].displayAsPercent = false; s_options_effects_railcolor_slider[2].generic.statusbar = "changes railtrail blue component"; // foostep override option s_options_effects_footstep_box.generic.type = MTYPE_SPINCONTROL; s_options_effects_footstep_box.generic.textSize = MENU_FONT_SIZE; s_options_effects_footstep_box.generic.x = 0; s_options_effects_footstep_box.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_footstep_box.generic.name = "override footstep sounds"; s_options_effects_footstep_box.generic.callback = FootStepFunc; s_options_effects_footstep_box.itemnames = yesno_names; s_options_effects_footstep_box.generic.statusbar = "sets footstep sounds with definitions in texsurfs.txt"; s_options_effects_defaults_action.generic.type = MTYPE_ACTION; s_options_effects_defaults_action.generic.textSize = MENU_FONT_SIZE; s_options_effects_defaults_action.generic.x = MENU_FONT_SIZE; s_options_effects_defaults_action.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_defaults_action.generic.name = "reset defaults"; s_options_effects_defaults_action.generic.callback = EffectsResetDefaultsFunc; s_options_effects_defaults_action.generic.statusbar = "resets all effects settings to internal defaults"; s_options_effects_back_action.generic.type = MTYPE_ACTION; s_options_effects_back_action.generic.textSize = MENU_FONT_SIZE; s_options_effects_back_action.generic.x = MENU_FONT_SIZE; s_options_effects_back_action.generic.y = y += 2*MENU_LINE_SIZE; s_options_effects_back_action.generic.name = "back to options"; s_options_effects_back_action.generic.callback = UI_BackMenu; UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_header); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_blood_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_oldexplosions_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_plasmaexplosound_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_itembob_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_decal_slider); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_particle_comp_slider); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_railtrail_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_railcolor_slider[0]); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_railcolor_slider[1]); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_railcolor_slider[2]); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_footstep_box); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_defaults_action); UI_AddMenuItem (&s_options_effects_menu, (void *) &s_options_effects_back_action); EffectsSetMenuItemValues (); } void Menu_Options_Effects_Draw (void) { UI_DrawBanner ("m_banner_options"); UI_AdjustMenuCursor (&s_options_effects_menu, 1); UI_DrawMenu (&s_options_effects_menu); } const char *Menu_Options_Effects_Key (int key) { return UI_DefaultMenuKey (&s_options_effects_menu, key); } void Menu_Options_Effects_f (void) { Options_Effects_MenuInit (); UI_PushMenu (Menu_Options_Effects_Draw, Menu_Options_Effects_Key); }