CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.33k stars 4.14k forks source link

Differentiate between books that explicitly list recipes and books that provide information for recipes. #21795

Open friedev opened 7 years ago

friedev commented 7 years ago

Expected behavior

If you have a book with crafting recipes, the items in said recipes are listed in the crafting menu. This lets you see what skills you need to craft the item, so you can train for them appropriately. It makes sense for them to be shown since you know the item/recipe exists, unlike autolearned recipes that are above your skill level.

Actual behavior

You cannot see a crafting recipe written in a book if you do not have the necessary level in the recipe's primary skill. This can be confusing to the player and gives them no indication of what skills to train to be able to craft the item.

Steps to reproduce the behavior

  1. Create an unskilled character.
  2. Wish for a book with high-level crafting recipes (e.g. Augmentative Tech Review 2041).
  3. Open the crafting menu and navigate to tab that such recipes would be under (e.g. CBMs).

Solution

The best solution would be to show all recipes written in books, regardless of skill levels. If this is unbalanced in some way, the game could instead allow the player to unlock the recipes (if not the skills needed) by continuing to read the book once its other knowledge has been exhausted.

Beanzy commented 7 years ago

One issue I could see with this is that it would allow you to attempt to craft some items before you have the skill level to do so, and thus potentially allow you to powerlevel the skill.

IIRC if a recipe doesn't have a "Required skills" only a "Skills Used" value, you can attempt to craft the recipe at any skill level. So if you were to attempt a level 8 mechanics recipe while at level 2 skill, the game would reward you with a ton of xp in that skill.

kevingranade commented 7 years ago

Ability to learn recipes from a book doesn't necessarily mean there is a literal recipe in the book, it just has the information necessary to allow someone with the appropriate skill to figure it out.

friedev commented 7 years ago

@Beanzy If that's the case, the XP gain from recipes above your level ought to be reworked. Blindly trying to make a recipe far more complex than you can understand shouldn't help you much at all in figuring it out. I'd suggest either granting no XP for recipes more than 2 levels above your current skill, or capping the additional XP gain to that of a recipe 1 or 2 levels above your current skill level. For example, attempting to craft a level 8 item at level 2 skill would net you the same experience as trying to craft something at level 3-4.

@kevingranade True. However, since the recipes are listed in the book's description, the player has at least some knowledge of their existence. Information could still be conveyed to the player without being unrealistic for the character by listing the recipe in the crafting menu, but not the ingredients required to make it. The player would be able to see the other requirements of the recipe and perhaps the item description, but there would be a message replacing the component and tool lists, such as "You are not skilled enough to understand this item's recipe."

Though less optimal, it would also be possible to list the lacking skill next to the name of the item in the book's description. For instance, if the player has a book with the recipe for the Cranial Flashlight CBM (electronics, difficulty 6), but only 4 levels of electronics skill, they would see "Cranial Flashlight CBM (electronics)" listed in the book's description along with other recipes. This way the player would at least know what skill they need to train in order to craft the item without giving too much information to the character.

kevingranade commented 7 years ago

However, since the recipes are listed in the book's description, the player has at least some knowledge of their existence.

This kind of, "player knows x, therefore they also know y" argument doesn't fly, in this case it's already pushed as far as I want it to go. If you want consistency I'd be more likely to remove that list of recipes and replace it with a message about the book having more to offer than provide more detail about the recipes.

Leland commented 7 years ago

Ability to learn recipes from a book doesn't necessarily mean there is a literal recipe in the book, it just has the information necessary to allow someone with the appropriate skill to figure it out.

If you want consistency I'd be more likely to remove that list of recipes and replace it with a message about the book having more to offer than provide more detail about the recipes.

The most apparent concern I see with having the recipes hidden from the player (and the skills needed to make the recipes visible hidden as well) is that the player is left with an essentially useless item. I, as a player, would know that there's something within a book, but the steps to unlock them and the value of the rewards would both be unknown. It's an impasse with no clear way forward.

