Counter-Strike 1.6 modding workspace with HL TagConverter on the monitor

How to Make a Custom Spray in CS 1.6: Color and Transparent

HL TagConverter, Wally or the game itself - plus why sprays turn gray and how to fix it

Counter-Strike 1.6 has always been more than just aim and reflexes - it's about personality. One of the most famous ways players express that personality is through a custom spray in CS 1.6. Every true player remembers the pride of tagging their logo on a wall after a clutch round. That little spray - your name, clan tag, or funny meme - became your signature on the server.

In this guide, I'll go through every reliable way to create a custom spray in Counter-Strike 1.6 - using HL TagConverter, Wally, and the classic BMP import built into the game. You'll learn how sprays actually work inside the engine, how to prepare your image, convert it to 8-bit / 256 colors, handle transparency correctly, and get a spray that appears bright and clean instead of that one-color gray mess everyone has seen at least once.

CS 1.6 Spray Requirements and Format

Before creating a custom spray in Counter-Strike 1.6, it's important to understand how the game handles them. Sprays in CS 1.6 aren't regular images - they're small 8-bit textures that the engine loads from a special file called tempdecal.wad in your cstrike folder. When you join a server, the game uploads this file, and the server passes it on to other players.

I went through the engine code (ReHLDS, the open reconstruction of the original engine) to see what it actually checks. Here's what a working spray needs:

File
tempdecal.wad in WAD3 format (Half-Life texture package) with exactly one texture inside. Two or more textures - and the game falls back to a default spray.
Colors
8-bit indexed image, 256 colors at most. No 24-bit, no PNG transparency.
The last color
The 256th color of the palette (index 255) decides everything. If it's pure blue RGB(0,0,255) , you get a full-color spray, and every pixel painted with that blue becomes transparent. If it's anything else, the engine treats the spray as a one-color stencil - that's where the gray sprays come from.
Size
The engine accepts up to 256 px per side, but the classic, safe sizes stay around 12,000-14,000 pixels in total: 64×64, 96×96, 128×80, 112×96, 112×112. Keep both sides divisible by 16 - that's what every tool expects.

There are two kinds of sprays in the game, and it helps to know which one you're making:

  • Color spray - up to 255 colors plus one transparent. Made with HL TagConverter or Wally. This is what you want for logos, memes and photos.
  • One-color spray - the picture's brightness becomes transparency, and the whole spray is painted in one color. This is what the game's own BMP import makes.

How to Make a Color Spray with HL TagConverter

If you want the fastest and most reliable way to create your own custom spray for Counter-Strike 1.6, HL TagConverter is the classic tool that does everything automatically. It accepts almost any image format - PNG, JPG, or BMP - and converts it into the proper 8-bit format used by the game, with the palette set up right. Unlike other methods, HL TagConverter builds a colorful, fully working spray without any manual preparation.

You can download it from my Counter-Strike 1.6 Tools page or with the button below. The program is a single executable file (.exe) and doesn't require installation - just run it and start creating.

Download HL TagConverter

HL TagConverter - Step 1: Open Image window before loading spray file
HL TagConverter Step 1 - Open Image
HL TagConverter - Image loaded, ready for adjustment
HL TagConverter Step 2 - Adjust Image
  1. Open HL TagConverter.
  2. Click "1. Open Image" and choose any picture - your logo, meme, clan tag, or artwork.
  3. Click " 2. Adjust Image ". The program automatically sets the optimal size ( 96×96 , 128×80 , or 112×96 px ). You can tweak it manually - just keep the total area around 12,288 px , the program's own limit. You can also set a transparent background and then press " Apply changes and convert to 256 colors ".
HL TagConverter - Apply changes and convert to 256 colors
HL TagConverter Step 3 - Resize and Convert to 256 Colors
HL TagConverter - Save Tag to MOD or WAD file
HL TagConverter Step 4 - Save Tag as tempdecal WAD
  1. Click "3. Save Tag" → choose "Export to WAD file". Name it tempdecal.wad and save it.
  2. Copy (or replace) this file in your Counter-Strike 1.6 directory: ...\Half-Life\cstrike\
Custom spray displayed on a wall in Counter-Strike 1.6 using HL TagConverter
Custom Counter-Strike 1.6 Spray In-Game

You now have a colorful, ready-to-use spray that always works - even if you didn't prepare the image manually. HL TagConverter handles everything - size, palette, and transparency - making it the best starting point for quick, high-quality results.

