Project /seld/ Source Engine Level Design

averifan223

Not a furry
you WILL build.png

3D level design mainly for Team Fortress 2. Applies to any other Source game as well.
You WILL create something.
You WILL ask questions about confusing sections.

TF2 Directory Location <DIR>
C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\

https://ficool2.github.io/HammerPlusPlus-Website/download.html Hammer++
https://github.com/ruarai/CompilePal/releases 1-click compiler
https://gamebanana.com/tools/95 VTFEdit Texture Creator

Optional
https://github.com/ata4/bspsrc/releases Decompiler
https://web.archive.org/web/20171104164227/http://www.tophattwaffle.com/downloads/vide/ Packer
https://nemstools.github.io/pages/GCFScape-Download.html .bsp & .vpk viewer & extractor

https://files.catbox.moe/07fuj4.zip Ultimate Mapping Resource Pack & Custom .fgd
Custom .fgd Installation:
  • Go to <DIR>\bin\x64\hammerplusplus\hammerplusplus_gameconfig.txt
  • Under "Team Fortress 2", edit "GameData0" to "C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\bin\tf2_spud.fgd"

How to Open Hammer
  1. Go to C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\bin\x64
  2. Run hammerplusplus.exe
  3. Upper left, click File -> New

How to Build
  1. Select the Brush tool (Plain block)
  2. Drag along the grid
  3. Press Enter
To change shapes, change the object type at the bottom right.


Compiling a map
  1. Press F9
  2. Run a Normal compile (Disable VVIS & VRAD if you are only testing for leaks.)
  • Ctrl+S Save (Spam this 24/7. Hammer WILL crash eventually)
  • Ctrl+T Tie selected World Geometry to Entitiy (Double click to view properties)
  • Ctrl+Shift+W Turn Brush Entities into World Geometry
  • Ctrl+C Copy
  • Ctrl+V Paste
  • Ctrl+Shift+V Special Paste (For identical entities with small differences)
  • [ Decrease grid size
  • ] Increase grid size
  • (3D view) X : Show resize edges
  • (3D view) Z : Toggle mouse look
  • (3D view) 1 : Decrease render distance
  • (3D view) 2 : Increase render distance
  • (3D view) Ctrl+Shift+E Center camera on selection
  • Shift+W Toggle grid snapping
  • Ctrl+W Toggle ignore groups
  • Ctrl+A Autosize Viewports
  • HOLD Ctrl to select multiple objects
  • HOLD Shift to clone objects
  • "Delete" button to delete objects
  • Ctrl+M Mathematical transform dialog
  • Alt+P Check for errors
Notes:
A pre-made example is contained within the .zip uploaded here.
  • "soyjakparty" can be replaced with any name of choice e.g. "ctf_2fort"
  • "MAPNAME" is your map's name without the .bsp e.g. "ctf_example_v12345h_final_fix54_english.txt"
  • Source hides the "_final" & "_final1" suffixes. Only use them once your map is truly final.

  • Go to <DIR>/tf/custom
  • Create a folder with any name of choice e.g. root_soyjakparty
  • Within it, create the folders: "maps", "materials", "models", "scripts", "sound"
    • (Optional) In "maps", create "MAPNAME_english.txt"
      • This is your custom chalkboard message.
    • IN "materials", create a folder named "soyjakparty".
      • Most .vtf & .vmt files will go here.
    • IN "materials", create "models", & then create "soyjakparty" within it.
      • Model textures will go here.
    • (Optional) In "materials", create "skybox".
      • Custom skyboxes go here.
    • (Optional) In "materials", create "vgui" & then create "maps" within it.
      • Custom loading photos go here (menu_photos_MAPNAME.vtf & menu_photos_MAPNAME.vmt).
    • In "models", create "soyjakparty".
      • Custom.mdl & related files go here.
    • (Optional) In "scripts", create "soundscapes_MAPNAME.txt".
    • (Optional) In "scripts", create "vscripts".
    • In "sound", create "soyjakparty".
      • Custom sounds go here.

