Tried it in Falador:

It got the bottom part of the exclamation mark (dungeon). (Maximised it so it can be seen clearly)
E: I used this Scar version:
program New;
{.Include SRL/SRL.Scar}
{.Include SRL/SRL/Misc/Debug.Scar}
{.Include SRL/SRL/Misc/Users.Scar}
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
CurrentPlayer := 0;
NumberOfPlayers(HowManyPlayers);
with Players[0] do
begin
Name := '';
Pass := '';
Nick := '';
Active := True;
end;
end;
// Used this with 230 255 0 10 0 10 to create function below
{procedure RGBRangeToCTS2ModMMTPAFinder(MinR, MaxR, MinG, MaxG, MinB, MaxB: integer);
var
H,S,L,MinH,MaxH,MinS,MaxS,MinL,MaxL,HMod,SMod: extended;
R,G,B,Tol,Color:integer;
begin
MinH:=200.0;
MinS:=200.0;
MinL:=200.0;
MaxH:=0.0;
MaxS:=0.0;
MaxL:=0.0;
for R := MinR to MaxR do
for G := MinG to MaxG do
for B := MinB to MaxB do
begin
RGBToHSL(R,G,B,H,S,L);
if H < MinH then MinH := H;
if S < MinS then MinS := S;
if L < MinL then MinL := L;
if H > MaxH then MaxH := H;
if S > MaxS then MaxS := S;
if L > MaxL then MaxL := L;
end;
H := (MinH+MaxH)/2.0;
if (MaxH-MinH)> 50 then
begin
MinH := MinH+100.0;
H := (MinH+MaxH)/2.0;
if H>100.0 then
H := H-100.0;
end;
S := (MinS+MaxS)/2.0;
L := (MinL+MaxL)/2.0;
Tol := round(MaxL-L);
HMod := round((MaxH-H)/Tol);
if MinH>MaxH then
begin
HMod := round((MinH-H)/Tol);
end;
SMod := round((MaxS-S)/Tol);
Color := HSLToColor(H,S,L);
writeln(FloatToStr(H)+' '+FloatToStr(MinH)+' '+FloatToStr(MaxH));
writeln(FloatToStr(S)+' '+FloatToStr(MinS)+' '+FloatToStr(MaxS));
writeln(FloatToStr(L)+' '+FloatToStr(MinL)+' '+FloatToStr(MaxL));
writeln(FloatToStr(HMod)+' '+FloatToStr(SMod)+' '+FloatToStr(Tol));
writeln('');
writeln('function FindCTSMod2Points: tpointarray;');
writeln('var');
writeln(' TolSpeed:integer;');
writeln(' HMod, SMod: extended;');
writeln('begin');
writeln(' TolSpeed := GetToleranceSpeed;');
writeln(' SetColorToleranceSpeed(2);');
writeln(' GetToleranceSpeed2Modifiers(HMod, SMod);');
writeln(' SetToleranceSpeed2Modifiers('+FloatToStr(HMod)+', '+FloatToStr(SMod)+');');
writeln(' FindColorsTolerance(result, '+IntToStr(Color)+', MMX1, MMY1, MMX2, MMY2, '+IntToStr(ToL)+');');
writeln(' SetToleranceSpeed2Modifiers(HMod, SMod);');
writeln(' SetColorToleranceSpeed(TolSpeed);');
writeln('end;');
end; }
// used above function, then increased HMod from 0 to 0.2 (probably a rounding issue in above function
// increaed tol to 20 from 6 (probably didnt gather enough colors to give above function big enough RGB ranges)
function FindRedPoints: tpointarray;
var
TolSpeed:integer;
HMod, SMod: extended;
begin
TolSpeed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
GetColorSpeed2Modifiers(HMod, SMod);
SetColorSpeed2Modifiers(0.2, 1.000000000000);
FindColorsTolerance(result, 394738, MMX1, MMY1, MMX2, MMY2, 20);
GetColorSpeed2Modifiers(HMod, SMod);
end;
function BGetDoorPoints: T2dpointarray;
var
i,i2:integer;
RedPoints: tpointarray;
begin
RedPoints:= FindRedPoints;
if length(RedPoints)=0 then
begin
writeln('FindRedPoints found no points');
exit;
end;
result := SplitTPA(RedPoints, 1); //split into groups if touching
repeat //check each group for length
if not (InRange(length(result[i]),3,10)) then //drop dots have less, dungeon arrows have more
begin
Setarraylength(result[i],length(result[high(result)])); //preparing to swap current tpa with last one
for i2:=0 to high(result[i]) do //copy all points from last one to current one
begin
result[i][i2] := result[high(result)][i2];
end;
setarraylength(result, high(result)); //delete last one
DecEx(i,1); //so that we check current one again
end;
IncEx(i,1);
until i=length(result);
end;
var Doors: t2dpointarray;
begin
SetupSRL;
DeclarePlayers;
LoginPlayer;
Doors:=BGetDoorPoints;
DebugATPA(Doors,'');
end.
It works very well :). Please note that this was hastily converted, so some of the code
might have been wrong.