SRL Archive - News and General

Project Preview- WebWalker


Boreas

2007-03-17 15:42:13

I wasn't planning on making this thread until I had more of it done, but it's my 2000th post, so I wanted to post more than 'you forgot setupsrl' hehe.

At the moment (March 17) we (Avaphi and I) don't have as much done as I would like to have had before making an alpha release, so consider this a preview. I am also posting this now because this you will be able to add to this project, and this way you can be thinking/working on your additions as soon as possible.

Anyway, a few of you know about WebWalker, but for those who don't, here is a short explanation. WebWalker will be a web of 'stations' spread out across the map, with walking paths joining them together.

Each station will have a detector function, which will return true when you are around that station. The paths will be walker functions, that are shorter and easier to write than city to city walkers. They can contain their own internal failsafe checkpoints, and of course have the station detector for the destination, so you will know when you get there.

This web design will allow you to wander around until the script recognizes that you are at a station, and then you will be able to walk to any other station. When this fails, there is always teleport to lumby, which of course will be a station. This design also allows (when there are enough stations and paths) for more than one route from point A to point B. Also, this design allows for expansion, as more stations and paths are added, the better it is.

For now, please keep this members only. Contributing to this project is members only, because most people that can write a walker can get into members. Using WebWalker may or may not be members only, I will decide that when there is enough done that it can be used.

If you are interested in contributing, then read on.

Like SRL, you will able to add what you want to your copy, but I will only post versions with working functions. I will think about a way for you to submit contributions so that they can be voted on or something.

The main functions will be

function RoutePicker (StartStation, EndStation:integer):array of integer;
function WalkRoute(Route:array of integer) : boolean;
function WhereAmI: integer;

Then each path will have its own function (returning a boolean if successful), and each station will have its own station detection function. The above 3 functions will combine them.

Each station has a unique number, which I will assign to it once you have submitted it. They will also have an x,y relative to lumbridge tele point, measured in pixels on a jpeg.This can be approximate, RoutePicker just needs it to know it's going in the right direction. They will also each have a unique name, and I'll write function NameToNumber(Name:string):integer to make using RoutePicker easier. BTW, you don't have to use RoutePicker, you can manually give WalkRoute your own list of stations.

IMPORTANT: Each station detector function will start with a FindSymbol. If want to go to a place with out a symbol, you will need to go the nearest station with WebWalker, and then go the rest of the way on your own. You can write detectors for places without symbols, but these will be checkpoints/failsafes within paths. This is because WhereAmI will work by detecting whether there is a symbol on the minimap, any symbol. Then it will determine which symbol, and look through the appropriate station detectors, which will be arrange in a case by symbol.

When writing station detectors, start with a symbol, and then get more specific, such as there are 2 doors nearby. Use stacked ifs with result:=false breaks. So as soon as it finds a condition that is not true, it will result false, and only result true if it all conditions result true. This step design will allow station detectors to be combined efficiently.
For example, imagine there were only 3 churn symbols
Station 1 has churn symbol, water symbol, and 2 doors
Station 2 has churn symbol, water symbol, and no doors
Station 3 has churn symbol, no water symbol
All others have no churn symbols

First the churn symbol would be determined, so WhereAmI would look at the branch with those 3. Then, it would see the water symbol and go down another level in the 'tree'. Then it would count the doors. If this is confusing, basically what I am saying is check one condition after another, going from simple to complicated to narrow it down.

(Hint: when writing detectors that start with a symbol that there only a few of (churn is a good example, tree is a bad example) all you have to do is eliminate the others.)

When writing paths, just make sure its a boolean function that returns false if it gets lost, and only returns true if the station detector of the destination returns true. Even though these paths will be shorter than city to city walkers, you should still use as many failsafes and checkpoints a possible.

Keep in mind that I will not add stations until they have at least one path to it from another known station. This means it will start from lumby and spread out. Also keep in mind that paths are one way, that is the path from station 1 to station 2 is a separate function to the one from station 2 to station 1.

BTW, it would be nice if everything was autocolor. I'm working on ladder atm, door is done, road and dirt road is done, pretty sure water works.

I will announce when the framework is finished, so don't feel rushed to complete paths and station detectors. As I said, I just wanted to give you notice so that you could think about it.

Please feel free to ask any questions, as I probably haven't explained things fully.

[/2000th post :spot: ]

Infantry001

2007-03-17 16:03:01

So what have you gotten done, and how far apart should the stations be?

Dark_Sniper

2007-03-17 16:12:03

this should be quite fun to make enjoy boreas…

Avaphi

2007-03-17 16:16:28

You pretty much hit it on the nail Boreas. Hopefully you get online later today !… I had to watch the College BBall game(OSTATE FTW). When me and you do get in stride of programming this behemoth I say we should probably build Lumbridge->Everywhere first, because that will probably be the most manageable.

XcanadamanX

2007-03-17 16:26:47

very nice! and congrats on 2000th post. if you guys need any help ill be glad to help. i agree with avaphi lumby-> everywhere will be an easy start point. btw i have a walk from lumby to fally. not completely flawless but it works [underbreath] until it gets to the last corner to fally [/underbreath] but it will be fixed up in no time.

Ron

2007-03-17 16:29:21

Seems like a great idea.

What if you looked for a certain object to detect where the station is and Jagex had an update and got rid of some of the most prominent objects? And if that did happen and if someone's script revolved around these functions, it would be shut down.

I'm probably wrong, but just curious to hear what the answer is. And don't get me wrong, I'm not trying to piss on anyone's parade. :)

Infantry001

2007-03-17 16:37:49

Well, if Jagex did that, i dont think the normal players would like it very much…

Anyways, ill be glad to help if i have time!

bullzeye95

2007-03-17 16:39:41

Wow guys, this is great! If you want, I have a VERY beta version of a walker that walks from Lumbridge to Draynor.

Use it if you want. I don't care. It's basically just a bunch of RadialRoadWalks. Well I attached it if you care to use it.

Boreas

2007-03-17 16:43:22

Inf: not enough to mention :p. You can make as many stations as you want, as far apart as you want, just as long as they have a symbol and have at least 1 path to another known station.

Dark: RoutePicker is becoming more and more annoying lol. But on the brightside, once the framework is done, adding stations and (short) paths will be easy.

Avaphi: will be back later sometime in the next 8 hours, can't say more than that lol.

canada: As long as it starts and ends at a station, you can add it. You can also break it up into small parts (each starting and ending at stations) and RoutePicker will put it together, or you can put it together manually.

Ron: I'm glad you brought that up. Walking is a goal we want to accomplish, and whatever method we use to achieve that goal, it can be screwed up, just like SRL was screwed up on Sept 27th 06. The thing about this is, if only a few stations or paths are messed up, they can be taken out easily, and other routes (combinations of paths) can be used. And then hopefully they will be updated to work and put back in quickly of course. On the one hand it will be harder to update because of the many people contributing pieces, but on the other hand having lots of pieces means it can still work without all of them. And if all of them are messed up, SRL would probably need updating also, which means people won't be autoing anyway.

Edit:
Inf2: yea good point
bullzeye: same as canadaman

bullzeye95

2007-03-17 16:48:19

Oh and I forgot. Did you know that there was already a walking project started? Or did you forget? Here I'll attach that too :)

Boreas

2007-03-17 16:56:30

Yes I posted this idea on that thread a few months ago.

But that's just city to city. That means longer, harder to write, more prone to mess up paths, in less places, with less combinations of routes.