Custom Audio Guidelines
Using VTFEdit
  1. Resize image to powers of 2 (16x16 32x64, 128x256, 1024x512, 4096x2048. 512x512 is a good filesize middle-ground)
    1. Image editor suggestions
      1. https://getpaint.net/download.html Paint.NET
      2. https://www.gimp.org/downloads/ GIMP
      3. https://krita.org/en/download/ Krita
  2. Click Import
  3. Adjust settings
    1. DXT1A for 1 bit alpha
    2. DXT5 for 8 bit alpha
    3. BGR888 for lossless no alpha
    4. BGRA8888 for lossless with alpha
  4. Press Ctrl+S to save
  5. Other .vtf flags
    1. Checking No LOD (Stays at max quality even at low settings)
    2. Checking No Mipmaps (Does not downscale with distance)
    3. Checking Point Sample (No blur. Pixelated on low settings)

Generic Example
Code:
"LightmappedGeneric"
{
    "$basetexture" "soyjakparty/soyjaks/markiplier"
    "$surfaceprop" "rock"
    "%keywords" "soyjak,markiplier,plier"
}
  • "LightmappedGeneric" can be replaced with "UnlitGeneric" to keep a texture fullbright
  • "$alphatest" "1" must be used for images with 1 bit transparency (Either transparent or not).
  • "$translucent" "1" must be used for images with 8 bits of transparency (256 levels of transparency).
  • "%keywords" "soyjak,plier" to help organize texture searches.
  • "$surfaceprop" "rock" to change the impact sounds and particles of your texture.

Animated Texture and Water Example
Code:
"LightmappedGeneric"
{
    "%tooltexture" "soyjakparty/water"
    "%compilewater" "1"
    "%compileKeepLight" 1

    "$basetexture" "soyjakparty/water"
    "%keywords" "soyjak,water"
    "$surfaceprop" "water"
    "$alpha" "0.95"

    "$bottommaterial" "soyjakparty/water"

    "$abovewater" "1"

    "$fogenable" 1
    "$fogcolor" "{11 0 200}"
    "$fogstart" "-400"
    "$fogend" "1000"

    "Proxies"
    {
        "AnimatedTexture"
        {
            "animatedtexturevar" "$basetexture"
            "animatedtextureframenumvar" "$frame"
            "animatedtextureframerate" 20.00
        }

        "TextureScroll"
        {
            "texturescrollvar" "$basetexturetransform"
            "textureScrollRate" 1.0
            "textureScrollAngle" 0
        }

        "WaterLOD"
        {
        }
    }
}
  • Animated textures must have "AnimatedTexutre".
  • Water textures must have "WaterLOD".
  • "TextureScroll" can be applied to any texture.
CompilePal automates this process.
<ROOTFILENAME> is any folder in <DIR>/tf/custom/
  1. Run VIDE.exe
  2. Click Pakfile Lump Editor (Furthest to the right)
  3. Under BSP options, click Open & select your map .bsp
  4. Under Pakfile Options, click Scan
  5. Click Browse & select C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\tf\ OR C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\tf\custom\<ROOTFILENAME>
  6. Click Scan
  7. Under File Options, click Auto
  8. For any missing files, click Add & select
    1. The following are not auto-added:
      1. <ROOTFILENAME>/materials/vgui/maps/menu_photos_MAPNAME.vtf
      2. <ROOTFILENAME>/materials/vgui/maps/menu_photos_MAPNAME.vmt
      3. <ROOTFILENAME>/maps/MAPNAME_english.txt
      4. <ROOTFILENAME>/scripts/soundscapes_MAPNAME.txt
      5. <ROOTFILENAME>/scripts/vscripts/SCRIPTNAME.nut
  9. Click Apply
  10. Under BSP Options, click Save
