THX brother!
i'v did it on myself!
i will post my source! a hug brothers!

buttt.... my problem now is select an NPC with mouse =( anyone can help with this?!
Unit Principal:
Code:
{
 ****************************************************************
 *                  BASE para um RPG tipo tibia                 *
 *           Criado por: Mauricio Barros Scotton[SpykE].        *
 *         Todos os direitos reservados a SpykeSoft 2006        *
 *              Por Favor, mantenha os cr?İditos                 *
 ****************************************************************
}
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Menus, DXClass, DXSprite, DXInput, DXDraws,
  DXSounds;

type
  //TILE pack rec. para os items existentes no mapa (?°rvores e etc...)
  TTile = Packed Record
    Textura: String;
    Bloqueado: Boolean;
  end;
  //ImageSprite para os items existentes no mapa (ligado a PACK REC.) (?°rvores e etc...)
  TLayerItems = class(TImageSprite)
  private
    FCounter: Double;
    FS: Integer;
    procedure Hit;
  public
    procedure DoMove(MoveCount: Integer); override;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    DXDraw: TDXDraw;
    DXTimer1: TDXTimer;
    DXSpriteEngine: TDXSpriteEngine;
    DXInput: TDXInput;
    DXImageList1: TDXImageList;
    MAPA: TDXImageList;
    OBJETOS: TDXImageList;
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure FormCreate(Sender: TObject);
    procedure DXDrawInitialize(Sender: TObject);
    procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    FMoveMode: Boolean;
    MouseX, MouseY : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  lcnam:string;
  ItmXMax:integer=7;
  ItmYMax:integer=8;
  posx,posy:double;
  mapsizex,mapsizey:integer;
//========================================================================
//====//                Declara?ß?µes dos mapas                     //======
//========================================================================

  Mapa_ITEM: Array[0..17, 0..17] of TTile;
  //ch?£o
  Mapa_CHAO: Array[0..17, 0..17] of INTEGER =(
       (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0),
       (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  );

implementation

Uses
  Unit_basics;

{$R *.dfm}
//========================================================================
//====//                Tipos dos objetos utilizados              //======
//========================================================================
type
  TPlayer = class(TImageSprite)
  protected
    procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
    procedure DoMove(MoveCount: Integer); override;
  end;
//========================================================================
//====//    Procedimentos do startamento de sprites ->delphiX     //======
//========================================================================

procedure TLayerItems.Hit;
begin
  //procedimento para dar hit em um objeto que sofreu a colis?£o
end;
procedure TPlayer.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if Sprite is TLayerItems then begin
    //fazer algo ap??s detectar colis?£o
  end;
  Done := true;
end;
procedure TLayerItems.DoMove(MoveCount: Integer);
begin
  inherited DoMove(MoveCount);
  PixelCheck := True;
  FCounter := FCounter + (100/1000)*MoveCount;

  if not Collisioned then
  begin
    Inc(FS, MoveCount);
    if FS>200 then Dead;
  end;
end;
procedure TPlayer.DoMove(MoveCount: Integer);
var
  sprite: Tsprite;
  NX,NY:integer;
begin
  inherited DoMove(MoveCount);

  Collision;

  if &#40;Form1.DXInput.Joystick.X<>0&#41; or &#40;Form1.DXInput.Joystick.Y<0>=0&#41; and &#40;ny>=0&#41; and &#40;nx<=mapsizex&#41; and &#40;ny<mapsizey>=0&#41; and &#40;ny>=0&#41; and &#40;nx<=mapsizex&#41; and &#40;ny<mapsizey>=0&#41; and &#40;ny>=0&#41; and &#40;nx<=mapsizex&#41; and &#40;ny<mapsizey>=0&#41; and &#40;ny>=0&#41; and &#40;nx<=mapsizex&#41; and &#40;ny<=mapsizey&#41; and &#40;CheckTile&#40;nx,ny&#41; = false&#41; then
        X &#58;= X + 32;
    end;
  end;
  PixelCheck&#58;=True;
  Engine.X &#58;= -X+Engine.Width div 2-Width div 2;
  Engine.Y &#58;= -Y+Engine.Height div 2-Height div 2;
  posx&#58;=x;
  posy&#58;=y;
end;

//========================================================================
//====//                Procedimentos do delphi                   //======
//========================================================================
procedure TForm1.DXTimer1Timer&#40;Sender&#58; TObject; LagCount&#58; Integer&#41;;
begin

  if not DXDraw.CanDraw then exit;
  DXInput.Update;
  if FMoveMode then
    LagCount &#58;= 1000 div 60;
  DXSpriteEngine.Move&#40;LagCount&#41;;
  DXSpriteEngine.Dead;
  DXDraw.Surface.Fill&#40;0&#41;;
  DXSpriteEngine.Draw;
  //coloca o cursor
  DXImageList1.Items&#91;0&#93;.Draw&#40; DXDraw.Surface, MouseX, MouseY, 0 &#41;;
  //impres?£o dos textos
  DysplayText&#40;'FPS&#58; '+inttostr&#40;DXTimer1.FrameRate&#41;, BSClear, clWhite, 10, 0, 0&#41;;
  DysplayText&#40;'Sprite&#58; '+inttostr&#40;DXSpriteEngine.Engine.AllCount&#41;, BSClear, clWhite, 10, 0, 15&#41;;
  DysplayText&#40;'Draw&#58; '+inttostr&#40;DXSpriteEngine.Engine.DrawCount&#41;, BSClear, clWhite, 10, 0, 30&#41;;
  DysplayText&#40;'X&#58;'+floattostr&#40;posx/32&#41;+'&#91;'+floattostr&#40;posx&#41;+'&#93;'+', Y&#58;'+floattostr&#40;posy/32&#41;+'&#91;'+floattostr&#40;posy&#41;+'&#93;', BSClear, clWhite, 10, 0, 60&#41;;
  if FMoveMode then
    DysplayText&#40;'Time mode&#58; 60 FPS', BSClear, clWhite, 10, 0, 45&#41;
  else
    DysplayText&#40;'Time mode&#58; Real time', BSClear, clWhite, 10, 0, 45&#41;;
  //flip =D
  DXDraw.Flip;
end;

procedure TForm1.FormCreate&#40;Sender&#58; TObject&#41;;
var
   PlayerSPR&#58; TSprite;
   i1,i2&#58;integer;
begin
  mapsizex&#58;=17;
  mapsizey&#58;=17;
  DXDraw.cursor&#58;=crNone;
  //LoadOneLayer&#40;123456789,i1,i2,50,true&#41;;

  lcnam&#58;=extractfilepath&#40;application.ExeName&#41;;
  //randomiza os objetos
  Mapa_ITEM&#91;1,1&#93;.Textura&#58;='2';
  Mapa_ITEM&#91;1,1&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;16,1&#93;.Textura&#58;='2';
  Mapa_ITEM&#91;16,1&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;1,16&#93;.Textura&#58;='2';
  Mapa_ITEM&#91;1,16&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;16,16&#93;.Textura&#58;='2';
  Mapa_ITEM&#91;16,16&#93;.Bloqueado&#58;=true;

 &#123; Mapa_ITEM&#91;1,2&#93;.Textura&#58;='pilar1';
  Mapa_ITEM&#91;1,2&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;1,3&#93;.Textura&#58;='pilar2';
  Mapa_ITEM&#91;1,3&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;1,4&#93;.Textura&#58;='pilar3';
  Mapa_ITEM&#91;1,4&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;2,2&#93;.Textura&#58;='pilar1';
  Mapa_ITEM&#91;2,2&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;2,3&#93;.Textura&#58;='pilar2';
  Mapa_ITEM&#91;2,3&#93;.Bloqueado&#58;=true;
  Mapa_ITEM&#91;2,4&#93;.Textura&#58;='pilar3';
  Mapa_ITEM&#91;2,4&#93;.Bloqueado&#58;=true;   &#125;
 &#123; for i1&#58;=0 to 7 do begin
    for i2&#58;=0 to 8 do begin
      randomize;
      Mapa_ITEM&#91;i1,i2&#93;.Textura&#58;=random&#40;2&#41;;
      if Mapa_ITEM&#91;i1,i2&#93;.Textura = 1 then
        Mapa_ITEM&#91;i1,i2&#93;.Bloqueado&#58;=true;
    end;
  end;   &#125;
  //load no ch?£o
  for i1&#58;=0 to 17 do begin
    for i2&#58;=0 to 17 do begin
      LoadOneLayer&#40;inttostr&#40;Mapa_CHAO&#91;i1,i2&#93;&#41;,i1,i2,-3,false&#41;
    end;
  end;
  //load nos itens do ch?£o &#40;?°rvores e etc...&#41;
  for i1&#58;=0 to 17 do begin
    for i2&#58;=0 to 17 do begin
      if &#40;Mapa_ITEM&#91;i1,i2&#93;.Textura <> '0'&#41;and &#40;Mapa_ITEM&#91;i1,i2&#93;.Textura <> ''&#41; then begin
        LoadOneLayer&#40;Mapa_ITEM&#91;i1,i2&#93;.Textura,i1,i2,-2,true&#41;;
        LoadOneLayer&#40;'Colisor',i1,i2,-1,true&#41;;
      end;
    end;
  end;
  //abre o jogador
  PlayerSPR&#58;= TPlayer.Create&#40;DXSpriteEngine.Engine&#41;;
  with TPlayer&#40;PlayerSPR&#41; do
  begin
    Image &#58;= DXImageList1.Items.Find&#40;'player_down'&#41;;
    Height&#58;= 48; Width &#58;= 32;
    Visible&#58;=true;
    X &#58;= 0;
    Y &#58;= 0;
    Z &#58;= 2;
  end;
end;

procedure TForm1.DXDrawInitialize&#40;Sender&#58; TObject&#41;;
begin
  DXTimer1.Enabled &#58;= True;
end;

procedure TForm1.DXDrawMouseMove&#40;Sender&#58; TObject; Shift&#58; TShiftState; X,
  Y&#58; Integer&#41;;
begin
  MouseX &#58;= X;
  MouseY &#58;= Y;
end;

end.
Unit de Fun?ß?µes
Code:
&#123; 
 **************************************************************** 
 *                  BASE para um RPG tipo tibia                 * 
 *           Criado por&#58; Mauricio Barros Scotton&#91;SpykE&#93;.        * 
 *         Todos os direitos reservados a SpykeSoft 2006        * 
 *              Por Favor, mantenha os cr?İditos                 * 
 **************************************************************** 
&#125; 
unit Unit_basics;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, DXSprite, DXClass, DXInput, StdCtrls, Buttons, ExtCtrls;

  //da um load em apenas um SQM
  Procedure LoadOneLayer&#40;tilename&#58;string;Xx,Yy,Zz&#58;integer;item&#58;boolean&#41;;
  //imprime um texto na tela
  Procedure DysplayText&#40;Texto&#58;String; Estilo&#58;TBrushStyle; Cor&#58;Tcolor; Tamanho,X,Y&#58;Integer&#41;;
  //Checa um TILE no pac rec, e devolve se ele ?İ bloqueado ou n?£o;
  Function CheckTile&#40;X,Y&#58;integer&#41;&#58;boolean;

  //========================================================================
implementation
  //========================================================================
Uses
   Unit1;
  //========================================================================
Function CheckTile&#40;X,Y&#58;integer&#41;&#58;boolean;
Begin
  result&#58;= Mapa_ITEM&#91;X,Y&#93;.Bloqueado;
end;
Procedure DysplayText&#40;Texto&#58;String; Estilo&#58;TBrushStyle; Cor&#58;Tcolor; Tamanho,X,Y&#58;Integer&#41;;
Begin
  with Form1.DXDraw.Surface.Canvas do begin
    Brush.Style &#58;= Estilo;
    Font.Color &#58;= cor;
    Font.Size &#58;= tamanho;
    Textout&#40;X, Y, Texto&#41;;
    Release;
  end;
end;

Procedure LoadOneLayer&#40;tilename&#58;string;Xx,Yy,Zz&#58;integer;item&#58;boolean&#41;;
begin
  if item = false then begin
    with TBackgroundSprite.Create&#40;Form1.DXSpriteEngine.Engine&#41; do begin
      SetMapSize&#40;1,1&#41;;
      Image &#58;=Form1.MAPA.Items.find&#40;tilename&#41;;
      Height&#58;= 32; Width &#58;= 32;
      Visible&#58;=true;
      X &#58;= Xx*32;
      Y &#58;= Yy*32;
      Z &#58;= Zz;
    end;
  end
  else
  if item then begin
    with TLayerItems.Create&#40;Form1.DXSpriteEngine.Engine&#41; do begin
      Image &#58;=Form1.OBJETOS.Items.find&#40;tilename&#41;;
      Height&#58;= 32; Width &#58;= 32;
      Visible&#58;=true;
      X &#58;= Xx*32;
      Y &#58;= Yy*32;
      Z &#58;= Zz;
    end;
  end
end;

end.
-------------------------
Some screens