In WebWalker, a 'route' is from start point to destination. It is made up of several short 'paths', which are from station to station. Eventually, there will be more than one combination of paths to go from lumby to VEB for example.

Also, with WebWalker, you don't have to use up your 30min free tele, you can just wander around until you get to a known station, and then the RoutePicker will automatically figure out how to get to your destination.

Eventually, WebWalker will include all citys, and not just starting from lumby. It will also have places like the chicken pen.

bullzeye95

2007-03-17 16:58:51

Oh I know, I was just saying why don't you add that to walk to those places from Lumbridge if you need it? Like if the path says to :)

Avaphi

2007-03-17 16:58:56

bullzeye… That project never really took off did it? We will need to do some more planning… Anyways, Boreas, I got a quick question that I am sure should get us somewhere :)

Secet

2007-03-17 17:28:13

Gratz on your 2000th post.

This sounds very cool, I'm really exited about this. It's gonna rock.

You said something about making it only SRL or not. I was thinking that if it will be public, Jagex could catch macroers very easy because all macroers would use the same checkpoints. Not sure tho.

But once you got first WebWalk script working, could you show it to us so we can start making waypoints too.

It would be really cool if we could make like 100+ waypoints, walking would be really easy.

Ejjman

2007-03-17 17:32:57

Hey, I need to practive my walking you guys, so I'd like to try to help. Lol, think about it, just tell me from Lumby –> ??? and I'll try it. Thanks

-Ejj

pwnaz0r

2007-03-17 17:33:55

Well this sounds interesting. I messed up my arm pretty bad while snowboarding (:D) so my activity is probably low because of me not being here[/spam]. Now i have a few walking functions and whenever you guys need any help just hit me up on msn :D.

PS. you may want to add symbolaccuracy to the functions because they wont always be perfect and i think most people would like to be able to set custom S/A.

Boreas

2007-03-17 18:21:56

About jagex detecting: assuming that they want to analyze patterns to detect us (which is a whole other issue), having more stations, with wider detection areas (so that a station isn't just detected from 1 square) will help, so it won't be public for a while, if at all.

Secret: If you want to write stuff, you can start now. Just follow the guidelines in my first post, and when the framework is finished, if needed I can modify it to fit. Just remember paths need stations first.
Bullzeye: Lumby to VEB (for example) can be a route made of 1 path, (which is how the f2p walker project is), but a route made of multiple paths and stations will be added too.

Eij: just pick a spot with a symbol near a known station (atm there are none, but the first will be lumby tele point, so use that), write a station detector for that spot, and then write a path. It's up to you :)

pwnaz0r: Yea, since symbols will play a big part, they will have to work well.

Couple things I forgot:

For now, it will be f2p map only. Besides the point of p2p wouldn't be used much, there is another reason. Every station has a primary symbol, and the detector must be unique to ALL other places (where there are a station in the system or not) that contain that symbol. This gets harder to do with a bigger map. ALL station detectors should only return true for ONE place in the entire f2p map. This means double water symbol for lumby won't cut it, etc.

Another thing, if you don't want to make a station or path, you can do other things like autocolors, or dot counters.

I'm working on:
LumbyTelePoint Station (use water symbol until I finish)
LumbyBank Station
LumbyTelePointToLumbyBank Path
Ladder AutoColor
Framework

Could someone make me a climb lumby castle stairs? Assume that you first click the ladder on the minimap.

There was something else I wanted to mention, I'll think of it later

XcanadamanX

2007-03-17 18:47:20

im going to look on a world map to see specific places and their detectors. im going to write them down and post later. ill do some common ones. tell me some good ones to do. also boreas if youve already done something like this plz tell me so i dont waste my time. thanks

Boreas

2007-03-17 18:56:25

Good idea. Common ones would be stuff like chicken pen, goblin house, etc, ones that scripts already exist for is a good place to start.

Ruroken

2007-03-17 19:28:36

Heh, sounds like a good idea.

Mind if I join in?

XcanadamanX

2007-03-17 19:46:11

this is what i got so far. its actually kind hard from a world map.

goblin house-arrow symbol(or fish symbol),1 door, water
chicken pen(lumby)- churn symbol, water, 2 doors (fence but sometimes you cant see),
chicken pen(fally)- churn symbol, water, many doors(around 5 in one area)
FWB- Bank symbol, haircutters has a checkerboard pattern but its light unlike anywhere else. i think you can see water
FEB- Bank Symbol, water,
VWB- Bank Symbol, anvil symbol,color inside bank is brown and grey
VEB- Bank Symbol, stairs,color inside bank is grey
AKB- Bank symbol, quest symbol, cactus


other ones i should do?

updated list:
goblin house-arrow symbol(or fish symbol),1 door, water
chicken pen(lumby)- churn symbol, water, 2 doors (fence but sometimes you cant see),
chicken pen(fally)- churn symbol, water, many doors(around 5 in one area)
cow pen(craft)- 1(maybe 2) door(s), water
cow pen(fally)- 4(cant see all at once though)(including gate) doors,
cow pen(lumby)- 1(if your in the right area) door, water(in some places)
FWB- Bank symbol, haircutters has a checkerboard pattern but its light unlike anywhere else. i think you can see water
FEB- Bank Symbol, water,
VWB- Bank Symbol, anvil symbol,color inside bank is brown and grey
VEB- Bank Symbol, stairs,color inside bank is grey
AKB- Bank symbol, quest symbol, cactus
Lumby furn- Furn symbol, (cant tell how many doors), question mark symbol, no stairs
Ak Furn-Furn symbol, 3 doors, no stairs
Fally Furn-Furn symbol, 3 doors, stairs


im done for tonight *sigh*

Mjordan

2007-03-17 20:18:57

wow guys, this is a really good idea. Gonna take a lot of work and time, but it will be very interesting when this gets going good.

Avaphi

2007-03-17 20:33:54

Everyones Welcome !

Boreas

2007-03-17 22:02:45

canadaman you just did half the work for the stations, nice job.

BTW, I think iloveit8 has a working fallybuildingcolor thing, so that will differentiate FEB and FWB from the other banks. Then all you have to do is tell the difference between those two (hairdresser).

Ruroken (and everyone else): as Avaphi said, everyone is welcome, just pick something and go ahead. If multiple people pick the same one, we will pick the best one, and use the other as a backup if they use different methods (for example if one depends on a symbol not being covered by dots).

mjordan: yes it will be a lot of work to fully complete, but on the bright side, we can see gradual results as it spreads from lumbridge.

Mjordan

2007-03-17 22:08:52

From: Boreas

mjordan: yes it will be a lot of work to fully complete, but on the bright side, we can see gradual results as it spreads from lumbridge.


Yep, and this should really increase the time that we are able to auto :D

Boreas

2007-03-17 22:14:59

It will also allow mega scripts that for example, mine in rimmington, smelt in fally, and smith in varrock.

Ejjman

2007-03-17 22:30:02

From: Boreas
It will also allow mega scripts that for example, mine in rimmington, smelt in fally, and smith in varrock.


Heh, thats totally 1337.

Mjordan

2007-03-17 23:45:56

From: Boreas
It will also allow mega scripts that for example, mine in rimmington, smelt in fally, and smith in varrock.


wow didnt think of that, very good idea. make it mine "x" number of ores then walk to fally and smelt, then go smith in varry.

Killerdou

2007-03-18 04:39:37

From: Boreas

BTW, I think iloveit8 has a working fallybuildingcolor thing, so that will differentiate FEB and FWB from the other banks. Then all you have to do is tell the difference between those two (hairdresser).


you are right:)

