I’ve mostly been working on my martial arts mod for the past while, but I added some more food recipes today (added some weapon recipes as well recently, but no issues with those) and I’m getting more of the same “not a valid item template” errors, and I’m wondering if maybe it’s somehow a loading order error, that it’s loading the recipe before the item definition or something. It shouldn’t be, because my mod uses the same directory structure and filenames as the main game (except all my food recipes are currently in recipe_food.json, but it’s about all I can think of. The errors (from debug.log):
src/recipe_dictionary.cpp:359 [recipe_dictionary::finalize_internal(std::map<string_id, recipe>&)::<lambda(const recipe&)>] Recipe ketchup_powder defines invalid result.
23:35:29.014 ERROR : src/recipe_dictionary.cpp:359 [recipe_dictionary::finalize_internal(std::map<string_id, recipe>&)::<lambda(const recipe&)>] Recipe ketjap defines invalid result.
23:35:29.014 ERROR : src/recipe_dictionary.cpp:359 [recipe_dictionary::finalize_internal(std::map<string_id, recipe>&)::<lambda(const recipe&)>] Recipe pasta_primavera defines invalid result.
23:35:29.015 ERROR : src/recipe_dictionary.cpp:359 [recipe_dictionary::finalize_internal(std::map<string_id, recipe>&)::<lambda(const recipe&)>] Recipe sambal defines invalid result.
23:35:29.015 ERROR : src/item_factory.cpp:1368 [const itype* Item_factory::find_template(const itype_id&) const] Missing item definition: cookbook_indian
23:35:39.541 ERROR : src/recipe_dictionary.cpp:359 [recipe_dictionary::finalize_internal(std::map<string_id, recipe>&)::<lambda(const recipe&)>] Recipe sooji_halwa defines invalid book.
23:35:39.634 ERROR : src/recipe_dictionary.cpp:60 [const T& string_id::obj() const [with T = recipe]] invalid recipe id “sooji_halwa”
23:35:57.635 INFO : Loaded tileset: ChestHole32
23:35:57.675 ERROR : src/requirements.cpp:420 [void component::check_consistency(const string&) const] ketjap in inline_recipe_hor_fun is not a valid item template
src/requirements.cpp:420 [void component::check_consistency(const string&) const] ketchup_powder in inline_recipe_ketchup_from_powder is not a valid item template
23:36:11.927 ERROR : src/requirements.cpp:420 [void component::check_consistency(const string&) const] sambal in inline_recipe_maggi_goreng is not a valid item template
23:36:11.927 ERROR : src/requirements.cpp:420 [void component::check_consistency(const string&) const] ketjap in inline_recipe_maggi_goreng is not a valid item template
23:36:11.927 ERROR : src/requirements.cpp:420 [void component::check_consistency(const string&) const] sambal in inline_recipe_mie_goreng is not a valid item template
23:36:11.927 ERROR : src/requirements.cpp:420 [void component::check_consistency(const string&) const] ketjap in inline_recipe_mie_goreng is not a valid item template
src/item_factory.cpp:1368 [const itype* Item_factory::find_template(const itype_id&) const] Missing item definition: sambal
23:39:47.770 ERROR : src/item_factory.cpp:1368 [const itype* Item_factory::find_template(const itype_id&) const] Missing item definition: ketjap
23:39:47.772 ERROR : src/item_factory.cpp:1368 [const itype* Item_factory::find_template(const itype_id&) const] Missing item definition: ketchup_powder
(Note: the cookbook_indian book learning for one recipe I simply copied from another recipe in the main game, so that issue is in the main game but somehow doesn’t produce an error.)
Two other recipes I added today don’t produce any errors, but don’t show up in the game, even though another recipe that’s dependent on one of them does, and shows it as an ingredient.
(there was an extraneous , at the end of the sambal definition that should have produced an error but didn’t)
"result": "maggi_goreng",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "20 m",
"charges": 4,
"autolearn": true,
"qualities": [ { "id": "COOK", "level": 1 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "noodles_fast", 4 ] ],
[ [ "water", 1 ], [ "water_clean", 1 ] ],
[ [ "any_butter_or_oil", 2, "LIST" ] ],
[ [ "powder_eggs", 8 ], [ "eggs_bird", 8, "LIST" ], [ "egg_reptile", 8 ] ],
[ [ "meat_red_raw", 1, "LIST" ] ],
[ [ "sambal", 3 ] ],
[ [ "ketjap", 5 ] ],
[ [ "soysauce", 1 ] ]
]
},
{
"result": "mie_goreng",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "20 m",
"charges": 4,
"autolearn": true,
"qualities": [ { "id": "COOK", "level": 1 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "spaghetti_cooked", 1 ] ],
[ [ "any_butter_or_oil", 2, "LIST" ] ],
[ [ "powder_eggs", 8 ], [ "eggs_bird", 8, "LIST" ], [ "egg_reptile", 8 ] ],
[ [ "meat_red_raw", 1, "LIST" ] ],
[ [ "sambal", 3 ] ],
[ [ "ketjap", 5 ] ],
[ [ "soysauce", 1 ] ],
[ [ "ketchup", 5 ] ]
]
},
{
"result": "hor_fun",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "30 m",
"charges": 4,
"autolearn": true,
"qualities": [ { "id": "COOK", "level": 3 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "fun_raw", 1 ] ],
[ [ "any_butter_or_oil", 2, "LIST" ] ],
[ [ "powder_eggs", 4 ], [ "eggs_bird", 4, "LIST" ], [ "egg_reptile", 4 ] ],
[ [ "meat_red_raw", 1, "LIST" ] ],
[ [ "ketjap", 2 ] ],
[ [ "soysauce", 2 ] ],
[ [ "broth", 1 ] ]
]
},
{
"result": "pasta_primavera",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "20 m",
"charges": 4,
"autolearn": true,
"qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "spaghetti_raw", 1 ], [ "macaroni_raw", 1 ], [ "noodles_fast", 1 ], [ "lasagne_raw", 1 ] ],
[ [ "water", 1 ], [ "water_clean", 1 ] ],
[ [ "any_butter_or_oil", 2, "LIST" ] ],
[ [ "veggy", 4 ] ],
[ [ "seasoning_italian", 1 ], [ "seasoning_salt", 1 ], [ "garlic", 1 ], [ "wild_herbs", 20 ] ],
[ [ "salt", 1 ] ],
[ [ "pepper", 1 ] ]
]
},
{
"result": "sooji_halwa",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "20 m",
"charges": 4,
"autolearn": true,
"qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 3 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "couscous_raw", 2 ] ],
[ [ "butter", 1 ], [ "ghee", 1 ] ],
[ [ "milk_standard", 3, "LIST" ], [ "milk_powder", 3 ], [ "can_coconut", 1 ] ],
[
[ "sugar", 3 ],
[ "syrup", 3 ],
[ "honey_bottled", 2 ],
[ "honey_glassed", 2 ]
],
[ [ "cinnamon", 20 ] ]
]
},
{
"result": "couscous_cooked",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "3 m",
"charges": 4,
"autolearn": true,
"batch_time_factors": [ 95, 2 ],
"qualities": [ { "id": "COOK", "level": 3 } ],
"tools": [ [ [ "surface_heat", 6, "LIST" ] ] ],
"components": [
[ [ "couscous_raw", 1 ] ],
[ [ "broth", 1 ] ],
[ [ "salt", 1 ] ]
]
},
{
"type": "recipe",
"result": "beet_stew",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_MEAT",
"skill_used": "cooking",
"difficulty": 2,
"time": "4 h",
"charges": 2,
"qualities": [ { "id": "COOK", "level": 2 } ],
"tools": [ [ [ "surface_heat", 8, "LIST" ] ] ],
"components": [
[
[ "beer", 2 ],
[ "belgian_ale", 2 ],
[ "european_pilsner", 2 ],
[ "hb_beer", 2 ],
[ "india_pale_ale", 2 ],
[ "wine_barley", 2 ],
[ "pale_ale", 2 ],
[ "stout", 2 ],
[ "imperial_stout", 2 ]
],
[ [ "sugar_beet", 10 ] ],
[ [ "meat_red", 4, "LIST" ], [ "dry_meat", 4 ], [ "can_chicken", 4 ] ],
[ [ "onion", 4 ] ],
[ [ "veggy_wild", 5 ] ],
[ [ "cinnamon", 20 ] ],
[ [ "salt", 5 ], [ "seasoning_salt", 5 ] ]
]
},
{
"result": "beetstew_withcouscous",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 1,
"time": "3 m",
"charges": 4,
"autolearn": true,
"batch_time_factors": [ 95, 2 ],
"qualities": [ { "id": "CONTAIN", "level": 1 } ],
"components": [
[ [ "beet_stew", 1 ] ],
[ [ "couscous_cooked", 1 ] ],
[ [ "salt", 1 ] ]
]
},
{
"type": "recipe",
"result": "sambal",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_OTHER",
"skill_used": "cooking",
"difficulty": 2,
"time": "45 m",
"autolearn": true,
"batch_time_factors": [ 75, 1 ],
"tools": [ [ [ "rock_quern", -1 ], [ "clay_quern", -1 ] ] ],
"components": [
[ [ "chili_pepper", 4 ] ],
[ [ "vinegar", 2 ] ],
[ [ "sugar", 2 ] ],
[ [ "salt", 2 ], [ "soysauce", 2 ], [ "seasoning_salt", 2 ] ]
]
},
{
"type": "recipe",
"result": "ketjap",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_OTHER",
"skill_used": "cooking",
"difficulty": 2,
"charges": 7,
"time": "60 m",
"autolearn": true,
"batch_time_factors": [ 80, 1 ],
"qualities": [ { "id": "COOK", "level": 2 } ],
"tools": [ [ [ "surface_heat", 4, "LIST" ] ] ],
"components": [ [ [ "sugar", 5 ] ], [ [ "soysauce", 10 ] ] ]
},
{
"result": "couscous_raw",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 4,
"time": "30 m",
"autolearn": true,
"tools": [ [ [ "surface_heat", 25, "LIST" ] ] ],
"components": [ [ [ "flour", 5 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ]
},
{
"result": "fun_raw",
"type": "recipe",
"category": "CC_FOOD",
"subcategory": "CSC_FOOD_PASTA",
"skill_used": "cooking",
"difficulty": 4,
"time": "2 m",
"autolearn": true,
"tools": [ [ [ "surface_heat", 25, "LIST" ] ], [ [ "sheet", -1 ] ], [ [ "rock_quern", -1 ], [ "clay_quern", -1 ], [ "mortar_pestle", -1 ] ] ],
"qualities": [ { "id": "BOIL", "level": 1 }, { "id": "CUT", "level": 2 } ],
"components": [ [ [ "dry_rice", 5 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ]
}