# Cooking [mirrorcult, Approved]
Cooking in SS13 is generally usually really boring. There are a couple of flashes of good content, but for the most part things are just 'stick it in a microwave/"food processor" and out comes something good', which is really lame, honestly.
SS14 seeks to amend this while also keeping the design fairly simple and intuitive as well as easy to expand on in code. Cooking will be based on CGL2 (construction graphs), meaning that it'll be easy for any new coders to write recipes and things can be expanded to work based on general events rather than hardcoded.
## General Design
SS14 cooking will be based on a couple of principles:
- The crafting menu should be avoided as much as humanly possible. Having it clogged up with a million recipes, and having to search for them in a menu to make them, really sucks in just about every way.
- Food should be as modular as possible and ideally should allow for custom creations, at least to a certain extent.
- Cooking should be based around having many different tools and machines at your disposal in order to create unique paths to creating all foods.
- Machines and tools should be as integrated with the rest of the game as possible--for instance, the oven or stove should simply heat items up to a certain temperature rather than hardcoding reactions; that way, the recipe can be based on "heat to X temperature" rather than "put in an oven", which is more emergent.
---
An example recipe:
- Take dough (created using flour), and roll it out using a rolling pin
- Place ingredients on this rolled-out dough (cheese, sauce, meat)
- Place the entire piece of dough into an oven on a pizza stone, and allow it to cook until you can see it's done.
- Take the pizza out, cut into pieces, and serve.
Of course, this is ideally an equally valid recipe:
- Take dough and roll it out using a fire extinguisher
- Place an extreme quantity of banana peels on top; no sauce except for banana juice
- Throw the pizza into a plasma fire, and get your atmos tech friend to get it out once it's medium rare
- Delicious clownzza.
### Tools of the Trade
The chef would start with many tools at his disposal, all of which ideally have counterparts in the rest of the station that can also suffice (albeit maybe taking longer). These can all be made in lathes or ordered from cargo.
- Knives
- Rolling pins
- Cheese graters
- Strainers
- Pots, pans, pizza stones, plates, etc
### Appliances
The chef also has many useful machines at his disposal:
- Ovens
- Griddles
- Fryers/deep fryers
- Ice cream makers
- Mixers
- Toasters
- Blenders
## Specifics
:::warning
This part is not yet "approved"
:::
### Food groups
Clearly, many foods belong together in a large "group" that has a few fundamental crafting rules but apart from that gives the player almost complete freedom in what ingredients to use and in what order. From all current recipes in the game, the following groups stand out:
#### Pizza
##### Crafting
1. Get a ball of dough.
2. Roll it out using a rolling pin or another round object (i.e. fire extinguisher). This creates a "pizza base".
3. Add tomato sauce.
4. Add any ingredients, in any order.
5. Heat to 470 K.
6. When this temperature is reached, the game assigns a name to the pizza (see section Naming).
7. Slice the pizza using a knife or a pizza cutter.
8. Now the pizza slices can be individually eaten.
##### Visualization
Every ingredient added should create a new layer on top of the previous one on the pizza base sprite. After heating, the layers should change sprites if relevant (tomato sauce should darken, cheese should melt, meat should become brown).
#### Burgers
##### Crafting
1. Place or hold a bun. This becomes the "burger base" (although it doesn't have to get that name in the game).
2. Add ingredients, in any order. Ingredients should probably be limited such that only "finished" ingredients can be added; i.e. no raw burgers, only cooked burgers.
3. Add another bun on top.
4. At this point the game assigns a name to the burger (see section Naming).
5. The burger can now be eaten.
##### Visualization
Every ingredient added should create a new layer on top of the previous one. Unlike pizzas, burgers should probably increase in height with every ingredient added. This allows players to create high burgers.
#### Kebab/skewers
##### Crafting
1. Hold a skewer.
2. Put on any ingredients, in any order. There should probably be a limit of ingredients, either a static amount or a limit based on the size of the ingredient (a chili should not take up as much space as clown shoes for example).
3. Heat the skewer to TODO K.
4. When this temperature is reached, the game assigns a name to the skewer (see section Naming).
5. The skewer can now be eaten.
##### Visualization
Every ingredient added should be shown visually on the skewer. After heating, sprites of the ingredients should change color if applicable. While eating, every ingredient on the skewer could be removed with every bite, such that every ingredient is eaten one by one.
#### Salads
##### Crafting
1. Place a bowl.
2. TODO
##### Visualization
Every ingredient added should be shown visually in the salad bowl. Unlike pizzas/burgers however, they shouldn't be clear layers where the order is visible as salads are mixed together. No clue how you would implement this.
#### Soups
##### Crafting
1. Get a cooking pot.
2. Add water to the pot.
3. Add any ingredients, in any order.
4. Heat the water in the pot to 373 K (boiling).
5. When this temperature is reached, the game assigns a name to the soup (see section Naming). This might be shown in game as "pot of X soup".
6. Transfer the soup to a bowl. The bowls could be called "bowl of X soup" in game.
7. The soup can now be eaten from the bowls.
##### Visualization
Instead of showing every ingredient seperately, the soup should probably be colored based on what ingredients are in it. For example, if there are tomatoes in the soup the soup should probably become red. If there are a lot of vegetables it should probably become translucent green, and if there is cream in the soup it should probably become opaque.
#### Cakes
TODO
#### Pies
##### Crafting
1. Create pie dough.
2. Put pie dough in pie tin.
3. Add any ingredients to the pie tin and dough in any order.
4. Heat to 470 K.
5. When this temperature is reached, the game assigns a name to the pie (see section Naming).
6. Cut the pie into slices.
7. The individual slices can now be eaten.
#### Pancakes
TODO
#### Waffles, cookies
TODO Should maybe be split up, idk
#### Bread
TODO Should maybe not be a group?
#### Spaghetti
TODO
### Naming
Generated names should probably be based on the most "significant" ingredient. For example, if the player makes a burger with lettuce, tomato, and chicken, the burger should probably be named "chicken burger". However if you make a burger out of lettuce, chicken, and clown shoes, it should probably be named "clown burger". Naming should therefore be based on what ingredients are in the dish, and what "class" the ingredients belong to.
Naming should be specific per food group.
Naming could also be based on what way the dish was cooked. For example, while it might be possible to boil a skewer, this isn't really preferable and should probably name the skewer something like "soggy chicken skewer".
Naming could also be used to discourage certain types of cooking, such as spamming pizzas without ingredients besides tomato sauce (which could get the prefix "bland"), or creating burgers with a massive amount of ingredients (which could get the name "messy burger").
It is important that naming of dishes gets a lot of thought, so that the large amount of freedom to pick ingredients does not cause every possible dish to feel generic and not special, but instead to encourage players to experiment instead of always making the simplest dish possible.
### Specific recipes
While the food groups allow for generic recipes with a lot of freedom, it should still be possible to have specific recipes. For example, it should be possible to create the Dank Pizza (shown below) by following the generic pizza recipe, but using the ingredients (perhaps it is not necessary to use the exact same amount) shown. Then the naming and sprite of the generic recipe is overridden by the name Dank Pizza and the Dank Pizza sprite.

### Foods not in a group
Food not in groups still follows "hardcoded" recipes. With these recipes the player does not have freedom over what ingredients go into the recipe, but it should still be possible to heat the food in any way, instead of having to use a specific machine/tool to finish the recipe.
## Special considerations
### Sprites
One big problem with generic recipes is that you now need special sprites for every ingredient. For example, there has to be a sprite for tomato slices on a burger, tomato sauce on pizza, etc. Probably need to do something smart to not make this a pain in the ass (for example, shredded cheese could just use a generic sprite that has a yellow filter over it).