var
FallyBuildingColor : Integer;

function FindFallyBuildingColor: Integer;
begin
GenericColor := 9809339;
Flag;
a := 710;
b := MMY1;
repeat
b := b + 1;
repeat;
a := a + 1;
if FindColorTolerance(x, y, GenericColor, a, b, MMX2, MMY2, 60) then
begin
if a = MMX1 + 1 then b := y;
a := x;
TestColor := GetColor(x, y);
red := (TestColor mod 256);
green := ((TestColor / 256) mod 256);
blue := ((TestColor / 256) / 256);
if Red - Green >= -1 then if Red - Green <= 15 then
if Green - Blue >= 8 then if Green - Blue <= 37 then
if Red - Blue >= 10 then if Red - Blue <= 39 then
begin
Result := TestColor;
FallyBuildingColor := TestColor;
WriteLn('FallyBuildingColor = ' + IntToStr(TestColor));
Exit;
end;
end else a := MMX2;
until a >= MMX2;
a := MMX1;
until b >= MMY2;
WriteLn('No FallyBuildingColor found.');
Result := 0;
end;

m0u53m4t

2007-03-18 05:16:34

I'm going to help. Is it ok if I use my own walker instead of RadialRoadWalker or whatever?

I'm doing the south entrance to Fally, and it has 2 tree symbols and water.

How can I make my script detect how many symbols?

I've done the FWB and FEB as well. Run this and walk around fally. It takes 15-30ms for a search and will tell you if you're in either bank:

{.include srl\srl.scar}

Var
Ladder1,RedBankFloor,HairDresserFloor,BankersDTM, extra : integer;
Found : Boolean;

Function InVEB:Boolean;
Begin
If Not FindMMColorTol(x,y,5002152,30) then //Not VWB floor
If FindMMColorTol(x,y,211032,60) then //Ladder
If FindMMColorTOl(x,y,12227199,30) then //Water
If Not FindSymbol(x,y,'bar') then //Not by bar
If WeAreInMM(Ladder1) then //Ladder nearby
If FindSymbol(x,y,'Bank') or WeAreInMM(BankersDTM) then Result := True //And a bank Or bankers nearby
End;

Function InVWB:Boolean;
Begin
If FindColoredAreaTolerance(x,y,5002152,MMX1,MMY1,MMX2,MMY2,10,60) then
If WeAreInMM(RedBankFloor) then
If FindSymbol(x,y,'Bank') or WeAreInMM(BankersDTM) then Result := True
End;

procedure UpdateRoadColor(x1, y1, x2, y2:integer);
var
CurTol,cx,cy:integer;
begin
if(FindColor(cx,cy,RoadColor,x1 ,y1 , x2, y2)) then Exit;
repeat
CurTol:=CurTol+1;
until(FindColorTolerance(x,y,RoadColor,x1 ,y1 , x2, y2,CurTol));
RoadColor:=GetColor(x,y);
WriteLn('New RoadColor: '+inttostr(RoadColor));
end;

function WalkRoad(dir:string;dist,curve:integer):boolean;
var
DistOut,Dist2,Scanned,rx,ry:integer;
begin
Dist2 := Dist
Curve := Curve + extra

MakeCompass(dir)
MakeCompass(dir)
MakeCompass(dir)

UpdateRoadColor(598,25,716,60)
Repeat
For DistOut := 0 to Curve do
Begin
Scanned := Scanned + 1
If FindColor(rx,ry,RoadColor,MMCX-DistOut,MMCY-Dist2,MMCX+DistOut,MMCY-Dist2+4) then Break
End;
Dist2 := Dist2 - 2
Until ((Dist2 < Dist/5) or (FindColor(rx,ry,RoadColor,MMCX-DistOut,MMCY-Dist2,MMCX+DistOut,MMCY-Dist2+4)))


Writeln('Scanned ' + Inttostr(scanned) + ' images to decide where to walk.')
If Scanned > 774 then Extra := Extra + 5
If Scanned < 774 then Extra := 0

If (((not (rx = 0)) and (not (ry = 0)))) then
begin
Status('Walking along road on MM')
Mouse(rx,ry,4,4,true);
Status('Waiting for flag')
FFlag(20)
Status('Flag Reached')
Result := True
End;
end;

begin
SetupSRl
Activateclient
Ladder1 := DTMFromString('78DA63FCC8C8C0309B010544583033C80169A' +
'00CC37F2060FC0464CD4255B36FFB2C0611A81A1000007D1C09EF' +
'');
RedBankFloor := DTMFromString('78DA636C65626048654001FDC6160C36409A1' +
'188FF0301633B504D12AA9A3F7F981844A06A40000055C7091C');
HairDresserFloor := DTMFromString('78DA636C626260906500032608C5B06F73138' +
'308906604E2FF40C0D80894514455B36DDB2AB81A10000064C709' +
'7B');
BankersDTM:= DTMFromString('78DA633CC4C0C0F092910104202403C3D7AF0' +
'C0C2250FE7F20603C0A64BC4055F3E70F135C0D58FC24613500BD' +
'2B0F2C');
SymbolAccuracy := 0.5

RoadColor := 7375244

Repeat
if InVWB then Writeln('In VWB!')
if InVEB then Writeln('In VEB!')
Wait(1000)
Until false
end.

Boreas

2007-03-18 08:41:23

m0u53m4t the next SRL will have FindSymbolIn. So you can you do a regular findsymbol that will get the left most one, then use the x position of that plus a little bit to be the left edge of the box in FindSymbolIn to get the next most left on. You can use whatever you want as long as it works lol. Nice job, thats what I meant by efficient stacked ifs.

iloveit8, mjordan and eij: thanks :D

m0u53m4t

2007-03-18 08:49:31

Yeah. If you use ANDs or ORs the amount of time it takes to scan can treble :p

Boreas

2007-03-18 09:07:17

Hmm its not working for me, I'll try again later.

m0u53m4t

2007-03-18 09:58:27

Works for me 90% of the time. I'll carry on tweaking.

I'll make a CountSymbol code now to go in the next SRL. That would really help for this.

XcanadamanX

2007-03-18 10:41:10

From: Boreas
canadaman you just did half the work for the stations, nice job.


glad i could help.

m0u53m4t

2007-03-18 11:16:35

