diff --git a/src/p_enemy.c b/src/p_enemy.c
index d8e75f7f2fb48acd12706b7918dc54f757c8dd96..bfdd1b8de29cb12cfee49ad36c6b995b907a01e5 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -8954,8 +8954,8 @@ void A_ChangeColorAbsolute(mobj_t *actor)
 //
 // Description: Colorizes an object.
 //
-// var1 = if (var1 > 0), dye your target instead of yourself
-// var2 = if (var1 = 0), color value to dye
+// var1 = if (var1 != 0), dye your target instead of yourself
+// var2 = color value to dye
 //
 void A_Dye(mobj_t *actor)
 {
@@ -8968,6 +8968,9 @@ void A_Dye(mobj_t *actor)
 	mobj_t *target = ((locvar1 && actor->target) ? actor->target : actor);
 	UINT8 color = (UINT8)locvar2;
 	
+	if (color >= MAXTRANSLATIONS)
+		return;
+	
 	// What if it's a player?
 	if (target->player)
 	{
diff --git a/src/p_spec.c b/src/p_spec.c
index 8089896a79c8a2f608c4935f9e56629807f41cf4..c7558582af605fd89ad9119c9aa9afaef1eca62c 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -4061,7 +4061,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				
 				if (mo)
 				{
-					if (color < 0 || color > MAXSKINCOLORS)
+					if (color < 0 || color >= MAXTRANSLATIONS)
 						return;
 					
 					var1 = 0;