Your map is now packed. In-game, reduce your filesize 50% with this console command:
"bsp_repack maps/MAPNAME.bsp maps/MAPNAME.bsp"
  • Players: 49 HU length & width, 83 HU height
  • Crouched players are 63 HU in height
  • Jump + no crouch: 50 HU jump
  • Jump then crouch: 64 HU jump
  • Crouch then jump: 72 HU jump
  • Max player height: 155 HU (without blast or double jump)
  • Melee range: 48 HU
    • Swords: 72 HU
    • Disciplinary action: 81.6 HU
  • Melee deals 1.5x damage to func_breakable
  • Fastest walkspeed: Scout 400 HU/s
  • Slowest walkspeed: Heavy 230 HU/s
  • Default max stair step height: 18 HU
  • Max fall (default gravity) before damage: 269 HU
  • Sentry gun radius: 1024 HU
  • Minimum water depth to start swimming: 54 HU
  • Maximum water ledge to jump out: 19 HU
  • Rocket/pipe/sticky explosion radius: 146 HU
 

Attachments

  • soyjakparty source textures.zip
    383 KB · Views: 20
Last edited:
VBSP.exe
  • 32768 faces
  • 8192 brushes
  • 4096 prop_static
  • 2048 Displacements
  • 998 brush entities (Else: "UTIL_SetModel: not precached" crash)
  • 512 info_overlay
  • Volume minimum: 1 Hammer unit cubed (Else: Microbrush error)
  • Displacements can NOT be entities (Use Propper as a work-around)
  • Displacements do NOT seal leaks
  • Displacements of powers of 4 are NOT compressed & can crash in-game
  • Areaportals can NOT cross water
  • Areaportals must NOT be able to draw a line from 1 face to any of its other ones (Else: Leak error)
  • func_areaportal MUST only be 1 brush
  • Minimum: 1 entity in your map (Else: Leak error)
  • 0 Leaks or VVIS & VRAD fail (Check leak errors with Map -> Load Pointfile)

VVIS.exe
  • No going under 16-grid unless necessary: Creates messy visleaves (Check visleaves with Map -> Load Portal File)
  • Optimize numportals: Use func_detail OR func_viscluster (Also func_lod for 1 edict each)
  • func_viscluster can NOT cross Areaportals
  • Dislacements do NOT block or create visleaves (Place Nodraw brushes under them)
  • r_lockpvs 1: View what is rendered in-game from a specific spot
  • If leaked: The entire map is rendered & water is invisible

VRAD.exe
  • Vertex prop_static lighting in custom compile: -game $gamedir $path$file -StaticPropLighting -StaticPropPolys
  • 15476 luxels (124x124) max on 1 Displacement
  • Keep Displacement luxel scale in powers of 2 (Avoids Engine Hunk Overflow crash)
  • 996 light entities
  • If leaked: Fullbright map

General Limits
  • 4096 edicts max
    • 2048 non-networked entities (logic_relay, math_counter, etc, 2049th deletes the oldest)
    • 2048 networked entities (func_door, trigger_multiple, etc., 2049th crashes the server)
  • (?)1024 dynamic shadows (Else: CUtlLinkedList Overflow crash. Reduce by setting Disable Receiving Shadows? to Yes on brushes & setting Disable Shadows? to Yes on props.)
  • 64 ambient_generic (Else: Sound system corruption. Only fixed with snd_restart)
  • 64 env_soundscape (Else: Sound system corruption)
  • NO "Kill" input on players: Crashes their client
  • NO infodecal on dynamic entities (e.g. func_door): Causes Inline Model Error ("Bad Map"/"Timed out" disconnect)
Position
  • X - in Red
  • Y - in Green
  • Z - in Blue
xyz.png

xyz_rotation.png


Rotation
  • Y-Pitch- Transverse axis - in Green (Looking Up or Down)
    • All light entities (except shadow_control) have inverted Y-Pitch
  • Z-Yaw - Vertical axis - in Blue (Turning Left or Right)
  • X-Roll - Longitudinal axis - in Red (Tilting Left or Right)

In 3D views, you rotate counter-clockwise around the missing coordinate.
e.g.
  • Front (Y/Z) - Rotating around X-Roll
  • Side (X/Z) - Rotating around Y-Pitch
  • Top (X/Y) - Rotating around Z-Yaw