What are your thoughts, then, on changing the mechanics so as to have the recipes actually present in the book? I see this as a move that's both more player-friendly and one that doesn't stretch the boundaries of realism the game aims to adhere to.

friedev commented 7 years ago

If you want consistency I'd be more likely to remove that list of recipes and replace it with a message about the book having more to offer than provide more detail about the recipes.

So this would replace "This book has the following recipes..." with something to the effect of "This book has more recipes"? Neither this nor the current system make sense in the case of books that do have literal recipes written in them, such as cookbooks. While the character has access to detailed recipes, the player is left with the name of the item, if that. As such, I would venture to call this bad UI design.

What are your thoughts, then, on changing the mechanics so as to have the recipes actually present in the book?

I am in favor of this. It seems unlikely that someone would be able to craft an item only by looking at a picture of it, especially in the case of advanced electronics or mechanics recipes. All this should require is rewording some book descriptions. If this is done, then my first (and simplest) solution above could be implemented without realism or consistency issues.

Theundyingcode commented 7 years ago

IRL I find the best way to learn is doing exactly this, trying to create something beyond my skill level by following a book or other instructions. Obviously, there are a lot of things I have absolutely no chance of actually making but trying exposes me to a lot of different aspects so long as it's in the realm of me being able to understand it more than just copy/paste.

I have two suggestions about book mechanics:

kevingranade commented 7 years ago

What are your thoughts, then, on changing the mechanics so as to have the recipes actually present in the book?

I'm very against, it was set up the way it is specifically because the books in question are rarely simple lists of recipes. I wouldn't object to labelling some books or recipes as being obvious (cookbooks, how-to books, etc) and surfacing them after first read, but not by default for all books with recipes.

friedev commented 7 years ago

I wouldn't object to labelling some books or recipes as being obvious (cookbooks, how-to books, etc) and surfacing them after first read, but not by default for all books with recipes.

That sounds like a fair compromise to me. Are we then going to hide the lists of recipes in other books? I suppose that would be the most realistic, but it has some issues as Leland pointed out.

Theundyingcode commented 7 years ago

I also like that idea. I have two thoughts that are probably just adding unnessicerry complications but will throw out just in case: unlock seeing before you can craft and staying hidden until after you learn.

kevingranade commented 6 years ago

To summarize: The course of action I recommend is to add a new flag like "obvious_recipes" or "explicit_recipes" that causes all the recipes in the book to be revealed as soon as the book is scanned (the special handling the first time you read a book). These recipes, along with their requirements would be displayed in the book description and/or the crafting menu.

Books WITHOUT this flag would not have their recipes displayed at all, either in the crafting menu or in the book description until the crafting requirements for said recipes are met.

BevapDin commented 6 years ago

One can already hid a recipe in a book, or give it a special name (effectively hiding the name of the resulting item). This was implemented some time ago and used in the for the napalm recipe in the textbook_anarch.

Well, it used to work. Now it doesn't. Why was this changed in #18286?

-            islot_book::recipe_with_description_t rwd{ r, j->skill_level, "", j->hidden };
-            if( j->recipe_name.empty() ) {
-                rwd.name = item::nname( r->result );
-            } else {
-                rwd.name = _( j->recipe_name.c_str() );
-            }
+            islot_book::recipe_with_description_t desc{ &r, bk.second, item::nname( r.result ), false };
+            item::find_type( bk.first )->book->recipes.insert( desc );

Now it stores (unconditionally) the name of the resulting item (completely ignoring the recipe name as defined in JSON), stores a fixed false in recipe_with_description_t::hidden (making this member kind of pointless - it has always the same value).

And by the way, that (removed) feature was implemented as response to https://github.com/CleverRaven/Cataclysm-DDA/pull/11620#issuecomment-82751284 - which kind of reminds me of this discussion.

stale[bot] commented 5 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not \'bump\' or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.

I-am-Erk commented 2 years ago

I would suggest that the solution to this is to move recipe lists into their own objects, and allow the lists to have attributes defining when they will be displayed. I strongly dislike how recipes are currently added to books as it makes audits of recipe information virtually impossible.