Tool to mod Portal 2's Puzzlemaker
Latest commit 9611522 Nov 10, 2018

BEE2.4 Releases BEE2-items Releases

Please read the Contributing Guidelines and FAQ before opening an issue.

BEE2 Icon

Better Extended Editor 2 version 4

Portal 2 Mod Tool

The BEE2 allows reconfiguring Portal 2's Puzzlemaker editor to use additional items, reskin maps for different eras, and configure many other aspects. All vanilla items have been upgraded with additional bugfixes and improvements.

The packages (item, style, etc definitions) are in the BEE2-Items repository.

Discord Server

Steam Group

Download and Use (Recommended, for using the BEE2.4)

  • Download and install the latest version of Python3.
  • Download the latest releases of the BEE2.4 and items from the following pages:
  • Extract the contents of the Application release anywhere you like. e.g. C:\BEE2.4
  • Place extracted package folder in the root BEE2 folder. e.g. C:\BEE2.4\packages
  • To run, locate the BEE2.exe in the bin folder and execute it. e.g. C:\BEE2.4\bin\BEE2.exe

Build from Source (Advanced, for Adding to BEE2.4 Program) [Windows]



To build the executable versions of the BEE2, run the compile_BEE2 and compile_VBSP_VRAD scripts with a command-line argument of build:

cd BEE2.4/src/
python compile_BEE2 build
python compile_VBSP_VRAD build

The application executables will be saved in build_BEE2, and the compilers in compiler/. To generate the packages zips, either manually zip the contents of each folder or use the compile_packages script in BEE2-items. This does the same thing, but additionally removes some unnessersary content to decrease file sizes - comments, blank lines, hidden visgroups.

For the release copy, it should include:

  • build_BEE2 (renamed to bin)
  • compiler
  • palettes
  • packages (from BEE2-items)
  • images (without the cache subfolder)
  • sounds
  • basemodui.txt
  • BEE2.ico

The various cache folders and config folders should not be included.

Build from Source [Mac]

Download and install AVBin Download and install TK

cd BEE2.4/src/

$ git clone
$ mv srctools srctools_old
$ mv ./srctools_old/srctools srctools
$ rm -rf srctools_old

$ pip install pipenv
$ pipenv install requests
$ pipenv shell
$ python -m pip install cx_Freeze --upgrade
$ pip install pyglet
$ pip install Pillow
$ pip install noise
$ pip install markdown

$ python build
> BEE2 Version: custom
$ python build
> BEE2 Version: custom

Modules Documentation

  • Common:
    • property_parser: Library to allow reading and writing Valve's KeyValues format.
    • utils: Various utility functions and a Vector class.
    • vmfLib: A library which parses a VMF property tree to allow easy modification.
  • BEE Application:
    • BEE2: Main application script, starts up the application.
    • BEE2_config: Subclass of ConfigParser, which keeps track of the config file it's read from.
    • backup: A window for backing up and restoring P2C files into zips.
    • compile_BEE2: Cx-Freeze setup script to compile the BEE2 application.
    • compilerPane: Window pane which controls compiler options. This updates configs in real time.
    • contextWin: Implements the rightclick context menu for items.
    • FakeZip: simulates a ZipFile object based on a directory. Used to allow packageLoader to load either, without needing to check the type every time.
    • gameMan: Manages adding and removing games as well as exporting editoritems.
    • img: read PNG files into Tkinter-compatible formats. Caches calls so an image is only read once.
    • itemPropWin: A window which allows changing the default properties for an item.
    • loadScreen: Shows a window with loading bars during the startup process.
    • logWindow: Displays log messages.
    • optionWindow: The BEE2 configuration window.
    • packageLoader: Reads packages and parses all data out of them.
    • paletteLoader: Reads and writes palettes to disk.
    • query_dialogs: A version of tkinter.simpledialogs.ask_string, which uses the BEE2 icon.
    • richTextBox: Subclassed version of Tkinter's Text widget, with options to allow easily adding special formating like bullet lists.
    • selectorWin: Window class which allows picking items from a list, displaying various data about each option.
    • sound: Handles playing sound effects, using PyGame. Gracefully fails if Pygame is not present.
    • StyleVarPane: Window Pane which sets Style Properties, controlling certain style options.
    • SubPane: Toplevel subclass which can be shown and hidden via a button, and follows the main window around.
    • tagsPane: The dropdown which allows filtering the item list by tags.
    • tk_tools: Holds the singleton tkinter.Tk() instance and several custom widget classes.
    • tooltip: Allows registering a tooltip to appear on top of a widget.
    • UI: Holds the majority of the UI code, tying the components together.
    • voiceEditor: Window for viewing voice pack lines, and enabling/disabling individual ones.
  • VBSP and VRAD:
    • BSP: Library for reading and writing BSP files. Used to pack files during compile.
    • compile_vbsp_vrad: Cx-Freeze setup script to compile the VBSP and VRAD hooks.
    • comp_consts: Constants for material names and other values.
    • conditions: Implements the conditions system, controlling item-specific transformations. Submodules add the individual conditions:
      • addInstance: Results which add additional instances.
        (addGlobal, addOverlay, addCavePortrait)
      • brushes: Results dealing with instances.
        (GenRotatingEnt, AlterFace, AddBrush, TemplateBrush)
      • fizzler: Results for custom fizzler items.
        (CustFizzler, fizzlerModelPair)
      • globals: Global flags allowing reference to stylevars, voicelines, etc.
        (styleVar, has*, Game, HasCavePortrait, isPreview)
      • instances: Flags and Results for instances - filenames, orientation, locations.
        (instance, has_inst, instVar) (clearOutputs, changeInstance, setInstVar, suffix, localTarget)
      • positioning: Flags/Results for dealing with the positioning of items.
        (rotation, posIsSolid, posIsGoo, forceUpright, OffsetInst)
      • logical: Flags like AND, OR and NOT. Used to comine with other flags.
        (AND, OR, NOT, NOR, NAND)
      • randomise: Results for randomising instances.
        (random, variant, randomNum, randomVec)
      • trackPlat: Result for modifying track platforms. (trackPlatform)
      • cutoutTile: Logic for the Cutout Tile item. (CutoutTile)
      • catwalks: Logic for Catwalk items (MakeCatwalk)
      • scaffold: Logic for Unstationary Scaffolds. (UnstScaffold)
    • instanceLocs: Translates <ITEM_ID:0,1> text into the associated instance paths.
    • vbsp: The BEE2's VBSP hook, which modifies a map VMF before it is compiled by the original VBSP.
    • vbsp_launch: Wrapper around vbsp, to get around the renaming of scripts to '__main__'.
    • voiceLine: Parses quote pack data, and determines the appropriate quote to use for a given map.
    • vrad: The BEE2's VRAD hook, which switches to use fast lighting when not in preview mode, and packs files into the BSP after the compilation.