Mapping & Hammer

Playtest a GMod map: testing with players in five stages

Playtest a GMod map before it goes live: five stages from the solo pass to a round with players, with console commands, a checklist and feedback rules.

Test a GMod map in five stages: final compile, a solo pass with the developer console, a test on a clean client without your content, a test on a dedicated server and finally a round with real players. Alone on your own machine you are server and client at once and have every file locally. Missing content, jerky elevators, too few spawns and drops with many entities therefore only show up in the later stages.

Why testing alone is not enough

  • You are server and client at once. In single player the client skips prediction. On a server every client predicts its own movement, and the server corrects it when it arrives at a different result. This is most obvious on moving platforms: vertically moving platforms look jerky to the players riding them in multiplayer.
  • Your machine has every piece of content. Textures, models and sounds sit in your game folder, plus any mounted games. A tester only has what is inside the BSP or what the server delivers.
  • A server runs without cheats. Many diagnostic commands need sv_cheats 1, and on a server the value is 0 by default. You do the analysis locally and use the server for observing.
  • More players mean more entities. Every player, every weapon and every spawned prop is an entity. Spawns, doors, frame rate and the edict limit are only tested under load.

The test plan in five stages

  1. Final compile. Only test the file you will publish: full VVIS, VRAD with -final, cubemaps built, content packed. The check of the file itself is described in check a BSP before release. Give every test version its own file name, because the server turns away clients with a different BSP (Your map [...] differs from the server's.).
  2. Solo pass. Load the map locally, enable developer 1 and walk through all of it: every door, every button, every elevator, every ladder. Read the console afterwards. Then start a game with several slots and fill them with bot. That shows you whether the spawn points are enough.
  3. Clean client. The launch options -noworkshop and -noaddons temporarily disable Workshop and folder addons. Loose files in the game folder and mounted games stay in place, though. A second machine or a tester who never had your content is more reliable.
  4. Dedicated server. Load the map on a dedicated server and connect. Read the server console at map start, check that map and content reach the client (see FastDL and Workshop), and ride every elevator with real ping.
  5. Real players. Play the map in the gamemode it is made for, with as many players as possible. You observe and take notes, you explain nothing.

Console commands for stages 2 to 4

CommandShowsNeeds sv_cheats 1
developer 1additional messages in the console and at the top left of the screenno
cl_showfps 1frame rateno
net_graph 1frame rate, latency and packet datano
cl_showpos 1current positionno
getposwrites position and view angles to the consoleno
statusmap, players and connectionsno
report_entitiesentities counted by class, plus the total with edictsno, but only for the host or in the server console
+showbudgettime per frame by engine systemno in GMod (the cheat requirement in the Valve wiki applies to other Source games)
mat_wireframe 1everything drawn as wireframeyes
mat_leafvis 1, r_DrawPortals 1current visleaf and areaportalsyes
r_drawclipbrushes 1, vcollide_wireframe 1clip brushes and collision modelsyes
showtriggers_toggletrigger brushesyes
nav_edit 1, ai_nodesnav mesh and AI nodesyes
soundscape_debug 1lines to every env_soundscape, the active one in greenyes

A sensible start for the solo pass:

sv_cheats 1
developer 1
cl_showfps 1
cl_showpos 1
report_entities

Note the total from report_entities on the empty map. It is your baseline before players and props are added. In the console of a dedicated server, stats also prints performance values of the server. How to find causes with mat_wireframe and +showbudget is covered in optimizing GMod map performance.

Checklist for the test

CheckWhat to look forStage
Spawnseveryone spawns free, nobody dies at the spawn, enough points for a full server2 with bots, 5
Stuck spotscorners, gaps between props, areas behind doors: can a player get out again without noclip?2, 5
Out of boundsroofs, wall tops, the edge of the skybox: what do players reach by jumping and stacking props, and what do they see there?5
Lighting and cubemapswalk through once with mat_hdr_level 0 and once with mat_hdr_level 2, check reflections2, 3
Soundsoundscapes change in the right places, the console reports no missing sounds2, 3
Performancelowest frame rate at the point with the longest view while all testers stand there2, 5
Doors and elevatorsseveral players block the door, ride together, jump during the ride4, 5
NavigationNPCs and Nextbots reach all areas, see navmesh and AI nodes2
Missing contentno pink and black surfaces, no ERROR models on the clean client3

If the clean client shows errors, fixing missing textures and ERROR models helps. What to keep in mind when building elevators is covered in elevators and trains.

Collecting and prioritizing feedback

A finding without a location cannot be fixed. So decide before the test how things are reported:

  • One channel, one message per finding.
  • Every report contains the file name of the map, the position from getpos or a screenshot with cl_showpos 1, the gamemode, the player count and what the tester was doing at the time.
  • Ask the testers to start GMod with -condebug. The console then ends up in the file console.log, which they can send you.
  • Observe instead of only asking: where do players get lost, which areas stay empty, where does everyone gather?

Then sort into three classes and work through them in this order:

  1. Blockers: crash, no spawn, stuck spot with no way out, missing content, a way out of the map.
  2. Game flow: frame rate drops, unfair positions, jamming doors and elevators, unclear routes.
  3. Looks: lighting seams, misaligned textures, floating props.

Change nothing during a test. Collect, fix a whole batch, compile, assign a new file name and test again. Note matters of taste once several testers say the same thing independently of each other.

When the map is ready

The map is ready when all five stages have been run with exactly the file you publish and no blocker is open. In concrete terms: the clean client shows no missing content, the server console stays free of errors at map start, the last round with players produced no new blocker, and you know the frame rate at the worst spot with players.

Every change to the BSP creates a new file. After a last fix you therefore repeat at least stages 2 to 4. At the end, check the file with the Map Scanner. It verifies the structure of the BSP, reports risky entities, checks whether a spawnpoint is present and lists the files in the pakfile.

FAQ

How many testers do I need?

There is no fixed number. A single tester with a clean client is enough to find missing content. For spawns, doors and performance, what counts is the number of players the server will actually have later.

Can I test with bots instead of players?

Partly. bot adds a bot on a server with a free slot. In single player GMod refuses with Cannot create a player bot in singleplayer!. The command does not need sv_cheats 1, but like report_entities it only works for the host or in the server console. Bots occupy slots and spawn points. They do not replace players who look for routes, block doors and spawn props.

Why does mat_wireframe not work on the server?

The command is flagged as a cheat and only works with sv_cheats 1. On a live server that stays off. Use cl_showfps, net_graph and status there, and repeat the spot locally with cheats.