SRL Archive - SRL Archives

Devs Need Random Accounts


Wanted

2011-01-18 01:45:13

There has been a recent refocus on the randoms system and patching them before SRL 5 is released. There is even rumor that Iroki himself is returning to help out. Below is the current state of random solvers and below that is a set of instructions.

Almost always working
Mainly working
Rarely working
Not working


  • Reward Box Oct 29, 2011 No known problems.
    1. NCDS
    2. Abyss Nov 1, 2011 Will guess its way out.
      1. NCDS
      2. BeekeeperNov 1, 2011 No known problems
        1. NCDS
        2. CapNArnav Nov 1, 2011 No known problems
          1. NCDS
          2. Certer Nov 1, 2011 Need to update other items.
            1. NCDS
            2. Demon Nov 9, 2011 Working
              1. NCDS
              2. EvilBob Nov 1, 2011 No known problems
                1. NCDS
                2. Forester Nov 1, 2011 Needs fixing
                  1. NCDS
                  2. Frog Nov 1, 2011 No known problems
                    1. NCDS
                    2. Leo Nov 1, 2011 Major tweaks, was fully working until something updated.
                      1. NCDS
                      2. Maze Jan 28, 2010
                        1. NCDS
                        2. Mime Oct 10, 2010 Solving code in progress…
                          1. NCDS
                          2. Molly Oct 10, 2010 Minor tweaks
                            1. NCDS
                            2. Mordaut Nov 1, 2011 Rewriting/Fixing
                              1. Markus
                              2. NCDS
                              3. Pillory Nov 1, 2011 No known problems
                                1. NCDS
                                2. Pinball Nov 1, 2011 No known problems
                                  1. NCDS
                                  2. PrisonPete Oct 10, 2010 Unknown, tests need to be run and tweaks be made.
                                    1. NCDS
                                    2. ^which ever dev is online, very important this random expires in 15 minutes after you get it. If it's not expired and If no one gets it just start running the script at the bottom of this posts to take screen shots of the animal screen when you pull the lever. See this post http://villavu.com/forum/showpost.php?p=769680&postcount=25
                                    3. Quiz Nov 1, 2011 No known problems.
                                      1. NCDS
                                      2. Sandwich Nov 1, 2011 Minor tweaks, this code hasn't been tweaked in a while.
                                        1. NCDS



                                        Please don't private message your main accounts to someone unless you really feel comfortable and trust them, we are really only asking for bot accounts that aren't important.

                                        Some randoms are unclaimed at the moment, check back for updates regarding that – its user discretion to decide where to send unclaimed random accounts to, please don't send to inactive devs, if they don't respond back send it to someone else until they respond, also if multiple are listed please send it to all of them.

                                        It is appreciated that you mention whether the current colour random solver failed to solve on the account, or if you manually stopped the script/action as soon as the random appeared. This would aid us significantly with ironing out bugs :)

                                        Sincerely,

                                        -The SRL Randoms Development Team.

                                        Markus

                                        2011-01-18 11:09:24

                                        We should reinstate the dev random character army, which basically was creating 20 accounts then chickenkilling with bone burying on them (gives lots of randoms).

                                        Nava2

                                        2011-01-18 12:49:17

                                        Anyone who wants to help out/support us with this:

                                        DEVS NEED RANDOM ACCOUNTS![PHP]DEVS NEED RANDOM ACCOUNTS![/PHP]

                                        E: Looks better in signature lol… feel free to modify it haha.

                                        Becks

                                        2011-01-18 12:54:01

                                        I have had mime solve for me.
                                        The one thing I have seen that hurts solving some randoms is when you are doing a task while having a full inventory. For example when you are pulled into a random while cooking you have a full inventory and some randoms require you to collect items. Since your inventory is full you can not collect the desire items; which makes you look like a bot.
                                        Incorporating a feature where you deposit 10 items before attempting to solve would be a great addition.

                                        Just a few thoughts.
                                        …Becks

                                        Nava2

                                        2011-01-18 12:58:50

                                        From: Becks
                                        I have had mime solve for me.
                                        The one thing I have seen that hurts solving some randoms is when you are doing a task while having a full inventory. For example when you are pulled into a random while cooking you have a full inventory and some randoms require you to collect items. Since your inventory is full you can not collect the desire items; which makes you look like a bot.
                                        Incorporating a feature where you deposit 10 items before attempting to solve would be a great addition.

                                        Just a few thoughts.
                                        …Becks


                                        This would be easy to implement, but I definitely say it should be added as a hook into SRL then the scripter can decide on items etc to deposit.

                                        It would use a functional pointer, something like:

                                        var // deposit the returned slots to make space. 
                                        srl_OnRandom_InventorySpace: function: TIntegerArray;

                                        Harry

                                        2011-01-18 13:06:02

                                        From: Markus
                                        We should reinstate the dev random character army, which basically was creating 20 accounts then chickenkilling with bone burying on them (gives lots of randoms).

                                        I can run easily 4 RSes at once, 2 usernames (or more) per client. Pop me up with a good "stable" script (i.e. won't stop working unless a random hits it) and army and I will help with it!

                                        Wanted

                                        2011-01-18 14:16:47

                                        From: Becks
                                        I have had mime solve for me.
                                        The one thing I have seen that hurts solving some randoms is when you are doing a task while having a full inventory. For example when you are pulled into a random while cooking you have a full inventory and some randoms require you to collect items. Since your inventory is full you can not collect the desire items; which makes you look like a bot.
                                        Incorporating a feature where you deposit 10 items before attempting to solve would be a great addition.

                                        Just a few thoughts.
                                        …Becks


                                        I know I made something similar for leo that would deposit the bottom couple of items to make room for coffins.

                                        Thanks for all the PMs guys, keep them coming.

                                        If any devs want to claim a random I'll add you to the first post.

                                        **BANNED The Man

                                        2011-01-18 14:29:09

                                        Can non-devs "claim" randoms?
                                        Just tell me what you need and I am happy to oblige :)

                                        -Boom

                                        Hugolord

                                        2011-01-18 14:30:00

                                        A list of all random developers would be useful. I usually pm all my players stuck in randoms (as i did for cap arav) to mormonman although I would not mind pming any other dev if he is available and mormonman is unavailable :).
                                        My bad, didn't see your updated post.

                                        Wanted

                                        2011-01-18 14:42:30

                                        From: Dynamite
                                        Can non-devs "claim" randoms?
                                        Just tell me what you need and I am happy to oblige :)

                                        -Boom


                                        Well if you think you have what it takes to write color random solvers then you can always ask for specifics in your sig. Or you can talk to one of us about it and we can pass along information and share/collaborate.

                                        Nava2

                                        2011-01-18 15:15:23

                                        Any of the active developers would gladly oblige with the gaining of accounts.

                                        I'd like to work on Mime.. love some accounts as it goes. :)

                                        I already have a strategy, I just need to implement it.

                                        **BANNED The Man

                                        2011-01-18 15:18:03

                                        I would like to give Certer a go? :)

                                        RudeBoiAlex

                                        2011-01-18 16:10:53

                                        I support this, as soon as i get a random i will message a Dev a.s.a.p

                                        NCDS

                                        2011-01-18 16:21:44

                                        From: Markus
                                        We should reinstate the dev random character army, which basically was creating 20 accounts then chickenkilling with bone burying on them (gives lots of randoms).


                                        What about Tara's accounts, are they still ran often? every time I check they are pretty much the same spots as last time.

                                        Also, if the arnav_ExitPortal bug gets fixed please let me know so I can stop looking for an account…

                                        Wanted

                                        2011-01-18 19:06:30

                                        From: Nava2
                                        Any of the active developers would gladly oblige with the gaining of accounts.

                                        I'd like to work on Mime.. love some accounts as it goes. :)

                                        I already have a strategy, I just need to implement it.


                                        I can put you down for Mime.

                                        From: NCDS
                                        What about Tara's accounts, are they still ran often? every time I check they are pretty much the same spots as last time.

                                        Also, if the arnav_ExitPortal bug gets fixed please let me know so I can stop looking for an account…


                                        I committed that thing you posted the other day, haven't tested or heard anything about it though.

                                        NCDS

                                        2011-01-18 19:30:02

                                        From: IceFire908

                                        I committed that thing you posted the other day, haven't tested or heard anything about it though.


                                        That was just updated colors for arnav_FixLock. arnav_ExitPortal works just fine, but it results false, AFAIK that's the only existing bug with the solver. I guess you could sort of "half-ass" fix it without even being in the random, but I would rather debug and see why it results false and actually fix it.

                                        I'm actually creating some accounts right now to just run for randoms.

                                        Overtime

                                        2011-01-18 20:09:50

                                        Um, I still have like 60+ accounts with randoms in them. (I think)

                                        I havent gone through them as im lazy enough. I just can't guarantee if there in randoms or not.

                                        I had did a suicide run before i left and they all eventually got set to false.

                                        NCDS

                                        2011-01-18 20:14:22

                                        From: Squancy
                                        Um, I still have like 60+ accounts with randoms in them. (I think)

                                        I havent gone through them as im lazy enough. I just can't guarantee if there in randoms or not.

                                        I had did a suicide run before i left and they all eventually got set to false.


                                        IIRC you had a file with all details? Would you mind me/dev's using them? I would at least like to finish fixed arnav if others dev's already 'claimed' the other randoms.

                                        Overtime

                                        2011-01-18 20:34:39

                                        Yes ncds i will send them to you as you are my most trusted source.

                                        Give me a sec i will pm you.

                                        NCDS

                                        2011-01-18 21:02:00

                                        From: Squancy
                                        Yes ncds i will send them to you as you are my most trusted source.

                                        Give me a sec i will pm you.


                                        Thank you very much! <3 :)

                                        Pillory confirmed working.

                                        Overtime

                                        2011-01-18 21:31:22

                                        Can you take a note on how many have randoms, and how many didnt?

                                        I would like to know if my suicide was somewhat of a sucess. If its to late its cool.

                                        Im just now wondering about it lol.'

                                        Im glad to help!

                                        NCDS

                                        2011-01-18 21:33:57

                                        From: Squancy
                                        Can you take a note on how many have randoms, and how many didnt?

                                        I would like to know if my suicide was somewhat of a sucess. If its to late its cool.

                                        Im just now wondering about it lol.'

                                        Im glad to help!


                                        Only made it to number 6 so far :P

                                        I've got to get to bed in just a minute, but they look promising so far. :)

                                        Thanks again, it's greatly appreciated. :)

                                        I'm going through as many as I can right now and writing down which ones are in which randoms to have an organized list.

                                        Frog confirmed working.

                                        Overtime

                                        2011-01-18 22:22:32

                                        sweet thanks so much. Im boud to have about 6 that arent in randoms and they randomly messed up :/

                                        Glad im helping out as much as possible!!!!

                                        Wanted

                                        2011-01-19 01:13:42

                                        Updated Abyss!! Thanks Heysus for the account!

                                        Wanted

                                        2011-01-19 01:43:04

                                        '^which ever dev is online, very important this random expires in 15 minutes after you get it. If it's not expired and If no one gets it just start running the script at the bottom of this posts to take screen shots of the animal screen when you pull the lever. See this post http://villavu.com/forum/showpost.php?p=769680&postcount=25 "

                                        for prison pete copy and paste the script below

                                        begin
                                        ActivateClient;
                                        Wait(1000);
                                        repeat
                                        SaveScreenShot(ScriptPath + IntToStr(GetSystemTime) + '.bmp');
                                        Wait(500);
                                        until (False);
                                        end.

                                        and save it as Screen Taker in a folder somewhere named Prison Pete. Then log in to the account on one world and pull the lever to view the animal screen. Run the script for about 10-30 seconds so it saves a picture of all the different angles. Then terminate the script, logout, go back to the runescape homepage, reload the client. REMEMBER SAFE MODE!!! (Tap S when loading up, you can check if your in safe mode before you log in with your graphic settings -> custom -> safe mode, if you can't see it then you'll have to do it again) choose a different world and pull the lever again, run the script for another 10-30 seconds. Repeat this process until you have all 4 animals. Compress all the pictures in the folder into a .rar file and upload it to mediafire.com

                                        mormonman

                                        2011-01-19 11:01:16

                                        ^The random kicks you out when you log out.

                                        **BANNED The Man

                                        2011-01-19 12:09:42

                                        Squancy, would you mind if NCDS PM'ed me the accounts that are in the Certer random?

                                        -Boom

                                        Overtime

                                        2011-01-19 12:18:29

                                        From: Dynamite
                                        Squancy, would you mind if NCDS PM'ed me the accounts that are in the Certer random?

                                        -Boom


                                        I dont know you.

                                        I thought Certer was solved?

                                        **BANNED The Man

                                        2011-01-19 12:19:35

                                        Certer - Rarely Working.

                                        But no worries.

                                        Wanted

                                        2011-01-19 14:01:42

                                        From: mormonman
                                        ^The random kicks you out when you log out.


                                        Since when? It's always been 15 minutes, otherwise how would of I gotten to view it last night if someone passed me their account?

                                        mormonman

                                        2011-01-19 14:27:07

                                        From: IceFire908
                                        Since when? It's always been 15 minutes, otherwise how would of I gotten to view it last night if someone passed me their account?


                                        By kicks out I mean it won't let you finish it.

                                        Wanted

                                        2011-01-19 14:30:21

                                        From: mormonman
                                        By kicks out I mean it won't let you finish it.


                                        Yea it will, it still lets you views the animal screen 15 minutes after you first get the random no matter how many times you log in or out.

                                        mormonman

                                        2011-01-19 14:42:17

                                        From: IceFire908
                                        Yea it will, it still lets you views the animal screen 15 minutes after you first get the random no matter how many times you log in or out.


                                        Hmm they must have changed it since the last time I checked. Can you add my msn(the_dog_hunter@hotmail.com), then possibly we could share accounts that are in the random so I can solve it with reflection too.

                                        Wanted

                                        2011-01-19 20:48:34

                                        Added you MM. Updated beekeeper.

                                        NCDS

                                        2011-01-19 20:53:59

                                        Quiz is done: http://villavu.com/forum/showthread.php?p=769968#post769968

                                        Certer is on it's way.

                                        Naum

                                        2011-01-25 13:59:25

                                        Please keep the accounts coming people :). The first post has been updated accordingly

                                        Overtime

                                        2011-01-25 15:27:17

                                        Im sure NCDS has his hands full :)

                                        Im sent him about 50+ accounts to him.

                                        But i dont really know how many of them have randoms.

                                        But yes just send more so the devs can keep testing them and make sure there not bugged up.

                                        marpis

                                        2011-01-26 13:38:20


                                        ***** STR: FOUND RANDOM: 'Frog' *****
                                        Screenshot of: Found Frog random 0 Seconds
                                        Princess not found!
                                        Trying to click a frog...
                                        ***** STR: 'Frog' RANDOM SOLVED SUCCESSFULLY! *****

                                        :)

                                        grats

                                        2011-01-26 13:44:56

                                        I have two in randoms that I know of, checking others etc

                                        One is in evil bob's place where you have to pop the little animals to get a key, he hit the lever and in the debug said he got the ID but then popped the wrong animal, this happened 3 times and I just shut it off and logged him out.
                                        Is this "evilbob" ?


                                        Also have one in the dragon guys classroom is that "quiz" ?

                                        Naum

                                        2011-01-26 14:43:36

                                        From: grats
                                        I have two in randoms that I know of, checking others etc

                                        One is in evil bob's place where you have to pop the little animals to get a key, he hit the lever and in the debug said he got the ID but then popped the wrong animal, this happened 3 times and I just shut it off and logged him out.
                                        Is this "evilbob" ?


                                        Also have one in the dragon guys classroom is that "quiz" ?


                                        Balloon Animals and Lever - PrisonPete (This is broken, we know)
                                        Dragon guy - Mordaut
                                        :)

                                        Train

                                        2011-01-26 14:54:19

                                        If you handed me a few accounts I could work on solving them (reflection), as someone said NCDS has his hands full?

                                        marpis

                                        2011-01-27 10:47:50

                                        Certersolver could not identify it was a kiteshield :-\

                                        ***** STR: FOUND RANDOM: 'Certer' *****
                                        Screenshot of: Found Certer random 41 Minutes and 42 Seconds
                                        We are in the Certer random...
                                        Possible Items:
                                        battleaxe
                                        shears
                                        shield
                                        Analysing Item...
                                        Avg Count: 2209
                                        Avg Width: 69
                                        Avg Height: 52
                                        Avg Area: 3653
                                        Avg Cover: 59
                                        Unable to identify Certer item. If convenient please send this account to a SRL Development Team member at [url]http://www.villavu.com/[/url]
                                        GetItem gave ''

                                        NCDS

                                        2011-01-27 16:12:46

                                        From: marpis
                                        Certersolver could not identify it was a kiteshield :-\

                                        ***** STR: FOUND RANDOM: 'Certer' *****
                                        Screenshot of: Found Certer random 41 Minutes and 42 Seconds
                                        We are in the Certer random...
                                        Possible Items:
                                        battleaxe
                                        shears
                                        shield
                                        Analysing Item...
                                        Avg Count: 2209
                                        Avg Width: 69
                                        Avg Height: 52
                                        Avg Area: 3653
                                        Avg Cover: 59
                                        Unable to identify Certer item. If convenient please send this account to a SRL Development Team member at [url]http://www.villavu.com/[/url]
                                        GetItem gave ''

                                        That's what I'm on to right after I get Arnav finished. A couple different records need to be updated I believe, but I know shield is one of them. I might end up just doing this first then going back to Arnav actually as this will probably be quicker.

                                        marpis

                                        2011-01-28 10:52:04

                                        Problem with Abyss: it clicked the right one immediately, but after getting out it still though it was in the random and was about to guess when I stopped it.

                                        ***** STR: FOUND RANDOM: 'Abyssal Teleport' *****
                                        Screenshot of: Found Abyssal Teleport random 13 Minutes and 53 Seconds
                                        Pink found in North.
                                        Pink found in East.
                                        Pink found in South.
                                        Arm found in West.
                                        'Eye count: 0'
                                        'Gray count: 0'
                                        'Pink count: 3'
                                        'Arm count: 1'
                                        'Found unique! Arm in West.'
                                        ** Warning in SolveAbyss: Failed finding right answer. Retrying, attempt #1.**
                                        Arm found in North.
                                        Arm found in East.
                                        Arm found in South.
                                        Arm found in West.
                                        'Eye count: 0'
                                        'Gray count: 0'
                                        'Pink count: 0'
                                        'Arm count: 4'
                                        No uniques found!
                                        Guessing..

                                        Naum

                                        2011-01-28 20:23:32

                                        From: marpis
                                        Problem with Abyss: it clicked the right one immediately, but after getting out it still though it was in the random and was about to guess when I stopped it.

                                        ***** STR: FOUND RANDOM: 'Abyssal Teleport' *****
                                        Screenshot of: Found Abyssal Teleport random 13 Minutes and 53 Seconds
                                        Pink found in North.
                                        Pink found in East.
                                        Pink found in South.
                                        Arm found in West.
                                        'Eye count: 0'
                                        'Gray count: 0'
                                        'Pink count: 3'
                                        'Arm count: 1'
                                        'Found unique! Arm in West.'
                                        ** Warning in SolveAbyss: Failed finding right answer. Retrying, attempt #1.**
                                        Arm found in North.
                                        Arm found in East.
                                        Arm found in South.
                                        Arm found in West.
                                        'Eye count: 0'
                                        'Gray count: 0'
                                        'Pink count: 0'
                                        'Arm count: 4'
                                        No uniques found!
                                        Guessing..


                                        Cheers for that mate, did you leave the account in the random/managed to resolve the issue?

                                        NCDS: If you need help with any of that feel free to ask :)

                                        marpis

                                        2011-01-29 12:34:07


                                        ***** STR: FOUND RANDOM: 'Drill Demon' *****
                                        Screenshot of: Found Drill Demon random 1 Hours, 14 Minutes and 37 Seconds
                                        Screenshot of: Found Demon 1 Hours, 14 Minutes and 39 Seconds
                                        Star
                                        1: Jog mat
                                        2: Star Jump mat
                                        3: Sit-up mat
                                        4: Push-up mat
                                        Jog
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Star Jump mat
                                        3: Sit-up mat
                                        4: Jog mat
                                        Sit
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Sit-up mat
                                        3: Star Jump mat
                                        4: Jog mat
                                        Push
                                        1: Sit-up mat
                                        2: Push-up mat
                                        3: Star Jump mat
                                        4: Jog mat
                                        Sit
                                        1: Push-up mat
                                        2: Jog mat
                                        3: Star Jump mat
                                        4: Sit-up mat
                                        ***** STR: 'Drill Demon' RANDOM SOLVING FAILED! *****

                                        It actually solved the random and got teleported away.

                                        Naum

                                        2011-01-29 16:34:52

                                        From: marpis

                                        ***** STR: FOUND RANDOM: 'Drill Demon' *****
                                        Screenshot of: Found Drill Demon random 1 Hours, 14 Minutes and 37 Seconds
                                        Screenshot of: Found Demon 1 Hours, 14 Minutes and 39 Seconds
                                        Star
                                        1: Jog mat
                                        2: Star Jump mat
                                        3: Sit-up mat
                                        4: Push-up mat
                                        Jog
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Star Jump mat
                                        3: Sit-up mat
                                        4: Jog mat
                                        Sit
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Sit-up mat
                                        3: Star Jump mat
                                        4: Jog mat
                                        Push
                                        1: Sit-up mat
                                        2: Push-up mat
                                        3: Star Jump mat
                                        4: Jog mat
                                        Sit
                                        1: Push-up mat
                                        2: Jog mat
                                        3: Star Jump mat
                                        4: Sit-up mat
                                        ***** STR: 'Drill Demon' RANDOM SOLVING FAILED! *****

                                        It actually solved the random and got teleported away.


                                        Demon_InRandom seems to be the only function which would cause that to happen. Will look into it if I get accounts.

                                        EDIT: Demon_InRandom must be working fine, it seems to be a problem as to where it's called in the solver.

                                        NCDS

                                        2011-01-29 16:41:08

                                        From: Naum
                                        Demon_InRandom seems to be the only function which would cause that to happen. Will look into it if I get accounts.

                                        EDIT: Demon_InRandom must be working fine, it seems to be a problem in where it's called in the script.


                                        Or if 'FindNPCChatText('actually', Nothing)' never returned true. I'm leaving right now to take Nate to my friends kids birthday party but when I get home we can consult on it a bit if your on.

                                        Naum

                                        2011-01-29 16:45:14

                                        From: NCDS
                                        Or if 'FindNPCChatText('actually', Nothing)' never returned true. I'm leaving right now to take Nate to my friends kids birthday party but when I get home we can consult on it a bit if your on.


                                        It can't be that, it has a TimeMark which would cause it to break out of the loop and debug. Besides marpis stated that it exited the random.

                                        NCDS

                                        2011-01-29 16:49:22

                                        From: Naum
                                        It can't be that, it has a TimeMark which would cause it to break out of the loop and debug. Besides marpis stated that it exited the random.


                                        I was thinking that maybe it solved it within the 10 minutes, but never found the NPCChatText, but I guess that wouldn't work because there is no ClickToContinue that should work in that loop.

                                        Either way, I'll be home at 8 EST and plan on sitting down for a few hours. *hint* be on ;)

                                        Naum

                                        2011-01-29 16:58:20

                                        From: NCDS
                                        Either way, I'll be home at 8 EST and plan on sitting down for a few hours. *hint* be on ;)


                                        8 EST would be 1 AM in England

                                        NCDS

                                        2011-01-30 19:16:16

                                        Demon solved perfect for me:

                                        Compiled succesfully in 624 ms.
                                        SRL Compiled in 15 msec
                                        Screenshot of: Found Demon 0 Seconds
                                        Sit
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Sit-up mat
                                        2: Jog mat
                                        3: Star Jump mat
                                        4: Push-up mat
                                        Push
                                        1: Push-up mat
                                        2: Sit-up mat
                                        3: Jog mat
                                        4: Star Jump mat
                                        Push
                                        1: Star Jump mat
                                        2: Jog mat
                                        3: Sit-up mat
                                        4: Push-up mat
                                        Star
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Star Jump mat
                                        3: Jog mat
                                        4: Sit-up mat
                                        Jog
                                        1: Sit-up mat
                                        2: Jog mat
                                        3: Push-up mat
                                        4: Star Jump mat
                                        Successfully executed.

                                        However, this bit:

                                        if (Result) then
                                        Writeln('Demon random solved!');
                                        was clearly never called. Still not sure why but I'll continue to look though it's not a priority as the solver works and I have a loong list to tackle.

                                        Heavenzeyez1

                                        2011-01-31 03:28:49

                                        I watched molly solving - perfect!
                                        ~Eerik.

                                        marpis

                                        2011-02-02 06:29:34

                                        Suggestion to prevent false negatives

                                        t := getsystemtime + 10000;
                                        while (getsystemtime < t) do
                                        begin
                                        result := not InWhatEverRandom;
                                        if Result then
                                        begin
                                        Writeln('Solved successfully!');
                                        Exit;
                                        end;
                                        ClickToContinue(true, true);
                                        end;

                                        After every try to every solver, if they don't already have this?

                                        RudeBoiAlex

                                        2011-02-12 10:55:22

                                        I have a certer random, PM me if needed.

                                        Hugolord

                                        2011-02-12 11:22:47

                                        Took screenshots of the "rabbit" balloon in prisonpete, unfortunately when I logged back in it said I had already served my sentence. Who do I sent the uploaded link to? Don't really want non-devs to see my account names..

                                        Iroki

                                        2011-02-12 12:33:46

                                        As far as i know there is no rabbit one :) but maybe something have changed. Send this screens to me if You can :P

                                        Wanted

                                        2011-02-13 02:20:32

                                        Evil bob looks like it works but needs updating for the colors to pick net up off the ground and maybe other colors like for fish/fire/bob etc.

                                        NCDS

                                        2011-02-14 10:55:11

                                        From: IceFire908
                                        Evil bob looks like it works but needs updating for the colors to pick net up off the ground and maybe other colors like for fish/fire/bob etc.


                                        I second that. I'm going to take a shower, then I'll fix quick.

                                        Edit: Tested with two different accounts and they both solver perfectly. I'm not sure what the problem is but I had an account get stuck over night and it looks like it was searching for the net.

                                        If anyone happens to see, or catch the debug of what actually happens when/if this fails that would be very helpful.

                                        I'm going to run a few more tests myself.

                                        IceFire did it fail specifically when searching for the net for you?

                                        Wanted

                                        2011-02-14 14:13:17

                                        From: NCDS
                                        IceFire did it fail specifically when searching for the net for you?


                                        Yes

                                        NCDS

                                        2011-02-16 00:49:19

                                        From: IceFire908
                                        Yes


                                        I can't seem to recreate this problem for the life of me. I've tested 10+ times on different worlds and it works every time.

                                        Kind of confused on what to try now :confused:

                                        Edit: Just a heads up, Quiz should be Green as I fixed the detection a month or so ago. Also, Arnav should be yellow as it only solves ~25% of the time right now. Working on rewriting FixLock though..

                                        Wanted

                                        2011-02-16 13:57:43

                                        Well now it just logs out after catching the fish. You tested the entire solver? It looks like it works it just needs a minor update to some hard-coded information somewhere i.e. dtmFish, net colors, something.

                                        NCDS

                                        2011-02-26 13:29:56

                                        From: IceFire908
                                        Well now it just logs out after catching the fish. You tested the entire solver? It looks like it works it just needs a minor update to some hard-coded information somewhere i.e. dtmFish, net colors, something.


                                        Yeah I'll go through and make sure everything is updated, only takes a couple mins.

                                        @Everyone, Arnav is 95% done (really just optimizing the code now and running efficiency tests), but I could really use some accounts in the random that the goal target is not coins. It really shouldn't make a difference as it still uses Nielsie's equation for clicking, but I'd still like to test it.

                                        Arnav fix is posted here: http://villavu.com/forum/showthread.php?p=783177#post783177


                                        As for EvilBob…

                                        Compiled succesfully in 577 ms.
                                        SRL Compiled in 16 msec
                                        Found servent, Identifying statue...
                                        Statue Density Is = 0.46047619047619
                                        Found Statue in the East direction
                                        Retrieving a fishing net
                                        Retrieved the net!
                                        Fished the fish
                                        Walked to middle of island
                                        Un cooked the retarded fish :)
                                        Successfully executed.
                                        It still solves perfectly for me so I'm really not sure what the problem is for you Ice.

                                        Wanted

                                        2011-02-26 14:36:20

                                        From: NCDS
                                        Yeah I'll go through and make sure everything is updated, only takes a couple mins.

                                        @Everyone, Arnav is 95% done (really just optimizing the code now and running efficiency tests), but I could really use some accounts in the random that the goal target is not coins. It really shouldn't make a difference as it still uses Nielsie's equation for clicking, but I'd still like to test it.

                                        Arnav fix is posted here: http://villavu.com/forum/showthread.php?p=783177#post783177


                                        As for EvilBob…

                                        Compiled succesfully in 577 ms.
                                        SRL Compiled in 16 msec
                                        Found servent, Identifying statue...
                                        Statue Density Is = 0.46047619047619
                                        Found Statue in the East direction
                                        Retrieving a fishing net
                                        Retrieved the net!
                                        Fished the fish
                                        Walked to middle of island
                                        Un cooked the retarded fish :)
                                        Successfully executed.
                                        It still solves perfectly for me so I'm really not sure what the problem is for you Ice.


                                        Its worked for me the last few times now.

                                        Naum

                                        2011-02-28 10:34:02

                                        From: whacko999
                                        DEVS ASAP!
                                        [Abyss] Failed getting proper appendage in Abyssal random. Please report this to reflection developers!
                                        [Abyss] Setting #531: 0
                                        [Abyss] Warning, had trouble getting direction to press [attempt 1 of 3], PLEASE REPORT THIS NUMBER TO REFLECTION DEVS ASAP!
                                        [Abyss] Setting #531: 0
                                        [Abyss] Warning, had trouble getting direction to press [attempt 2 of 3], PLEASE REPORT THIS NUMBER TO REFLECTION DEVS ASAP!
                                        [Abyss] Setting #531: 0
                                        [Abyss] Warning, had trouble getting direction to press [attempt 3 of 3], PLEASE REPORT THIS NUMBER TO REFLECTION DEVS ASAP!

                                        Had this come up thought i would let you know


                                        That's the reflection solver, post in that section please :).
                                        This thread is for colour random solvers only.

                                        Jakkle

                                        2011-02-28 10:55:30

                                        From: Naum
                                        That's the reflection solver, post in that section please :).
                                        This thread is for colour random solvers only.


                                        sorry about that just posted in the right section thanks

                                        bolshak25

                                        2011-02-28 16:05:43

                                        any dev online? i got pinball and it says minor tweaks need to be made.

                                        Naum

                                        2011-02-28 16:27:31

                                        From: bolshak25
                                        any dev online? i got pinball and it says minor tweaks need to be made.


                                        Try running the solver on your system by calling FindNormalRandoms; or SolvePinball;
                                        If there's still a problem I'll be more than happy for you to PM me :)

                                        Wanted

                                        2011-02-28 22:34:37

                                        I have had a few accounts tuck in pinball lately.

                                        Coh3n

                                        2011-03-01 18:18:38

                                        If anyone gets any accounts with Reward Boxes, send them to me if you feel comfortable. I'm going to work on fixing the solving bugs.

                                        jokerv818

                                        2011-03-28 02:59:55

                                        i had a prison pete but I wasnt sure how to get in contact with u guys

                                        Sgt Soul

                                        2011-03-28 05:26:06

                                        From: jokerv818
                                        i had a prison pete but I wasnt sure how to get in contact with u guys


                                        All you have to do is send your account details to a user through private messaging who is currently active and have this cup next to there name :)
                                        it's that simple ;)

                                        best of luck getting more random's you wish to send in :p
                                        (please note which random events need work done on them and which ones don't)

                                        Simtoon

                                        2011-05-24 23:20:30

                                        EvilBob


                                        Could Not walk to Middle?
                                        Found servent, Identifying statue...
                                        Statue Density Is = 0.35362787356321
                                        Found Statue in the West direction
                                        Retrieving a fishing net
                                        Retrieved the net!
                                        Fished the fish
                                        Could Not walk to Middle?
                                        Successfully executed.

                                        NCDS

                                        2011-05-24 23:44:07

                                        From: Simtoon
                                        EvilBob


                                        Could Not walk to Middle?
                                        Found servent, Identifying statue...
                                        Statue Density Is = 0.35362787356321
                                        Found Statue in the West direction
                                        Retrieving a fishing net
                                        Retrieved the net!
                                        Fished the fish
                                        Could Not walk to Middle?
                                        Successfully executed.

                                        Nice of you to bump this thread. :)

                                        I'm not sure if Squancy's accounts are still all in randoms but I'll have a look. Looks like a pretty basic fix.

                                        Wish more people would still sue color solvers. *hint*

                                        Overtime

                                        2011-05-25 00:01:01

                                        @NCDS i cleaned them all up, and set them all at draynor, so none have randoms AFIK.

                                        If i was home i would do a suicide run and collect some randoms.

                                        For the most part they have been working fine, except the balloon one ofc.

                                        NCDS

                                        2011-05-25 00:16:09

                                        From: Overtime
                                        @NCDS i cleaned them all up, and set them all at draynor, so none have randoms AFIK.

                                        If i was home i would do a suicide run and collect some randoms.

                                        For the most part they have been working fine, except the balloon one ofc.


                                        Alright, no problem. I was busy with other things lately but my time is clearing up somewhat so if you get some randoms and feel like donating again please feel free. :)

                                        KingKong

                                        2011-05-25 05:34:00

                                        Does this go in randoms bugs?: if i have reflection antirandoms and use random tool, my scripts seem to log me out asap im in a random.

                                        NCDS

                                        2011-05-25 09:02:51

                                        From: KingKong
                                        Does this go in randoms bugs?: if i have reflection antirandoms and use random tool, my scripts seem to log me out asap im in a random.


                                        This thread is for SRL's solvers, nothing to do with Reflection.

                                        x[Warrior]x3500

                                        2011-06-07 17:26:46

                                        ***** STR: FOUND RANDOM: 'Surprise Exam' *****
                                        Screenshot of: Found Surprise Exam random 50 Seconds
                                        ***** STR: 'Surprise Exam' RANDOM SOLVING FAILED! *****

                                        tested it with both color randoms and reflection randoms. :( i have my account in it if you guys need it.

                                        EDIT: after a few days, and no reply, i got out of the random so i could continue botting

                                        mat_de_b

                                        2011-06-11 18:24:07

                                        I forgot to comment a while ago, there was a problem with the grog princess random. If you logged in and were already talking to the frog (I restarted the script to watch if a second attempt would solve it) then it would try and find the princess and kiss her immediately. However the herald frog or whatever would say that you hadn't finished talking ( a simple 'ClickToContinue' thing) and he wouldn't let you kiss the princess and get out.

                                        Basically
                                        Log in while talking to herald

                                        see's its talking with herald, runs off to find princess thinking herald part is done

                                        herald says you cant talk to the princess as you haven't been told what to do.

                                        Repeat the last to steps ad infinitum.

                                        I don't know if this was a one off as something went wrong as i haven't had the frogs random since then.

                                        Iroki

                                        2011-07-15 05:39:38

                                        So, because noone pmd me details of acc in pp random i decided to post it without "in random tests" It is only tested on the bmps which i have.

                                        Code was made in delphi, lazarus wasn't working for me :/ and it is compatible with scar. Anyone who want to work on this code, feel free to do it. :D

                                        With love for You, Iroki :)


                                        library PrisonPete_scar;


                                        uses
                                        SysUtils,
                                        Classes,
                                        Windows,
                                        Math,
                                        Graphics;

                                        {$R *.res}

                                        type
                                        TSCARPlugFunc = record
                                        Name: ansistring;
                                        Ptr: Pointer;
                                        end;

                                        TOneStrProc = procedure(s: ansistring);
                                        TSCARWindowHandle = function(): Integer;

                                        type
                                        TRGB32 = packed record
                                        B, G, R, A: Byte;
                                        end;
                                        TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32) - 1] of TRGB32;
                                        PRGB32Array = ^TRGB32Array;

                                        TPointArray = array of TPoint;


                                        var
                                        Writeln: TOneStrProc;
                                        GetClientWindowHandle: TSCARWindowHandle;
                                        FillInfo: Boolean;




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        Prison Pete
                                        By: Iroki

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

                                        type
                                        AnimalCorner = record
                                        x1, y1, x2, y2: integer;
                                        end;


                                        function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean; stdcall;
                                        var
                                        BMP: TBitmap;
                                        Line: PRGB32Array;
                                        x, y, w, h: Integer;

                                        c: array of array of Integer;

                                        Found1: Boolean;
                                        AnimalCorners: AnimalCorner;



                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this procedure.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure ColorAreaInsideBox(x1, y1, x2, y2: integer; Color1, Color2: TColor);
                                        var
                                        i, j: integer;
                                        begin

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color1) then c[i][j] := Color2;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts amount of pixels which are
                                        used to create animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountAreaInsideBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        var
                                        i, j, Area: integer;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then Area := Area + 1;

                                        Result := Area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts colored area inside "animal".

                                        Thanks to Nava2 for the little help :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountColoredAreaInsideAnimal(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        const
                                        ax : array[0..7] of ShortInt = (1, 0,-1, 0, 1, 1,-1,-1);
                                        ay : array[0..7] of ShortInt = (0, 1, 0,-1,-1, 1, 1,-1);

                                        var
                                        i, j, k, area: integer;
                                        tmp_bool: boolean;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then
                                        begin

                                        tmp_bool := True;

                                        for k := 0 to 7 do
                                        if (c[i + ax[k]][j + ay[k]] <> Color) then
                                        begin
                                        tmp_bool := False;
                                        break;
                                        end;

                                        if tmp_bool then area := area + 1;

                                        end;

                                        Result := area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function counts pixels used to create outline of animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountOutlineInBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        begin

                                        Result := (CountAreaInsideBox(x1, y1, x2, y2, Color) -
                                        CountColoredAreaInsideAnimal(x1, y1, x2, y2, Color));

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        That lines of code was orginally created by Sky Scripter and were named "ScanFill".
                                        I have rewrited it completely, and now it SHOULD work properly. This procedure should
                                        theoreticaly find coordinates of "box" in which the baloon animal is.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure FloodFillAndFindAnimalBoxCoords(x, y: integer; Color1, Color2: TColor);
                                        const
                                        xx : array[0..3] of ShortInt = (1, -1, 0, 0);
                                        yy : array[0..3] of ShortInt = (0, 0, 1, -1);

                                        var
                                        i: integer;

                                        begin

                                        if ((c[x][y] = Color1) and (x > 4) and (x < w - 4) and (y > 4) and (y < h - 4)) then
                                        begin
                                        c[x][y] := Color2;

                                        if (AnimalCorners.x1 > x) then AnimalCorners.x1 := x;
                                        if (AnimalCorners.x2 < x) then AnimalCorners.x2 := x;
                                        if (AnimalCorners.y1 > y) then AnimalCorners.y1 := y;
                                        if (AnimalCorners.y2 < y) then AnimalCorners.y2 := y;

                                        for i := 0 to 3 do
                                        FloodFillAndFindAnimalBoxCoords(x + xx[i], y + yy[i], Color1, Color2);
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this function.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindGoat(Color: TColor): boolean;
                                        var
                                        Outline, Area: integer;

                                        begin
                                        Result := False;

                                        Area := CountAreaInsideBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);
                                        Outline := CountOutlineInBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);

                                        if (InRange(Area,220, 320) and InRange(Outline, 105, 200)) then
                                        begin
                                        px := AnimalCorners.x1 + Round((AnimalCorners.x2 - AnimalCorners.x1)/2);
                                        py := AnimalCorners.y1 + Round((AnimalCorners.y2 - AnimalCorners.y1)/2);

                                        Result := True;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Same as above.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindCat(x1, y1, x2, y2: integer; Color: TColor): Boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsLongTail: boolean;

                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsLongTail := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;



                                        if (how = 2) then
                                        begin
                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindDog(x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y,how, value,lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsDog1, IsDog2: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsDog1 := False;
                                        IsDog2 := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;
                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        if (how = 2) then
                                        begin

                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ^^
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindSheep(var x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue,
                                        ones, twoes: integer;
                                        IsBigBody: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsBigBody := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((y2 - y1) < 27) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;


                                        if (how = 2) then
                                        begin
                                        for y := y1 to y2 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((x2 - x1) < 27)then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Main loop (ground detecting)
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        begin
                                        w := 516; h := 338;
                                        Bmp := TBitmap.Create;
                                        Bmp.Width := w;
                                        Bmp.Height:= h;
                                        Bmp.PixelFormat := pf32bit;
                                        SetLength(c, w + 1, h + 1);
                                        BitBlt(Bmp.Canvas.Handle, 0, 0, w, h, ClientHDC, 0, 0, SRCCOPY);
                                        Result := False;

                                        //finding animals and coloring red
                                        for y := 4 to h - 4 do
                                        begin
                                        Line := bmp.ScanLine[y];
                                        for x := 4 to w - 4 do
                                        begin
                                        c[x][y] := RGB(Line[x].R, Line[x].G, Line[x].B);
                                        if ((Line[x].G <> 0) and (Line[x].R > 150) and (Line[x].G < 120) and (Line[x].B > 120)) then
                                        c[x][y] := clred else c[x][y] := 0;
                                        end;
                                        end;


                                        Found1 := False;
                                        for y := 4 to h - 4 do
                                        for x := 4 to w - 4 do
                                        if (c[x][y] = clred) then
                                        begin
                                        if not Found1 then
                                        begin

                                        AnimalCorners.x1 := w - 4;
                                        AnimalCorners.x2 := 4;
                                        AnimalCorners.y1 := h - 4;
                                        AnimalCorners.y2 := 4;

                                        FloodFillAndFindAnimalBoxCoords(x, y, clred, clyellow);

                                        case AnimalId of
                                        1: if FindGoat(clyellow) then Found1 := True;
                                        2: if FindSheep(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        3: if FindCat(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        4: if FindDog(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        end;

                                        end;

                                        end;

                                        Bmp.Free;
                                        if Found1 then Result := True;
                                        end;


                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        End of Prison Pete solver.

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        function GetFunctionCount(): Integer; stdcall; export;
                                        begin
                                        Result := 1;
                                        end;


                                        function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PAnsiChar): Integer; stdcall;
                                        begin
                                        case x of
                                        0:
                                        begin
                                        ProcAddr := @Pete_FindAnimal2;
                                        StrPCopy(ProcDef, 'function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean;');
                                        end;

                                        else
                                        x := -1;
                                        end;
                                        Result := x;
                                        end;


                                        procedure SetFunctions(Funcs: array of TSCARPlugFunc); stdcall;
                                        var
                                        i: Integer;
                                        begin
                                        for i := 0 to Length(Funcs) - 1 do
                                        begin
                                        if Funcs[i].Name = 'Writeln' then
                                        Writeln := Funcs[i].Ptr;
                                        if Funcs[i].Name = 'GetClientWindowHandle' then
                                        GetClientWindowHandle := Funcs[i].Ptr;
                                        end;
                                        FillInfo := false;
                                        end;

                                        exports GetFunctionCount;
                                        exports GetFunctionInfo;
                                        exports SetFunctions;

                                        end.

                                        Dgby714

                                        2011-07-15 06:40:45

                                        From: Iroki
                                        So, because noone pmd me details of acc in pp random i decided to post it without "in random tests" It is only tested on the bmps which i have.

                                        Code was made in delphi, lazarus wasn't working for me :/ and it is compatible with scar. Anyone who want to work on this code, feel free to do it. :D

                                        With love for You, Iroki :)


                                        library PrisonPete_scar;


                                        uses
                                        SysUtils,
                                        Classes,
                                        Windows,
                                        Math,
                                        Graphics;

                                        {$R *.res}

                                        type
                                        TSCARPlugFunc = record
                                        Name: ansistring;
                                        Ptr: Pointer;
                                        end;

                                        TOneStrProc = procedure(s: ansistring);
                                        TSCARWindowHandle = function(): Integer;

                                        type
                                        TRGB32 = packed record
                                        B, G, R, A: Byte;
                                        end;
                                        TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32) - 1] of TRGB32;
                                        PRGB32Array = ^TRGB32Array;

                                        TPointArray = array of TPoint;


                                        var
                                        Writeln: TOneStrProc;
                                        GetClientWindowHandle: TSCARWindowHandle;
                                        FillInfo: Boolean;




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        Prison Pete
                                        By: Iroki

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

                                        type
                                        AnimalCorner = record
                                        x1, y1, x2, y2: integer;
                                        end;


                                        function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean; stdcall;
                                        var
                                        BMP: TBitmap;
                                        Line: PRGB32Array;
                                        x, y, w, h: Integer;

                                        c: array of array of Integer;

                                        Found1: Boolean;
                                        AnimalCorners: AnimalCorner;



                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this procedure.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure ColorAreaInsideBox(x1, y1, x2, y2: integer; Color1, Color2: TColor);
                                        var
                                        i, j: integer;
                                        begin

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color1) then c[i][j] := Color2;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts amount of pixels which are
                                        used to create animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountAreaInsideBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        var
                                        i, j, Area: integer;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then Area := Area + 1;

                                        Result := Area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts colored area inside "animal".

                                        Thanks to Nava2 for the little help :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountColoredAreaInsideAnimal(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        const
                                        ax : array[0..7] of ShortInt = (1, 0,-1, 0, 1, 1,-1,-1);
                                        ay : array[0..7] of ShortInt = (0, 1, 0,-1,-1, 1, 1,-1);

                                        var
                                        i, j, k, area: integer;
                                        tmp_bool: boolean;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then
                                        begin

                                        tmp_bool := True;

                                        for k := 0 to 7 do
                                        if (c[i + ax[k]][j + ay[k]] <> Color) then
                                        begin
                                        tmp_bool := False;
                                        break;
                                        end;

                                        if tmp_bool then area := area + 1;

                                        end;

                                        Result := area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function counts pixels used to create outline of animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountOutlineInBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        begin

                                        Result := (CountAreaInsideBox(x1, y1, x2, y2, Color) -
                                        CountColoredAreaInsideAnimal(x1, y1, x2, y2, Color));

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        That lines of code was orginally created by Sky Scripter and were named "ScanFill".
                                        I have rewrited it completely, and now it SHOULD work properly. This procedure should
                                        theoreticaly find coordinates of "box" in which the baloon animal is.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure FloodFillAndFindAnimalBoxCoords(x, y: integer; Color1, Color2: TColor);
                                        const
                                        xx : array[0..3] of ShortInt = (1, -1, 0, 0);
                                        yy : array[0..3] of ShortInt = (0, 0, 1, -1);

                                        var
                                        i: integer;

                                        begin

                                        if ((c[x][y] = Color1) and (x > 4) and (x < w - 4) and (y > 4) and (y < h - 4)) then
                                        begin
                                        c[x][y] := Color2;

                                        if (AnimalCorners.x1 > x) then AnimalCorners.x1 := x;
                                        if (AnimalCorners.x2 < x) then AnimalCorners.x2 := x;
                                        if (AnimalCorners.y1 > y) then AnimalCorners.y1 := y;
                                        if (AnimalCorners.y2 < y) then AnimalCorners.y2 := y;

                                        for i := 0 to 3 do
                                        FloodFillAndFindAnimalBoxCoords(x + xx[i], y + yy[i], Color1, Color2);
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this function.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindGoat(Color: TColor): boolean;
                                        var
                                        Outline, Area: integer;

                                        begin
                                        Result := False;

                                        Area := CountAreaInsideBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);
                                        Outline := CountOutlineInBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);

                                        if (InRange(Area,220, 320) and InRange(Outline, 105, 200)) then
                                        begin
                                        px := AnimalCorners.x1 + Round((AnimalCorners.x2 - AnimalCorners.x1)/2);
                                        py := AnimalCorners.y1 + Round((AnimalCorners.y2 - AnimalCorners.y1)/2);

                                        Result := True;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Same as above.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindCat(x1, y1, x2, y2: integer; Color: TColor): Boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsLongTail: boolean;

                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsLongTail := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;



                                        if (how = 2) then
                                        begin
                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindDog(x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y,how, value,lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsDog1, IsDog2: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsDog1 := False;
                                        IsDog2 := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;
                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        if (how = 2) then
                                        begin

                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ^^
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindSheep(var x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue,
                                        ones, twoes: integer;
                                        IsBigBody: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsBigBody := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((y2 - y1) < 27) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;


                                        if (how = 2) then
                                        begin
                                        for y := y1 to y2 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((x2 - x1) < 27)then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Main loop (ground detecting)
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        begin
                                        w := 516; h := 338;
                                        Bmp := TBitmap.Create;
                                        Bmp.Width := w;
                                        Bmp.Height:= h;
                                        Bmp.PixelFormat := pf32bit;
                                        SetLength(c, w + 1, h + 1);
                                        BitBlt(Bmp.Canvas.Handle, 0, 0, w, h, ClientHDC, 0, 0, SRCCOPY);
                                        Result := False;

                                        //finding animals and coloring red
                                        for y := 4 to h - 4 do
                                        begin
                                        Line := bmp.ScanLine[y];
                                        for x := 4 to w - 4 do
                                        begin
                                        c[x][y] := RGB(Line[x].R, Line[x].G, Line[x].B);
                                        if ((Line[x].G <> 0) and (Line[x].R > 150) and (Line[x].G < 120) and (Line[x].B > 120)) then
                                        c[x][y] := clred else c[x][y] := 0;
                                        end;
                                        end;


                                        Found1 := False;
                                        for y := 4 to h - 4 do
                                        for x := 4 to w - 4 do
                                        if (c[x][y] = clred) then
                                        begin
                                        if not Found1 then
                                        begin

                                        AnimalCorners.x1 := w - 4;
                                        AnimalCorners.x2 := 4;
                                        AnimalCorners.y1 := h - 4;
                                        AnimalCorners.y2 := 4;

                                        FloodFillAndFindAnimalBoxCoords(x, y, clred, clyellow);

                                        case AnimalId of
                                        1: if FindGoat(clyellow) then Found1 := True;
                                        2: if FindSheep(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        3: if FindCat(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        4: if FindDog(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        end;

                                        end;

                                        end;

                                        Bmp.Free;
                                        if Found1 then Result := True;
                                        end;


                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        End of Prison Pete solver.

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        function GetFunctionCount(): Integer; stdcall; export;
                                        begin
                                        Result := 1;
                                        end;


                                        function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PAnsiChar): Integer; stdcall;
                                        begin
                                        case x of
                                        0:
                                        begin
                                        ProcAddr := @Pete_FindAnimal2;
                                        StrPCopy(ProcDef, 'function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean;');
                                        end;

                                        else
                                        x := -1;
                                        end;
                                        Result := x;
                                        end;


                                        procedure SetFunctions(Funcs: array of TSCARPlugFunc); stdcall;
                                        var
                                        i: Integer;
                                        begin
                                        for i := 0 to Length(Funcs) - 1 do
                                        begin
                                        if Funcs[i].Name = 'Writeln' then
                                        Writeln := Funcs[i].Ptr;
                                        if Funcs[i].Name = 'GetClientWindowHandle' then
                                        GetClientWindowHandle := Funcs[i].Ptr;
                                        end;
                                        FillInfo := false;
                                        end;

                                        exports GetFunctionCount;
                                        exports GetFunctionInfo;
                                        exports SetFunctions;

                                        end.


                                        Didn't test but it compiles. Also had to add units and get rid of Windows unit.

                                        Lazarus
                                        library libIroki;

                                        {$mode objfpc}{$H+}

                                        uses
                                        cmem, Interfaces, Classes, Sysutils, {Windows,} Math, Graphics, IntfGraphics, LCLIntf, LCLType;

                                        type
                                        TRGB32 = packed record
                                        B, G, R, A: Byte;
                                        end;
                                        TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32) - 1] of TRGB32;
                                        PRGB32Array = ^TRGB32Array;

                                        TPointArray = array of TPoint;

                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        Prison Pete
                                        By: Iroki

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

                                        type
                                        AnimalCorner = record
                                        x1, y1, x2, y2: integer;
                                        end;


                                        function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean; stdcall;
                                        var
                                        BMP: TBitmap;
                                        Line: PRGB32Array;
                                        x, y, w, h: Integer;

                                        c: array of array of Integer;

                                        Found1: Boolean;
                                        AnimalCorners: AnimalCorner;



                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this procedure.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure ColorAreaInsideBox(x1, y1, x2, y2: integer; Color1, Color2: TColor);
                                        var
                                        i, j: integer;
                                        begin

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color1) then c[i][j] := Color2;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts amount of pixels which are
                                        used to create animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountAreaInsideBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        var
                                        i, j, Area: integer;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then Area := Area + 1;

                                        Result := Area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function, like the name says, counts colored area inside "animal".

                                        Thanks to Nava2 for the little help :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountColoredAreaInsideAnimal(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        const
                                        ax : array[0..7] of ShortInt = (1, 0,-1, 0, 1, 1,-1,-1);
                                        ay : array[0..7] of ShortInt = (0, 1, 0,-1,-1, 1, 1,-1);

                                        var
                                        i, j, k, area: integer;
                                        tmp_bool: boolean;

                                        begin
                                        Area := 0;

                                        for j := y1 to y2 do
                                        for i := x1 to x2 do
                                        if(c[i][j] = Color) then
                                        begin

                                        tmp_bool := True;

                                        for k := 0 to 7 do
                                        if (c[i + ax[k]][j + ay[k]] <> Color) then
                                        begin
                                        tmp_bool := False;
                                        break;
                                        end;

                                        if tmp_bool then area := area + 1;

                                        end;

                                        Result := area;
                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        This function counts pixels used to create outline of animal.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function CountOutlineInBox(x1, y1, x2, y2: integer; Color: TColor): integer;
                                        begin

                                        Result := (CountAreaInsideBox(x1, y1, x2, y2, Color) -
                                        CountColoredAreaInsideAnimal(x1, y1, x2, y2, Color));

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        That lines of code was orginally created by Sky Scripter and were named "ScanFill".
                                        I have rewrited it completely, and now it SHOULD work properly. This procedure should
                                        theoreticaly find coordinates of "box" in which the baloon animal is.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        procedure FloodFillAndFindAnimalBoxCoords(x, y: integer; Color1, Color2: TColor);
                                        const
                                        xx : array[0..3] of ShortInt = (1, -1, 0, 0);
                                        yy : array[0..3] of ShortInt = (0, 0, 1, -1);

                                        var
                                        i: integer;

                                        begin

                                        if ((c[x][y] = Color1) and (x > 4) and (x < w - 4) and (y > 4) and (y < h - 4)) then
                                        begin
                                        c[x][y] := Color2;

                                        if (AnimalCorners.x1 > x) then AnimalCorners.x1 := x;
                                        if (AnimalCorners.x2 < x) then AnimalCorners.x2 := x;
                                        if (AnimalCorners.y1 > y) then AnimalCorners.y1 := y;
                                        if (AnimalCorners.y2 < y) then AnimalCorners.y2 := y;

                                        for i := 0 to 3 do
                                        FloodFillAndFindAnimalBoxCoords(x + xx[i], y + yy[i], Color1, Color2);
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        There is no need to describe this function.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindGoat(Color: TColor): boolean;
                                        var
                                        Outline, Area: integer;

                                        begin
                                        Result := False;

                                        Area := CountAreaInsideBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);
                                        Outline := CountOutlineInBox(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, Color);

                                        if (InRange(Area,220, 320) and InRange(Outline, 105, 200)) then
                                        begin
                                        px := AnimalCorners.x1 + Round((AnimalCorners.x2 - AnimalCorners.x1)/2);
                                        py := AnimalCorners.y1 + Round((AnimalCorners.y2 - AnimalCorners.y1)/2);

                                        Result := True;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Same as above.
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindCat(x1, y1, x2, y2: integer; Color: TColor): Boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsLongTail: boolean;

                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsLongTail := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;



                                        if (how = 2) then
                                        begin
                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 11) then IsLongTail := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 3) and (ones > 0) and (twoes = 2)) or ((ones = 3) and (twoes = 2)) or ((ones = 3) and (twoes = 3)) or ((ones = 2) and (twoes = 3)) or ((ones = 1) and (twoes = 4))) and (IsLongTail) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        :P
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindDog(x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y,how, value,lastrowvalue, tvalue, countvalue, ones, twoes: integer;
                                        IsDog1, IsDog2: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsDog1 := False;
                                        IsDog2 := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;
                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        if (how = 2) then
                                        begin

                                        for y := y1 to y1 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 20) then tvalue := 2;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 1) and (countvalue > 10) then IsDog1 := True;
                                        if (lastrowvalue = 2) and (countvalue > 8) then IsDog2 := True;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones = 4) and (twoes = 3)) or ((ones = 3) and (twoes = 3)) or ((ones = 3) and (twoes = 2)) or ((ones = 2) and (twoes = 3))) and (not(IsDog1)) and (not(Isdog2)) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ^^
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        function FindSheep(var x1, y1, x2, y2: integer; Color: TColor): boolean;
                                        var
                                        x, y, how, value, lastrowvalue, tvalue, countvalue,
                                        ones, twoes: integer;
                                        IsBigBody: boolean;
                                        begin

                                        if ((x2 - x1) > (y2 - y1 + 13)) then how := 1
                                        else if ((x2 - x1) < (y2 - y1 + 13)) then how := 2
                                        else how := 3;

                                        IsBigBody := False;
                                        lastrowvalue := 1;
                                        countvalue := 0;
                                        ones := 0;
                                        twoes := 0;

                                        Result := False;

                                        if (how = 1)then
                                        begin
                                        for x := x1 to x2 do
                                        begin
                                        value := 0;
                                        for y := y1 to y2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((y2 - y1) < 27) then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;


                                        if (how = 2) then
                                        begin
                                        for y := y1 to y2 do
                                        begin
                                        value := 0;
                                        for x := x1 to x2 do
                                        if (c[x][y] = Color) then inc(value);
                                        tvalue := 0;
                                        if (value <= 5) and (value > 0) then tvalue := 1;
                                        if (value > 5) and (value < 15) then tvalue := 2;
                                        if (value > 15) and (value < 45) then tvalue := 3;
                                        if not(tvalue <> 1) or not(tvalue <> 2) or not(tvalue <> 0) or not(tvalue <> 3) then
                                        begin
                                        if (lastrowvalue = tvalue) then
                                        begin
                                        inc(countvalue);
                                        end else
                                        begin
                                        if (countvalue <> 0) and (lastrowvalue <> 0) then
                                        begin
                                        if (countvalue > 2) or (lastrowvalue = 2) then
                                        begin
                                        if (lastrowvalue = 1) then inc(ones);
                                        if (lastrowvalue = 2) and (countvalue > 11) then IsBigBody := True;
                                        if (lastrowvalue = 2) and (countvalue > 27) then IsBigBody := False;
                                        if (lastrowvalue = 2) then inc(twoes);
                                        end;
                                        countvalue := 1;
                                        lastrowvalue := tvalue;
                                        end;
                                        end;
                                        end;
                                        end;
                                        if (((ones < 4) and (ones > 0)) and ((twoes > 0) and(twoes < 3))) and (IsBigBody) and ((x2 - x1) < 27)then
                                        begin
                                        px := x1 + Round((x2 - x1)/2);
                                        py := y1 + Round((y2 - y1)/2);
                                        Result := True;
                                        end;
                                        end;

                                        end;
                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}




                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        Main loop (ground detecting)
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
                                        var
                                        t: TLazIntfImage;
                                        begin
                                        w := 516; h := 338;
                                        Bmp := TBitmap.Create;
                                        Bmp.Width := w;
                                        Bmp.Height:= h;
                                        Bmp.PixelFormat := pf32bit;
                                        SetLength(c, w + 1, h + 1);
                                        BitBlt(Bmp.Canvas.Handle, 0, 0, w, h, ClientHDC, 0, 0, SRCCOPY);
                                        Result := False;

                                        //finding animals and coloring red
                                        t := bmp.CreateIntfImage;
                                        try
                                        for y := 4 to h - 4 do
                                        for x := 4 to w - 4 do
                                        begin
                                        c[x][y] := RGB(t.Colors[x, y].red, t.Colors[x, y].green, t.Colors[x, y].blue);
                                        if ((t.Colors[x, y].green <> 0) and (t.Colors[x, y].red > 150) and (t.Colors[x, y].green < 120) and (t.Colors[x, y].blue > 120)) then
                                        c[x][y] := clred
                                        else
                                        c[x][y] := 0;
                                        end;
                                        finally
                                        t.Free;
                                        end;


                                        Found1 := False;
                                        for y := 4 to h - 4 do
                                        for x := 4 to w - 4 do
                                        if (c[x][y] = clred) then
                                        begin
                                        if not Found1 then
                                        begin

                                        AnimalCorners.x1 := w - 4;
                                        AnimalCorners.x2 := 4;
                                        AnimalCorners.y1 := h - 4;
                                        AnimalCorners.y2 := 4;

                                        FloodFillAndFindAnimalBoxCoords(x, y, clred, clyellow);

                                        case AnimalId of
                                        1: if FindGoat(clyellow) then Found1 := True;
                                        2: if FindSheep(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        3: if FindCat(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        4: if FindDog(AnimalCorners.x1, AnimalCorners.y1, AnimalCorners.x2, AnimalCorners.y2, clyellow) then Found1 := True;
                                        end;

                                        end;

                                        end;

                                        Bmp.Free;
                                        if Found1 then Result := True;
                                        end;

                                        {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                        End of Prison Pete solver.

                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

                                        function GetFunctionCount(): Integer; stdcall; export;
                                        begin
                                        Result := 1;
                                        end;

                                        function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall; export;
                                        begin
                                        case x of
                                        0: begin
                                        ProcAddr := @Pete_FindAnimal2;
                                        StrPCopy(ProcDef, 'function Pete_FindAnimal2(var px, py: Integer; AnimalId: Integer; ClientHDC: HDC): Boolean;');
                                        end;
                                        else
                                        x := -1;
                                        end;
                                        Result := x;
                                        end;

                                        exports GetFunctionCount;
                                        exports GetFunctionInfo;

                                        initialization
                                        end.

                                        NCDS

                                        2011-08-04 23:47:35

                                        Updated the list a bit.

                                        Would be nice to get some more activity towards SRL's solvers!

                                        Feedback is a good place to start :rolleyes:

                                        BraK

                                        2011-08-05 02:23:17

                                        I level'd my guys a bit with an auto fighter recently. So I'll set them up on MSI again to have them get some randoms going…When I get home tonight…. MSI still uses SRL randoms and not Ref Randoms right?

                                        ~BraK

                                        TRiLeZ

                                        2011-08-05 04:52:02

                                        From: BraK
                                        MSI still uses SRL randoms and not Ref Randoms right?


                                        That's right. MSI uses refleciton only for walking.

                                        NCDS

                                        2011-08-05 08:08:23

                                        From: BraK
                                        I level'd my guys a bit with an auto fighter recently. So I'll set them up on MSI again to have them get some randoms going…When I get home tonight…. MSI still uses SRL randoms and not Ref Randoms right?

                                        ~BraK


                                        From: TRiLeZ
                                        That's right. MSI uses refleciton only for walking.


                                        It actually depends on what you set it to. If you choose to use Reflection walking, then MSI will use Reflection randoms.

                                        You can change this by opening Antiban.simba and changing line 405 to this:

                                        randomDone := FindNormalRandoms //R_FindRandoms

                                        BraK

                                        2011-08-05 08:30:50

                                        From: NCDS
                                        It actually depends on what you set it to. If you choose to use Reflection walking, then MSI will use Reflection randoms.

                                        You can change this by opening Antiban.simba and changing line 405 to this:

                                        randomDone := FindNormalRandoms //R_FindRandoms


                                        That's what I thought I'll check it when I get home. I most time use Reflection walking because I have my players everywhere or don't know exactly where they are.

                                        ~BraK

                                        Silent

                                        2011-08-08 20:38:03

                                        I got a ScapeRune account… or is that Evil Bob?

                                        Shows it as working fine with no known problems, but this script was using ref 2. Is there a different dev section for those randoms? Who should I contact with the account?

                                        EDIT: Nvm found the ref 2 thread.

                                        NCDS

                                        2011-08-09 16:17:41

                                        From: Silent SPY
                                        I got a ScapeRune account… or is that Evil Bob?

                                        Shows it as working fine with no known problems, but this script was using ref 2. Is there a different dev section for those randoms? Who should I contact with the account?

                                        EDIT: Nvm found the ref 2 thread.


                                        This thread is strictly for SRL's random solvers, so it won't match up to anything for reflection.

                                        Coh3n

                                        2011-08-10 16:55:38

                                        Player went false saying it failed Drill Demon, but wasn't in the random. Seemed to solve perfectly.

                                        ***** STR: FOUND RANDOM: 'Drill Demon' *****
                                        Screenshot of: Found Drill Demon random 15 Hours, 1 Minutes and 24 Seconds
                                        Screenshot of: Found Demon 15 Hours, 1 Minutes and 27 Seconds
                                        Push
                                        1: Jog mat
                                        2: Sit-up mat
                                        3: Push-up mat
                                        4: Star Jump mat
                                        Star
                                        1: Star Jump mat
                                        2: Jog mat
                                        3: Sit-up mat
                                        4: Push-up mat
                                        Push
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Star Jump mat
                                        2: Push-up mat
                                        3: Sit-up mat
                                        4: Jog mat
                                        Sit
                                        1: Sit-up mat
                                        2: Push-up mat
                                        3: Jog mat
                                        4: Star Jump mat
                                        Jog
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Jog mat
                                        3: Sit-up mat
                                        4: Star Jump mat
                                        ***** STR: 'Drill Demon' RANDOM SOLVING FAILED! *****
                                        E: PM'ing you ac account in Mordaut Exam.

                                        NCDS

                                        2011-08-10 17:30:57

                                        From: Coh3n
                                        Player went false saying it failed Drill Demon, but wasn't in the random. Seemed to solve perfectly.

                                        ***** STR: FOUND RANDOM: 'Drill Demon' *****
                                        Screenshot of: Found Drill Demon random 15 Hours, 1 Minutes and 24 Seconds
                                        Screenshot of: Found Demon 15 Hours, 1 Minutes and 27 Seconds
                                        Push
                                        1: Jog mat
                                        2: Sit-up mat
                                        3: Push-up mat
                                        4: Star Jump mat
                                        Star
                                        1: Star Jump mat
                                        2: Jog mat
                                        3: Sit-up mat
                                        4: Push-up mat
                                        Push
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Star Jump mat
                                        2: Push-up mat
                                        3: Sit-up mat
                                        4: Jog mat
                                        Sit
                                        1: Sit-up mat
                                        2: Push-up mat
                                        3: Jog mat
                                        4: Star Jump mat
                                        Jog
                                        DemonCenter - We are at the edge of the random area, fixing position.
                                        1: Push-up mat
                                        2: Jog mat
                                        3: Sit-up mat
                                        4: Star Jump mat
                                        ***** STR: 'Drill Demon' RANDOM SOLVING FAILED! *****
                                        E: PM'ing you ac account in Mordaut Exam.


                                        For the demon account, the InRandom function must have returned true for some reason. Hard to tell without being able to watch it solve. :/

                                        I know for a fact that the mordaut solver doesn't work right now and I don't really have an idea that hasn't been attempted, or the time to try that solver right now. However, I can make sure that SRL's detection for the random works and effectively logs the player out so it's at least not just hanging out in the random until the script messes up or anything.

                                        I'll let you know after I have checked it out. :)

                                        Coh3n

                                        2011-08-10 17:37:16

                                        Okay. The Mordaut account was using Reflection randoms, so everything may be okay with the SRL Solver (logging out on detection I mean).

                                        NCDS

                                        2011-09-11 00:38:09

                                        From: SRL commit log

                                        Fixed Evil Bob solver and committed a few small tweaks to some others.

                                        Hope your all happy, I sacrificed my bonus XP for you! (Jokes, I'm not really worried about it.)

                                        Evil Bob is working well again and the others were some tweaks I had made since my last commit that just weren't big enough to commit by themselves. :p

                                        Coh3n

                                        2011-09-12 16:17:17

                                        From: NCDS
                                        Evil Bob is working well again and the others were some tweaks I had made since my last commit that just weren't big enough to commit by themselves. :p
                                        You should commit things as soon as they're ready, regardless of how big it is. ;)

                                        Nice work, though. :)

                                        Markus

                                        2011-11-01 18:16:34

                                        Bumpydump, the list on frontpage needs some updating.

                                        NCDS

                                        2011-11-01 20:07:28

                                        From: Markus
                                        Bumpydump, the list on frontpage needs some updating.


                                        Oops, forgot about this thread :redface:

                                        Edit: All up to date.

                                        doublex8

                                        2011-11-01 20:43:39

                                        I just encountered the frog random and it logged me out

                                        Coh3n

                                        2011-11-01 20:55:27

                                        From: doublex8
                                        I just encountered the frog random and it logged me out
                                        If you can't post the debug that would be helpful.

                                        doublex8

                                        2011-11-01 21:03:39

                                        [ ] ------ ~ Track Record
                                        [ ] ------ ~ ~ TrackObject
                                        [ ] ------ ~ ~ Searches: 768
                                        [ ] ------ ~ ~ Successes: 731
                                        [ ] ------ ~ ~ Success %: 95
                                        [ ] ---- MSI_TrackObject: False
                                        [ ] ---- MSI_WaitWhileMining
                                        [ ] ------ Distance from tracking box to player = 12
                                        [ ] ------ InvCount: 0
                                        [ ] ------ Colours found < Accuracy
                                        [ ] ---- MSI_WaitWhileMining: Finished
                                        [ ] ---- MSI_FindObjectTPA: ROCK_MITHRIL
                                        [ ] ------ Took 78 ms to complete
                                        [ ] ---- MSI_FindObjectTPA: False
                                        [ ] ------ Scanning for randoms...
                                        [ ] ------ MSI_FindRandoms: Finished Random Event!
                                        [ ] -- MSI_AutoObjects: False
                                        [ ] -- Went inactive somewhere in SRL
                                        [ ] -- MSI_UnsetPlayer
                                        [ ] ---- Failed to use script: Lumby Swamp West Miner
                                        [ ] ------ All players inactive

                                        EDIT: I tried running the script again while I was in the random and it did try to start solving it, except since I canceled the herald's spiel it kept trying to click the princess because it thought I had already talked to him I think. Not sure, I'll keep him in there in case you need him.

                                        EDIT2: I have an account in Leo if anyone is interested.

                                        logical

                                        2011-12-24 09:54:46

                                        Sandwich lady random failed…


                                        Anyone want the account?

                                        catbat78

                                        2012-01-22 17:33:57

                                        I'm guessing this thread is dead since literally none of the random solvers work..

                                        bolshak25

                                        2012-01-22 19:22:50

                                        From: catbat78
                                        I'm guessing this thread is dead since literally none of the random solvers work..


                                        im sick of all you leechers saying none of them work! do you have one account in every single random and confirmed that 0 out of the 19 work? didnt think so. if you didnt bother searching there is a whole new random section that they have the info on each random. along with the fact that a newer member is working on all of them and has completed many so far. you also cannot see all of the pms that coh3n and ncds have received. they probably have plenty of accounts and in their free time they work on solvers voluntarily for no fee or payment. everything you have been given is free and open source, if you dont like that it isnt perfect, then go ahead and fix it. im assuming you cant so please stfu unless you plan on donating accounts or help the devs fix the solvers.

                                        Current

                                        2012-01-29 19:06:31

                                        I have 2 accounts, do you have Windows Live Messenger.

                                        Yago

                                        2012-01-29 19:24:09

                                        From: Current
                                        I have 2 accounts, do you have Windows Live Messenger.


                                        You can go to this thread: http://villavu.com/forum/forumdisplay.php?f=460

                                        and post there. I'm sure a dev might need an account

                                        kingsleyeng

                                        2012-03-25 01:39:17

                                        do you still need accounts?

                                        Coh3n

                                        2012-03-25 03:09:12

                                        This thread is archived, see this section for up to date randoms information.

                                        foxfly1

                                        2012-03-29 20:27:19

                                        I offered to make an army for you guys to test randoms…let me know in a pm if you want. I'm always willing to help

                                        Coh3n

                                        2012-03-30 00:35:15

                                        From: foxfly1
                                        I offered to make an army for you guys to test randoms…let me know in a pm if you want. I'm always willing to help
                                        That's not really necessary. Thanks though. Most of the solvers are stable right now.

                                        Sir R. M8gic1an

                                        2012-03-30 08:36:09

                                        Perhaps we should alter forum privs so ppl cant post in archive?

                                        -RM

                                        Coh3n

                                        2012-03-30 13:06:58

                                        That's a good idea, yes.

                                        tvjj

                                        2012-06-02 23:28:39

                                        it would be nice if some one could make a list of very trusted devs that could be pm'd details i am definatly willing to help i am usually running 4 players and i seem to hit jailhouse pete quite a bit, it would be easier to be able to just send info to them all because of the expiration of the random.

                                        E: didnt realize it was archived sorry

                                        alucard123

                                        2012-09-25 03:15:17

                                        pinball have color issue(mmouse outside the walkable area on the same color then the correct pillar)didnt let it finish the event O_o