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