Skip to content

Instantly share code, notes, and snippets.

View sigsegv-mvm's full-sized avatar

sigsegv sigsegv-mvm

View GitHub Profile
@sigsegv-mvm
sigsegv-mvm / basejumper_allclass2.pop
Created October 30, 2015 00:48
Popfile demonstrating TFBots' ability to use the BASE Jumper
WaveSchedule
{
StartingCurrency 30000
RespawnWaveTime 2
CanBotsAttackWhileInSpawnRoom yes
AddSentryBusterWhenDamageDealtExceeds 0
AddSentryBusterWhenKillCountExceeds 0
Advanced 1
// Attributes Parachute is NOT needed
@sigsegv-mvm
sigsegv-mvm / mvm_response_concepts.txt
Created October 21, 2015 23:04
TF2 MvM voice response concepts
mvm voice response concepts
all => CMultiplayGameRules::HaveAllPlayersSpeakConceptIfAllowed
random => CMultiplayGameRules::HaveRandomPlayersSpeakConceptIfAllowed
one => CTFPlayer::SpeakConceptIfAllowed
## concept used?
...
@sigsegv-mvm
sigsegv-mvm / CTriggerTimerDoor.cpp
Created October 21, 2015 21:03
trigger_timer_door enables voice lines based on the exact map name
// excellent job, Valve...
//
// implications of this idiocy:
// - custom maps with trigger_timer_door entities can't use the "bots attacking/capturing the gate" voice lines
// - the simple act of renaming mvm_mannhattan.bsp will disable its gate voice lines
void CTriggerTimerDoor::OnStartCapture()
{
char const *mapname = gpGlobals->mapname.ToCStr();
if (V_stricmp(mapname, "mvm_mannhattan") == 0) {
@sigsegv-mvm
sigsegv-mvm / aussies.pop
Created October 18, 2015 20:12
Popfile example for giving MvM robots shiny expensive weapons
#base robot_giant.pop
#base robot_standard.pop
WaveSchedule
{
StartingCurrency 10000
RespawnWaveTime 2
CanBotsAttackWhileInSpawnRoom no
AddSentryBusterWhenDamageDealtExceeds 100000000
AddSentryBusterWhenKillCountExceeds 1000000
@sigsegv-mvm
sigsegv-mvm / CSGO_SavedBy.cpp
Created October 16, 2015 05:13
Reverse-engineered logic for CS:GO's "X just saved Y by killing Z" feature
// CS:GO "saved" player logic
// based on the 20151008 version of the CS:GO Linux dedicated server
//
// reverse engineering by sigsegv
// from x86 assembly to C++ with the help of a disassembler and the Source SDK
// (please don't sue me)
// terminology:
// "enemy" player who was just killed by savior
@sigsegv-mvm
sigsegv-mvm / sourcetv_fixer_v2.c
Created October 14, 2015 04:44
Tool for stripping stringtable data out of SourceTV demos
#include <stdio.h>
#include <err.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
struct demo_header {
char header[8];
@sigsegv-mvm
sigsegv-mvm / projtype.h
Last active January 3, 2021 04:38
Projectile type enumeration
enum
{
TF_PROJECTILE_NONE = 0,
TF_PROJECTILE_BULLET = 1, // all bullet weapons
TF_PROJECTILE_ROCKET = 2, // rocket launcher
TF_PROJECTILE_PIPEBOMB = 3, // grenade launcher
TF_PROJECTILE_PIPEBOMB_REMOTE = 4, // sticky bomb launcher
TF_PROJECTILE_SYRINGE = 5, // syringe guns
TF_PROJECTILE_FLARE = 6, // all flare guns (flaregun's "set_weapon_mode" determines flare type)
TF_PROJECTILE_JAR = 7, // jarate
@sigsegv-mvm
sigsegv-mvm / bigrock_gate_finetuned.pop
Created October 2, 2015 22:17
Mission that uses popfile entity IO triggers to only close the deathpit gate while a chief is active
#base robot_giant.pop
#base robot_standard.pop
WaveSchedule
{
StartingCurrency 5000
RespawnWaveTime 2
CanBotsAttackWhileInSpawnRoom no
AddSentryBusterWhenDamageDealtExceeds 1000000
AddSentryBusterWhenKillCountExceeds 10000
@sigsegv-mvm
sigsegv-mvm / sentrybuster_randomchoice
Created October 2, 2015 07:14
Sentry Buster with RandomChoice spawner
#base robot_giant.pop
#base robot_standard.pop
#base robot_gatebot.pop
WaveSchedule
{
StartingCurrency 3000
RespawnWaveTime 2
CanBotsAttackWhileInSpawnRoom no
AddSentryBusterWhenDamageDealtExceeds 0
@sigsegv-mvm
sigsegv-mvm / sentrybuster_tank.pop
Created October 2, 2015 07:07
Tank spawner inside Mission populator with Objective DestroySentries
#base robot_giant.pop
#base robot_standard.pop
#base robot_gatebot.pop
WaveSchedule
{
StartingCurrency 3000
RespawnWaveTime 2
CanBotsAttackWhileInSpawnRoom no
AddSentryBusterWhenDamageDealtExceeds 0