Use this information when rotating with the Transformation Dialogue Ctrl+M
pitch_yaw_roll.gif
Your map MUST be sealed from the void. Even the smallest openings will generate a leak error & break all optimization.

  • All brushes are of 2 types: World Geometry & Brush Entities
  • All World Geometry (except Displacements) create Visleaf cuts while Brush Entities do not (Except func_areaportal)
    • Some tool textures also do not cut vislaves
  • func_detail exists as an "empty" entity to prevent unnecessary Visleaf cuts
  • Source uses the entire Visleaf box as your rendering "eyes"
    • If even the corner of a Visleaf can see another Visleaf, then it gets rendered
    • In this picture, standing in Visleaf 2 will only render 1 & 4. Standing in Visleaf 1 will render all 2, 3, 4, & 5.
Opt_pvs_good.jpg



  • Hint+Skip brush combinations can be used to manually create Visleaf cuts
  • Do not create too many so VVIS does not take too long
    • Source is designed for indoor maps. Indoor VVIS should take less than a minute. Outdoor VVIS will take a few minutes depending on complexity.

  • Both entities above do not hide World Geometry & only affect Props
    • Areaportals only render props in front of it
    • Occluders hide props in front of it

  • To view World Geometry in Hammer, go to Visgroups on the right, uncheck Auto, check World Geometry, uncheck Displacements, uncheck everything else, & under Tool Textures, recheck Areaportals, Hint, Skip, & Viscluster.
  • This picture is an example of everything that creates Visleaf cuts in 2fort.
world geometry.jpg
3kliksjak.png

>3kliksphilip

Adding Water
Displacements
3D Skybox
Optimization (Short)
Optimization
https://www.youtube.com/watch?v=hILEwPBqggg&t=20 Lighting

Those are all the basics.
Everything else beyond this point is about learning how each entity functions, which is best learned either through reading the Valve Developer Community wiki, decompiling existing maps or asking questions here.
 
Last edited:
In March 2018, Gabe Newell held a presentation on Artifact claiming there would be regular expansions, an eventual mobile release, and a $1 million tournament, all of which ultimately failed to materialize.


In August of that year, Gabe Newell repeated the claim of an Artifact tournament during the opening of The International:

On March 30, 2020, Valve announced Artifact Beta 2.0, stating they planned for a closed beta (which happened), transitioning to an open beta and later full release (which didn’t).

https://store.steampowered.com/news/app/583950/view/2102558993190369210

On December 17, 2020, Valve stated they would allow users to invite friends to the Artifact 2.0 beta in January.

https://store.steampowered.com/news/app/1269260/view/2951510987408670526

On March 4, 2021, Valve formally abandoned Artifact. No expansions, no mobile version, no million-dollar tournament, not even something as basic as allowing users to invite friends to the beta like they said they would.

https://store.steampowered.com/news/app/583950/view/3047218819080842820

Valve screwed over the Artifact fanbase by cancelling the Artifact 2.0 beta without even allowing users to invite friends like they said they would in January 2021 and does not deserve your financial support for these gross consumer-unfriendly practices.

Do not buy Valve games. Do not buy Steam games. Do not buy Valve hardware. Email Gabe Newell and tell him that until Valve atones for lying to and betraying the Artifact fanbase, he will not see another thin dime.
 
quantum asshole.jpg

Artifact is neither dead nor alive, it's time to observe one of soyence's most superior fields AKA quantum mechanics
>Fully peer reviewed with a large amount of papers to choose from
>Consistent base of researchers that isn't filled with charlatans
>No silly chemistry, if you want to change the certainty of an event's occurrence you just look at it, no chemical reaction required
>A well studied professor ensures that almost every lesson you hear is different than the last, promoting enthusiasm for the material
>even if you get bored of studying the same experiments all the time, there are plenty of uncharted topics to develop on your own
>has some of the most advanced technological systems in soyence
>String theory still makes engineers and computer soyentists seethe to this day
 
Back
Top