w00t! Symbol counter!
function CountSymbols(Name: string): Integer;
// l33t symbol counter by m0u53m4t - Enjoy!
var
Bitmap, Color, findx, cx,cy: Integer;
acc: Extended;
begin
Bitmap := 0;
if (LowerCase(Name) = 'bank') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33B434B4343473B' +
'100421364D2D9D2C9C9D4C4CDCDD5D1CCD0C2D5DCC5D00299ED04' +
'8226C824B25E43B0998664990C213175116F32B2F9C824B2F9A4B' +
'A1997F9B842865493890F734C9301ACE46928');
Color := 6417151;
end;
if (LowerCase(Name) = 'mining spot') or (LowerCase(Name) = 'mining site') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D03B0EC430' +
'0804D02B610C832931D9DCFF48894293C8DAD5464853F07905342' +
'91A67A46FF43BA31914AE602183A9E5686799A64E3C04BA4CFA43' +
'7E98439C770971257CB09F934B8E089F2FE43287A2F534166629A' +
'1121D03DB5BB94C0B1D9D811E2DEF66ED94BCF6BFC97753A33BF3' +
'7ABBCAEB9F0FD413672D');
Color := 4219541;
// Color:=4092315;
end;
if (LowerCase(Name) = 'transportation') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303534347074353' +
'4B73032219E34763173348592A62E666E66A6C8B20660330D904C' +
'86A841D6858BC454896C3EA6C9C498899FC465B291A3B193910B3' +
'124A69910715C269317CEC866229B0C00B3496273');
Color := 2650848;
end;
if (LowerCase(Name) = 'magic shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D0510A80300806' +
'E02B9906B6C77F3AEF7FA4A0066DABC17A1111FD1469A74CC5C46' +
'0D6C60875CEA17288D63CE08C771D02A09BA5CBA499DC99AD3CFA' +
'EB72041B97B9D9C83F6F2ECE69C3D71F46F9EE5C979D155AFDBAA' +
'5BBFF312D915399C927AF756C82');
Color := 1714669;
end;
if (LowerCase(Name) = 'water source') or (LowerCase(Name) = 'water') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5CF410A80300C44' +
'D12B25B6A964E9907AFF2329CC42A5448A12F874111EA9A89C830' +
'A438C6DB646B7A51BF6C27A75F3C8F659D16BE665F68F7C37B121' +
'3AF8162D2DE2FDF21999E628B3DFE4C7DF1339BB9CE601EA0F684' +
'0');
Color := 14497281;
end;
if (LowerCase(Name) = 'furnace') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA3334353435B470' +
'3101423308696A028466E6C6A6A626E66E6E1640062E12A206A2D' +
'EC90408A1261882CD3424CA6427472320DBCDCDC810C61EFC2653' +
'3F34882171990C0058F36390');
Color := 3508223;
end;
if (LowerCase(Name) = 'anvil') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95CF510AC0300803D02B' +
'A59DE0F2D9F6FE771A2CFB10CAC4FE04117C443434D8E4C2EA4A8' +
'7DFCE8B06FB369AF38C025E139B5C7194EA106F73B9D2991C187D' +
'3773F92F2BE6A91CBFD05CE9FC00C9DB6164');
Color := 4012591;
end;
if (LowerCase(Name) = 'rare trees') or (LowerCase(Name) = 'tree') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303400424757270' +
'B4757086960686209128390E6F84833470B20696C618E6E020262' +
'33D99C0C9238938976391269E16A69614192C96012EC6B2889C34' +
'CFC26639A0F516FE46CE80267BB9AB919B8426C413613393400AC' +
'8C5FC9');
Color := 96513;
end;
if (LowerCase(Name) = 'fishing spot') or (LowerCase(Name) = 'fish') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DCE410E80300844D12B4D5BA' +
'9BAA404EE7F2413675343AA6EFE82D217D061682636ACCCADA779' +
'045B641F117987CDAFB84D2479D67257B28A0EFD90B9C9F9BB3FD' +
'FF02EC337F347B39977D83F37AFFEA2D76EDEA4543DE870B2922F' +
'BB6B6878');
Color := 16743189;
end;
if (LowerCase(Name) = 'cook') or (LowerCase(Name) = 'cookery') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA590410AC0200C04BFB41' +
'B4D5B8F2ACDFF9FD4D25008885EBC0C21EC0E211010EC6CD66EE7' +
'C1A4F869A9524AD74BB2CF3139233E2782D9BB713F52CE37A1D98' +
'4A823D7E678A15FAE4CC4EDDDB5B9B258D932BB61C67DF3FACF0F' +
'3E40632F');
Color := 1194607;
end;
if (LowerCase(Name) = 'quest') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8D90410A80300C04BF94' +
'B49A36475BD3FF3F497011564AC5CB1042322C2B4954B46B1B2D9' +
'8D53C45F1DEFCCC25D51206629FCBD69F9B437DF8EB576EA74C66' +
'DC83B0B19F9DCC6F33675B71DBCDC257FC9F993BC12F3263E61B7' +
'402AECC73CF9839DBDC33B70DE70515B06618');
Color := 15107954;
end;
if (LowerCase(Name) = 'mill') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAB58F3B0AC0300C43AF24A' +
'75D3CD621BEFF9102D52228822C5D1EC69F878C8140CCA8AEE5D8' +
'DD0BA97C223BED3E5E27C48CBAE7B878ABF54987B5337FB3E995D' +
'26DF2973F323B33C9A9D26573A47303B52569D1');
Color := 655103;
end;
if (LowerCase(Name) = 'dungeon') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAC5CC310E80300C04C1' +
'2F9D2DE5229736C1FF7F121269229922888266BB1D28047248649' +
'CB5D974A8D55A82682E96F670E136F1971CDE9DD5CCC14E7E9157' +
'7FC77C2BAF9DE68E7C01216D6A72');
Color := 2698741;
end;
if (LowerCase(Name) = 'weave') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303230343074367472' +
'73724526CD0C4C0C8CDC1C0D2DDD2C5D8DDD8C4C0CA0E2103644D' +
'CDCD1CCD4C40CC246D66B0036D300AFC9986622B3293119979B21' +
'ECC1E966649793EA6600F03E685F');
Color := 926783;
end;
if (LowerCase(Name) = 'pottery') or (LowerCase(Name) = 'pot') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DCE5B0AC0200C44D1' +
'2D6592691B3F2DD5FD2FA98F08554A410217C9C73102B966673E7' +
'64617AA094DA16349D4B15E96621EED05C13B5F19F9DEFF178E14' +
'3F869CE8479A9267FCFEE619992A55100D7F8519CC37562DBDD6F' +
'AECE76FEEFD55D5A50983FFBCB76A807CE5139EC460AC');
Color := 270148;
end;
if (LowerCase(Name) = 'spinning wheel') or (LowerCase(Name) = 'spin') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA7D90510E803' +
'00843AF04B2E1F894B9FB5FC9C4EE0383DB4FD314F22025A642EC' +
'DEC507545B31BECD2FB1715AED872187FFC9ABB21CC891D0CBA44' +
'0AE2E46731A37333FEFB4A155DA9EAC5A9C053EDECAFC8F86CF57' +
'644CA3E256EC2AFE3CFBD99273272B1FF9B91F301FD6076714');
Color := 2710649;
end;
if (LowerCase(Name) = 'guide') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303400424717470B27' +
'33086961E168E4EC64E866E264EE0C614349170B0B4B336411143' +
'56059880906860848C06488995432193F89CB47F84D869A8FE14E' +
'8869F8CD24C664E2431E533DC44C00EBA66771');
Color := 13345416;
end;
if (LowerCase(Name) = 'shop') or (LowerCase(Name) = 'store') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D0410AC4300805D02B' +
'99A889596AECFDAF3461FE26A52D9DD97C41E1A1D251A2E8CCF46' +
'4A41D2306776FC415A929B39E3AD7E92ED0D7A4ABDC8C34669849' +
'73EBCC03D95269F9A15AFBA86A4591E87886C78B8C4D209F527B6' +
'389D2A5E42E236D55F327197FB8317F90D738449E64E72037DCFE' +
'F7CEF8E1267F0053466502');
Color := 3498103;
end;
if (LowerCase(Name) = 'shield') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DACDCC3112C0200844D12' +
'B611484920DE4FE47CA8CA63085BDCD9F6DF6511614BE233CEADA' +
'16ECFC9553204DD36055D92EF56E2AFD99DB038EDF97864927C8C' +
'339595EFD9D3CCD9DFC02CAE26976');
Color := 9542286;
end;
if (LowerCase(Name) = 'altar') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33703574323475767171' +
'7431B670B574B2A4888498630036D300C96464F3DD880610F58E2' +
'E4E8E4E501297C9C49B8F69267E37936732B25EFC26131F1AB84C' +
'06006E357035');
Color := 9542286;
end;

