private boolean cook() {
		ctx.game.tab(Game.Tab.INVENTORY);

		final GameObject fire = ctx.objects.select().select(ObjectDefinition.name(ctx, "Fire")).select(new Filter<GameObject>() {
			@Override
			public boolean accept(GameObject gameObject) {
				return gameObject.tile().matrix(ctx).reachable();
			}
		}).nearest().poll();
		if (!fire.valid()) {
			if (ctx.inventory.select().id(LOGS).isEmpty()) {
				chop();
				return true;
			} else {
				makeFire();
			}
			return true;
		}

		if (ctx.camera.prepare(fire) && ctx.inventory.select(RAW_SHRIMP)) {
			final Item item = ctx.inventory.selectedItem();
			if (Condition.wait(new Callable<Boolean>() {
				@Override
				public Boolean call() throws Exception {
					return ctx.inventory.selectedItemIndex() > -1;
				}
			}, 200, 5)) {
				if (fire.interact("Use", item.name() + " -> Fire")) {
					Condition.wait(new Callable<Boolean>() {
						@Override
						public Boolean call() throws Exception {
							return !item.valid();
						}
					}, 200, 20);
				}
			}

		}
		return false;
	}