system "Against all odds"
{
  Created by TurboGenisu
  
  for documentation visit: http://gambling.projectsydney.com/viewtopic.php?t=478
}
method "main"
begin
    while starting a new session
    begin
        call "initialize";
        call "input";
        call "reset";
        exit;
    end

    if Any Inside Bet has won each time
    or Any Outside Bet has won each time
    begin
        call "reset";
        call "check profit";
    end
    
    if flag "location set" is false
    begin
        call "move to next location";
    end
    
    if record "location index" data = 1 //even
    begin
        call "do even bet";
    end

    if record "location index" data = 2 //dozen
    begin
        call "do dozen bet";
    end

    if record "location index" data = 3 //line (lanes)
    begin
        call "do line bet";
    end

    if record "location index" data = 4 //corner (squares)
    begin
        call "do corner bet";
    end

    if record "location index" data = 5 //street
    begin
        call "do street bet";
    end

    if record "location index" data = 6 //splits
    begin
        call "do split bet";
    end

    if record "location index" data = record "max location index" data //straight
    begin
        call "do straight bet";
    end

    //check if we exceeded max location index
    if  record "location index" data > record "max location index" data
    begin
        call "reset";
        //start at the beginning.
        put 100% Bankroll to record "current bankroll" data;
        put 0 on record "location index" data;
        call "move to next location";
        call "do even bet";
    end
end

method "check profit"
begin
    put 100% of Bankroll to record "profit" data;
    subtract 100% of record "current bankroll" data to record "profit" data;

    if record "profit" data > 0 then
    begin
        put 0 on record "location index" data;
    end
    else
    begin
        subtract 2 to record "location index" data;
        
        if record "location index" data < 0 then
        begin
            put 0 on record "location index" data;
        end
    end
end

method "move to next location"
begin
    set flag "location set" to false;
    
    if number 0 has hit each time
    or number 00 has hit each time
    begin
        exit;
    end

    copy last number to record "last spin" layout;
    add 1 to record "location index" data;
    set flag "location set" to true;
end

method "do straight bet" //straight up
begin
    if record "straight bet" data index > record "straight bet" data count
    begin
        add 1 to record "location index" data;
        return;
    end

    put 100% of record "straight bet" data to record "last spin" layout;
    add 1 to record "straight bet" data index;
    exit;
end

method "do split bet" //splits
begin
    if record "split bet" data index > record "split bet" data count
    begin
        call "move to next location";
        return;
    end

    put 100% of record "split bet" data to Split nearest of record "last spin" layout;
    add 1 to record "split bet" data index;
    exit;
end

method "do street bet" //lanes
begin
    if record "street bet" data index > record "street bet" data count
    begin
        call "move to next location";
        return;
    end

    put 100% of record "street bet" data to Street nearest of record "last spin" layout;
    add 1 to record "street bet" data index;
    exit;
end

method "do corner bet" //lanes
begin
    if record "corner bet" data index > record "corner bet" data count
    begin
        call "move to next location";
        return;
    end

    put 100% of record "corner bet" data to Corner nearest of record "last spin" layout;
    add 1 to record "corner bet" data index;
    exit;
end

method "do line bet" //lanes
begin
    if record "line bet" data index > record "line bet" data count
    begin
        call "move to next location";
        return;
    end

    put 100% of record "line bet" data to Line nearest of record "last spin" layout;
    add 1 to record "line bet" data index;
    exit;
end

method "do dozen bet"
begin
    if record "dozen bet" data index > record "dozen bet" data count
    begin
        call "move to next location";
        return;
    end

    put 100% of record "dozen bet" data to Dozen nearest of record "last spin" layout;
    add 1 to record "dozen bet" data index;
    exit;
end

