City Tools Custom windows explained

Build one → Help ← Back to the analyzer

Hardly anyone uses custom windows, because nobody tells you they exist. They are one of the most useful things in City of Heroes: a panel of your own buttons, sitting on screen, that runs any command you like with one click. This page explains what they are and gets you to a working one - no prior experience assumed.

On this page
  1. What it is
  2. Why bother
  3. The file and where it lives
  4. Creating one in game
  5. Adding and editing buttons
  6. A worked example
  7. What can go wrong
  8. Let the builder do it

Part 1 - Custom windows, and making them by hand

1. What it is

A custom window is a small panel of buttons that you build yourself, where every button runs one or more slash commands when clicked. Once it exists, it is persistent - it appears automatically for every character on your account, new or old. You set it up once, on one character, and it just shows up everywhere from then on.

2. Why bother

It turns things that are normally a trip through menus - or a slash command you'd have to remember and retype - into a single click. A few examples of what people put in one:

Anything you can type as a slash command, you can turn into a button - and because the window itself lives in a file rather than on a keybind or a power tray, it doesn't take up a keyboard key and isn't limited to the trays you currently have open.

3. The file and where it lives

  1. Find your install folder. Open the Homecoming Launcher, click the Settings gear (upper right), and look under "Install Location." It's typically C:\Games\Homecoming\.
  2. Create the folder data\customwindows\ inside your install folder, if it doesn't already exist.
  3. Save a plain-text file named custom.window in that folder - all lowercase, exactly. Any plain-text editor works: Notepad on Windows, TextEdit on a Mac. (The builder in Part 2 writes this file for you, correctly formatted, so you never have to type the format by hand.)

If you already have a correctly formatted file - which is exactly what the builder gives you - that's the whole job: the windows it defines are simply there, next time you're in game. Nothing to type, no command to run; see Part 2 for that path. What follows in this Part is the other path: building a window from scratch, by hand, in the game itself.

4. Creating one in game

This part is only for building a window from scratch, typing everything yourself. If you already have a working file - the builder makes you one - skip ahead to Part 2; its windows are simply there next time you're in game, with nothing to run.

  1. Type /custom_window "Name" in the chat box, using whatever name you want the window to have (see the worked example below for the naming rules). This creates the window - or, if custom.window already holds others, adds this one alongside them.
  2. A small box appears in the upper-left corner of your screen. Click it to open the window. Drag it anywhere on screen; drag an edge to resize it.

In play, it's the file's stored position that decides where a custom window opens each time you zone - and the game writes that position back as you drag the window, so what you last dragged it to is what gets stored (see the worked example below). Part 2's builder has a Screen layout panel for setting that position exactly, since that's the value that actually sticks.

5. Adding and editing buttons

6. A worked example

Here is a complete, working custom.window file with two buttons, both real exploration badges in Atlas Park:

Window Badges 0.3 0.3 200 300
→Button Freedom "thumbtack 126 171 -652"
→Button "Top Dog" "thumbtack 131 320 -320"
→Open 1
End

→ marks a single tab character, not spaces. Every line inside the window needs one - it's invisible in a text editor, but the game requires it. A button name with a space in it must be in quotes ("Top Dog"); a single word like Freedom does not need them. The four numbers after the window name are its position and size. Position is the window's top-left corner as a fraction of the screen - 0 0 is the top-left, and the maximum stops short of 1 by exactly the window's own size, so it can't hang off the edge (verified in game by dragging a window to each corner and reading the file). The game writes these back as you move the window, and the builder's Screen layout panel sets them the same way. Caveat from the same testing: on a multi-monitor setup - especially stacked screens - the game can compute these against the combined desktop, and windows drift or land oddly; on a single screen they behave exactly as stored. And one format fact: comment lines are not supported in a custom window file - don't add notes-to-self.

The last line, Open 1, records whether the window stays open. With Open 0 the window stays closed until you open it yourself; with Open 1 - or no Open line at all - it opens automatically, and re-opens every time you change zones. Open a closed window with the small box that appears in the upper-left corner of your screen, or type /custom_window_toggle "Name".

Save that as custom.window (all lowercase) in data\customwindows\, then type /custom_window "Badges" in game.

7. What can go wrong

A malformed file gets silently thrown away. The danger isn't a badly formatted custom.window just sitting on disk - it's running /custom_window against one. If the file isn't formatted exactly right at that moment, the game doesn't warn you: it quietly overwrites the file with a fresh, empty template, and everything that was in it is gone. That's not a one-time risk, either - adding a second window means running /custom_window again, so if you've hand-edited the file since it last worked, that's the exact moment you're exposed. No error, no confirmation, no undo.

A window shows only nine buttons - the rest are silently dropped from view. The file still holds everything you put in it, but in game a custom window stops displaying past the ninth button; anything beyond that is there, just invisible, with no error and no warning. The Open line isn't a button - it doesn't count toward those nine at all. This is why a large set of buttons is usually split across several Window blocks in the same file instead of one long one, each staying under the limit - each block is its own window, created and opened independently.