if (LowerCase(Name) = 'arrow') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303570333470353437' +
'3372249E343633B33475829026161646E626C8B20660330D904C8' +
'6A841D6858BC454896C3EA6C9C498899FC465B2919BB1A5B12931' +
'24A69910715C269317CEC866229B0C001E5A61CB');
Color := 2782945;
end;

if (LowerCase(Name) = 'bar') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAB5CC310EC0200C43D12B41' +
'E3001D0389EF7FA44ACD82D4952E5F968757B5B4E28EA56B66E33' +
'685908EEEA4115736FF1523A016BD8113A636079B0877A1BE663D' +
'24E73E25A7F99F9CE659F96BEEF2031A5D69A8');
Color := 4433385;
end;

if (LowerCase(Name) = 'underground') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303400422743' +
'272727134CD2D5C2C8D4D01993B47033303630B434B474B2C4A2C' +
'BC01001E96FB28B9BA3A10516335D5DCC8C4D9D293119D97C62CC' +
'24D5646412622631260300830265FA');
Color := 1844712;
end;

if (LowerCase(Name) = 'tanner') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8D904B0EC0200805AF0' +
'4F85F4ABDFF991AFB162521D26E26462703919898BAAACEAB82B5' +
'E5C4ABB52289FED316E8699229DBE63ECB8AA7F8D75319843374C' +
'C594B4FC2C5177003C7FAE0A90CC2C92ACA392E5B3FDED9F22DCB' +
'47D9FFF30DFAEB6308');
Color := 3363443;
end;

