День добрый. Все очень примитивно, своего рода аналог times из Ruby, а если проще, то урезанная версия цикла for. При использовании почему-то срабатывает первая и последняя итерации. Приведенный код завернут в scope.
    integer iptr

    // 0 ... i-1 => act
    define times(i,act) = {
        iptr = 0
        while (iptr < i) {
            act
            iptr++
        }
    }
    
    // i-1 ... 0 => act
    define timesr(i,act) = {
        iptr = i - 1
        while (iptr > 0) {
            act
            iptr--
        }
    }
upd. Сразу скажу, что у меня act - это метод. В в карте он принимает число (переменную iptr, т.е. шаг цикла). И результат хоть и должен идти для каждого игрока о 0 до 4, но на деле это не так. Дебаги показывают выполнение именно на 0 и 4.
upd2. Проблема оказалась во вложенном цикле. Т.е. метод вызывал еще один times, потому iptr меняло свое значение.
Сейчас получилось что-то вроде
    integer iptr = 0
    integer iptrlast, iptrlastbuff

    // 0 ... i-1 => act
    define times(i,act) = {
        iptrlast = iptr
        iptr = 0
        while (iptr < i) {
            act
            iptr++
        }
        iptrlastbuff = iptr
        iptr = iptrlast
        iptrlast = iptrlastbuff
    }
    
    // i-1 ... 0 => act
    define timesr(i,act) = {
        iptrlast = iptr
        iptr = i - 1
        while (iptr > 0) {
            act
            iptr--
        }
        iptrlastbuff = iptr
        iptr = iptrlast
        iptrlast = iptrlastbuff
    }

Принятый ответ

Проблема решилась, я все написал.
`
ОЖИДАНИЕ РЕКЛАМЫ...