program New; {.include SRL/SRL.scar} type TpointColor=record point:tpoint; color:integer; end; type PlayerDot=record Pixels:array of TpointColor; Point:tpoint; end; {******************************************************************************* function tPtArrayToStr(newTPoint: TPointarray): String; By: moparisthebest Description: Loads a TPointArray into a string. (Example String: '50,10 80,53 350,765 8560,1897 2348,346') *******************************************************************************} function tPtArrayToStr(newTPoint: TPointArray): string; var i, tPtLength: Integer; begin tPtLength := GetArrayLength(newTPoint); repeat Result := Result + IntToStr(newTPoint[i].x) + ',' + IntToStr(newTPoint[i].y); if (not (i = (tPtLength - 1))) then Result := Result + ' '; i := i + 1; until (i = tPtLength) end; function FindAllBitmapsIn(TheBmp,startx,starty,endx,endy:integer):array of tpoint; var tmpbool:boolean; AL:integer; curx,cury,tmpx,tmpy,height:integer; begin tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,starty,endx,endy); if tmpbool then begin curx:=startx; cury:=starty; /////auto height finder/////// tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,starty,endx,endy); height:=0; repeat height:=height+1; tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,startx,tmpy,endx,tmpy+height); until tmpbool; //writeln('height '+inttostr(height)); /////////// repeat tmpbool:=FindBitmapIn(TheBmp,tmpx,tmpy,curx,cury,endx,cury+height); if tmpbool then begin curx:=tmpx+1; AL:=getarraylength(result); setarraylength(result,AL+1); result[AL].x:=tmpx; result[AL].y:=tmpy; end; if not tmpbool then begin curx:=startx; cury:=cury+1; end; until cury=endy+1; end; end; function XYToTP(TheX,They:integer):Tpoint; begin result.x:=TheX; result.y:=They; end; procedure AddPlayerDotToPDA(locx,locy:integer; var ThePDA:array of PlayerDot); var AL:integer; TheTPCA:array of tpointcolor; begin AL:=0;//getarraylength(ThePDA); setarraylength(TheTPCA,AL+16); TheTPCA[AL].point:=xyToTP(locx+2,locy); TheTPCA[AL].color:=16711422; TheTPCA[AL+1].point:=xyToTP(locx+2,locy+1); TheTPCA[AL+1].color:=16711422; TheTPCA[AL+2].point:=xyToTP(locx+2,locy+2); TheTPCA[AL+2].color:=15527148; TheTPCA[AL+3].point:=xyToTP(locx+2,locy+3); TheTPCA[AL+3].color:=12961221; TheTPCA[AL+4].point:=xyToTP(locx+2,locy+4); TheTPCA[AL+4].color:=65536; TheTPCA[AL+5].point:=xyToTP(locx+1,locy); TheTPCA[AL+5].color:=16711422; TheTPCA[AL+6].point:=xyToTP(locx+1,locy+1); TheTPCA[AL+6].color:=16711422 TheTPCA[AL+7].point:=xyToTP(locx+1,locy+2); TheTPCA[AL+7].color:=16711422; TheTPCA[AL+8].point:=xyToTP(locx+1,locy+3); TheTPCA[AL+8].color:=14869218; TheTPCA[AL+9].point:=xyToTP(locx+1,locy+4); TheTPCA[AL+9].color:=65536; TheTPCA[AL+10].point:=xyToTP(locx,locy+1); TheTPCA[AL+10].color:=16711422; TheTPCA[AL+11].point:=xyToTP(locx,locy+2); TheTPCA[AL+11].color:=16711422; TheTPCA[AL+12].point:=xyToTP(locx,locy+3); TheTPCA[AL+12].color:=65536; TheTPCA[AL+13].point:=xyToTP(locx+3,locy+1); TheTPCA[AL+13].color:=15527148; TheTPCA[AL+14].point:=xyToTP(locx+3,locy+2); TheTPCA[AL+14].color:=13816530; TheTPCA[AL+15].point:=xyToTP(locx+3,locy+3); TheTPCA[AL+15].color:=65536; AL:=getarraylength(ThePDA); setarraylength(ThePDA,AL+1); setarraylength(ThePDA[AL].pixels,16); ThePDA[AL].pixels:=TheTPCA; ThePDA[AL].point:=xyToTP(locx,locy); end; var mytpa,listofpts,NewTPA:array of tpoint; MyPDA,NewPDA:array of PlayerDot; t,time,tal,oal,AL,parrayold,parraytemp,iter,PlayerDot:integer; Var DebugCanvas,BmpCanvas:TCanvas; procedure AddArray (WhichTPA:array of tpoint; WhichColor:integer); var parray, arraylength:integer; begin arraylength:=getarraylength(whichtpa); for parray:=0 to arraylength-1 do bmpcanvas.pixels[whichtpa[parray].x-576+5,whichtpa[parray].y-9+5]:=WhichColor; Copycanvas(BmpCanvas,DebugCanvas,0,0,150,157,5,5,155,162) end; procedure StartMiniMapDebug; Var bmpBlankMap:integer; begin { bmpBlankMap:= LoadBitmap(apppath+'test.bmp'); DisplayDebugImgWindow(160,167) //to show the canvas DebugCanvas:=getdebugcanvas //gets the referance to the debug image and stores in that varaible BmpCanvas:=GetBitmapCanvas(bmpBlankMap)//gets the regerance to the bmp and stores in that variable BlankMapCanvas:=GetBitmapCanvas(bmpBlankMap); Copycanvas(BmpCanvas,DebugCanvas,0,0,150,157,5,5,155,162) FreeBitmap(bmpBlankMap); } bmpBlankMap:= LoadBitmap(apppath+'test.bmp'); DisplayDebugImgWindow(160,167) //to show the canvas DebugCanvas:=getdebugcanvas //gets the referance to the debug image and stores in that varaible BmpCanvas:=GetBitmapCanvas(bmpBlankMap)//gets the regerance to the bmp and stores in that variable Copycanvas(BmpCanvas,DebugCanvas,0,0,150,157,5,5,155,162) end; begin SetupSRL; PlayerDot := BitmapFromString(4, 5, 'z78DA3330000137570434C010' + '8140576710C41471310241B026435723107436054188880102182' + '28B0000E71C1BCB'); time:=getsystemtime; if findbitmap(playerdot,x,y) then begin mytpa:= FindAllBitmapsIn(PlayerDot,mmx1,mmy1,mmx2,mmy2); for iter:= 0 to getarraylength(mytpa)-1 do AddPlayerDotToPDA(mytpa[iter].x,mytpa[iter].y,MyPDA); end; //writeln(inttostr(getarraylength(mytpa))); //writeln(inttostr(getarraylength(mytpca))); //writeln(inttostr(getarraylength(mypda))); StartMiniMapDebug //for iter:=0 to getarraylength(MyPDA)-1 do // writeln(inttostr(mypda[iter].point.x)+','+inttostr(mypda[iter].point.y)); for iter:=0 to getarraylength(MyPDA)-1 do begin //iter:=0; // repeat // writeln(inttostr(iter)); for t:=0 to getarraylength(MyPDA[iter].pixels)-1 do begin AL:=getarraylength(listofpts ) setarraylength(listofpts,AL+1) listofpts[AL]:=MyPDA[iter].pixels[t].point; end; // iter:=iter+1; // until iter=getarraylength(mypda); end; AddArray(listofpts,65280); // writeln(inttostr(AL)); writeln(inttostr(getsystemtime-time)+'ms'); { if findbitmap(playerdot,x,y) then begin newtpa:= FindAllBitmapsIn(PlayerDot,mmx1,mmy1,mmx2,mmy2); for iter:= 0 to getarraylength(newtpa)-1 do AddPlayerDotToPDA(newtpa[iter].x,newtpa[iter].y,NewPDA); end; oal:=getarraylength(NewPDA); parrayold:=-1; repeat parrayold:=parrayold+1; parraytemp:=-1; tmpbool:=false; repeat parraytemp:=parraytemp+1; if (MyPDA[parrayold].point.x=NewPDA[parraytemp].point.x) and (MyPDA[parrayold].point.y=NewPDA[parraytemp].point.y) then tmpbool:=true; until parrayold=getarraylength(NewPDA)-1; if not tmpbool then begin // go through the pixels in that old point // if there are not in pixels of tmp, then get color, // replace in bitmap, take out of array // if pixel array is empty, tak out dot from pda end; until parrayold=getarraylength(MyPDA)-1; } end.