{
    "version": "1.0.0",
    "name": "robotouille",

    "input_json": "robotouille/domain/input.json",

    "object_types": ["station", "item", "player", "container", "meal"],

    "predicate_defs": [
        {
            "name": "istable",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} is a table"
            }
        },
        {
            "name": "isstove",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} is a stove"
            }
        },
        {
            "name": "isboard",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} is a cutting board"
            }
            
        },
        {
            "name": "isfryer",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} is a fryer"
            }
        },
        {
            "name": "issink",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} is a sink"
            }
        },
        {
            "name": "isrobot",
            "param_types": ["player"],
            "language_descriptors": {
                "0": "{0} is a robot"
            }
        },
        {
            "name": "istopbun",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a top bun"
            }
        },
        {
            "name": "isbottombun",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a bottom bun"
            }
        },
        {
            "name": "isbread",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a bread slice"
            }
        },
        {
            "name": "islettuce",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a head of lettuce"
            }
        },
        {
            "name": "isonion",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is an onion"
            }
        },
        {
            "name": "istomato",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a tomato"
            }
        },
        {
            "name": "ispatty",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a hamburger patty"
            }
        },
        {
            "name": "ischicken",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a chicken breast"
            }
        },
        {
            "name": "ischeese",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a cheese slice"
            }
        },
        {
            "name": "ispotato",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is a potato"
            }
        },
        {
            "name": "isfryable",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} can be fried in a fryer"
            }
        },
        {
            "name": "isfryableifcut",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} can be fried in a fryer after being cut"
            }
        },
        {
            "name": "isfried",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is fried"
            }
        },
        {
            "name": "iscookable",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} can be cooked on a stove"
            }
        },
        {
            "name": "iscooking",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is cooking"
            }
        },
        {
            "name": "iscooked",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is cooked"
            }
        },
        {
            "name": "iscuttable",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} can be cut on a cutting board"
            }
        },
        {
            "name": "iscut",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} is cut"
            }
        },
        {
            "name": "ispot",
            "param_types": ["container"],
            "language_descriptors": {
                "0": "{0} is a pot"
            }
        },
        {
            "name": "isbowl",
            "param_types": ["container"],
            "language_descriptors": {
                "0": "{0} is a bowl"
            }
        },
        {
            "name": "iswater",
            "param_types": ["meal"],
            "language_descriptors": {
                "0": "{0} is water"
            }
        },
        {
            "name": "isboiling",
            "param_types": ["meal"],
            "language_descriptors": {
                "0": "{0} is boiling"
            }
        },
        {
            "name": "loc",
            "param_types": ["player", "station"],
            "language_descriptors": {
                "0": "{0} is at {1}",
                "1": "{1} is occupied by {0}"
            }
        },
        {
            "name": "item_at",
            "param_types": ["item", "station"],
            "language_descriptors": {
                "0": "{0} is at {1}",
                "1": "{1} has {0}"
            }
        },
        {
            "name": "nothing",
            "param_types": ["player"],
            "language_descriptors": {
                "0": "{0} is holding nothing"
            }
        },
        {
            "name": "station_empty",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} has nothing on it"
            }
        },
        {
            "name": "container_empty",
            "param_types": ["container"],
            "language_descriptors": {
                "0": "{0} has nothing inside it"
            }
        },
        {
            "name": "item_on",
            "param_types": ["item", "station"],
            "language_descriptors": {
                "0": "{0} is directly on top of {1}",
                "1": "{1} has {0} directly on top of it"
            }
        },
        {
            "name": "vacant",
            "param_types": ["station"],
            "language_descriptors": {
                "0": "{0} has no players at it"
            }
        },
        {
            "name": "clear",
            "param_types": ["item"],
            "language_descriptors": {
                "0": "{0} has nothing above it"
            }
        },
        {
            "name": "atop",
            "param_types": ["item", "item"],
            "language_descriptors": {
                "0": "{0} is directly on top of {1}",
                "1": "{1} is directly under {0}"
            }
        },
        {
            "name": "has_item",
            "param_types": ["player", "item"],
            "language_descriptors": {
                "0": "{0} is holding {1}",
                "1": "{1} is held by {0}"
            }
        },
        {
            "name": "has_container",
            "param_types": ["player", "container"],
            "language_descriptors": {
                "0": "{0} is holding {1}",
                "1": "{1} is held by {0}"
            }
        },
        {
            "name": "in",
            "param_types": ["meal", "container"],
            "language_descriptors": {
                "0": "{0} is inside of {1}",
                "1": "{1} contains {0}"
            }
        },
        {
            "name": "addedto",
            "param_types": ["item", "meal"],
            "language_descriptors": {
                "0": "{0} is added to {1}",
                "1": "{1} has {0} added to it"
            }
        },
        {
            "name": "container_at",
            "param_types": ["container", "station"],
            "language_descriptors": {
                "0": "{0} is at {1}",
                "1": "{1} has {0}"
            }
        }
    ],

    "action_defs": [
        {
            "name": "move",
            "precons": [
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "vacant",
                    "params": ["s2"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "loc",
                    "params": ["p1", "s2"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": false
                },
                {
                    "predicate": "vacant",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "vacant",
                    "params": ["s2"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Move {p1} from {s1} to {s2}"
        },
        {
            "name": "pick-up-item",
            "precons": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": true
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": false
                },
                {
                    "predicate": "item_at",
                    "params": ["i1", "s1"],
                    "is_true": false
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": false
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Pick up {i1} from {s1} using {p1}"
        },
        {
            "name": "place-item",
            "precons": [
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "item_at",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": false
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Place {i1} on {s1} using {p1}"
        },
        {
            "name": "pick-up-container",
            "precons": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "has_container",
                    "params": ["p1", "c1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": false
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": false
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": true
                }
            ],
            "sfx": [],
            "language_description": "Pick up {c1} from {s1} using {p1}"
        },
        {
            "name": "place-container",
            "precons": [
                {
                    "predicate": "has_container",
                    "params": ["p1", "c1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "has_container",
                    "params": ["p1", "c1"],
                    "is_true": false
                },
                {
                    "predicate": "station_empty",
                    "params": ["s1"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Place {c1} on {s1} using {p1}"
        },
        {
            "name": "cook",
            "precons": [
                {
                    "predicate": "isstove",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "iscookable",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "iscooking",
                    "params": ["i1"],
                    "is_true": false
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [],
            "sfx": [
                {
                    "type": "conditional",
                    "param": "i1",
                    "conditions": [
                        {
                            "predicate": "item_on",
                            "params": ["i1", "s1"],
                            "is_true": true
                        }
                    ],
                    "fx": [
                        {
                            "predicate": "iscooking",
                            "params": ["i1"],
                            "is_true": true
                        }
                    ],
                    "sfx": [
                        {
                            "type": "delayed",
                            "param": "i1",
                            "fx": [
                                {
                                    "predicate": "iscooked",
                                    "params": ["i1"],
                                    "is_true": true
                                },
                                {
                                    "predicate": "iscooking",
                                    "params": ["i1"],
                                    "is_true": false
                                }
                            ],
                            "sfx": []
                        }
                    ]
                }
            ],
            "language_description": "Cook {i1} on {s1} using {p1}"
        },
        {
            "name": "cut",
            "precons": [
                {
                    "predicate": "isboard",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "iscuttable",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [],
            "sfx": [
                {
                    "type": "repetitive",
                    "param": "i1",
                    "fx": [
                        {
                            "predicate": "iscut",
                            "params": ["i1"],
                            "is_true": true
                        }
                    ],
                    "sfx": []
                },
                {
                    "type": "conditional",
                    "param": "i1",
                    "conditions": [
                        {
                            "predicate": "isfryableifcut",
                            "params": ["i1"],
                            "is_true": true
                        },
                        {
                            "predicate": "iscut",
                            "params": ["i1"],
                            "is_true": true
                        }
                    ],
                    "fx": [
                        {
                            "predicate": "isfryable",
                            "params": ["i1"],
                            "is_true": true
                        }
                    ],
                    "sfx": []
                }
            ],
            "language_description": "Cut {i1} on {s1} using {p1}"
        },
        {
            "name": "fry",
            "precons": [
                {
                    "predicate": "isfryer",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "isfryable",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "item_on",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [],
            "sfx": [
                {
                    "type": "conditional",
                    "param": "i1",
                    "conditions": [
                        {
                            "predicate": "item_on",
                            "params": ["i1", "s1"],
                            "is_true": true
                        }
                    ],
                    "fx": [],
                    "sfx": [
                        {
                            "type": "delayed",
                            "param": "i1",
                            "fx": [
                                {
                                    "predicate": "isfried",
                                    "params": ["i1"],
                                    "is_true": true
                                }
                            ],
                            "sfx": []
                        }
                    ]
                }
            ],
            "language_description": "Fry {i1} on {s1} using {p1}"
        },
        {
            "name": "fill-pot",
            "precons": [
                {
                    "predicate": "ispot",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "issink",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "container_empty",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "immediate_fx":[],
            "sfx": [
                {
                    "type": "conditional",
                    "param": "c1",
                    "conditions": [
                        {
                            "predicate": "container_at",
                            "params": ["c1", "s1"],
                            "is_true": true
                        }
                    ],
                    "fx": [],
                    "sfx": [
                        {
                            "type": "delayed",
                            "param": "c1",
                            "fx": [],
                            "sfx": [
                                {
                                    "type": "creation",
                                    "param": "c1",
                                    "created_obj": {
                                        "name": "water",
                                        "type": "meal",
                                        "param": "m1"
                                    },
                                    "fx": [
                                        {
                                            "predicate": "iswater",
                                            "params": ["m1"],
                                            "is_true": true
                                        },
                                        {
                                            "predicate": "in",
                                            "params": ["m1", "c1"],
                                            "is_true": true
                                        },
                                        {
                                            "predicate": "container_empty",
                                            "params": ["c1"],
                                            "is_true": false
                                        }
                                    ],
                                    "sfx": []
                                }
                            ]
                        }
                    ]
                }
            ],
            "language_description": "Fill {c1} with water from {s1} using {p1}"
        },
        {
            "name": "boil-water",
            "precons": [
                {
                    "predicate": "ispot",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "iswater",
                    "params": ["m1"],
                    "is_true": true
                },
                {
                    "predicate": "in",
                    "params": ["m1", "c1"],
                    "is_true": true
                },
                {
                    "predicate": "isstove",
                    "params": ["s1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [],
            "sfx": [
                {
                    "type": "conditional",
                    "param": "m1",
                    "conditions": [
                        {
                            "predicate": "container_at",
                            "params": ["c1", "s1"],
                            "is_true": true
                        }
                    ],
                    "fx": [],
                    "sfx": [
                        {
                            "type": "delayed",
                            "param": "m1",
                            "fx": [
                                {
                                    "predicate": "isboiling",
                                    "params": ["m1"],
                                    "is_true": true
                                }
                            ],
                            "sfx": []
                        }
                    ]
                }
            ],
            "language_description": "Boil {c1}'s contents on {s1} using {p1}"
        },
        {
            "name": "add-to",
            "precons": [
                {
                    "predicate": "ispot",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "addedto",
                    "params": ["i1", "m1"],
                    "is_true": false
                },
                {
                    "predicate": "in",
                    "params": ["m1", "c1"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "addedto",
                    "params": ["i1", "m1"],
                    "is_true": true
                },
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": false
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                }
            ],
            "sfx": [],
            "language_description": "Add {i1} into {c1} using {p1}"
        },
        {
            "name": "fill-bowl",
            "precons": [
                {
                    "predicate": "isbowl",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "ispot",
                    "params": ["c2"],
                    "is_true": true
                },
                {
                    "predicate": "container_at",
                    "params": ["c1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "in",
                    "params": ["m1", "c2"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "container_empty",
                    "params": ["c1"],
                    "is_true": true
                },
                {
                    "predicate": "has_container",
                    "params": ["p1", "c2"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "in",
                    "params": ["m1", "c1"],
                    "is_true": true
                },
                {
                    "predicate": "in",
                    "params": ["m1", "c2"],
                    "is_true": false
                },
                {
                    "predicate": "container_empty",
                    "params": ["c1"],
                    "is_true": false
                },
                {
                    "predicate": "container_empty",
                    "params": ["c2"],
                    "is_true": true
                }
            ],
            "sfx": [],
            "language_description": "Fill {c1} with {c2}'s contents using {p1}"
        },
        {
            "name": "stack",
            "precons": [
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i2"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "item_at",
                    "params": ["i2", "s1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "item_at",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "atop",
                    "params": ["i1", "i2"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i2"],
                    "is_true": false
                },
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Stack {i1} on top of {i2} using {p1}"
        },
        {
            "name": "unstack",
            "precons": [
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": true
                },
                {
                    "predicate": "atop",
                    "params": ["i1", "i2"],
                    "is_true": true
                },
                {
                    "predicate": "loc",
                    "params": ["p1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "item_at",
                    "params": ["i1", "s1"],
                    "is_true": true
                },
                {
                    "predicate": "item_at",
                    "params": ["i2", "s1"],
                    "is_true": true
                }
            ],
            "immediate_fx": [
                {
                    "predicate": "has_item",
                    "params": ["p1", "i1"],
                    "is_true": true
                },
                {
                    "predicate": "clear",
                    "params": ["i2"],
                    "is_true": true
                },
                {
                    "predicate": "nothing",
                    "params": ["p1"],
                    "is_true": false
                },
                {
                    "predicate": "atop",
                    "params": ["i1", "i2"],
                    "is_true": false
                },
                {
                    "predicate": "clear",
                    "params": ["i1"],
                    "is_true": false
                },
                {
                    "predicate": "item_at",
                    "params": ["i1", "s1"],
                    "is_true": false
                }
            ],
            "sfx": [],
            "language_description": "Unstack {i1} from {i2} using {p1}"
        },
        {
            "name": "wait",
            "precons": [],
            "immediate_fx": [],
            "sfx": [],
            "language_description": "Do nothing"
        }
    ]
}