if (LowerCase(Name) = 'churn') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9590410A00210845AFA4' +
'A5FE5A564CF73FD240CE40502DDA3C5CE8031F318150D1ACE94C4' +
'104C7D04365F159253E2C16A5737342B5735F6F6938E960D66430' +
'9B0D1B5292146ECD92156ABF1F013CD39DBE736D1E05FCF644FFE' +
'8BAC6A8FAF927AEB5338A958DF905A105631F');
Color := 1720403;
end;
if (LowerCase(Name) = 'house') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9D90410AC0300804BF6' +
'41B2DF66863F3FF2715BA978560A0BD0C32E2B228F766123D53BB' +
'33E5F5A08DC3ECD434550779BBBE9D3D1290C9846FDEC63EC02A8' +
'13D9B7F5C77AE9AF337B86DE4A5E1E0D7649EABE4F9F601C37765' +
'F5');
color := 4740173
end;
if (LowerCase(Name) = 'axe shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D04B0EC3300804D02B91' +
'0033F6127F72FF23A52A1BA4AA55BA1959483C036202E953A74F7' +
'EA6BBC35B260C403335377680767CEB92B7293FE59A71BEBE187D' +
'1136D2C7C583CAC6E0CCCABF7235B9A13A728B34EB2EA1E1F148E' +
'E8D8655CDECADF7C977D69FC8B1BA0269E2B27DEEDA9B13D63933' +
'EB356E4B7C6439');
color := 6841956;
end;
if (LowerCase(Name) = 'cookery shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DCE410AC0300804C0' +
'2F194CDCE42896FCFF49856E0F421072D983BA83D2C56485C608E' +
'4C484236CA341999CBBFA7020A6CEFEDF74339B9CF3463E530A99' +
'4993ADDCA55C6D6F647E955B959CB757F22754F2F9ED8DBCCCD01' +
'B137B3CDAB290E76797E60B5A736560');
color := 7565679
end;
if (LowerCase(Name) = 'windmill') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA3330313033B074367' +
'6367536C745BA0181A11132E968EC68EA8853BD01D84C0324930D' +
'5C4C8D8C9C217A91D9C48840D8B84CC6741BB22E6412974A885F6' +
'8E1665C264348882C3289CB6DB848889900AC8467DB');
color := 1245183;
end;
if (LowerCase(Name) = 'minigame') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8D90410EC0200804B' +
'FB4AD22E568B1FFFF52132129C6DAF432214626CB22A340342929' +
'47B68DAE82066E2C0D99323BFBBB0A0E88CD3555AAC32EBA1393D' +
'99D6E36E7E38FCEC86FF3906D412D09FBB9E4FFCCA113DFED996D' +
'8E7FAC13E3CAFCD2B3DD1BB34D3DC7B6CD79039CA16371');
color := 4670928;
end;
if (LowerCase(Name) = 'fur trader') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA3330313033B0743' +
'67636753647262D2C4C8C0D2C31497357A07A0B64D2D1D8D1D4D1' +
'1C4242F41A80CD34C06132A6F9C49849BCC9B8CCC76526792623B' +
'B16BF7A52438378F321660200DE126419');
color := 607112;
end;
if (LowerCase(Name) = 'archery shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5CE490AC0201' +
'044D12BB5560F71E910EF7FA4403A0B8318846CFEAA78143129A5' +
'8A2AD5769A9A29172F8385CD9B91253F1BBA4DDA964733A91A07D' +
'7FEC8A366A702C59D51DB9215140BF77804BCCC2E0D6136E7AE64' +
'37477FF5F35BBE0049C36545');
color := 4945565;
end;
if (LowerCase(Name) = 'staff Shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5D03B0AC0300C0' +
'3D02BD9F1AF198D83EF7FA442BCB6C1B48B26F110020685191412' +
'D6C9A96A8C96B2089D5CFCA103DB84B65CA60F49CC32FFCBA55D8' +
'B7DD0D9ECCBFD9DDFE4F3AB6FF20D38E96664');
color := 4286358;
end;
if (LowerCase(Name) = 'clothes shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DD04B0AC0200' +
'C45D12D3DF2D13A0CE9FED754681CA4484A267720CF8308C1C072' +
'76F51925BE2023CAB2A0D66916F09A487236CF66A73AAFE4686C8' +
'C4D6DE25622AFE4D8E4FDBE55C8D1BE9CF7FF6FFEFC585B3EFFF9' +
'012BE4618A');
color := 5935156;
end;
if (LowerCase(Name) = 'farming spot') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9DCCD10A80300885E1' +
'57D29CC775698BBDFF2315B98BC120AC9B1F41FDA810686FD2B45' +
'9BE2A02D6D2B7CA22C7E60C17571F5B7A4CFA2887190D6DEE3F19' +
'24276335D7CB8C6CD5EE577463938C9991875900D490637E3767F' +
'9024D406555');
color := 1390163;
end;
if (LowerCase(Name) = 'apothecary') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9DD0310AC030088' +
'5E12B69A3A68ED6D6FB1FA9D02C4230942CFF241F0F814040BD39' +
'7BAFAA8748C46847C2A75B33B6F21E3E13967236B33CBA2767CDD' +
'5EFE05926C5F3D23DB932B33C7FE6FFE66AED5A7E01E72B65AE');
color := 16737938;
end;
if (LowerCase(Name) = 'sword shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D0410AC030080' +
'4C02FD9C66CE25125FFFF524BBD08A5C520EC41964124269078F3' +
'EEE33FC5EF918535971A1B0C6000539B761D91D1A4C7A4829CCD1' +
'06293E5DCFF929BF231CEBAB92B47EE9A956FBC2FAF9859BE0057' +
'DB6637');
color := 10067100;
end;
if (LowerCase(Name) = 'platebody shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DD0410AC02' +
'00C44D12BA56832761902BDFF910A9DCD8055DCFC850C4FD1BA85' +
'DDD5CA0B6CF48818F1E042633190A87D55B0CF349167534FD459D' +
'DBB92596EB2A527DC3DFC4FFE6EE446F7EC4A66CF65DDEFDFAC3D' +
'97E77F7E014609646B');
color := 8157816;
end;
if (LowerCase(Name) = 'scimitar shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9DD04D0AC340' +
'0805E02B8D7FCF71399349EF7FA4A6B8A825109A203C5CE887D8A' +
'81D356962CA3FD9475FDD96AE581012880405E267A6D1B7CE0277' +
'61DBAB56CDEC6963A2F14CAE5AA69B0FF76ADE95315CBDA59FBB2' +
'AEAAAF50367F35A0630711C0AB697B1B9E9678223F3DAACF21B5C' +
'65625E');
color := 8752522;
end;
if (LowerCase(Name) = 'gem stall') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA58E4B0AC0300844' +
'AFA4F96719F3B9FF919A640A154A3729836F21FA18629A1196201' +
'6ECCD772FE0E03AAA057B32F350338DF50B6A03F1932FF34DEDDC' +
'1BED0433E7900FCD835C76011B89BFCDAFB6AEAEFB504FCC6013F' +
'6C4DA8C9E306B1653E29C4D6DBE0027B7630B');
color := 1777896;
end;
if (LowerCase(Name) = 'silk stall') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA333034004227432' +
'733276364D2C2C4C0D0D488181253AF81210262CA42484B67030B' +
'33476248DA996C696869664994C9C48706B299F84D36733630347' +
'62486849889CB6400B4306127');
color := 5374340;
end;
if (LowerCase(Name) = 'plateskirt shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA3330340042' +
'2743273327634CD2D9D8CCC2D9009974323235763282909686966' +
'696587419182220F126239B4F9EC9B8DC8929423B93315D4E2034' +
'709843BCC900457662CC');
color := 12609731;
end;
if (LowerCase(Name) = 'agility') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA333034B03030743276' +
'3677328590066011086969EC686E494004591CD30464933165F19' +
'B802C428CC9B8CCC734873C93F1BB9F18F5C4A881B80D339C71E9' +
'020052926073');
;
Color := 67585;
end;
if (LowerCase(Name) = 'training dummy') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5CC5B0AC43' +
'00805D02D69468DF9BC6DEAFE97D401032384F92845B8888F434C' +
'DF0210386A6A6B9D3833270E0F5F5B7371D2FD2B93F857FFE4D4A' +
'AE962D402E738ED1A0768E08D5CE743FA14A49CB9DF3C95CDA4B3' +
'A6EC1FB73E6BBE974D6572403C74F9AB2F9769DEA32D69B5');
Color := 9146250;
end;
if (LowerCase(Name) = 'food shop') or (LowerCase(Name) = 'food store') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5D0610AC0200806' +
'D02B559ADA4F37DAFD8F3499C11C6D63B02F900A79882959B28AC' +
'A825E09908A0893A0B4C25441ED49A0DA2AB3DFFDDF7B467FE64D' +
'C88594CF13E56651A08C1DD66146F9A82E47532C0DDFE531F92C8' +
'77A9183F945BED9C66F396EC385D91F321AD29FE41DF6B66191');
Color := 7837098;
end;
if (LowerCase(Name) = 'fishing shop') or (LowerCase(Name) = 'fish store') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA3330340042470B470B' +
'27134CD2D2C2C4C8C010425A0081A509844456832962608880E49' +
'9099431773425DE64E2CD4426F19B8C6CA6990950812BAE50C234' +
'19D9765C6E8698894C62BA193334304D0600DE086263');
Color := 9734280;
end;
if (LowerCase(Name) = 'jewelery') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9D904B0AC0300844A' +
'F646843E2D24FBCFF911A6217820DB4DD0C32EA43070A28B08088' +
'6054AB664DB46B07E64276220109A1D7EEFB4CDE85C5840D79E0E' +
'05223D3D5BBEEFB4CF4DF933333AA5FFE957CFFDB95DB5356CBFF' +
'479E471FB395F2DCE59FC917FB9B6AAB');
color := 4829105;
end;
if (LowerCase(Name) = 'crafting shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95CEC10AC020' +
'0C03D05F8AD3D979AC71FFFF4BC27A29C8A45E420EE111240C748' +
'2648B24BEFDD5B36414149626F793E45D3708CBDEACA98EAA662A' +
'94DA2C4FE5D5F49A374FE53F73FF642F9B693D627A79020EC868E' +
'C');
color := 3159851;
end;
if (LowerCase(Name) = 'portal') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5D04B0AC0300805' +
'C02B69D2D6B8D47CEE7FA4045CD442ED22457848D0410208AB549' +
'4942D2F4858DAA9B05A6A4895251DB93FD2DE6DC6E6BD0078D7B7' +
'A98374A0CFC86761E2173977C052F764DB8DE43F375B46F2DE3F7' +
'BD3CB13F26764CE');
color := 15287202;
end;
if (LowerCase(Name) = 'makeover mage') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA333034703170' +
'7236707676B68490066011571367734B174CD2D2D8CCD5C418993' +
'4C06182015E9391D5608A209BEC68E0E8EC4882C9C4BB99129391' +
'DD499EC9F8CDC76526A6C9003E5F6688');
color := 10340324;
end;
if (LowerCase(Name) = 'mace shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9DD14B0A80300C04' +
'D02B4D4CF3E93226DEFF4A82155404296EB21A1E330484C29AC8C' +
'CFE7DAD7BB89A38D9A6696EA2A4A511888C4712878909D9521BB3' +
'A6086368B248C969FE932F7381546BE477ED6DCEC80F135C64DFD' +
'A8C7CDFFEEE39F39161EE1ADD6893');
color := 8817273;
end;
if (LowerCase(Name) = 'hair dresser') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303470317072' +
'36707676B68490066011030C71E2D5E0977534707476C4A206998' +
'DAC8654B7E1B2059984C84248F27C8D6C3EB269C4BB19531CD91C' +
'4CF7E37233005E916796');
color := 13225152;
end;
if (LowerCase(Name) = 'mining shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33B03430313074' +
'B670367672C5241D2D1C8D2DA1A40158258474737473333285909' +
'8BA9055E232199944360DBFF9C49B8C6926B22F20E21011FC263B' +
'5998BAC0447099499EC9C498896C022E9301172B6823');
color := 10396584;
end;
if (LowerCase(Name) = 'silver stall') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA958E410AC0400' +
'803BF14D1823D6E6DF3FF2715EA4510A17B09C198211008347031' +
'A4AB4169E2E6EA071F06EFF4F5DE5BF89818C8D9ADB4AE13FF0FB' +
'976FBF2F4F9B370726D90FBB64977C913BFA6D3E61755066363');
color := 8749956;
end;
if (LowerCase(Name) = 'spice stall') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA9DD0C10E80200C' +
'03D05FEA06883B22D2FFFF2413F140B240D44BD3C3FA0E8340102' +
'A0E5619D3984CAC714B50B224D1A72B9BEEBDF71BBFC56DC2C96F' +
'CCB5EFE5A9F9D1F77244609C66B67CE6B6CE0263997EE39FDFCD5' +
'1BE002BE06493');
color := 157167;
end;
if (LowerCase(Name) = 'farming shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95CE410E80200' +
'C44D12B4D5B405C160CF73F92C461D1C498E0E6D374F1280402EB' +
'68A30B6B559340150D25F5F95ED55392D556735365BBA96B661DE' +
'7F025E031F192A9D1E75CAA1D52A2CFD2E42FFB7234BFE478FF8E' +
'9CE7128332E72FEDAF1C2FDF91A319E51BD93562F0');
color := 1918090;
end;
if (LowerCase(Name) = 'slayer master') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAA5D04B0AC030' +
'0804D02B8D89A5CD320D9DFB1FA9BF8D622D8582B810E6210381A' +
'00EAC1CA2A85461E3F34C1CB366FBCE7634F6533C4C04D9FAEE62' +
'84ECF22EDB3F9D53B89525CADF7F4E1BB864B77FB411B359C351D' +
'E019F8C655C');
color := 7666933;
end;
if (LowerCase(Name) = 'herbalist') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA7D8E5D0AC0300883' +
'AFA4FDD33E5AC6EE7FA415C258C0D10A22267E8DA8EC5A253C9CB' +
'B5EF5166D7D4C89DE6DE9C45C6DF8BB1733FBBB15FD0A1B10B001' +
'99F9CCC42C5AB77B16DFEF4C86BF370B355C653272428513EA990' +
'C3FF3393954EEFC2327CFE4CCCFC933136A263F5CC35F29');
color := 682309
end;
if (LowerCase(Name) = 'candle shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA33303400422723' +
'470B470B4CD2CDD0C2D5C01042BA9ABB9A9A3A218BE0D26560888' +
'0B8D4209B8F6CB2A591051040488A4C367035753571317136B134' +
'8390B8CC1CEA26030022F6653F');
color := 6022631;
end;
if (LowerCase(Name) = 'saw mill') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DAB58EB10DC03008045' +
'70A600C2EFDF1FE33450A299088A53469AEB08FD3D3498D7861C9' +
'3A2A4D3ABA0FF1E99619EFBB2BBA9B54CA0A157D69C66FED87FFA' +
'55CD7663FF7C30120F87173EEEFCA266DF2431F0AB6E11D3C770C' +
'A76EBE00CD48658B');
color := 8882835;
end;
if (LowerCase(Name) = 'kebab shop') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA7DD0410E4321080' +
'4D02B8922C812F473FF2335E97441627E3713A399274A4A83DA91' +
'D3F75353D670B2877733DDE143122987981AF248F092BB4B5F932' +
'E192D986F895BBA51D06FFD5FAE26E6412BCFE9AE48ECBBE9E055' +
'5F51FD5BCE787277C8A1A632EF3921E3D453F79C3164D2821F12D' +
'D5F7F03DDAA455B3E1B1C4C8BB42636962647679855FE005B3666' +
'35');
color := 7316427;
end;
if (LowerCase(Name) = 'short cut') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8D90410AC0300804' +
'BFA421A1E95137EDFF9F54E8F62088259741161D64C5B4E98573E' +
'9821B1A206E3EE49F5DAC1F835724F36F7E9D12CCD370DBE40EE7' +
'9854FE9864330DF993C8ECC9CC66F65039F7FD551B3BDCFFF9018' +
'756682E');
color := 5286667
end;
if (LowerCase(Name) = 'hunter store') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA95D0510AC3300' +
'806E02BC558CDEFA309F6FE47DAC08E3942A143F041934FB1517B' +
'87C78447CD76BA591CCA445015EE5DD641C459F9D4F554C997F56' +
'FA36FEC3204819E663A77F25CAE633C972F01BC48AAB9FBB9C373' +
'79DFB6E69C98DDE1E0813FAE1106FCF897564C992A6277F20B925' +
'96443');
color:=1261916;
end;
if (LowerCase(Name) = 'hunter training') then
begin
Bitmap := BitmapFromString(15, 5, 'z78DA8DCF410A00' +
'210C03C02FC52D76E9B18AFFFF92B0EB2150025E728876AC78916' +
'8D3678C55D360F6F89FE919211B9EC267A2C87CB32F6FFD08EC70' +
'CF6FDDC8D554597F712FF3AC3AE546C96A1FE573B2BC0197F063A' +
'B');
color:=10398118
end;
if (Bitmap = 0) then
begin
WriteLn('Please enter a valid symbol name');
Exit;
end;
Findx := MMX1
Repeat