Hand-typed coordinates can silently land in the wrong place. The safe form is space-separated, with plain keyboard hyphens - exactly what the wiki's Copy link produces on any location page. A coordinate written in a more human-readable form instead - commas, parentheses, or a typographic minus sign "−" copied from formatted text in place of the keyboard "-" - can still fire the button with no error, while the marker lands somewhere else entirely.

Safe (the wiki's Copy link always produces this):
Button "Greek Philosopher" "thumbtack 469.7 -205.0 2713.8"

Avoid typing it this way:
Button "Greek Philosopher" "thumbtack 469.7 −205.0 2713.8"

Use the Copy link rather than retyping coordinates yourself, and if you do type them by hand, use the hyphen key for negative numbers rather than pasting from something that formats it as "−".

Custom windows are unsupported. This isn't a documented, official feature - Homecoming has never published how it works, and nothing stops a future update from changing or breaking it without notice. It works today; there's no promise it keeps working forever.

Part 2 - Letting the builder do it

8. Let the builder do it

Pick from real catalogs of exploration badges, history plaques, giant monster targets, Long Range Teleporter unlocks (one badge per zone), the Labyrinth of Fog's six monuments (visiting all six unlocks the Labyrinth's Core), every zone's trainer in a single list, or one zone's own trainers, contacts, brokers and more, and download the correctly formatted custom.window file the builder generates. Long Range Teleporter unlocks picks one exploration badge in each of the 38 zones the Long Range Teleporter can reach - in a zone it can reach, collecting any exploration badge there unlocks it as a destination, which is why that catalog covers 38 zones and not all 80 zones that have exploration badges - and labels each button with the zone name. Put it in data\customwindows\ inside your install folder (see above if you haven't made that folder yet) - and the windows it defines are simply there next time you're in game. No /custom_window to type, nothing else to set up. One thing no catalog here can know: every thumbtack targets a spot in a specific zone, so click an entry for the zone you're actually in.

If your selection needs more than nine buttons, the builder splits it into several numbered windows automatically - Badges 1, Badges 2, and so on - each one a separate window in the same file, all present as soon as you drop the file in. That also sidesteps the format and coordinate hazards above: the file the builder writes is always correctly formatted, and it never types a coordinate by hand.

The builder writes Open 0 on every window it generates, so your new windows don't pop open on every zone change - open them when you want them, or check "Start open" below the catalog if you'd rather they open right away.

Open the custom window builder →

Or start from a file you already have

The builder can also load a custom.window file you already have - pick it or drag it onto the page - and it shows every window inside it, each with its buttons. Nothing is uploaded: the file is read entirely in your browser and never sent anywhere, which matters because a custom window can hold a supergroup base passcode in a base-teleport button.

From there it's a real editor. You can rename or delete a window, rename or delete individual buttons, and edit a button's command - the builder checks every command you type against the game's own command list and flags anything the game won't recognize, so a typo can't become a button that silently does nothing. You can also drag buttons between windows to re-arrange things into an order that makes sense to you. You don't need a loaded file to start, either - you can also create a custom window from scratch and add buttons by hand, and every command you type is checked against the game's command list the same way. Adding a catalog selection - badges, plaques, monsters, zone unlocks, the Labyrinth Core unlock, trainers by zone, or a single zone's own locations, same as above - drops the new windows into the same editor, so you can re-arrange them alongside what you loaded. If any window ends up holding more than nine buttons - loaded that way, or dragged there - the builder warns you on the spot, naming the window and how many it has, so you can see which of your buttons would be invisible in game - it only warns, it never rewrites anything for you. Anything you don't touch comes back exactly as it was - buttons, commands, positions and sizes, and the file's own blank lines, spacing and quoting too, byte for byte. Only a line you actually edit is rewritten, in the builder's own formatting. A Screen layout panel shows every window as a small box on a scaled screen, sized and placed to match its stored position - drag one to move it, or type exact numbers into its window's own X/Y fields, and the file updates to match. Download the result the same way as above.

Or make it a popmenu instead

A popmenu works differently from a custom window: instead of a panel sitting on screen, it's a menu that pops up right at your cursor - and only when you ask for it. Nothing about it persists or reopens on its own, so it sidesteps the zone-change hazard above entirely: there's no Open setting to get right, because nothing opens by itself in the first place. It also has no nine-button limit - a big selection nests into submenus instead of getting split across several windows.

Switch the builder to Popmenu file and it writes a .mnu file from the same catalog selection. Save it in data\texts\English\Menus\ inside your install folder (create that folder first if it doesn't already exist - same idea as data\customwindows\ above). Then type /popmenu MenuName to open it. A popmenu never stays on screen - it appears only when invoked, every time - so give yourself a one-click way to call it: a tray macro (/macro Label "popmenu MenuName"), or a button in a custom window (Button "Zones" "popmenu MenuName"). The two features pair well: a small custom window of popmenu buttons is a persistent launcher for menus that aren't - and the builder can make that launcher for you: back on the custom window side, pick your own .mnu files and it adds one button per menu, reading the name each menu is actually invoked by from inside the file rather than the filename (the wiki is explicit those don't have to match). One catch: the game only reads menu files when it starts - if the client is running when you save the file (or change it later), exit completely and restart before the menu shows up.

Open the builder →

A fan-made tool. Not affiliated with NCSOFT or the Homecoming team. City of Heroes and related marks belong to their owners.