#include "eth.h" // Categories text definitions menuCat_t menuCats[] = { #ifdef ETH_PRIVATE PRIVATE_CATS_NAME #endif { CAT_AIMBOTM, "--- AIMBOT MAIN ---" }, { CAT_AIMBOTP, "--- AIMBOT MISC ---" }, { CAT_HITBOX, "--- HITBOX AIM ---" }, { CAT_VISUAL, "--- VISUALS ---" }, { CAT_ESP, "--- CHAM & ESP ---" }, { CAT_MISC, "--- MISC ---" }, { CAT_SPYCAM, "--- SPYCAMS ---" }, { CAT_HUD, "--- ETH SKINS ---" }, { CAT_SPAM, "--- KILLSPAM ---" }, { CAT_TRA, "--- ETH-TRACKER ---" }, { CAT_SOUND, "--- SOUNDS --- " }, #ifdef ETH_DEBUG { CAT_DEBUG, "--- DEBUG ---" } #endif }; void initUserVars() { // Aimbot seth.vars[VAR_AIM_AUTO] = (ethVars_t) { "Auto aim", qfalse, "aimauto", CAT_AIMBOTM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_AUTOSHOOT] = (ethVars_t) { "Auto shoot", AUTOSHOOT_LBUTTON, "autoshoot", CAT_AIMBOTM, qfalse, { { "Off", AUTOSHOOT_OFF }, { "Left button", AUTOSHOOT_LBUTTON }, { "On", AUTOSHOOT_ON } } }; seth.vars[VAR_AUTOSHOOT_TYPE] = (ethVars_t) { "Auto shoot type", AUTOSHOOT_TYPE_VISIBLE, "autoshoot_type", CAT_AIMBOTM, qfalse, { { "Enemy visible", AUTOSHOOT_TYPE_VISIBLE }, { "Trigger", AUTOSHOOT_TYPE_TRIGGER } } }; seth.vars[VAR_AIM_PRIO] = (ethVars_t) { "Aim priority", AIM_PRIO_HEAD, "aimprio", CAT_AIMBOTM, qfalse, { { "Off", AIM_PRIO_OFF }, { "Head", AIM_PRIO_HEAD }, { "Head/body" , AIM_PRIO_HEAD_BODY }, { "Head only" , AIM_PRIO_HEAD_ONLY } } }; seth.vars[VAR_TARGET_PRIO] = (ethVars_t) { "Target priority", TARGET_NEAREST, "targetprio", CAT_AIMBOTM, qfalse, { { "Nearest", TARGET_NEAREST }, { "Attacker", TARGET_ATTACKER }, { "Selected Persons" , TARGET_PERSON }, { "Panzerfaust" , TARGET_NOOBTUBE }, { "MG42" , TARGET_MG42 }, { "All heavy weapons" , TARGET_HEAVY } } }; seth.vars[VAR_AIMFOV] = (ethVars_t) { "Aimbot FOV", 360.0f, "aimfov", CAT_AIMBOTM, qfalse, {} }; // kobj seth.vars[VAR_HITBOX] = (ethVars_t) { "Hitbox Aiming", HITBOX_OFF, "hitbox", CAT_AIMBOTM, qfalse, { { "Off", HITBOX_OFF }, { "Etmain", HITBOX_ETMAIN }, { "Etpub fixed", HITBOX_ETPUB }, { "Etpr0 boxes", HITBOX_ETPRO }, { "Generic Realhead", HITBOX_GENERIC }, { "Custom Boxes", HITBOX_CUSTOM } } }; seth.vars[VAR_HITBOX_DBG] = (ethVars_t) { "Hitbox Drawing", 0, "hitboxdebug", CAT_AIMBOTP, qfalse, { { "Off", 0 }, { "Enemies", 1 }, { "Everyone", 2 }, { "Target", 3 } } }; seth.vars[VAR_VECZ] = (ethVars_t) { "All weapons vecZ", 2.0f, "vecz", CAT_AIMBOTM, qfalse, {} }; seth.vars[VAR_NUDGEHACK] = (ethVars_t) { "Prediction depth", -20.0f, "nudgehax", CAT_AIMBOTP, qfalse, {} }; seth.vars[VAR_BOXADD] = (ethVars_t) { "Box expand ", 4.0f, "boxexpand", CAT_AIMBOTP, qfalse, {} }; seth.vars[VAR_INTERPOLATE] = (ethVars_t) { "Use interpolation", qfalse, "interpolate", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_VECZ_STEN] = (ethVars_t) { "Sten vecZ", 3.0f, "vecz_sten", CAT_AIMBOTM, qfalse, {} }; seth.vars[VAR_VECZ_SCOPE] = (ethVars_t) { "Scoped weapons vecZ", 3.0f, "vecz_scope", CAT_AIMBOTM, qfalse, {} }; seth.vars[VAR_SNAPDELAY] = (ethVars_t) { "SNAP DELAY", 1 ,"snapdelay", CAT_AIMBOTP, qfalse, {} }; seth.vars[VAR_AUTO_CROUCH] = (ethVars_t) { "Auto crouch", qfalse, "auto_crouch", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_CUSTOM_HITBOX_STAND_X] = (ethVars_t) { "Stand vecX", 0.0f, "vecX_stand", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_STAND_Y] = (ethVars_t) { "Stand vecY", 0.0f, "vecY_stand", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_STAND_Z] = (ethVars_t) { "Stand vecZ", 5.0f, "vecZ_stand", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_PRONE_X] = (ethVars_t) { "Prone vecX", 0.0f, "vecX_Prone", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_PRONE_Y] = (ethVars_t) { "Prone vecY", 0.0f, "vecY_Prone", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_PRONE_Z] = (ethVars_t) { "Prone vecZ", 5.0f, "vecZ_Prone", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_X] = (ethVars_t) { "Crouch vecX", 0.0f, "vecX_Crouch", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_Y] = (ethVars_t) { "Crouch vecY", 0.0f, "vecY_Crouch", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_Z] = (ethVars_t) { "Crouch vecZ", 5.0f, "vecZ_Crouch", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_MOVING_X] = (ethVars_t) { "Crouch Move vecX", 0.0f, "vecX_Crouch_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_MOVING_Y] = (ethVars_t) { "Crouch Move vecY", 0.0f, "vecY_Crouch_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_CROUCH_MOVING_Z] = (ethVars_t) { "Crouch Move vecZ", 5.0f, "vecZ_Crouch_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_STAND_MOVING_X] = (ethVars_t) { "Stand Move vecX", 0.0f, "vecX_Stand_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_STAND_MOVING_Y] = (ethVars_t) { "Stand Move vecY", 0.0f, "vecY_Stand_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_CUSTOM_HITBOX_STAND_MOVING_Z] = (ethVars_t) { "Stand Move vecZ", 5.0f, "vecZ_Stand_Moving", CAT_HITBOX, qfalse, {} }; seth.vars[VAR_AIMVECZ_TYPE] = (ethVars_t) { "Aim vecz type", VECZ_HITBOX, "vecztype", CAT_AIMBOTM, qfalse, { { "Auto vecZ", VECZ_AUTO }, { "Manual vecZ", VECZ_MANUAL } , { "Hitbox", VECZ_HITBOX } } }; seth.vars[VAR_AIMPREDICT] = (ethVars_t) { "Enemy prediction type", AIMPREDICT_AUTO_1, "epredict", CAT_AIMBOTM, qfalse, { { "Off", AIMPREDICT_OFF }, { "Auto 1", AIMPREDICT_AUTO_1 }, { "Auto 2", AIMPREDICT_AUTO_2 }, { "Ping based", AIMPREDICT_AUTO_3 }, { "Acceleration / speed based", AIMPREDICT_AUTO_4 } } }; seth.vars[VAR_PRED_C] = (ethVars_t) { "Pred correction", -20.0f, "pcor", CAT_AIMBOTM, qfalse, {} }; seth.vars[VAR_SELFPREDICT] = (ethVars_t) { "Self prediction type", qtrue, "spredict", CAT_AIMBOTM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SNIPERDELAY] = (ethVars_t) { "Sniper weapon delay", 700, "sniperdelay", CAT_AIMBOTP, qfalse, {} }; seth.vars[VAR_OVERHEAT] = (ethVars_t) { "Anti weapon overheat", qtrue, "overheat", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RECOIL] = (ethVars_t) { "Recoil and Feedback", 2, "recoil", CAT_AIMBOTP, qfalse, { { "Off", 0 }, { "On (detour)", 1 }, { "On (EntityEvent)", 2 } } }; seth.vars[VAR_AIM_DEAD] = (ethVars_t) { "Aim at dead player", qfalse, "aimdead", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_BLOCK_MOUSE] = (ethVars_t) { "Block mouse when aiming", qtrue, "block_mouse", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SATCHEL_AUTOSHOOT] = (ethVars_t) { "Satchel autoshoot", qfalse, "satchel_autoshoot", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_HUMAN] = (ethVars_t) { "Human aim", qfalse, "human", CAT_AIMBOTP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_HUMANVALUE] = (ethVars_t) { "Human value", 0.2f, "humanvalue", CAT_AIMBOTP, qfalse, {} }; seth.vars[VAR_STEP] = (ethVars_t) { "Add/dec by value", 1.0f , "step", CAT_AIMBOTM, qfalse, { { "10.0", 10.0f }, { "1.0", 1.0f }, { "0.1", 0.1f }, { "0.01", 0.01f } } // Visual seth.vars[VAR_VISUALS] = (ethVars_t) { "Visuals", qtrue, "visuals", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ADVERT] = (ethVars_t) { "Advert", qtrue, "advert", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_BANNER] = (ethVars_t) { "Banner", qtrue, "banner", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RADAR] = (ethVars_t) { "Radar", qfalse, "radar", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "Huge", 1 }, { "Big", 2 }, { "Medium", 3 }, { "Small", 4 }, { "Big 2", 5 }, { "Medium2", 6 }, { "Small2", 7 } } }; seth.vars[VAR_WEAPZOOM] = (ethVars_t) { "Remove weapons zoom", qtrue, "weapzoom", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RAIL] = (ethVars_t) { "RailTrail to enemy", qfalse, "rail", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RAILAXIS] = (ethVars_t) { "RailTrail ent axis", qfalse,"railaxis", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_MORTARTRACE] = (ethVars_t) { "Mortar trace", qfalse,"mortartrace", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SPAWNTIMER] = (ethVars_t) { "Enemy spawntimer", qtrue, "spawntimer", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_PIGHEAD] = (ethVars_t) { "Pig head for enemy", qfalse, "pighead", CAT_VISUAL, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SMOKE] = (ethVars_t) { "Smoke", SMOKE_TRANSPARENT, "smoke", CAT_VISUAL, qfalse, { { "Leave normal", SMOKE_NORMAL }, { "Make transparent", SMOKE_TRANSPARENT }, { "Remove completely", SMOKE_REMOVE } } }; seth.vars[VAR_CROSSHAIR] = (ethVars_t) { "Draw crosshair", XHAIR_TCE, "xhair", CAT_VISUAL, qfalse, { { "Off", XHAIR_OFF }, { "TC:E only", XHAIR_TCE }, { "All mods", XHAIR_ALL } } }; // Esp seth.vars[VAR_WALLHACK] = (ethVars_t) { "Wallhack", qtrue, "wallhack", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_COLORS] = (ethVars_t) { "Colors", 0, "colors", CAT_ESP, 0, { { "Type 1", 0 }, { "Type 2", 1 }, { "Type 3", 2 } } }; seth.vars[VAR_CHAMS] = (ethVars_t) { "Chams", CHAM_QUAKE, "chams", CAT_ESP, qfalse, { { "Off", qfalse }, { "Glow", CHAM_GLOW }, { "Glow only", CHAM_GLOWONLY }, { "Flat", CHAM_FLAT } , { "QuakeIII A", CHAM_QUAKE } , { "QuakeIII B", CHAM_QUAKEB }, { "QuakeIII C", CHAM_QUAKEC }, { "QuakeIII PORTAL", CHAM_PORTAL } } }; seth.vars[VAR_DLIGHT] = (ethVars_t) { "Head-Up Dynamic Light", DLIGHT_ON, "dlight", CAT_ESP, qfalse, { { "Off", DLIGHT_OFF }, { "On", DLIGHT_ON } } }; seth.vars[VAR_MORE_DLIGHT] = (ethVars_t) { "Extra Dlight Tune-Up", MORE_DLIGHT_ON, "mdlight", CAT_ESP, qfalse, { { "Off", MORE_DLIGHT_OFF }, { "double dlight", MORE_DLIGHT_ON },{ "crazy dlight", MORE_DLIGHT_CRAZY },{ "project decals", MORE_DLIGHT_DECAL } } }; seth.vars[VAR_ESPSIZE] = (ethVars_t) { "Size", ESP_SCALED, "esp_size", CAT_ESP, qfalse, { { "Distance scaled", ESP_SCALED }, { "Static", ESP_STATIC } } }; seth.vars[VAR_ESP_FADE] = (ethVars_t) { "Fade color", ESP_FADE_AUTO, "esp_fade", CAT_ESP, qfalse, { { "Auto", ESP_FADE_AUTO }, { "Manual", ESP_FADE_MANUAL } } }; seth.vars[VAR_ESP_FADE_VALUE] = (ethVars_t) { "Fade color", 70, "esp_fade_value", CAT_ESP, qfalse, { { "30%", 30 }, { "40%", 40 }, { "50%", 50 }, { "60%", 60 }, { "70%", 70 }, { "80%", 80 }, { "90%", 90 }, { "100%", 100 } } }; seth.vars[VAR_ESP_DIST] = (ethVars_t) { "Distance", 0, "esp_dist", CAT_ESP, qfalse, { { "Unlimited", 0 }, { "500", 500 }, { "750", 750 }, { "1000", 1000 }, { "1250", 1250 }, { "1500", 1500 }, { "1750", 1750 }, { "2000", 2000 }, { "2500", 2500 }, { "3000", 3000 }, { "5000", 5000 } } }; seth.vars[VAR_ESPNAME] = (ethVars_t) { "Player names", 1, "espname", CAT_ESP, qfalse, { { "Off", qfalse }, { "Everyone", NAMES_EVERYBODY }, { "Opposite Team", NAMES_ENEMY }, { "Own Team", NAMES_TEAM }, {"Friends only", NAMES_FRIENDS}, { "Custom", NAMES_CUSTOM } } }; seth.vars[VAR_ESPNAME_COLORS] = (ethVars_t) { "Player name colors", 1, "espname_colors", CAT_ESP, qfalse, { { "Game color", 1 }, { "Unicolor", 2 } } }; seth.vars[VAR_ESPNAME_BG] = (ethVars_t) { "Player name background", qfalse, "espname_bg", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ESPICON] = (ethVars_t) { "Player icons", qtrue, "espicon", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ESPICON_BG] = (ethVars_t) { "Player icons background", qfalse, "espicon_bg", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ESPENT] = (ethVars_t) { "Missile", qtrue, "esp_missile", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ESPMINES] = (ethVars_t) { "Landmine Spotting", qtrue, "esp_landmine", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_ESPITEMS] = (ethVars_t) { "Items", qtrue, "esp_items", CAT_ESP, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; // Misc seth.vars[VAR_RANDOMNAME] = (ethVars_t) { "Random name", qfalse, "randomname", CAT_MISC, qfalse, { { "Off", qfalse }, { "From other servers", 1 }, { "From other players", 2 } } }; seth.vars[VAR_RANDOMNAME_DELAY] = (ethVars_t) { "Random name delay", 30, "randomname_delay", CAT_MISC, qtrue, { { "2s", 2 }, { "5s", 5 }, { "10s", 10 }, { "15s", 15 }, { "20s", 20 }, { "30s", 30 }, { "45s", 45 }, { "1min", 60 }, { "2min", 60 * 2 } , { "3min", 60 * 3 } , { "5min", 60 * 5 } } }; seth.vars[VAR_SPEC] = (ethVars_t) { "Show spectators", qfalse, "spec", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SPECLOCK] = (ethVars_t) { "Remove spectator locking", qtrue, "speclock", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue }} }; seth.vars[VAR_INACTIVITY] = (ethVars_t) { "Remove inactivity kick", qtrue, "inactivity", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_AUTOVOTE] = (ethVars_t) { "Auto voting", qtrue, "autovote", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_MEDICBOT] = (ethVars_t) { "Medicbot", qfalse, "medicbot", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RENDER] = (ethVars_t) { "Disable render (medicbot)", qfalse, "render", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_REFLIST] = (ethVars_t) { "Referee counter", REF_NUM, "ref", CAT_MISC, qfalse, { { "Off", REF_OFF }, { "List with nicks", REF_LIST }, { "Number of refs only", REF_NUM } } }; seth.vars[VAR_KILLSPAM] = (ethVars_t) { "Killspam", qfalse, "killspam", CAT_SPAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_KSPAM] = (ethVars_t) { "Change Spam", qfalse, "spamchange", CAT_SPAM, qtrue, { { "Off", qfalse }, { "eth", ETH }, { "rs1", RS1 }, { "rs2", RS2 }, { "rs3", RS3 }, { "rs4", RS4 }, { "probot", PRO }, { "Rock", ROCK }, { "etbOT", ETB }, { "Nexus", NEX }, { "ETH32", ETH32 } } }; seth.vars[VAR_REQUEST_MEDIC] = (ethVars_t) { "Auto-request medic", qfalse, "request_medic", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RECDEMO] = (ethVars_t) { "Recording demo threshold", qfalse, "demo", CAT_MISC, qtrue, { { "Off", qfalse }, { "10 kills", 10 }, { "15 kills", 15 }, { "20 kills", 20 }, { "25 kills", 25 }, { "30 kills", 30 } } }; seth.vars[VAR_STYLEDMENU] = (ethVars_t) { "Styled Menu", qfalse, "styledmenu", CAT_MISC, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_MUSICSPAM] = (ethVars_t) { "Music spam", qfalse, "music_spam", CAT_MISC, qfalse, { { "Auto, XMMS", 2 }, { "Auto, Amarok", 1 }, {"Off", qfalse} } }; // Spycam seth.vars[VAR_MORTARCAM] = (ethVars_t) { "Show mortar cam", qtrue, "mortarcam", CAT_SPYCAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_MORTARCAM_H] = (ethVars_t) { "Mortar cam height", 800.0f, "mortarcam_h", CAT_SPYCAM, qfalse, { { "300", 300.0f }, { "400", 400.0f }, { "500", 500.0f }, { "600", 600.0f }, { "700", 700.0f }, { "800", 800.0f }, { "900", 900.0f }, { "1000", 1000.0f } } }; seth.vars[VAR_PANZERCAM] = (ethVars_t) { "Show panzer cam", qtrue, "panzercam", CAT_SPYCAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SATCHELCAM] = (ethVars_t) { "Show satchel cam", qtrue, "satchelcam", CAT_SPYCAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_SATCHELCAM_H] = (ethVars_t) { "Satchel cam height", 300.0f, "satchelcam_h", CAT_SPYCAM, qfalse, { { "300", 300.0f }, { "400", 400.0f }, { "500", 500.0f }, { "600", 600.0f }, { "700", 700.0f }, { "800", 800.0f }, { "900", 900.0f }, { "1000", 1000.0f } } }; seth.vars[VAR_MIRRORCAM] = (ethVars_t) { "Show mirror cam", qfalse, "mirrorcam", CAT_SPYCAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RIFLECAM] = (ethVars_t) { "Show rifle cam", qtrue, "riflecam", CAT_SPYCAM, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_RIFLECAM_H] = (ethVars_t) { "Rifle cam height", 500.0f, "riflecam_h", CAT_SPYCAM, qfalse, { { "300", 300.0f }, { "400", 400.0f }, { "500", 500.0f }, { "600", 600.0f }, { "700", 700.0f }, { "800", 800.0f }, { "900", 900.0f }, { "1000", 1000.0f } } }; // IRC stuff seth.vars[VAR_ETHFIND] = (ethVars_t) { "Find other ETH users", qtrue, "find", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_IRC] = (ethVars_t) { "Connect irc bot", qfalse, "irc", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_IRC_FT] = (ethVars_t) { "Show irc fireteam", qtrue, "irc_ft", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_IRC_FT_NICKS] = (ethVars_t) { "Show nick & client ID in FT", qfalse, "irc_ft_nicks", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_IRC_TOPIC] = (ethVars_t) { "Show irc topic", qfalse, "irc_topic", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_IRC_INVITE] = (ethVars_t) { "Accept invites to join a server", qtrue, "irc_invite", CAT_TRA, qfalse, { { "Off", qfalse }, { "On", qtrue } } }; // Custom HUD seth.vars[VAR_CHUD] = (ethVars_t) { "Draw custom HUD", HUD_OFF, "chud", CAT_HUD, qfalse, { { "Off", HUD_OFF }, { "Type 1", HUD_1 }, { "Type 2", HUD_2 } } }; seth.vars[VAR_CHUD_SYS_UPDATEDELAY] = (ethVars_t) { "System info update delay", 5, "chud_sysupdelay", CAT_HUD, qfalse, { { "1s", 1 }, { "3s", 3 }, { "5s", 5 }, { "10s", 10 }, { "20s", 20 } } }; seth.vars[VAR_CHUD_SYS_FPSUPDATEDELAY] = (ethVars_t) { "FPS update delay", 1000, "chud_fpsupdelay", CAT_HUD, qfalse, { { "250ms", 250 }, { "500ms", 500 }, { "750ms", 750 }, { "1s", 1000 } } }; seth.vars[VAR_CHUD_SYS_BAR_WIDTH] = (ethVars_t) { "System bar Width", 80, "chud_sbar_width", CAT_HUD, qfalse, { { "50", 50 }, { "60", 60 }, { "70", 70 }, { "80", 80 }, { "90", 90 }, { "100", 100 }, { "110", 110 }, { "120", 120 } } }; seth.vars[VAR_CHUD_SYS_BAR_HEIGHT] = (ethVars_t) { "System bar Height", 8, "chud_sbar_height", CAT_HUD, qfalse, { { "7", 7 }, { "8", 8 }, { "9", 9 }, { "10", 10 }, { "11", 11 }, { "12", 12 } } }; seth.vars[VAR_CHUD_OUTPUTNUM] = (ethVars_t) { "Amount of log messages", 5, "chud_lognum", CAT_HUD, qfalse, { { "3", 3 }, { "5", 5 }, { "7", 7 }, { "10", 10 } } }; // must be <= MAX_OUTPUT_MSGS seth.vars[VAR_CHUD_OUTICONSIZE] = (ethVars_t) { "Log icon size", 12, "chud_logiconsize", CAT_HUD, qfalse, { { "8x8", 8 }, { "10x10", 10 }, { "12x12", 12 }, { "14x14", 14 }, { "16x16", 16 } } }; seth.vars[VAR_CHUD_LOG_FONTSIZE] = (ethVars_t) { "Log font size", 0.12f, "chud_logfontsize", CAT_HUD, qfalse, { { "0.10", 0.10f }, { "0.11", 0.11f }, { "0.12", 0.12f }, { "0.13", 0.13f }, { "0.14", 0.14f }, { "0.15", 0.15f } } }; seth.vars[VAR_CHUD_VICTIM_STAYTIME] = (ethVars_t) { "'You killed..' msg stay time", 6, "chud_victim_staytime", CAT_HUD, qfalse, { { "Off", 0 }, { "2s", 2 }, { "3s", 3 }, { "4s", 4 }, { "5s", 5 }, { "6s", 6 }, { "7s", 7 }, { "8s", 8 }, { "9s", 9 }, { "10s", 10 } } }; seth.vars[VAR_CHUD_VICTIM_FADETIME] = (ethVars_t) { "'You killed..' msg fade time", 2, "chud_victim_fadetime", CAT_HUD, qfalse, { { "Off", 0 }, { "250ms", 0.25f }, { "500ms", 0.5f }, { "750ms", 0.75f }, { "1s", 1 }, { "1.5s", 1.5f }, { "2s", 2 }, { "3s", 3 }, { "4s", 4 }, { "5s", 5 } } }; seth.vars[VAR_CHUD_HPOPUP_HEIGHT] = (ethVars_t) { "Health popup height", 80, "chud_hpp_height", CAT_HUD, qfalse, { { "50", 50 }, { "60", 60 }, { "70", 70 }, { "80", 80 }, { "90", 90 }, { "100", 100 }, { "110", 110 }, { "120", 120 } } }; seth.vars[VAR_CHUD_HPOPUP_STAYTIME] = (ethVars_t) { "Health popup stay time", 4, "chud_hpp_staytime", CAT_HUD, qfalse, { { "Off", 0 }, { "2s", 2 }, { "3s", 3 }, { "4s", 4 }, { "5s", 5 }, { "6s", 6 }, { "7s", 7 }, { "8s", 8 } } }; seth.vars[VAR_CHUD_CHAT_MSGS] = (ethVars_t) { "Amount of chat messages", 5, "chud_chatnum", CAT_HUD, qfalse, { { "3", 3 }, { "5", 5 }, { "7", 7 }, { "10", 10 } } }; // must be <= MAX_CHAT_MSGS seth.vars[VAR_CHUD_CHAT_STAYTIME] = (ethVars_t) { "Chat stay time", 10, "chud_chat_staytime", CAT_HUD, qfalse, { { "Off", 0 }, { "6s", 6 }, { "8s", 8 }, { "12s", 12 }, { "16s", 16 }, { "20s", 20 }, { "25s", 25 } } }; seth.vars[VAR_CHUD_CONSOLE_MSGS] = (ethVars_t) { "Amount of console messages", 5, "chud_connum", CAT_HUD, qfalse, { { "3", 3 }, { "5", 5 }, { "7", 7 }, { "10", 10 } } }; // must be <= MAX_CONSOLE_MSGS seth.vars[VAR_CHUD_CONSOLE_STAYTIME] = (ethVars_t) { "Console msgs stay time", 10, "chud_con_staytime", CAT_HUD, qfalse, { { "Off", 0 }, { "6s", 6 }, { "8s", 8 }, { "12s", 12 }, { "16s", 16 }, { "20s", 20 }, { "25s", 25 } } }; // Sounds seth.vars[VAR_WP_SOUNDS] = (ethVars_t) { "Weapon Sounds", SND_SERVER, "wpsounds", CAT_SOUND, qfalse, { { "Server", SND_SERVER }, { "Etmain", SND_ETMAIN }, { "Custom", SND_CUSTOM } } }; seth.vars[VAR_SPREE_SOUNDS] = (ethVars_t) { "ETH Spree Sounds", qtrue, "spreesounds", CAT_SOUND, qfalse, { { "On", qtrue }, { "Off", qfalse } } }; seth.vars[VAR_SOUND_PAK0] = (ethVars_t) { "ETMain sounds only", qfalse, "globalsounds", CAT_SOUND, qfalse, { { "On", qtrue }, { "Off", qfalse } } }; seth.vars[VAR_SOUND_HQ] = (ethVars_t) { "HQ sounds", qtrue, "hqsounds", CAT_SOUND, qfalse, { { "On", qtrue }, { "Off", qfalse } } }; #ifdef ETH_DEBUG // Debug seth.vars[VAR_MEMDUMP] = (ethVars_t) { "Display mem starting from:", qfalse, "memdump", CAT_DEBUG, qtrue, { { "Off", qfalse }, { "CG_Trace()", 1 } , { "BG_EvalTraj()", 2 } , { "cg.time", 3 } , { "cg.refdef", 4 } , { "cg.refdefViewAngles", 5 } , { "vmMain()", 6 } , { "CL_MOUSEDX_ADDR", 7 } , { "eth.cg_snap->ps.origin", 8 } } }; seth.vars[VAR_AIM_POINT] = (ethVars_t) { "Show aim point", qfalse, "aimpoint", CAT_DEBUG, qtrue, { { "Off", AIM_POINT_OFF }, { "2D Point", AIM_POINT_2D } , { "3D RailTrail Cross", AIM_POINT_3D } } }; seth.vars[VAR_PREDICT_STATS] = (ethVars_t) { "Show prediction stats", qfalse, "predict_stats", CAT_DEBUG, qtrue, { { "Off", qfalse }, { "On", qtrue } } }; seth.vars[VAR_DLIGHT_CRAZY] = (ethVars_t) { "Show crazy dlight path", qfalse, "debug_dlight", CAT_DEBUG, qtrue, { { "Off", qfalse }, { "On", qtrue } } ; #endif #ifdef ETH_PRIVATE PRIVATE_VARS_DEF #endif } void drawMenu() { // Get item height int itemHeight = sizeTextHeight(MENU_TEXT_SIZE, ð.fontFixed) + (2 * 2); // Get max menu text width size int maxItemWidth = 0; int count; for (count = 0; count < VARS_TOTAL; count++) { int size = sizeTextWidth(MENU_TEXT_SIZE, seth.vars[count].menuText, ð.fontFixed); if (size > maxItemWidth) maxItemWidth = size; } maxItemWidth += itemHeight; // Get max choice text width size int maxValueWidth = 0; for (count = 0; count < VARS_TOTAL; count++) { int i = 0; for (; i < MAX_CHOICES; i++) { int size = sizeTextWidth(MENU_TEXT_SIZE, seth.vars[count].choices[i].name, ð.fontFixed); if (size > maxValueWidth) maxValueWidth = size; } } maxValueWidth += itemHeight; static int openCategory = -1; int nextOpenCategory = openCategory; int y = MENU_SCREEN_BORDER; if (eth.mod->type == MOD_TCE) y += 40; int catCount = 0; for (; catCount < CATS_MAX; catCount++) { qboolean isMouseOn = ((eth.mouseX > MENU_SCREEN_BORDER) && (eth.mouseX < (MENU_SCREEN_BORDER + maxItemWidth)) && (eth.mouseY > y) && (eth.mouseY < (y + itemHeight))); // Sanity check if (!menuCats[catCount].name) fatalError("Can't find text for a menu category."); // Draw category if ( seth.value[ VAR_STYLEDMENU ] ) { drawFillRoundRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRoundRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor); drawPic( MENU_SCREEN_BORDER + (itemHeight / 2), y - 5, itemHeight + 5, itemHeight + 5, eth.menuShader[ menuCats[ catCount ].id ] ); drawText(MENU_SCREEN_BORDER + (itemHeight / 2) + itemHeight + 5, y + 2, MENU_TEXT_SIZE, menuCats[catCount].name, isMouseOn ? gameFontColor : colorWhite, qfalse, qfalse, ð.fontFixed); } else { drawFillRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor, 1); drawText(MENU_SCREEN_BORDER + (itemHeight / 2) + itemHeight, y + 2, MENU_TEXT_SIZE, menuCats[catCount].name, isMouseOn ? gameFontColor : colorWhite, qfalse, qfalse, ð.fontFixed); } y += itemHeight + MENU_ITEM_SPACE ; // Category click if (((eth.mouseButton == Button1) || (eth.mouseButton == Button3)) && isMouseOn) { eth.mouseButton = 0; if (nextOpenCategory != catCount) syscall_CG_S_StartLocalSound(eth.cgs_media_sndLimboSelect, CHAN_LOCAL_SOUND); // open & close if ( catCount != nextOpenCategory ) { nextOpenCategory = catCount; } else { nextOpenCategory = -1; } } // Draw vars only for this category if (openCategory != catCount) { if ( seth.value[ VAR_STYLEDMENU ] ) y += 5; continue; } // Search vars in this category int varCount = 0; for (; varCount < VARS_TOTAL; varCount++) { if (menuCats[catCount].id != seth.vars[varCount].menuCategory) continue; ethVars_t *var = &seth.vars[varCount]; isMouseOn = ((eth.mouseX > MENU_SCREEN_BORDER + MENU_ENTRY_SPACE) && (eth.mouseX < (MENU_SCREEN_BORDER + MENU_ENTRY_SPACE + maxItemWidth + MENU_ITEM_SPACE + maxValueWidth)) && (eth.mouseY > y) && (eth.mouseY < (y + itemHeight))); // Draw var if ( seth.value[ VAR_STYLEDMENU ] ) { drawFillRoundRect(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE, y, maxItemWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRoundRect(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE, y, maxItemWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor); drawText(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE + (itemHeight / 2) + sizeTextWidth(MENU_TEXT_SIZE, " ", ð.fontFixed), y + 2, MENU_TEXT_SIZE, var->menuText, colorLtGrey, qfalse, qfalse, ð.fontFixed); } else { drawFillRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRect(MENU_SCREEN_BORDER, y, maxItemWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor, 1); drawText(MENU_SCREEN_BORDER + (itemHeight / 2) + sizeTextWidth(MENU_TEXT_SIZE, " ", ð.fontFixed), y + 2, MENU_TEXT_SIZE, var->menuText, colorLtGrey, qfalse, qfalse, ð.fontFixed); } // Search position of the current value int pos = 0; while ((var->choices[pos].name != NULL) // Check for valid choice && (var->choices[pos].value != seth.value[varCount]) && (pos < MAX_CHOICES)) { pos++; } // Get name of this value char value[32]; memset(value, 0, sizeof(value)); if ((pos == MAX_CHOICES) || (var->choices[pos].name == NULL)) sprintf(value, "%.2f", seth.value[varCount]); else strncpy(value, var->choices[pos].name, sizeof(value)); // Draw value of this var if ( seth.value[ VAR_STYLEDMENU ] ) { drawFillRoundRect(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE + MENU_ITEM_SPACE + maxItemWidth, y, maxValueWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRoundRect(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE + MENU_ITEM_SPACE + maxItemWidth, y, maxValueWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor); int w = sizeTextWidth(MENU_TEXT_SIZE, value, ð.fontFixed); drawText(MENU_SCREEN_BORDER + MENU_ENTRY_SPACE + MENU_ITEM_SPACE + maxItemWidth + (maxValueWidth / 2) - (w / 2), y + 2, MENU_TEXT_SIZE, value, colorWhite, qfalse, qfalse, ð.fontFixed); } else { drawFillRect(MENU_SCREEN_BORDER + MENU_ITEM_SPACE + maxItemWidth, y, maxValueWidth, itemHeight, isMouseOn ? colorBlack : gameBackColor); drawRect(MENU_SCREEN_BORDER + MENU_ITEM_SPACE + maxItemWidth, y, maxValueWidth, itemHeight, isMouseOn ? gameBackColor : gameBorderColor, 1); int w = sizeTextWidth(MENU_TEXT_SIZE, value, ð.fontFixed); drawText(MENU_SCREEN_BORDER + MENU_ITEM_SPACE + maxItemWidth + (maxValueWidth / 2) - (w / 2), y + 2, MENU_TEXT_SIZE, value, colorWhite, qfalse, qfalse, ð.fontFixed); } y += itemHeight + MENU_ITEM_SPACE; // If not a value click if (((eth.mouseButton != Button1) && (eth.mouseButton != Button3)) || !isMouseOn) continue; // Get max choices int max = 0; while (var->choices[max].name != NULL) max++; // Pre-define values if (max) { // If current value no found take 0 if ((pos < 0) || (pos == MAX_CHOICES)) pos = 0; // Set new position if (eth.mouseButton == Button1) pos++; else pos--; // Check bounds if (pos >= max) pos = 0; else if (pos < 0) pos = max - 1; seth.value[varCount] = var->choices[pos].value; // Automatically disable draw2d when we turn on custom hud // and enable it when we turn it off if (varCount == VAR_CHUD) { if (seth.value[varCount] == HUD_OFF) orig_Cvar_Set2("cg_draw2d", "1", qtrue); else orig_Cvar_Set2("cg_draw2d", "0", qtrue); } // Manual value } else { // Set new value if (eth.mouseButton == Button1) { seth.value[varCount] += seth.value[VAR_STEP]; if ((varCount == VAR_AIMFOV) && (seth.value[varCount] > 360.0f)) seth.value[varCount] -= 360.0f; if ((varCount == VAR_HUMANVALUE) && (seth.value[varCount] > 1.0f)) seth.value[varCount] -= seth.value[VAR_STEP]; } else { seth.value[varCount] -= seth.value[VAR_STEP]; if ((varCount == VAR_AIMFOV) && (seth.value[varCount] < 0.01f)) // 0.01 to make it 360.0 instead of 0.0 when decreasing seth.value[varCount] += 360.0f; if ((varCount == VAR_HUMANVALUE) && (seth.value[varCount] < 0.0f)) seth.value[varCount] += seth.value[VAR_STEP]; } } // Set cvar /* char cmd[50]; sprintf(cmd, "%s%s %i\n", ETH_CVAR_PREFIX, menuItems[pos].cvarName, menuItems[count].choices[pos].value); orig_syscall(CG_SENDCONSOLECOMMAND, cmd);*/ syscall_CG_S_StartLocalSound(eth.cgs_media_sndLimboSelect, CHAN_LOCAL_SOUND); eth.mouseButton = 0; } if ( seth.value[ VAR_STYLEDMENU ] ) y += 5; } openCategory = nextOpenCategory; eth.mouseButton = 0;