Hi Wizard,

You're gonna kick yourself I'm afraid.

There doesn't appear to be any faults with the man moving code, except an additional begin/end around the loop (commented out in the code below).

[pascal]
// begin
if (MyMen.count>0) then
for loop:=MyMen.count-1 downto 0 do
begin
TMan(MyMen[loop]).DoMove(1);
end;
// end;

[/pascal]

Not that these make any difference, but they could confuse other stuff like syntax highlighters and such.

The problem actually stems from the creation. You have this code for creating the men.

[pascal]
Man:=TMan.create(30,-500,'man1',DXSpriteEngine1,DXImageList1);

[/pascal]

I've made the same mistake you've made plenty of times and spent hours hunting for 'bugs'. What you actually need to do is, instead of allocating the newly created sprite to a variable, just add it to your MyMen TList. Like so.

[pascal]
MyMen.add(TMan.create(30,-500,'man1',DXSpriteEngine1,DXImageList1));

[/pascal]

If you don't add them to the list, MyMen is empty when the code checks for man sprites and so they stay at their starting positions indefinitely :-)