diff --git a/doc/NetHack开源代码泛读报告.docx b/doc/NetHack开源代码泛读报告.docx new file mode 100644 index 0000000..4374352 Binary files /dev/null and b/doc/NetHack开源代码泛读报告.docx differ diff --git a/src/NetHack_3.7/src/pickup.c b/src/NetHack_3.7/src/pickup.c index ea2f945..ab163e7 100644 --- a/src/NetHack_3.7/src/pickup.c +++ b/src/NetHack_3.7/src/pickup.c @@ -6,7 +6,71 @@ /* * Contains code for picking objects up, and container use. */ +/*simple_look(struct obj *, boolean):用于简单地查看物体的函数。 +query_classes(char *, boolean *, boolean *, const char *, struct obj *, boolean, int *):用于查询物品类别的函数,根据指定的条件检查玩家是否拥有特定类别的物品。 + +fatal_corpse_mistake(struct obj *, boolean):用于处理致命错误的函数,当玩家犯下严重错误(如吃掉了致命的尸体)时会调用该函数。 + +describe_decor(void):用于描述装饰物的函数。 + +check_here(boolean):用于检查当前位置是否有物品的函数。 + +n_or_more(struct obj *):用于判断是否拥有指定数量以上的物品的函数。 + +all_but_uchain(struct obj *):用于判断除了链子以外的所有物品的函数。 + +autopick(struct obj *, int, menu_item **):用于自动选择物品的函数。 + +count_categories(struct obj *, int):用于计算物品类别数量的函数。 + +delta_cwt(struct obj *, struct obj *):用于计算重量差异的函数。 + +carry_count(struct obj *, struct obj *, long, boolean, int *, int *):用于计算携带物品数量的函数。 + +lift_object(struct obj *, struct obj *, long *, boolean):用于提起物品的函数。 + +mbag_explodes(struct obj *, int):用于判断魔法袋是否会爆炸的函数。 + +is_boh_item_gone(void):用于判断物品是否已经消失的函数。 + +do_boh_explosion(struct obj *, boolean):用于处理钥匙袋爆炸的函数。 + +boh_loss(struct obj *, boolean):用于计算钥匙袋损失的函数。 + +in_container(struct obj *):用于将物品放入容器的函数。 + +out_container(struct obj *):用于从容器中取出物品的函数。 + +mbag_item_gone(boolean, struct obj *, boolean):用于检查魔法袋中的物品是否已经消失的函数。 + +stash_ok(struct obj *):用于检查物品是否适合存放的函数。 + +explain_container_prompt(boolean):用于解释容器提示的函数。 + +traditional_loot(boolean):用于传统战利品的函数。 + +menu_loot(int, boolean):用于菜单式战利品的函数。 + +tip_ok(struct obj *):用于检查物品是否适合倾斜的函数。 + +tipcontainer_gettarget(struct obj *, boolean *):用于获取倾斜容器的目标物品的函数。 + +tipcontainer_checks(struct obj *, struct obj *, boolean):用于检查倾斜容器的函数。 + +in_or_out_menu(const char *, struct obj *, boolean, boolean, boolean, boolean):用于选择放入或取出物品的菜单的函数。 + +able_to_loot(coordxy, coordxy, boolean):用于判断是否能够战利品的函数。 + +reverse_loot(void):用于反转战利品顺序的函数。 + +mon_beside(coordxy, coordxy):用于判断怪物是否在旁边的函数。 + +do_loot_cont(struct obj **, int, int):用于执行战利品容器的函数。 + +doloot_core(void):用于执行战利品的核心函数。 + +tipcontainer(struct obj *):用于倾斜容器的函数。*/ #include "hack.h" #define CONTAINED_SYM '>' /* from invent.c */ diff --git a/src/NetHack_3.7/src/pline.c b/src/NetHack_3.7/src/pline.c index d961c1b..e156ce8 100644 --- a/src/NetHack_3.7/src/pline.c +++ b/src/NetHack_3.7/src/pline.c @@ -2,7 +2,21 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */ /* NetHack may be freely redistributed. See license for details. */ +/*putmesg 函数:将消息输出到消息窗口,并且根据消息的紧急程度以及是否需要记录历史消息做相应的处理。 +pline 函数:格式化并输出消息到消息窗口,可以处理格式化字符串,并且支持不重复显示相同的消息内容。 + +dumplogmsg 函数和 dumplogfreemessages 函数:用于记录和释放游戏日志消息,主要用于保存最近的消息记录。 + +You、Your、You_feel 等一系列函数:用于输出与玩家角色相关的消息,比如 "You feel"、"Your sword" 等消息。 + +verbalize 函数:用于以口头语输出消息,通常用于神明或特殊角色的对话。 + +impossible 函数:用于输出在程序逻辑上不可能发生的消息,标志着程序出现了异常情况。 + +raw_printf 函数:直接输出消息到屏幕,不经过消息窗口的处理。 + +其他辅助函数:还有一些辅助函数用于记录错误、处理配置文件错误等*/ #include "hack.h" #define BIGBUFSZ (5 * BUFSZ) /* big enough to format a 4*BUFSZ string (from diff --git a/src/NetHack_3.7/src/polyself.c b/src/NetHack_3.7/src/polyself.c index 8d17f19..94bfec2 100644 --- a/src/NetHack_3.7/src/polyself.c +++ b/src/NetHack_3.7/src/polyself.c @@ -18,7 +18,23 @@ * * polymon (called directly) usually golem petrification */ +/*check_strangling 函数:用于检查角色是否处于被勒死状态,并采取相应的行动。 +polyman 函数:用于将玩家角色变形为另一个怪物,并更改相关属性。 + +dropp 函数:用于让角色掉落一个物品,并处理相关逻辑。 + +break_armor 函数:用于摧毁角色当前穿戴的盔甲。 + +drop_weapon 函数:根据给定的参数,让角色掉落手中的武器。 + +armor_to_dragon 函数:根据给定的参数,将角色当前穿戴的盔甲转化为龙鳞。 + +newman 函数:用于生成一个新的怪物,并将其放置在游戏地图中。 + +polysense 函数:用于检测并更新玩家角色的感知能力。 + +no_longer_petrify_resistant 常量字符串:表示玩家角色不再具有石化抵抗能力。*/ #include "hack.h" static void check_strangling(boolean); diff --git a/src/NetHack_3.7/src/potion.c b/src/NetHack_3.7/src/potion.c index f8792e5..3984492 100644 --- a/src/NetHack_3.7/src/potion.c +++ b/src/NetHack_3.7/src/potion.c @@ -2,7 +2,73 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ +/*itimeout 函数:用于处理角色的定时器,返回一个计时器的剩余时间。 +itimeout_incr 函数:用于增加角色的定时器,并返回增加后的时间。 + +ghost_from_bottle 函数:用于释放一个被封印的幽灵。 + +drink_ok 函数:检查给定的物品是否可以被玩家角色饮用。 + +peffect_restore_ability 函数:恢复角色的能力值。 + +peffect_hallucination 函数:使玩家角色产生幻觉效果。 + +peffect_water 函数:使玩家角色感到口渴。 + +peffect_booze 函数:使玩家角色醉酒。 + +peffect_enlightenment 函数:使玩家角色获得启发和洞察力。 + +peffect_invisibility 函数:使玩家角色隐形。 + +peffect_see_invisible 函数:使玩家角色能够看见隐形物体。 + +peffect_paralysis 函数:使玩家角色瘫痪无法行动。 + +peffect_sleeping 函数:使玩家角色睡眠。 + +peffect_monster_detection 函数:使玩家角色探测周围的怪物。 + +peffect_object_detection 函数:使玩家角色探测周围的物品。 + +peffect_sickness 函数:使玩家角色感到恶心。 + +peffect_confusion 函数:使玩家角色混乱无法理解环境。 + +peffect_gain_ability 函数:使玩家角色获得额外的能力。 + +peffect_speed 函数:使玩家角色加快移动速度。 + +peffect_blindness 函数:使玩家角色失明。 + +peffect_gain_level 函数:使玩家角色提升一个等级。 + +peffect_healing 函数:对玩家角色进行治疗。 + +peffect_extra_healing 函数:对玩家角色进行更强力的治疗。 + +peffect_full_healing 函数:对玩家角色进行完全的治疗。 + +peffect_levitation 函数:使玩家角色悬浮在空中。 + +peffect_gain_energy 函数:使玩家角色获得额外的能量。 + +peffect_oil 函数:将玩家角色涂抹上油。 + +peffect_acid 函数:使玩家角色受到酸性伤害。 + +peffect_polymorph 函数:将玩家角色进行多形态变化。 + +H2Opotion_dip 函数:处理将物品浸入水中的效果。 + +mixtype 函数:确定两个物品混合的结果类型。 + +dip_ok 函数:检查给定的物品是否可以被浸入其他物品。 + +hold_potion 函数:处理持有药水的效果。 + +potion_dip 函数:处理将物品浸入药水的效果。*/ #include "hack.h" static long itimeout(long); diff --git a/src/NetHack_3.7/src/spell.c b/src/NetHack_3.7/src/spell.c index 76dd82c..7ae8350 100644 --- a/src/NetHack_3.7/src/spell.c +++ b/src/NetHack_3.7/src/spell.c @@ -1,7 +1,68 @@ /* NetHack 3.7 spell.c $NHDT-Date: 1646838390 2022/03/09 15:06:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.131 $ */ /* Copyright (c) M. Stephenson 1988 */ /* NetHack may be freely redistributed. See license for details. */ +/*static int spell_let_to_idx(char): +将法术字符转换为法术索引。 +static boolean cursed_book(struct obj * bp): +检查书籍是否被诅咒。 + +static boolean confused_book(struct obj *): +检查书籍是否混乱状态。 + +static void deadbook_pacify_undead(struct monst *): +使亡灵怪物平静的函数。 + +static void deadbook(struct obj *): +处理死亡之书的效果。 + +static int learn(void): +学习新的法术。 + +static boolean rejectcasting(void): +检查是否拒绝施法。 + +static boolean getspell(int *): +获取选择的法术。 + +static int QSORTCALLBACK spell_cmp(const genericptr, const genericptr): +法术比较函数。 + +static void sortspells(void): +对法术进行排序。 + +static boolean spellsortmenu(void): +法术排序菜单。 + +static boolean dospellmenu(const char *, int, int *): +显示法术菜单。 + +static int percent_success(int): +计算法术成功率。 + +static char *spellretention(int, char *): +计算法术保留度。 + +static int throwspell(void): +施放法术。 + +static void cast_protection(void): +施放保护法术。 + +static void spell_backfire(int): +施法反噬。 + +static boolean spelleffects_check(int, int *, int *): +检查法术效果。 + +static const char *spelltypemnemonic(int): +返回法术类型的助记符。 + +static boolean can_center_spell_location(coordxy, coordxy): +检查法术是否可以施放在中心位置。 + +static boolean spell_aim_step(genericptr_t, coordxy, coordxy): +处理法术瞄准的一步。*/ #include "hack.h" /* spellmenu arguments; 0 thru n-1 used as gs.spl_book[] index when swapping */ diff --git a/src/NetHack_3.7/src/steal.c b/src/NetHack_3.7/src/steal.c index 1f4b24a..1bf5119 100644 --- a/src/NetHack_3.7/src/steal.c +++ b/src/NetHack_3.7/src/steal.c @@ -2,7 +2,27 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*stealgold函数:用于让怪物从玩家身上偷取金币,根据玩家是否拥有真金(gold)或者数量不同的金币来进行不同的处理。 +thiefdead函数:当偷窃物品的怪物死亡时调用,用于清除相关标记。 + +unresponsive函数:检查玩家是否对诱惑尝试作出反应,包括检查玩家是否昏迷、晕倒或被麻痹的状态。 + +unstolenarm函数:当怪物在偷窃玩家装备时死亡时调用,用于完成取下玩家装备的操作。 + +stealarm函数:用于怪物执行偷窃玩家装备的动作,包括取下和偷取玩家的装备。 + +remove_worn_item函数:用于怪物将玩家穿戴的物品取下,包括解除武器、防具和饰品等装备。 + +somegold函数:根据玩家携带的金币数量,返回一定比例的金币数量。 + +findgold函数:用于在怪物或容器的链表中找到第一个金币对象,并返回该对象。 + +equipname函数:根据传入的物品对象,返回相应装备的名称。 + +stealamulet函数:用于指定的怪物(例如巫师或任务敌人)偷取玩家身上的特殊物品,如护身符、祝福铃铛等。 + +maybe_absorb_item函数:用于怪物吸收玩家用于触碰怪物的物品,例如注射器或武器*/ #include "hack.h" static int stealarm(void); diff --git a/src/NetHack_3.7/src/steed.c b/src/NetHack_3.7/src/steed.c index 4947dde..60367ac 100644 --- a/src/NetHack_3.7/src/steed.c +++ b/src/NetHack_3.7/src/steed.c @@ -1,7 +1,27 @@ /* NetHack 3.7 steed.c $NHDT-Date: 1671838909 2022/12/23 23:41:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.108 $ */ /* Copyright (c) Kevin Hugo, 1998-1999. */ /* NetHack may be freely redistributed. See license for details. */ +/*rider_cant_reach(void) - 当骑手无法到达某个位置时调用,用于通知玩家。 +can_saddle(struct monst* mtmp) - 检查怪物是否可以被骑乘。 + +use_saddle(struct obj* otmp) - 用鞍装备怪物,玩家尝试给怪物戴鞍时调用。 + +put_saddle_on_mon(struct obj* saddle, struct monst* mtmp) - 给怪物戴上鞍。 + +can_ride(struct monst* mtmp) - 检查是否可以骑乘指定的怪物。 + +doride(void) - 骑乘怪物的命令处理函数。 + +mount_steed(struct monst *mtmp, boolean force) - 开始骑乘指定的怪物。 + +exercise_steed(void) - 骑乘怪物后进行技能锻炼。 + +kick_steed(void) - 玩家踢或鞭打坐骑。 + +landing_spot(coord *spot, int reason, int forceit) - 尝试找到一个合适的下马位置。 + +dismount_steed(int reason) - 停止骑乘当前的坐骑*/ #include "hack.h" /* Monsters that might be ridden */ diff --git a/src/NetHack_3.7/src/symbols.c b/src/NetHack_3.7/src/symbols.c index c277c76..b2a3a52 100644 --- a/src/NetHack_3.7/src/symbols.c +++ b/src/NetHack_3.7/src/symbols.c @@ -1,7 +1,25 @@ /* NetHack 3.7 symbols.c $NHDT-Date: 1661295669 2022/08/23 23:01:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.90 $ */ /* Copyright (c) NetHack Development Team 2020. */ /* NetHack may be freely redistributed. See license for details. */ +/*savedsym_add(const char *, const char *, int) - 添加保存的符号到缓存中,用于保存和恢复游戏中的特殊符号。 +savedsym_find(const char *, int) - 在缓存中查找特定的保存符号。 + +purge_custom_entries(enum graphics_sets which_set) - 清除自定义符号库中的条目,用于删除特定符号集。 + +def_r_oc_syms[MAXOCLASSES] - 定义了每个物品类别的默认符号。 + +decgraphics_mode_callback - DEC图形模式的回调函数,在tty_start_screen()中设置。 + +ibmgraphics_mode_callback - IBM图形模式的回调函数,在tty_start_screen()中设置(仅适用于PC9800平台)。 + +ascgraphics_mode_callback - ASC图形模式的回调函数,在tty_start_screen()中设置(仅适用于PC9800平台)。 + +cursesgraphics_mode_callback - Curses图形模式的回调函数,在tty_start_screen()中设置。 + +ibmgraphics_mode_callback - IBM图形模式的回调函数,在tty_start_screen()中设置(仅适用于TTY图形模式和WIN32平台)。 + +utf8graphics_mode_callback - UTF-8图形模式的回调函数,在tty_start_screen()中设置,并在unixtty、windtty等文件中找到(仅适用于增强符号功能)*/ #include "hack.h" #include "tcap.h"