На самом деле реализация кода упирается в два ключевых вопроса: количество инградиентов для создания нового блюда (переход на новый кадр) и критичность последовательности "смешивания".
temofony, это зло:

Код AS1/AS2:
if(cur_meal=="maslokartoshka" || cur_meal=="kartoshkamaslo") {
//переход на кадр с жареной картошкой
}
Что, если 4 инградиента будет? Или 10?
Думаю, что правильнее было бы так:
Любой объект, который можно перетащить, когда его отпускают над печкой, запускает функцию addMe со своим типом (например "potato"), и этот тип записывается в массив текущих инградиентов. Ну и тут же сравнивается с массивом необходимых для блюда инградиентов. Сравнивать проще всего так — сортируем массив с текущими элементами по алфавиту и сравниваем строки после Array.join("") для обоих массивов.
Понимаете, про что я?

Код AS1/AS2:
var currentMeat = [];
var needMeat = ["apple", "babanas", "citrus"];
function addMe(type:String, preventMultiply:Boolean) {
if (preventMultiply == undefined) {
preventMultiply = true;
}
if (preventMultiply) {
if (needMeat.join("").indexOf(type)>-1) {
return;
}
}
currentMeat.push(type);
testMeatComplete();
}
function testMeatComplete() {
if (currentMeat.sort().join("") == needMeat.join("")) {
// Блюдо готово
} else {
// Блюдо не готово
}
}