1 /**
2  * \file obj-knowledge.h
3  * \brief Object knowledge
4  *
5  * Copyright (c) 2016 Nick McConnell
6  *
7  * This work is free software; you can redistribute it and/or modify it
8  * under the terms of either:
9  *
10  * a) the GNU General Public License as published by the Free Software
11  *    Foundation, version 2, or
12  *
13  * b) the "Angband licence":
14  *    This software may be copied and distributed for educational, research,
15  *    and not for profit purposes provided that this copyright and statement
16  *    are included in all such copies.  Other copyrights may also apply.
17  */
18 
19 #include "angband.h"
20 #include "object.h"
21 #include "player.h"
22 
23 enum rune_variety {
24 	RUNE_VAR_COMBAT,
25 	RUNE_VAR_MOD,
26 	RUNE_VAR_RESIST,
27 	RUNE_VAR_BRAND,
28 	RUNE_VAR_SLAY,
29 	RUNE_VAR_CURSE,
30 	RUNE_VAR_FLAG
31 };
32 
33 
34 enum combat_runes {
35 	COMBAT_RUNE_TO_A = 0,
36 	COMBAT_RUNE_TO_H,
37 	COMBAT_RUNE_TO_D,
38 	COMBAT_RUNE_MAX
39 };
40 
41 struct rune {
42 	enum rune_variety variety;
43 	int index;
44 	quark_t note;
45 	const char *name;
46 };
47 
48 int max_runes(void);
49 enum rune_variety rune_variety(size_t i);
50 bool player_knows_rune(struct player *p, size_t i);
51 char *rune_name(size_t i);
52 char *rune_desc(size_t i);
53 quark_t rune_note(size_t i);
54 void rune_set_note(size_t i, const char *inscription);
55 
56 bool player_knows_brand(struct player *p, int i);
57 bool player_knows_slay(struct player *p, int i);
58 bool player_knows_curse(struct player *p, int i);
59 bool player_knows_ego(struct player *p, struct ego_item *ego,
60 	const struct object *obj);
61 bool object_effect_is_known(const struct object *obj);
62 bool object_is_known_artifact(const struct object *obj);
63 bool object_is_in_store(const struct object *obj);
64 bool object_has_standard_to_h(const struct object *obj);
65 bool object_has_rune(const struct object *obj, int rune_no);
66 bool object_runes_known(const struct object *obj);
67 bool object_fully_known(const struct object *obj);
68 bool object_flag_is_known(const struct object *obj, int flag);
69 bool object_element_is_known(const struct object *obj, int element);
70 
71 void object_set_base_known(struct object *obj);
72 void object_sense(struct player *p, struct object *obj);
73 void object_see(struct player *p, struct object *obj);
74 void object_touch(struct player *p, struct object *obj);
75 void object_grab(struct player *p, struct object *obj);
76 void player_know_object(struct player *p, struct object *obj);
77 void update_player_object_knowledge(struct player *p);
78 
79 void player_learn_flag(struct player *p, int flag);
80 void player_learn_curse(struct player *p, struct curse *curse);
81 void player_learn_innate(struct player *p);
82 void player_learn_all_runes(struct player *p);
83 
84 void equip_learn_on_defend(struct player *p);
85 void equip_learn_on_ranged_attack(struct player *p);
86 void equip_learn_on_melee_attack(struct player *p);
87 void equip_learn_flag(struct player *p, int flag);
88 void equip_learn_element(struct player *p, int element);
89 void equip_learn_after_time(struct player *p);
90 
91 void object_learn_unknown_rune(struct player *p, struct object *obj);
92 void object_learn_on_wield(struct player *p, struct object *obj);
93 void shape_learn_on_assume(struct player *p, const char *name);
94 void object_learn_on_use(struct player *p, struct object *obj);
95 void object_learn_brand(struct player *p, struct object *obj, int index);
96 void object_learn_slay(struct player *p, struct object *obj, int index);
97 void missile_learn_on_ranged_attack(struct player *p, struct object *obj);
98 
99 bool easy_know(const struct object *obj);
100 bool object_flavor_is_aware(const struct object *obj);
101 bool object_flavor_was_tried(const struct object *obj);
102 void object_flavor_aware(struct object *obj);
103 void object_flavor_tried(struct object *obj);
104