Одноуровневый список нужен. Для каждой водной клетки в !?PO в одном из полей, где можно хранить значения до 65536 кодировать y * 256 + x координату следующей водной клетки, полагая 0 концом списка. Убедиться, что данное PO-поле для водных объектов или сундуков другими скриптами не используется.