FindDeformedBitmapToleranceIn(Bitmap, cx, cy, FindX, MMY1, MMX2, MMY2, 70, 0, True,
acc);
if (acc > SymbolAccuracy) then
begin
Result := Result + 1
Findx := CX + 15
end;

Until ((acc < SymbolAccuracy) or (Findx > 718))
FreeBitmap(Bitmap);
end;

XcanadamanX

2007-03-18 12:36:22

very nice. that will be good for lumby and other places. i didnt add double symbols to my list because we didnt have a symbol counter.

ruler

2007-03-18 15:22:01

Perhaps some independence, so code for this framwork also works on my "Path" framework.

toMine = new Path(this);
toMine.add(new SymbolTile(0, 0, MiniMap.SYMBOL_BANK));
toMine.add(new RoadTile(-38, -13));
toMine.add(new RoadTile(-48, -292));
toMine.add(new RoadTile(-156, -336));
toMine.add(new RoadTile(-167, -387));
toMine.add(new Tile(-163, -479));
toMine.add(new SymbolTile(-153, -526, MiniMap.SYMBOL_MINING_SPOT));
In-depth explaination: http://www.rscheata.net/tp/index.php/topic,2703.0.html

m0u53m4t

2007-03-18 16:10:34

So basically… You're going to let us do all the coding and then leach…

Lol jk :p

ruler

2007-03-18 17:10:38

All the coding? I make my paths with ms paint they take 1 minute to make.

Devlopment time is spent mostly on framework not on the scripting of the framework.

TOB

2007-03-18 17:21:22

The best way to count symbols would be to draw the minimap to debug count a symbol then use debug to change the colors on it and attempt to search for the same symbol.

m0u53m4t

2007-03-18 17:44:45

True. So how could we impliment your method into SRL?

omgh4x0rz

2007-03-18 18:16:01

Hey, I'd love to help? Any specific locations you need coded?

XcanadamanX

2007-03-18 19:01:57

pick one and if its been done we'll pick the best one.

Boreas

2007-03-18 19:44:33

ruler: By independence do you mean not having to always start with a symbol for stations?

TOB: good idea

XcanadamanX

2007-03-19 21:14:12

anyone made a finder thingy for lumbridge? if so please tell me or i will probably make one tomorrow.

Boreas

2007-03-19 22:52:34

I was going to write one using stuff from http://www.srl-forums.com/forum/lumbridge-t5744.html?t=5744 but I won't get around to it for bit, so go ahead.

XcanadamanX

2007-03-22 20:06:47

boreas i got my walk to fally from lum to work pretty good. still testing but it will be good really soon. i still havent gotten the lumbridge finder to work constantly. if you have time i would say yours will be better than mine is.

Boreas

2007-03-23 00:27:52

Sounds good.
With mousemat's symbols and my doors and ladders, I think I can get it done this weekend. We will see.