How to Make a CS 1.6 Spray with Wally (Manual WAD Editing)

One of the most powerful tools for GoldSrc-based games is Wally. It's a texture editor for WAD files - archives that store textures and interface elements. Originally made for Half-Life modding, it also works perfectly for creating sprays in Counter-Strike 1.6.

Unlike HL TagConverter, Wally doesn't prepare the image for you - it needs a ready 8-bit (256-color) BMP with the right palette. That's the part most guides skip, and it's the reason so many hand-made sprays come out gray.

Prepare the BMP in GIMP

  1. Resize the picture to one of the safe sizes, for example 96×96 or 112×112 (Image → Scale Image).
  2. Paint the background you want transparent with pure blue RGB(0,0,255). If you don't need transparency, just make sure the picture itself has no pure blue.
  3. Convert to 256 colors: Image → Mode → Indexed, "Generate optimum palette", 256 colors.
  4. Move the blue to the very end of the palette: Colors → Map → Rearrange Colormap , drag the blue swatch to the last place. If your picture has fewer than 256 colors, add colors until the blue is number 256.
  5. Export as BMP: File → Export As → spray.bmp.

Build tempdecal.wad in Wally

Creating a new Half-Life texture package in Wally for a Counter-Strike 1.6 custom spray
Wally - Create a New Half-Life Texture Package (.wad)
Custom image imported into Wally texture list for Counter-Strike 1.6 spray creation
Wally - Importing a Custom Image into WAD Texture
  1. Open Wally, go to File → New, and choose "Half-Life Package (wad3) (.wad)", then click OK.
  2. You'll see an empty window titled Untitled1.
  3. Drag and drop your prepared 8-bit BMP image into that window. Only one texture - the game rejects a WAD with two or more.
  4. Go to File → Save As... and name the file tempdecal.wad.
  5. Save it in your CS 1.6 directory: ...\Half-Life\cstrike\.
Saving tempdecal.wad file in Wally for Counter-Strike 1.6 custom spray
Wally - Save Texture as tempdecal.wad

Launch the game - your custom spray will now be ready to use.

Importing a Spray Using the Classic BMP Method

This is the old-school method built right into Counter-Strike 1.6 - no external tools, no converters, just the game itself. The engine can take a BMP from the logos folder and build tempdecal.wad from it when you pick it in the options.

The catch: this method always makes a one-color spray. The game uses the picture's brightness as transparency and paints the whole thing in a single color - that's how the default sprays are made. So it's great for a simple logo or a text tag, but not for a colorful picture.

How to Import a BMP Spray

  1. Create or prepare a small 8-bit (256-color) BMP image - recommended size 64×64 px. Simple, high-contrast pictures work best here.
  2. Place the file in this folder: ...\Half-Life\valve\logos\
  3. Launch Counter-Strike 1.6.
  4. Open Options → Multiplayer → Spraypaint Image.
  5. Select your BMP file and click OK. The game will convert and save it as tempdecal.wad.
Default Counter-Strike 1.6 spray logos folder showing BMP files in valve/logos directory
Default CS 1.6 Spray Logos Folder
Default Big Sale spray used in Counter-Strike 1.6 on a wall in-game
CS 1.6 Default Spray Example - 'BIG SALE' Logo

Your spray will now appear in-game without any external software. One thing to keep in mind: every time you press OK in the Multiplayer options, the game rebuilds tempdecal.wad from the picture selected there - and overwrites a color spray you made with TagConverter or Wally. More on that below.

How to Use Your Spray in CS 1.6

The default spray key is T. Look at a wall and press it. If you lost the bind, put it back in the console or in userconfig.cfg:

bind "t" "impulse 201"

You can spray once every 30 seconds by default - that's the server cvar decalfrequency, and some servers change it.

For other players to see your spray, both sides need to allow it:

  • You: cl_allowupload 1 - sends your spray to the server. cl_allowdownload 1 - lets you see other players' sprays.
  • Server: sv_allowupload 1 and sv_send_logos 1 . If the admin turned them off, nobody sees custom sprays there - that's the server's choice, not a problem with your file. On ReHLDS servers the admin can also limit sprays to 64×64 with sv_rehlds_allow_large_sprays 0 .

To keep the game from replacing your spray, set tempdecal.wad to Read-only once it's working: right-click the file → Properties → check Read-only. Then the game can't rebuild it when you click OK in the Multiplayer options.

