Software/Medium: Javascript, Overwolf SDK
Genre/Platform: Utility app, PC
Project Type: Independent (solo)

IdentiDye is a dye identifier tool for Guild Wars 2. Affectionately dubbed ‘Fashion Wars 2’, the game has a large population of players who spend their time and resources on character appearance, and the library of over 500 dyes play a major part. However, there is currently no way to identify a dye worn by another player, and all color-matching to weapons or other fixed-color items must be done by eye. This, in combination with the popularity of sites such as and /r/GuildWarsDyeJob, makes it clear that a dye identification tool is a welcome addition.


The overlay tool, powered by Overwolf, works by taking samples of the other player’s armor and adjusting (calibrating) these samples based on a known entity: your own dye scheme. It then identifies the closest dye colors from the existing in-game options.

However, the samples will be affected by dynamic lighting effects in the game world; certain areas have tinted lighting, and the day-night cycle means that ambient light is always changing. Simply matching the sample as-is will result in a skewed estimation of the true dye color and an inaccurate identification. The solution? Identify the ambient lighting effects and negate them before selecting the closest color match.

Example Walkthrough

The app, docked while not in use, follows a simple process. The user first stands near the target player (for similar lighting conditions) and takes eyedropper samples from their own character. The user can take as many samples as they like, e.g. at high points and low points of an armor piece, which are averaged for a better representation of the color.

The user then selects the known dye color they are wearing from a dropdown. They also select the material that they are sampling (cloth, leather, or metal), as dyes behave differently on each material; the GW2 API provides color data for each dye on each material. The ‘true’ (not affected by lighting) color of that dye is displayed next to the sample. At this stage, the app calculates the difference between the sampled and true color (i.e. the current in-game lighting effect), and determines a formula to adjust the sample backwards to negate that lighting.

Next, the user does a similar sampling process on the other player’s armor that they wish to identify. Once an average sample is found, the app applies the previously calculated formula to that sample to get a closer representation of its true color. Finally, the ‘calibrated’ player dye color is compared to the full list of dye colors, and the app presents the top three closest dyes to the player.

This app isn’t restricted to other players’ dye colors; it works for determining the closest dye color to any sample. Perhaps the user wants to color-match an undyeable weapon in their inventory or theme their armor after a section of the game world; they simply skip the ‘gathering user’ step and the ‘player’ samples are unaffected.

My Role

This was a solo project. I came up with the concept, designed the UI to match the in-game style, and programmed the full app including front-end and back-end logic.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s