Try running this (you'll have to have reflection set up):
program DebugNPCs;
{.include srl/srl/misc/smart.scar}
{.include srl/srl.scar}
{.include srl/srl/reflection/reflection.scar}
var
i:integer;
NPCs:array of TNPC;
Peoples: array of TPlayer;
s:string;
p:TPoint;
begin
SetupSRL;
SetupReflection;
SmartSetup('world55', True, False, False);
sleep(10000);
while true do
repeat
try
ClearDebug;
NPCs := SortNPCs(GetNPCs);
p := GetMyPos;
writeln('Tile ('+inttostr(p.x)+', '+inttostr(p.y)+')');
writeln('MS ('+inttostr(TileToMS(p,20).x)+', '+inttostr(TileToMS(p,20).y)+')');
Writeln('NPCs on screen: '+inttostr(GetArrayLength(NPCs)));
for i := 0 to High(NPCs) do
begin
s := padr(NPCs[i].Name,20);
s := s + ' ID: '+padr(inttostr(NPCs[i].NPCType),7);
s := s + ' ('+inttostr(NPCs[i].Tile.X)+', '+inttostr(NPCs[i].Tile.Y)+')';
s := s + ' In Fight: '+BoolToStr(NPCs[i].InFight);
s := s + ' Is Moving: '+BoolToStr(NPCs[i].IsMoving);
Writeln(s);
end;
Peoples := GetPlayers;
for i := 0 to High(Peoples) do
begin
s := padr(Peoples[i].Name,15);
s := s + ' ('+inttostr(Peoples[i].Tile.X)+', '+inttostr(Peoples[i].Tile.Y)+')';
s := s + ' Level: '+Padr(IntToStr(Peoples[i].Level),2);
s := s + ' Is Moving: '+Padr(BoolToStr(Peoples[i].Speed > 0),5);;
s := s + ' HP%: '+Padr(IntToStr(Peoples[i].HPRatio),3);
Writeln(s);
end;
sleep(1500);
except
writeln('oh noes!')
sleep(1500);
end;
until False;
end.
If it says something like unknown identifier X or MS, then update your reflection subversion, the whole thing has been TPointererized
SMART simply makes SCAR not use up your mouse so you can do other things on your computer, and it has Reflection (which lets it read variables such as NPC positions) which is being maintained by various SRL Members.