/*====================================================================== MOD CUSTOM SETTINGS ======================================================================*/ void() toggleautoaim; // Toggle auto aim void() toggleprojsize; // Toggle player projectile size void() togglezaware; // Toggle Z aware monsters void() togglefootstep; // Toggle footstep sound (player/monster) void() toggleliquiddmg; // Toggle Monster Liquid damage void() toggleshotgunproj; // Toggle Shotgun Projectiles void() toggleshotguncase; // Toggle Shotgun Casing void() toggleupgradeaxe; // Toggle Axe Upgrade (inventory only) void() toggleupgradessg; // Toggle Shotgun Upgrade (inventory only) void() toggleupgradelg; // Toggle Lightning Upgrade (inventory only) void() togglepixels; // Toggle Texture modes void() togglecoopartifacts; // Toggle COOP can drop artifacts void() togglecoopammoboxes; // Toggle COOP ammo boxes to respawn void() togglecoopweapons; // Toggle COOP weapons to respawn void() togglecoophealth; // Toggle COOP health packs to respawn void() togglecooppowerups; // Toggle COOP powerups to respawn void() toggleweather; // Toggle weather systems void() toggledevhelpers; // Toggle dev helpers (mark/arrows) void() togglebodyremoval; // Toggle monster body fade/removal void() display_configflag; // Display config flag void() display_playinfo; // Display Player information void() display_version; // Display MOD information void() display_mapvar; // Display Map Variables void() display_customkeys; // Display Custom Key inventory void() CycleParticleDebug; // Cycle particle debug messages void(float sigil_bit) givesigil; // Testing only void(float key_bit) givekey; // Testing only void() CycleWeaponCommand; void() CycleWeaponReverseCommand; void() CheatCommand; void() SharpshooterCheat; void() NailPiercerCheat; void() EnvSuitCheat; void() PentagramCheat; void() InvisibleCheat; void() QuadDamageCheat; void() StartIntermissionCamera; /*====================================================================== Show MOD name and version ======================================================================*/ void() display_version = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; sprint(self,"\b[INFO]\b AD Xmas Jam 2018 v1.70 Patch 1d\n"); }; /*====================================================================== Prints origin and mangle to console screen Useful for creating good locations for intermission camera's ** Been replaced with viewpos and setview console commands ** ======================================================================*/ void() display_playinfo = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; sprint(self,"\b[INFO]\b Org ("); sprint(self,vtos(self.origin)); sprint(self,") Ang ("); sprint(self,vtos(self.v_angle)); sprint(self,")\n"); }; /*====================================================================== Prints which custom keys the player has in their inventory ======================================================================*/ void() display_customkeys = { local string ckey_str1, ckey_str2, ckey_str3, ckey_str4; local float ckey_count; // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Check for any custom keys in player inventory if (self.moditems & IT_CKEYALL) { // Always reset key count ckey_count = 0; if (self.moditems & IT_CKEY1) { ckey_str1 = self.ckeyname1; ckey_count = ckey_count + 1; } if (self.moditems & IT_CKEY2) { if (ckey_count == 1) ckey_str2 = self.ckeyname2; else ckey_str1 = self.ckeyname2; ckey_count = ckey_count + 1; } if (self.moditems & IT_CKEY3) { if (ckey_count == 2) ckey_str3 = self.ckeyname3; else if (ckey_count == 1) ckey_str2 = self.ckeyname3; else ckey_str1 = self.ckeyname3; ckey_count = ckey_count + 1; } if (self.moditems & IT_CKEY4) { if (ckey_count == 3) ckey_str4 = self.ckeyname4; else if (ckey_count == 2) ckey_str3 = self.ckeyname4; else if (ckey_count == 1) ckey_str2 = self.ckeyname4; else ckey_str1 = self.ckeyname4; ckey_count = ckey_count + 1; } // if 4 keys are present, then squash the last two key names together // The maximum amount of strings that centerprint can handle is 7 // A bit of shame, because only needed one more string! if (ckey_count == 4) centerprint7 (self, "-[ \bArcane Key Inventory\b ]-\nYou have the following\n\n", ckey_str1, "\n", ckey_str2, "\n", ckey_str3, ckey_str4); else // Space out title and keys (does not print key 4) centerprint7 (self, "-[ \bArcane Key Inventory\b ]-\nYou have the following\n\n", ckey_str1, "\n", ckey_str2, "\n", ckey_str3, "\n"); } else // Should always say the state of the inventory centerprint(self, "-[ \bArcane Key Inventory\b ]-\n\nIs Empty!\n"); }; /*====================================================================== ImpulseCommands ======================================================================*/ void() ImpulseCommands = { if (self.impulse >= 1 && self.impulse <= 8) W_ChangeWeapon (self); else if (self.impulse == 10) CycleWeaponCommand(); else if (self.impulse == 12) CycleWeaponReverseCommand(); // Only these MOD options can be changed via the console else if (self.impulse == 100) toggleautoaim(); // Toggle auto aim else if (self.impulse == 105) toggleprojsize(); // Toggle player proj size else if (self.impulse == 110) togglezaware(); // Toggle Z aware monsters else if (self.impulse == 115) togglepixels(); // Toggle texture modes else if (self.impulse == 120) togglefootstep(); // Toggle footstep sound else if (self.impulse == 125) toggleliquiddmg(); // Toggle liquid damage else if (self.impulse == 130) toggleshotgunproj(); // Toggle SG Projectile else if (self.impulse == 135) toggleshotguncase(); // Toggle SG Casing else if (self.impulse == 140) display_version(); // Display MOD config flag else if (self.impulse == 142) display_playinfo(); // Display Player information else if (self.impulse == 145) StartIntermissionCamera(); else if (self.impulse == 150) togglecoopartifacts();// Toggle COOP can drop artifacts else if (self.impulse == 152) togglecoopweapons(); // Toggle COOP weapons to respawn else if (self.impulse == 154) togglecoophealth(); // Toggle COOP health to respawn else if (self.impulse == 156) togglecoopammoboxes();// Toggle COOP ammo boxes to respawn else if (self.impulse == 158) togglecooppowerups(); // Toggle COOP powerups to respawn else if (self.impulse == 160) toggleweather(); // Toggle Weather Systems else if (self.impulse == 170) togglebodyremoval(); // Toggle monster body fade/removal else if (self.impulse == 175) display_customkeys(); // Display Custom Key inventory // Only works developer only) else if (self.impulse == 200) toggleupgradeaxe(); // Toggle Axe Upgrade else if (self.impulse == 205) toggleupgradessg(); // Toggle Shotgun Upgrade else if (self.impulse == 210) toggleupgradelg(); // Toggle Lightning Upgrade else if (self.impulse == 220) display_configflag(); // Display MOD config flag else if (self.impulse == 225) display_mapvar(); // Display all map variables else if (self.impulse == 230) toggledevhelpers(); // Toggle Dev Helpers (mark/arrow) else if (self.impulse == 235) CycleParticleDebug(); // Cycle particle debug else if (self.impulse == 240) givesigil(SVR_RUNE_ALL); // Give all sigils to player else if (self.impulse == 241) givesigil(SVR_RUNE_KEY1); // Give various sigil to player else if (self.impulse == 242) givesigil(SVR_RUNE_KEY2); // Will be reset on map load else if (self.impulse == 243) givesigil(SVR_RUNE_KEY3); // Mainly used for testing else if (self.impulse == 244) givesigil(SVR_RUNE_KEY4); else if (self.impulse == 245) givekey(IT_KEY1 + IT_KEY2); // Both // Legacy cheat commands, should be developer 1 only ... else if (self.impulse == 9) CheatCommand(); else if (self.impulse == 250) SharpshooterCheat(); else if (self.impulse == 251) NailPiercerCheat(); else if (self.impulse == 252) EnvSuitCheat(); else if (self.impulse == 253) PentagramCheat(); else if (self.impulse == 254) InvisibleCheat(); else if (self.impulse == 255) QuadDamageCheat(); self.impulse = 0; }; /*====================================================================== The MOD can be customizied from three different source: quake.rc < worldspawn < impulse commands (top priority) The serverflags is the ONLY variable that is passed between MAP loads and that variable is not available straightaway! Once the worldspawn is loaded (first thing to happen) the serverflags is still empty and the functions have to cope with it 'out of sync' until later. after worldspawn is loaded, the combination of the quake.rc (TEMP1) is merged with the keys on worldspawn and all spawning functions use the configflags until it can be sync'd with serverflags. The configflags is setup to be temporary so that any previous value from a quickload does not interfere with it. ======================================================================*/ // Assume that serverflags not setup yet, merge worldspawn with configflag // Once serverflags available, then sync everything together void(float regbitflag, float worldvalue) update_worldspawn = { // Is the bit value TRUE? if (worldvalue > 0) configflag = configflag | regbitflag; // Only take about a bit value from configflag if bit value is present else if (worldvalue < 0) { if (configflag & regbitflag) configflag = configflag - regbitflag; } }; //---------------------------------------------------------------------- // The worldspawn key values always override the quake.rc values and // should be merged with the console variable when loading a map // serverflags is not available before spawn functions void() sycn_worldspawn = { update_worldspawn(SVR_ITEMOFFSET, self.no_item_offset); update_worldspawn(SVR_UPDAXE, self.upgrade_axe); update_worldspawn(SVR_UPDSSG, self.upgrade_ssg); update_worldspawn(SVR_UPDLG, self.upgrade_lg); update_worldspawn(SVR_ZAWARE, self.no_zaware); update_worldspawn(SVR_LIQDAM, self.no_liquiddmg); }; //---------------------------------------------------------------------- // Reset the serverflag to console + worldspawn settings // This only needs to be done when loading a new map or changelevel // quickload cannot run this function it will damage inventory void() sync_serverflags = { local float checkflag; if (serverflags & SVR_LIVE) { dprint("\b[SERVERFLAG]\b MAP LOAD reset/sync\n"); // Take 1-8 runes, 9-16 worldspawn merge, 17-23 mod/console options checkflag = (serverflags & SVR_RUNEFLAG) + (temp1flag & SVR_WORLDFLAG) + (configflag & SVR_HIGHFLAG); // Update the serverflags ready for future updates serverflags = configflag = checkflag; } }; //---------------------------------------------------------------------- // Update configflag and if the serverflags is active, update that as well! void(float regbitflag, float regbitvalue) update_configflag = { // Is the bit value TRUE? if (regbitvalue == TRUE) { configflag = configflag | regbitflag; if (serverflags & SVR_LIVE) serverflags = serverflags | regbitflag; } // If the bit value FALSE else { configflag = configflag - (configflag & regbitflag); if (serverflags & SVR_LIVE) { serverflags = serverflags - (serverflags & regbitflag); } } // Only the top 8 bits of TEMP1 flag can be updated // Some options should not be changed easily, causes problems if (regbitflag & SVR_HIGHFLAG) { // Re-fresh the console variable dprint("\b[TEMP1]\b Changing ("); dprint(ftos(regbitflag)); dprint(")\n"); temp1flag = cvar("temp1"); if (regbitvalue > 0) temp1flag = temp1flag | regbitflag; else temp1flag = temp1flag - (temp1flag & regbitflag); // Write any changes to the console variable (TEMP1) cvar_set("temp1", ftos(temp1flag)); } }; //---------------------------------------------------------------------- float(float regbitflag) query_configflag = { // Return bitflag value so multiple bits can be tested together return (configflag & regbitflag); }; //---------------------------------------------------------------------- float(float regbitflag) query_temp1flag = { // Return bitflag value so multiple bits can be tested together return (temp1flag & regbitflag); }; //---------------------------------------------------------------------- // Once global variables are available (client/server is setup) // Sync the serverflag with the configflag //---------------------------------------------------------------------- void() sync_configflag = { local float checkflag; // At this point the live data is all over the place and needs to be merged // The serverflag can contain (rune keys and console options) if quickload // and the configflag contains default + worldspawn keys if (serverflags & SVR_LIVE) { dprint("\b[SERVERFLAG]\b LIVE data detected\n"); // Take 1-16 runes & spawn options, 17-23 mod/console options checkflag = (serverflags & SVR_LOWFLAG) + (configflag & SVR_HIGHFLAG); // Make sure all flags are in sync with each other configflag = serverflags = checkflag | SVR_LIVE; } else { dprint("\b[SERVERFLAG]\b new game detected\n"); // Update the serverflags ready for future updates serverflags = configflag | SVR_LIVE; } }; //---------------------------------------------------------------------- void() display_configflag = { // No warning message, called from client.qc if (developer == 0) return; dprint("\n\b[CONFIG]\b MOD Settings ("); if (configflag & SVR_LIVE) dprint(ftos(configflag-SVR_LIVE)); else dprint(ftos(configflag)); if (configflag & SVR_LIVE) dprint(") L\n"); else dprint(")\n"); dprint("--------------------------------------\n"); // Particle system if (query_configflag(SVR_PARTICLES)) dprint("+ Particle System enabled\n"); else dprint("- Particle System disabled\n"); if (query_configflag(SVR_SPRPARTON) || world.sprite_particles == TRUE) dprint("* Sprite/Dot particles ONLY\n"); if (query_configflag(SVR_WEATHER)) dprint("- Weather System disabled\n"); else dprint("+ Weather System enabled\n"); // All new MOD weapons if (world.upgrade_axe < 0) dprint("W Axe Upg Removed on Worldspawn\n"); else if (world.upgrade_axe > 0) dprint("W Axe Upg Added on Worldspawn\n"); else if (query_temp1flag(SVR_UPDAXE)) dprint("* Axe Upgrade in quake.rc\n"); else if (query_configflag(SVR_UPDAXE)) dprint("+ Axe Upgrade from inventory\n"); else dprint("- NO Axe upgrade detected\n"); if (world.upgrade_ssg < 0) dprint("W SSG Upg Removed on Worldspawn\n"); else if (world.upgrade_ssg > 0) dprint("W SSG Upg Added on Worldspawn\n"); else if (query_temp1flag(SVR_UPDSSG)) dprint("* SSG Upgrade in quake.rc\n"); else if (query_configflag(SVR_UPDSSG)) dprint("+ SSG Upgrade from inventory\n"); else dprint("- NO SSG upgrade detected\n"); if (world.upgrade_lg < 0) dprint("W LG Upg Removed on Worldspawn\n"); else if (world.upgrade_lg > 0) dprint("W LG Upg Added on Worldspawn\n"); else if (query_temp1flag(SVR_UPDLG)) dprint("* LG Upgrade in quake.rc\n"); else if (query_configflag(SVR_UPDLG)) dprint("+ LG Upgrade from inventory\n"); else dprint("- NO LG upgrade detected\n"); // New Shotgun bullet projectile/casing system if (world.no_sgprojectile > 0) dprint("W SG Projs Disabled on worldspawn\n"); else if (query_configflag(SVR_SHOTGPROJ)) dprint("- Shotgun hitscan system\n"); else dprint("+ Shotgun projectiles system\n"); if (world.no_sgcasing > 0) dprint("W SG Casing Disabled on worldspawn\n"); else if (query_configflag(SVR_SHOTGCASE)) dprint("- Shotgun casing disabled\n"); else dprint("+ Shotgun casing enabled\n"); if (playerprojsize == 0) dprint("+ Large Projectile Collision\n"); else dprint("- Small Projectile Collision\n"); // Items updates; origin points and random rotation if (query_configflag(SVR_ITEMOFFSET)) dprint("+ All items use center origin\n"); else dprint("- All items use corner origin\n"); dprint("+ All items are randomly rotated\n"); // General MOD settings if (autoaim_cvar >= 1) dprint("+ Player weapon autoaim disabled\n"); else dprint("- Player weapon autoaim enabled\n"); if (query_configflag(SVR_ZAWARE)) dprint("- Z Aware Monster combat disabled\n"); else dprint("+ Z Aware Monster combat enabled\n"); if (query_configflag(SVR_FOOTSTEP)) dprint("- footstep sounds disabled\n"); else dprint("+ footstep sounds enabled\n"); if (query_configflag(SVR_LIQDAM)) dprint("- monster liquid damage disabled\n"); else dprint("+ monster liquid damage enabled\n"); if (query_configflag(SVR_DEVHELPER)) dprint("- Dev helpers (mark/arrow) disabled\n"); else dprint("+ Dev helpers (mark/arrow) enabled\n"); // Body fade/floor checks if (map_bodyfadeaway > 0) dprint("+ Monster dead body fade away\n"); else dprint("- No fade away for monster bodies\n"); if (map_bodyflrcheck > 0) dprint("+ Monster dead body check floor\n"); else dprint("- No floor checks for monster bodies\n"); // Visual settings - fog / wateralpha / gravity if (query_configflag(SVR_NOFOGCMDS)) dprint("- Global fog system disabled\n"); else if (fog_active && fog_control) { dprint("+ Gfog ("); lftos(self, fog_control.fog_currden, 1,3, BUFFER_DPRINT); dprint(")("); lftos(self, fog_control.fog_currcol_x, 1,3, BUFFER_DPRINT); dprint(" "); lftos(self, fog_control.fog_currcol_y, 1,3, BUFFER_DPRINT); dprint(" "); lftos(self, fog_control.fog_currcol_z, 1,3, BUFFER_DPRINT); dprint(")\n"); } else dprint("* Global fog default not defined\n"); if (liquid_alpha != 1) { dprint("+ Water Alpha has changed ("); lftos(self, liquid_alpha, 0,3, BUFFER_DPRINT); dprint(")\n"); } if (map_gravity != DEF_GRAVITY) { dprint("+ Map gravity has changed ("); dprint(ftos(map_gravity)); dprint(")\n"); } // DP compatible visual settings if (engine == ENG_DPEXT) { dprint("+ DP features ( "); // Show all active features if (ext_dpfog) dprint("FOG "); if (ext_dpsurf) dprint("SURF "); if (ext_dprain) dprint("RAIN "); if (ext_dpsnow) dprint("SNOW"); dprint(")\n"); } // Show the coop respawn options if (coop > 0) { if (coop_weapons == FALSE) dprint("+ COOP weapons respawn TRUE\n"); else dprint("- COOP weapons respawn FALSE\n"); if (coop_ammoboxes == FALSE) dprint("- COOP ammo boxes respawn FALSE\n"); else dprint("+ COOP ammo boxes respawn TRUE\n"); if (coop_health == FALSE) dprint("- COOP health packs respawn FALSE\n"); else dprint("+ COOP health packs respawn TRUE\n"); if (coop_powerups == FALSE) dprint("- COOP powerups respawn FALSE\n"); else dprint("+ COOP powerups respawn TRUE\n"); } dprint("--------------------------------------\n"); }; /*====================================================================== Give the player various sigils (serverflag) Give the player silver/gold keys ======================================================================*/ void(float sigil_bit) givesigil = { if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } dprint("\b[SIGIL]\b Server updated ("); dprint(ftos(sigil_bit)); dprint(")\n"); if (sigil_bit & SVR_RUNE_KEY1) update_configflag(SVR_RUNE_KEY1,TRUE); if (sigil_bit & SVR_RUNE_KEY2) update_configflag(SVR_RUNE_KEY2,TRUE); if (sigil_bit & SVR_RUNE_KEY3) update_configflag(SVR_RUNE_KEY3,TRUE); if (sigil_bit & SVR_RUNE_KEY4) update_configflag(SVR_RUNE_KEY4,TRUE); }; //---------------------------------------------------------------------- void(float key_bit) givekey = { if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } dprint("\b[KEYS]\b Inventory updated ("); dprint(ftos(key_bit)); dprint(")\n"); if (key_bit & IT_KEY1) self.items = self.items | IT_KEY1; if (key_bit & IT_KEY2) self.items = self.items | IT_KEY2; }; /*====================================================================== Various MOD features ======================================================================*/ void() toggleautoaim = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable if (autoaim_cvar >= 1) autoaim_cvar = 0.93; else autoaim_cvar = 1; cvar_set("sv_aim", ftos(autoaim_cvar)); sprint(self, "\b[Impulse]\b Auto aim state ("); if (autoaim_cvar < 1) sprint(self, "ON)\n"); else sprint(self, "OFF)\n"); }; //---------------------------------------------------------------------- void() toggleprojsize = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the global variable if (playerprojsize == 1) playerprojsize = 0; else playerprojsize = 1; sprint(self, "\b[Impulse]\b Player proj size ("); if (playerprojsize == 1) sprint(self, "SMALL)\n"); else sprint(self, "LARGE)\n"); }; //---------------------------------------------------------------------- void() togglezaware = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_ZAWARE)) update_configflag(SVR_ZAWARE, FALSE); else update_configflag(SVR_ZAWARE, TRUE); sprint(self, "\b[Impulse]\b Z Aware Monsters ("); if (query_configflag(SVR_ZAWARE)) sprint(self, "Disabled)\n"); else sprint(self, "Enabled)\n"); }; //---------------------------------------------------------------------- void() togglepixels = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; sprint(self, "\b[SETTINGS]\b texture filtering ("); if (pixelmode == TRUE) { pixelmode = FALSE; stuffcmd(self, "\ngl_texturemode GL_LINEAR_MIPMAP_LINEAR\n"); sprint(self, "blurry)\n"); } else { pixelmode = TRUE; stuffcmd(self, "\ngl_texturemode GL_NEAREST_MIPMAP_LINEAR\n"); sprint(self, "crispy)\n"); } }; //---------------------------------------------------------------------- void() togglefootstep = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_FOOTSTEP)) update_configflag(SVR_FOOTSTEP, FALSE); else update_configflag(SVR_FOOTSTEP, TRUE); sprint(self, "\b[Impulse]\b footsteps ("); if (query_configflag(SVR_FOOTSTEP)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); }; //---------------------------------------------------------------------- void() toggleliquiddmg = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_LIQDAM)) update_configflag(SVR_LIQDAM, FALSE); else update_configflag(SVR_LIQDAM, TRUE); sprint(self, "\b[Impulse]\b Monster Liquid Damage ("); if (query_configflag(SVR_LIQDAM)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); }; //---------------------------------------------------------------------- void() toggleshotgunproj = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_SHOTGPROJ)) update_configflag(SVR_SHOTGPROJ, FALSE); else update_configflag(SVR_SHOTGPROJ, TRUE); sprint(self, "\b[Impulse]\b Shotgun Projectiles ("); if (query_configflag(SVR_SHOTGPROJ)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); }; //---------------------------------------------------------------------- void() toggleshotguncase = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_SHOTGCASE)) update_configflag(SVR_SHOTGCASE, FALSE); else update_configflag(SVR_SHOTGCASE, TRUE); sprint(self, "\b[Impulse]\b Shotgun Casing ("); if (query_configflag(SVR_SHOTGCASE)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); }; //---------------------------------------------------------------------- void() togglecoopartifacts = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (coop == FALSE) { sprint(self,"\b[IMPULSE]\b Only works when COOP active!\n"); return; } self.impulse = 0; sprint(self, "\b[SETTINGS]\b COOP Drop Artifacts ("); if (coop_artifacts == TRUE) { coop_artifacts = FALSE; sprint(self, "OFF)\n"); } else { coop_artifacts = TRUE; sprint(self, "ON)\n"); } }; //---------------------------------------------------------------------- void() togglecoopweapons = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (coop == FALSE) { sprint(self,"\b[IMPULSE]\b Only works when COOP active!\n"); return; } self.impulse = 0; sprint(self, "\b[SETTINGS]\b COOP Weapons Respawn ("); if (coop_weapons == TRUE) { coop_weapons = FALSE; sprint(self, "ON)\n"); } else { coop_weapons = TRUE; sprint(self, "OFF)\n"); } }; //---------------------------------------------------------------------- void() togglecoopammoboxes = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (coop == FALSE) { sprint(self,"\b[IMPULSE]\b Only works when COOP active!\n"); return; } self.impulse = 0; sprint(self, "\b[SETTINGS]\b COOP Ammo Boxes Respawn ("); if (coop_ammoboxes == TRUE) { coop_ammoboxes = FALSE; sprint(self, "OFF)\n"); } else { coop_ammoboxes = TRUE; sprint(self, "ON)\n"); } }; //---------------------------------------------------------------------- void() togglecoophealth = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (coop == FALSE) { sprint(self,"\b[IMPULSE]\b Only works when COOP active!\n"); return; } self.impulse = 0; sprint(self, "\b[SETTINGS]\b COOP Health Packs Respawn ("); if (coop_health == TRUE) { coop_health = FALSE; sprint(self, "OFF)\n"); } else { coop_health = TRUE; sprint(self, "ON)\n"); } }; //---------------------------------------------------------------------- void() togglecooppowerups = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (coop == FALSE) { sprint(self,"\b[IMPULSE]\b Only works when COOP active!\n"); return; } self.impulse = 0; sprint(self, "\b[SETTINGS]\b COOP Powerups Respawn ("); if (coop_powerups == TRUE) { coop_powerups = FALSE; sprint(self, "OFF)\n"); } else { coop_powerups = TRUE; sprint(self, "ON)\n"); } }; //---------------------------------------------------------------------- void() update_weather = { // Check for advanced engines if (ext_active) { // FTE/QSS only supports one console command for weather // Engine does not remember setting and resets it if (checkextension("FTE_SV_POINTPARTICLES")) if (query_configflag(SVR_WEATHER)) stuffcmd(self, "\nr_part_rain 0\n"); else stuffcmd(self, "\nr_part_rain 1\n"); else { // DP engine remembers rain/snow weather settings // DP has separate commands for weather types if (query_configflag(SVR_WEATHER)) { // Weather disabled stuffcmd(self, "\ncl_particles_rain 0\n"); stuffcmd(self, "\ncl_particles_snow 0\n"); } else { // Weather enabled stuffcmd(self, "\ncl_particles_rain 1\n"); stuffcmd(self, "\ncl_particles_snow 1\n"); } } } }; //---------------------------------------------------------------------- void() toggleweather = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; // Enhanced engines enabled? if (!ext_active) { sprint(self,"\b[Impulse]\b Engine does not support weather.\n"); return; } self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_WEATHER)) update_configflag(SVR_WEATHER, FALSE); else update_configflag(SVR_WEATHER, TRUE); sprint(self, "\b[Impulse]\b Particle weather system ("); if (query_configflag(SVR_WEATHER)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); update_weather(); }; //---------------------------------------------------------------------- void() togglebodyremoval = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; self.impulse = 0; // Toggle body removal/fade system timer // default = time + 10 + random() * 5 if (map_bodyfadeaway > 0) map_bodyfadeaway = 0; else map_bodyfadeaway = 5; sprint(self, "\b[Impulse]\b Monster body removal ("); if (map_bodyfadeaway > 0) sprint(self, "ON)\n"); else sprint(self, "OFF)\n"); }; /*====================================================================== Require DEVELOPER mode to be active ======================================================================*/ void() toggleupgradeaxe = { // Default return conditions (must be player and developer) if ( !(self.flags & FL_CLIENT) ) return; if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } self.impulse = 0; if (self.moditems & IT_UPGRADE_AXE) { dprint("\b[Impulse]\b Shadow Axe Removed\n"); self.moditems = self.moditems - IT_UPGRADE_AXE; } else { dprint("\b[Impulse]\b Shadow Axe Added\n"); self.moditems = self.moditems | IT_UPGRADE_AXE; } if (self.weapon == IT_AXE) W_SetCurrentAmmo(self); }; //---------------------------------------------------------------------- void() toggleupgradessg = { // Default return conditions (must be player and developer) if ( !(self.flags & FL_CLIENT) ) return; if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } self.impulse = 0; if (self.moditems & IT_UPGRADE_SSG) { dprint("\b[Impulse]\b Widowmaker Shotgun Removed\n"); self.moditems = self.moditems - IT_UPGRADE_SSG; } else { dprint("\b[Impulse]\b Widowmaker Shotgun Added\n"); self.moditems = self.moditems | IT_UPGRADE_SSG; } // make sure player VIEW model is up to date if (self.weapon == IT_SUPER_SHOTGUN) W_SetCurrentAmmo(self); }; //---------------------------------------------------------------------- void() toggleupgradelg = { // Default return conditions (must be player and developer) if ( !(self.flags & FL_CLIENT) ) return; if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } self.impulse = 0; if (self.moditems & IT_UPGRADE_LG) { dprint("\b[Impulse]\b Plasma Gun Removed\n"); self.moditems = self.moditems - IT_UPGRADE_LG; } else { dprint("\b[Impulse]\b Plasma Gun Added\n"); self.moditems = self.moditems | IT_UPGRADE_LG; } // make sure player VIEW model is up to date if (self.weapon == IT_LIGHTNING) W_SetCurrentAmmo(self); }; //---------------------------------------------------------------------- void() toggledevhelpers = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } self.impulse = 0; // Toggle the state of the console variable using the server flag if (query_configflag(SVR_DEVHELPER)) update_configflag(SVR_DEVHELPER, FALSE); else update_configflag(SVR_DEVHELPER, TRUE); sprint(self, "\b[Impulse]\b Dev Helpers are ("); if (query_configflag(SVR_DEVHELPER)) sprint(self, "OFF)\n"); else sprint(self, "ON)\n"); }; //---------------------------------------------------------------------- void() CycleParticleDebug = { // Default return conditions (must be player) if ( !(self.flags & FL_CLIENT) ) return; if (developer == 0) { sprint(self,"\b[IMPULSE]\b Only works in developer mode!\n"); return; } self.impulse = 0; part_debug = part_debug + 1; if (part_debug > PARTICLE_DEBUGMAX) part_debug = 0; sprint(self, "\b[Impulse]\b Particle debug level ("); sprint(self, ftos(part_debug)); sprint(self, ")\n"); }; /*====================================================================== IMPULSE 9 Gives the player certain weapons and ammo (CHEAT COMMAND) ======================================================================*/ void() CheatCommand = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 9]\b Weapon Cheat Command\n"); dprint("- Use Impulse 245 to get silver/gold keys!\n"); self.impulse = 0; self.ammo_rockets = 75; self.ammo_nails = 150; self.ammo_shells = 150; self.ammo_cells = 150; self.items = self.items | IT_AXE | IT_SHOTGUN | IT_SUPER_SHOTGUN | IT_NAILGUN | IT_SUPER_NAILGUN | IT_GRENADE_LAUNCHER | IT_ROCKET_LAUNCHER | IT_LIGHTNING; self.items = self.items | IT_ARMOR1; self.weapon = IT_LIGHTNING; W_SetCurrentAmmo (self); }; /*====================================================================== IMPULSE 250 ======================================================================*/ void() SharpshooterCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 250]\b Sharp Shooter Cheat\n"); self.impulse = 0; self.sharpshoot_time = 1; self.sharpshoot_finished = time + POWERUP_TIMER; self.items = self.items | IT_QUAD; self.moditems = self.moditems | IT_ARTSHARP; }; /*====================================================================== IMPULSE 251 ======================================================================*/ void() NailPiercerCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 251]\b Nail Piercer Cheat\n"); self.impulse = 0; self.nailpiercer_time = 1; self.nailpiercer_finished = time + POWERUP_TIMER; self.items = self.items | IT_QUAD; self.moditems = self.moditems | IT_ARTPIERCE; }; /*====================================================================== IMPULSE 252 ======================================================================*/ void() EnvSuitCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 252]\b Environmental Suit Cheat\n"); self.impulse = 0; self.rad_time = 1; self.radsuit_finished = time + POWERUP_TIMER; self.items = self.items | IT_SUIT; }; /*====================================================================== IMPULSE 253 ======================================================================*/ void() PentagramCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 253]\b Pentagram of Protection Cheat\n"); self.impulse = 0; self.invincible_time = 1; self.invincible_finished = time + POWERUP_TIMER; self.items = self.items | IT_INVULNERABILITY; }; /*====================================================================== IMPULSE 254 ======================================================================*/ void() InvisibleCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 254]\b Ring of Shadows Cheat\n"); self.impulse = 0; self.invisible_time = 1; self.invisible_finished = time + POWERUP_TIMER; self.items = self.items | IT_INVISIBILITY; }; /*====================================================================== IMPULSE 255 ======================================================================*/ void() QuadDamageCheat = { if (intermission_running) return; // intermission or finale if (deathmatch || coop) return; dprint("\b[Impulse 255]\b Quad Damage Cheat\n"); self.impulse = 0; self.super_time = 1; self.super_damage_finished = time + POWERUP_TIMER; self.items = self.items | IT_QUAD; };