[TF2] Numerous FGD Tweaks
Had to recreate my custom FGD after a recent TF2 update, which meant going through Hammer Addons's FGD. here's a buncha minor things I spotted (and stuff that got changed after recent updates):
-
[ ]
tf_logic_cp_timerhas a teamnum keyvalue now so it "works for team RED" -
[x]
func_nobuildnow has a keyvalue to allow it to destroy buildings when it turns on -
[ ]
tf_generic_bombhas a PassActivator KV now -
[ ]
tf_zombienow has an OnDeath output -
[x] all entities with models now have SetModel, SetPlaybackRate, and SetCycle inputs
-
[ ]
point_hurtnow has a KV allowing it to bypass übercharge -
[ ]
func_dustcloudcan cause crashes in multiplayer and probably shouldn't be here -
[ ] no point in having
item_sodacan -
[ ] why is
ai_goal_injured_followhere? it isn't even functional in EP1. -
[ ] since TF2 uses NextBots, there's no point in the NPCHintGroup or NPCSquadName KVs on
npc_maker -
[ ] no point in any of the
ai_entities since TF2 doesn't use NPCs -
[ ] is there any point to globals in TF2?
-
[ ]
env_blood,env_screeneffect,env_zoom,point_message, andcolor_correction_volumedon't work in TF2 -
[x]
env_soundscapeis erroneously listed as having a "Disabled" input, but even "Disable" is unnecessary because it inheritsEnableDisable -
[ ]
func_nav_avoidance_obstacleandpoint_viewcontrol_multiplayerare L4D entities -
[ ]
info_overlaycan save itself some KVs by inheritingFadeDistance -
[ ]
info_powerup_spawnanditem_powerup_crit/uber/runedefine fademin/maxdistance helpers despite not having such KVs -
[x] shouldn't
hightower_teleport_vortex's SetModelScale input be a float? and shouldn't its SetAdvantageTeam input be an integer? -
[ ]
point_push,base_boss, andpoint_velocitysensorcan save themselves some inputs & a KV by inheriting EnableDisable -
[ ]
_Breakable,func_physbox: no apparent point in the physcannon flags/outputs -
[ ]
func_ladder,info_ladder_dismount, andfunc_usableladderdon't work in TF2; presumably notfunc_ladderendpointeither -
[x] does
hammer_notesget removed by the postcompiler? -
[ ]
BaseNPCMakerdefines a "startdisabled" keyvalue and Enable/Disable inputs despite already includingEnableDisable; it could also includeToggleto ignore the Toggle input -
[ ] does
func_tankmortareven work in TF2? if not, there's no point in having it orBaseTank. -
[ ]
SystemLevelChoiceonly affects post-L4D stuff -
[ ]
Breakablecan inheritDamageFilterand have the Enable/DisableDamageForces inputs, soBreakableBrushandBreakablePropdon't need to -
[ ]
BreakablePropdoesn't need OnTakeDamage becauseBreakablealready has it -
[ ]
MasterEntprobably isn't necessary, being a legacy thing -
[ ] health KV and first spawnflag of doors are apparently deprecated
-
[ ] Locked/Unlocked Sentence KVs of doors are for HL:S only
-
[ ]
Buttonmight as well includeBaseEntityVisBrushso its children don't have to -
[ ] does
func_combine_ball_spawnereven work in TF2? if not, there's no point in having it orCombineBallSpawners. -
[ ] TF2 uses nextbots; no point in the
Nodeentities orinfo_radial_link_controller -
[ ]
NavCostcan just inheritEnableDisableandToggle -
[ ] the renderfx KV of
RenderEffectslists both 22 and 24 as "Spotlight FX;" the latter is actually "Fade Wider Pulse" -
[ ] renderfx 23 is listed twice, once as "Cull by distance" and once as the ragdoll hack
-
[ ] EnableDraw and DisableDraw were added in Portal 2
-
[ ]
SetSkinis only used bySetModelandcycler, which also usesSetModel -
[ ]
TriggerOncecan useEnableDisableandToggleto save itself a KV and some inputs -
[ ] I cannot find anything on
boss_alpha~~orspark_shower~~. are you sure they exist? edit:spark_showerdoes appear to exist -
[ ] TF2 doesn't use scenes, so
comp_choreo_sceneset,logic_choreographed_scene, andlogic_scene_list_managerare unnecessary -
[ ]
comp_prop_cablecan useFadeDistanceto save itself some KVs -
[ ]
comp_precache_modelcan useSetModelto not need any KVs of its own -
[ ]
comp_vactube_splineis unnecessary in TF2 (and the whole vactube system, really) -
[ ]
env_beverageis unnecessary, being a legacy entity to begin with -
[ ]
BaseLight,env_bubbles,env_smokestack,env_speaker,func_occluder,light_dynamic,light_environment,logic_branch,logic_relay,point_anglesensor,point_hurt,point_proximity_sensorcan useToggleto save an input -
[ ]
BaseEntityPointcan inheritAnglesto save it a KV -
[ ]
env_dustpuff,spark_shower, andlight_environmentdon't needAnglesbecause they inheritBaseEntityPoint -
[ ] Ember type KV on
env_embersdoes nothing in code -
[ ]
env_explosiondoesn't need the whole list of ignorable classes since only players exist in TF2 -
[ ]
env_firedoesn't work in TF2, and by extensionenv_firesourceandenv_firesensorare unnecessary -
[ ]
env_microphonepresets 51–54 are identical to 50 and serve no purpose -
[ ] the firesprite and smokesprite KVs of
env_smoketrailare unused in code -
[ ]
env_windhas helpers defined for "windradius" and "windradiusinner" KVs, but the KVs themselves aren't given -
[ ] is the portalversion KV of
func_areaportaleven necessary? -
[x]
func_clip_vphysicsdoesn't need the empty spawnflags KV -
[ ]
func_dustcloud,func_precipitationcan cause crashes and other problems in multiplayer games like TF2 -
[ ]
func_nav_blockerlacks the teamToBlock KV, and it doesn't look like starting disabled does anything (still blocks nav) -
[ ]
func_proprespawnzoneis disabled in code -
[ ] vehicles don't work in TF2, so
func_vehicleclipis unnecessary (along with all vehicle entities) -
[ ]
game_intro_viewpointapparently doesn't work properly -
[ ]
game_round_wincan useTeamNumto save itself some KVs -
[ ] wiki says
game_weapon_managerhas a SetMaxPieces input -
[ ] is there anything that can generate rotor wash in TF2? I think
env_rotorshooteris pointless. -
[ ]
gibshooteris obsoleted byenv_shooter; combined with the above, this meansenv_shooteris the only use forgibshooterbase, so it can subsume those properties -
[ ] should
halloween_fortune_teller's red_teleport and blue_teleport KVs be target_destinations instead of strings? -
[ ]
halloween_zappercan inheritEnableDisable -
[x]
point_cameradoesn't function in TF2, rendering it,info_camera_link, andfunc_monitoruseless -
[ ] I'm fairly sure
info_intermissionis unnecessary wheninfo_observer_pointexists -
[ ] I don't think level-change entities like
info_landmark,trigger_transition, ortrigger_changelevelare useful in TF2 -
[x]
info_lighting_relativeis obsolete with the introduction of LightingOrigin -
[ ] no reason to have
info_teleport_destinationwheninfo_targetexists -
[x]
keyframe_trackandmove_trackdon't work (replaced withpath_track) -
[ ]
BaseLightcan inheritBaseEntityPointso its children don't have to -
[ ] autosaving isn't a thing in TF2, so
logic_active_autosave,logic_autosave,trigger_autosave,trigger_togglesave, andplayer_loadsavedhave no point (also the former's Disable input says it enables the entity) -
[ ]
logic_autoreads globals that do nothing in TF2; also doesn't need OnLoadGame 'cuz TF2 doesn't save games -
[ ]
logic_timerdefines Enable and Disable inputs despite already includingEnableDisable; can also inheritToggleto save an input -
[x]
multisourceis superseded by the entirety of the I/O system -
[ ] bonus maps aren't a thing in TF2, and I don't think
point_bonusmaps_accessoris, either -
[ ]
test_tracelineexplicitly has no reason to exist -
[ ]
tf_logic_boss_battleandtf_logic_raidare for a nonexistent gamemode -
[ ]
tf_logic_robot_destruction's max_robots KV should be an integer -
[ ] newunit KV of
worldspawnis useless because there's no such thing as saving a game in TF2 -
[x]
env_shooter's massoverride KV is explicitly stated to be episodic only; no point in having it here -
[ ]
keyframe_ropecan nomRopeKeyFrame, and thenmove_ropecan inherit from it -
[x]
comp_prop_ropecan inherit all its KVs fromcomp_prop_cable; same for their_dynamicvariants -
[x]
entity_signtypos "Invasion" as "Invaison" -
[x] the description of
info_targetshould use "e.g.," not "i.e." -
[ ]
func_achievementis hardcoded and useless to mappers -
[ ]
func_brushdefines a Toggle input despite already includingToggle. its excludednpc KV also says you can specify single entities in Episodic, but this isn't an Episodic game. -
[ ]
trigger_ignite_arrowsandtrigger_impactalready inherit origin KVs from BaseEntityBrush, thus not needing to inherit directly from theOriginclass -
[ ]
trigger_pushonly has SetPushSpeed in L4D2; also, its "Affects Ladders" spawnflag is supposedly HL2-only (and ladders don't work in TF2 anyway) -
[ ]
trigger_serverragdollis Episodic according to the wiki -
[ ]
trigger_teleportdefines spawnflags already defined by TriggerOnce -
[ ]
func_trackchangedoesn't have a Trigger input, onlyfunc_trackautochangedoes -
[x]
phys_magnet's "Coast jeep pickup hack" flag only works onprop_vehicle_jeep, which is only in Half-Life games -
[ ] TF2 doesn't use NPCs with squads, so
npc_enemyfinderis useless -
[ ]
prop_physicsdoesn't need any of the ignition inputs, asBasePropPhysicsalready has those -
[ ]
func_pushablealready inherits fromfunc_breakable, so the only spawnflag it needs to define is 128 "Breakable" -
[ ]
func_waterdoesn't even work in Source -
[ ]
BaseTankdoesn't need the FindNPC inputs or OnXController outputs I recognize this is a lot. there are probably reasons for some of these, but just in case, I'm listing all the things that stick out to me.
This is a nice list of specific things to tweak, thanks! In regards to the many obsolete/not very useful entities, I've been aiming to accurately define what actually exists in all games, not just what is particularly useful. I'd then add tags to exclude those things afterwards for most people.
spark_shower definitely exists; haven't checked boss_alpha in tf2 yet though
https://www.teamfortress.com/post.php?id=166703
- haha I lied
func_monitorworks now - [ ] VScript implemented
- [ ]
point_worldtext,logic_eventlistener, andskybox_swapperadded - so yeah they kinda just dropped the biggest update in TF2 mapping history since they released TF2 Hammer
- Things are right now present if they do exist in the game, even if they're legacy or otherwise not too useful. At some point I need to add a toggle to strip things that are indeed useless or legacy, if you're OK with them showing up as unknown.
-
hammer_notesdoes get auto-deleted. -
func_nav_avoidance_obstacledoes appear to exist in earlier games than L4D.