method "do even bet"
begin
    if record "even bet" data index > record "even bet" data count
    begin
        call "move to next location";
        return;
    end

    if record "last spin" layout is found in record "low" layout
    begin
        copy Low to record "even money" layout;
    end
    else
    begin
        if record "last spin" layout is found in record "even" layout
        begin
            copy Even to record "even money" layout;
        end
        else
        begin
            if record "last spin" layout is found in record "red" layout
            begin
                copy Red to record "even money" layout;
            end
            else
            begin
                if record "last spin" layout is found in record "black" layout
                begin
                    copy Black to record "even money" layout;
                end
                else
                begin
                    if record "last spin" layout is found in record "odd" layout
                    begin
                        copy Odd to record "even money" layout;
                    end
                    else
                    begin
                        if record "last spin" layout is found in record "high" layout
                        begin
                            copy High to record "even money" layout;
                        end
                    end
                end
            end
        end
    end
    
    put 100% of record "even bet" data to record "even money" layout;
    add 1 to record "even bet" data index;
    exit;
end

method "input"
begin
    group
    begin
        display "Turbo's Against All Odds system";
        input data "Enter starting Bankroll" to record "current bankroll" data;
        input dropdown "Table type

                        1:=Single Zero
                        2:=Double Zero" to record "table index" data;
        input dropdown "Bet progression mode
        
                        1:=Conservative
                        2:=Aggressive" to record "prog. index" data;
    end
    
    call "set bet progression";
    
    put 100% of record "current bankroll" data to Bankroll;
    
    if record "table index" data = 1 then
    begin
        load single wheel;
    end
    else
    begin
        load double wheel;
    end
end

method "initialize"
begin
    set flag "previous location" to false;
    clear record "last spin" layout;
    clear record "even money" layout;
    put 0 on record "location index" data;

    put 100% of bankroll to record "current bankroll" data;
    put 0 to record "profit" data;
    copy list [number 1, number 3, number 5, number 7, number 9, number 11]
                                to record "low" layout;
    copy list [Number 2, Number 4, Number 6, Number 8, Number 10, Number 12]
                                to record "even" layout;
    copy list [Number 14, Number 16, Number 18, Number 19, Number 21, Number 23]
                                to record "red" layout;
    copy list [Number 13, Number 15, Number 17, Number 20, Number 22, Number 24]
                                to record "black" layout;
    copy list [Number 25, Number 27, Number 29, Number 31, Number 33, Number 35]
                                to record "odd" layout;
    copy list [Number 26, Number 28, Number 30, Number 32, Number 34, Number 36]
                                to record "high" layout;

    set list [1,3,6,12,21,33,52,90] to record "index" data;
end

method "reset"
begin
    put 1 on record "even bet" data index;
    put 1 on record "dozen bet" data index;
    put 1 on record "line bet" data index;
    put 1 on record "corner bet" data index;
    put 1 on record "street bet" data index;
    put 1 on record "split bet" data index;
    put 1 on record "street bet" data index;
    put 1 on record "straight bet" data index;
    set flag "location set" to false;
end

method "set bet progression"
begin
    //conservative mode
    if record "prog. index" data = 1 then
    begin
        put 7 on record "max location index" data;
        set list [1,2] to record "even bet" data;
        set list [1,2,3] to record "dozen bet" data;
        set list [1,2,3,4,5,6] to record "line bet" data;
        set list [1,2,3,4,5,6,7,8,9] to record "corner bet" data;
        set list [1,2,3,4,5,6,7,8,9,10,11,12] to record "street bet" data;
        set list [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
                  17,18,19] to record "split bet" data;
        set list [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
                  17,18,19,20,21,22,23,24,25,26,27,28,29,
                  30,31,32,33,34,35,36,37,38] to record "straight bet" data;
    end
    else
    //aggressive mode
    begin
        put 6 on record "max location index" data;
        set list [1,2] to record "even bet" data;
        set list [2,3,5] to record "dozen bet" data;
        set list [3,4,5,6,7,8] to record "line bet" data;
        set list [6,7,8,9,10,11,13,14,16] to record "corner bet" data;
        set list [13,14,16,17,19,20,22,24,26,29,31,34] to record "street bet" data;
        set list [24,26,27,29,31,32,34,36,38,41,43,46,48,
                  51,54,57,61,64,68] to record "split bet" data;
    end
end

