Map Modification

Excessive Plus includes a feature to modify map entities, which can be disabled with the xp_noCustomEnts server cvar. Entities includes all the interactive elements of a map, like items, spawns, movers, teleporting targets and more. However, you can't alter the map solids with them, and even when you can modify location names or add new ones, keep in mind that all the modifications are server side, so that will either have no effect or even can actually break team overlay in client.

If the file maps/mapname.ents exists, it will override the original entities. So this file have to be complete, including jumppads, teleporters etc. To have an example, you can look at the q3ctf4.ents file included in the release.

If you want to add some items use maps/mapname.add instead.

Among the most common applications of the entities files, we have:

  • Modifying a normal map to adapt it to flag gametypes. This includes both adding the flags and red/blue spawn points to it.
  • Modify item placement. If item placement is also modified, that means bots can have some problems moving around the map. Also, always try to modify them for baseq3, since it is the default config, and every other config should be responsible for modifying the items by their selves.
  • Add or modify player spawn points.
  • Modify space maps to make the void bounce players instead of killing them.
  • ... and many more.

As an example, we include the contents of the q3dm17.add file included in the release, which mostly adds support for flag gametypes to the map. As you can see, the syntax is a bit tricky, so it is advised that you only create this files by hand for easy modifications. For more complex ones, we recommend you to modify the map with a map editor instead, and to take the contents for the .ents file directly from the compiled .bsp file (you can open it with an editor like wordpad or notepad++ and search for the "worldspawn" string, since it should always be the first entity in the list).

/* Here is an example how to modify existing maps.
 *
 * This will add red/blue lights to q3dm17 on team games and flags for CTF.
 * We use a hack to add dynamic lights to the map, please note that this is
 * very limited.
 **/
 
// Red base (left platform)
    {
        "classname" "team_CTF_redflag"
        "origin" "-300 -850 700"
        "notfree" "1"
    }
 
    // red light for all team games
    {
        "classname" "func_static"
        "origin" "-300 -850 700"
        "model" "*1"
        "light" "1020"
        "color" ".004 0 0"
        "notfree" "1"
    }
 
    // intensivy the light for CTF games
    {
        "classname" "func_bobbing"
        "origin" "0 -850 700"
        "model" "*1"
        "light" "1000"
        "color" ".004 0 0"
        "spawnflags" "1"
        "height" "300"
        "gametype" "ctf, rtf, oneflag"
    }
 
    // add a white marker light where the flag should
    // be, this will help us returning the flag
    {
        "classname" "func_static"
        "origin" "-300 -850 600"
        "model" "*1"
        "light" "100"
        "color" ".004 .004 .004"
        "gametype" "rtf"
    }
 
// Blue base (right platform)
    {
        "classname" "team_CTF_blueflag"
        "origin" "-300 978 600"
        "notfree" "1"
    }
 
    // blue light for all team games
    {
        "classname" "func_static"
        "origin" "-300 978 700"
        "model" "*1"
        "light" "1020"
        "color" "0 0 .004"
        "notfree" "1"
    }
 
    // intensivy the light for CTF games
    {
        "classname" "func_bobbing"
        "origin" "0 978 700"
        "model" "*1"
        "light" "1000"
        "color" "0 0 .004"
        "spawnflags" "1"
        "height" "300"
        "gametype" "ctf, rtf, oneflag"
    }
 
    // add a white marker light where the flag should
    // be, this will help us returning the flag
    {
        "classname" "func_static"
        "origin" "-300 978 600"
        "model" "*1"
        "light" "90"
        "color" ".004 .004 .004"
        "gametype" "rtf"
    }
 
// Neutral flag
    {
        "classname" "team_CTF_neutralflag"
        "origin" "2432 64 372"
        "gametype" "oneflag"
    }
 
    // add some light, only if gametype = oneflag
    {
        "classname" "func_static"
        "origin" "2432 64 372"
        "model" "*1"
        "light" "300"
        "color" ".004 .004 .004"
        "gametype" "oneflag"
    }
    {
        "classname" "func_bobbing"
        "origin" "2432 64 372"
        "model" "*1"
        "light" "600"
        "color" ".004 .004 .004"
        "spawnflags" "2"
        "height" "300"
        "gametype" "oneflag"
    }