The sprays you've seen on servers are stored in custom.hpk in the cstrike folder. Over time it grows; you can safely delete it - the game makes a new one.

CS 1.6 Spray Not Working: Causes and Fixes

Symptom Cause Fix
Spray is gray or one color The last palette color isn't pure blue, or the spray was made by the game's BMP import Make it with HL TagConverter, or put RGB(0,0,255) at the end of the palette in GIMP
Default spray instead of yours Broken WAD: more than one texture, wrong format, side over 256 px. The console shows "Bad cached wad" Rebuild the file with one texture in a safe size
Your spray is replaced after a restart You pressed OK in the Multiplayer options, and the game rebuilt tempdecal.wad Put your file back and set it to Read-only
Works on one server, not on another The server blocks uploads or limits spray size Nothing to fix on your side, try a 64×64 version
Nobody sees your spray cl_allowupload 0 on your side cl_allowupload 1
Background isn't transparent The background isn't the last palette color, or it isn't exactly pure blue Repaint it with RGB(0,0,255) and move that color to the end of the palette
Nothing happens on T The bind is gone or the 30 s timer hasn't run out bind "t" "impulse 201" and wait

Conclusion

Creating a custom spray in Counter-Strike 1.6 is one of those small but iconic details that make the game personal. Whether it's your clan logo, a meme, or just your nickname, the right spray gives every round a little extra identity. I always uploaded something funny =)

The simplest and most effective way to make one is still HL TagConverter. It takes any image - PNG, JPG, or BMP - and automatically builds a bright, colorful spray ready for action. No complex setup, no palette headaches, no gray surprises. Just pick your picture, convert, and play. And if you build it by hand, remember the one rule that matters: pure blue as the last palette color.

If you enjoy going deeper into modding and customizing your Counter-Strike 1.6 experience, check out my Counter-Strike 1.6 Tools page. There you'll find essential utilities used by both beginners and experienced modders:

  • Half-Life MDL Decompiler - lets you unpack and edit player or weapon models.
  • Half-Life Sprite Viewer - used to preview and inspect .spr files such as muzzle flashes, HUD icons, or crosshairs.
  • Half-Life Sprite Wizard - helps you create or convert your own animated sprites for maps or effects.
  • Half-Life Model Viewer - the go-to tool for examining 3D models in detail, including textures and hitboxes.
  • Valve Hammer Editor - the legendary map editor for creating custom levels and environments.

Each of these tools opens another layer of what makes CS 1.6 truly timeless - the ability to shape the game however you like. So start small with your own spray, explore the modding tools, and see just how much you can create inside the world of Counter-Strike 1.6.

CS 1.6 Custom Spray FAQ

Why does my spray appear black and white in CS 1.6?

Either it was made through the game's own BMP import (that one is always single-color), or the last color of its palette isn't pure blue RGB(0,0,255) - then the engine treats it as a one-color stencil. Build it with HL TagConverter, or fix the palette in GIMP and rebuild it in Wally.

What is the correct file path for my spray?

Your spray must be placed in:

...\Half-Life\cstrike\tempdecal.wad

That's the file the game loads and sends to servers.

Can I use JPG or PNG images?

Yes. HL TagConverter accepts any common image format (JPG, PNG, BMP) and converts it automatically to the correct 8-bit format. Wally needs an 8-bit BMP.

How do I make the background transparent?

Paint the background with pure blue RGB(0,0,255) and make it the last (256th) color of the palette - or just set the transparent color in HL TagConverter. Partial transparency or soft edges aren't supported in a color spray.

What's the maximum spray size in CS 1.6?

The engine accepts up to 256 px per side, but the safe sizes are 64×64 to 112×112 - around 12,000-14,000 pixels. Bigger sprays may not show on some servers and old clients.

The default spray appears instead of my custom one on some servers. Why?

That's normal - many servers intentionally block custom sprays for moderation reasons. Some players used to upload inappropriate or offensive images, so server admins often disable uploads entirely. In such cases, there's nothing wrong with your setup.

How can I prevent my spray from resetting?

After you've set up your spray, go to the file properties of tempdecal.wad and mark it as Read-only. This stops the game from rebuilding it from the Multiplayer options.

Does this work on Steam and Non-Steam versions?

Yes - the same process applies to both. The only difference might be the installation folder path, but the spray system works identically.

More CS 1.6 Guides

Leave a Reply

Your email address will not be published. Required fields are marked *