Has anyone got a generic symbol bitmap/dtm that will work for any symbol?

Ejjman

2007-03-27 02:06:17

Here's what I got

-Lumbridge –> ChickenPen (90% of the time)
-Lumbridge –> VarrockEastBank (2 tests, perfect)
-ChickenPen –> VarrockEastBank (2 tests, perfect)

And plan to make more. But those are for sure, so don't make them. :)

syberium

2007-03-28 21:39:51

Hey im glad to see this is being devoloped :) i will help in any way i can, just tell me what u need ill do what i can for ya guys. =]

m0u53m4t

2007-03-29 12:15:08

@Ejjman: How can Lumby to VEB work, but not to chicken coop? :p

Boreas

2007-03-29 17:36:30

Gate

Junior

2007-03-29 17:47:53

I'd like to proticipate(is thats how you spell it), what can I do? If theres anything for me to do that is.

Boreas

2007-03-29 17:53:16

Pick a place you want to walk to that has a symbol. Write a function that will return true when you are in that area, but will return false anywhere else on the f2p map. That's how to make a station detector.

To make a path, write a function that walks from one station to another.

XcanadamanX

2007-03-29 17:54:20

theres lots of things to do like make walking procs or place finders.

edit: damn boreas beat me to it.

Ejjman

2007-03-29 18:43:45

From: m0u53m4t
@Ejjman: How can Lumby to VEB work, but not to chicken coop? :p


From: Boreas
Gate



Yep. But thats prettymuch good, I've got like 95% on both :D

Working on my other script now ^^

m0u53m4t

2007-03-30 10:40:57

Awesome. Lookin good guys!

Boreas

2007-04-04 15:10:43

Check this out
http://www.pastebin.ca/424351

You need the include DoorProfiles.scar, which is the first code box in my tutorial Doors, link in sig.

And you need to save this uppit.com/2Q6ZD to you SCAR folder


At the moment, it's just good for saying whether or not there is a symbol (any symbol) on the minimap.

It displays tpoint arrays, one at a time. As you can see, there isn't one TPA per symbol. Once I figure out a good way to tell which TPAs are part of the same symbol, it will tell you how many symbols there are. And maybe even how many fully visible circles there are.

Markus

2007-04-18 11:39:52

About counting colors, Findcolorstolerance should do the trick, see test/FindColorsTest.scar to view the syntax and all.
I think we should give every station coords, and then make a algorithm that will choose a route from one station to another. So you only have to call a function like WebWalkTo('VEB'), while you're in Falador. It will detect the current station and choose the correct route. I know it'll be hard, but it's possible I think.

Boreas

2007-04-18 13:25:49

GetPixelsD/GetPixels also works.


Yup that's what I said on the first post.
From: Boreas
Each station has a unique number, which I will assign to it once you have submitted it. They will also have an x,y relative to lumbridge tele point, measured in pixels on a jpeg.This can be approximate, RoutePicker just needs it to know it's going in the right direction. They will also each have a unique name, and I'll write function NameToNumber(Name:string):integer to make using RoutePicker easier. BTW, you don't have to use RoutePicker, you can manually give WalkRoute your own list of stations.

Markus

2007-04-18 13:50:21

I really need to read the first post.
*quickly goes back to the first page and reads that very long post of Boreas*
Ok, I understand. Sorry for not fully reading your post.
But how do you determine how relative it is to Lumbridge. Pixels difference on the official Minimap? Tiles like Moparscape can show them? Or some other method?

Boreas

2007-04-18 14:32:50

Yea a map. It doesn't have to be perfect like tiles. RoutePicker will pick one of the shortest routes randomly, so it won't always be the shortest route anyway.

Without this x,y, RoutePicker would look at all paths coming of a station, and all the paths coming of those stations, etc etc to make lots of combinations. The problem is, there would be infinite combinations, and most of them would be going in circles. So with the x,y RoutePicker will figure out the angle from current station to end station, and only look at the stations connected it to it 2 deep (all the friends of your friends) 90 degrees counterclockwise from that angle, and 90 degrees clockwise from it. This way it will head in the general correct direction.

The only way this can screw up, is if there is

StationA has multiple paths attached, on one of those paths is StationB, which has 2 paths, one to StationA, and the other to StationC, which only has the one path (the one to StationB). If the angle from A to C is within 90 degrees of the angle from A to destination, and its the only one, then it will head to C and be stuck at a dead end. This is why before a station is added to the system, it will first need a few paths to stations already in the system.

Eventually I will add in a failsafe to think ahead in the route, and backtrack paths if it runs into a dead end or goes too far off course.

cause

2007-04-24 01:19:25

Ok, this looks like a sweet project. Heres my input:

1. If you could, add a "station" to every spot that has more than 2 roads coming out of it (ie, T's and X's and so forth)
2. How do you keep track of which station is which? How would it be relevant to the scripter, or, do you want this to be a complete package which the scripter inputs where he wants to start, then where he wants to end? Basically, do the devs or the scripters do the figuring out where station 94573 is. (lol)
3. Probably want to add some top level debugging elements for when Jagex changes the route between station 345623 and 345624.

Sweet project, good luck! I'd would want to help/learn walking but school is killing me (not literary, well, almost not really)

-cause

Boreas

2007-04-24 03:43:57

1. Those can be path internal stations, like checkpoints, failsafes, make sure you at this point. Or you can write a mini path, from a symbol station to crossroads, and that can be reused as part of other paths. However they will not be a real station in WhereAmI because it will lag too much if I just make it check every station. I do have some ideas on detecting crossroads, and I will post them for you to use in paths.

2. I'm not sure what your question is, but I think the answer is 'be a complete package which the scripter inputs where he wants to start, then where he wants to end'.

3. You will be able to remove the problem stations/paths from the list and RouterPicker will just find another way.

omgh4x0rz

2007-04-24 07:47:46

Should we write procedures going both ways? Like people can walk from lumby to chicken coop, but what if they want to walk from chickens to lumby?

Markus

2007-04-24 13:00:01

It has path finding. You just script something like webwalkautoroutepicker('chickenpen', 'lumby');

Smartzkid

2007-04-24 15:52:17

He's talking about the process of making the paths.

I think boreas said that, at first, all paths will start at lumbridge and go out, but afterwards they'd start coming back in, too.

Simple answer: You don't have to write a procedure for both ways, but it won't hurt

Boreas

2007-04-24 17:17:27

Yes SK is right. You can write a path from whatever station to whatever station you want. A to B will be a separate function than B to A.

Ejjman

2007-04-24 19:29:10

From: omgh4x0rz
Should we write procedures going both ways? Like people can walk from lumby to chicken coop, but what if they want to walk from chickens to lumby?


Lol, tele to lubmy button ^.^

omgh4x0rz

2007-04-24 20:05:20

haha, nice try. I asked what to do if they wanted to walk ;)

Boreas

2007-04-24 22:53:54

From: Ejjman1
Lol, tele to lubmy button ^.^


What if you want to bank in lumby more than twice an hour?

cause

2007-04-25 14:59:10

Isn't the regen time about 20 minutes?

XcanadamanX

2007-04-25 15:10:58

30 mins actually.

The Claw

2007-05-29 02:15:11

cant wait till this has been made and we can all start making stations, this will be a revolution for the way things are scripted.

USMC

2007-05-29 07:24:04

Boreas I love you ;)
if you need any help im a willing volunteer ;)