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.
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:
- A button that drops a marker on the map for a badge you're hunting, so you can see exactly how far away it is instead of guessing.
- A button that takes you straight into your base.
- A button that targets a giant monster by name, so you're not hunting for it by clicking through a crowded fight to find it.
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
- 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\. - Create the folder
data\customwindows\inside your install folder, if it doesn't already exist. - Save a plain-text file named
custom.windowin 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.
- 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, ifcustom.windowalready holds others, adds this one alongside them. - 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
- Add a button by dragging any macro from a power tray straight into the open custom window - it becomes a button automatically, carrying that macro's commands.
- Right-click a button to edit its name, edit its commands, or delete it.
- Remove a button the other way too - drag it out of the window and back onto a power tray, and it turns back into an ordinary macro.
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.
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.
A fan-made tool. Not affiliated with NCSOFT or the Homecoming team. City of Heroes and related marks belong to their owners.