From 23d49b3200a4ffd08db5e05610d3a46057f5e047 Mon Sep 17 00:00:00 2001 From: Aurora <1191824899@qq.com> Date: Mon, 22 Jan 2024 22:12:55 +0800 Subject: [PATCH] commit --- src/NetHack_3.7/src/pickup.c | 79 ++++- src/NetHack_3.7/src/pline.c | 20 +- src/NetHack_3.7/src/polyself.c | 23 +- src/NetHack_3.7/src/potion.c | 66 ++++ src/NetHack_3.7/src/pray.c | 48 +++ src/NetHack_3.7/src/priest.c | 34 ++ src/NetHack_3.7/src/quest.c | 18 + src/NetHack_3.7/src/questpgr.c | 22 ++ src/NetHack_3.7/src/read.c | 76 +++++ src/NetHack_3.7/src/rect.c | 18 + src/NetHack_3.7/src/region.c | 26 ++ src/NetHack_3.7/src/restore.c | 44 +++ src/NetHack_3.7/src/rip.c | 7 + src/NetHack_3.7/src/rnd.c | 7 +- src/NetHack_3.7/src/role.c | 10 + src/NetHack_3.7/src/rumors.c | 12 + src/NetHack_3.7/src/save.c | 38 +++ src/NetHack_3.7/src/sfstruct.c | 16 + src/NetHack_3.7/src/shk.c | 114 +++++++ src/NetHack_3.7/src/shknam.c | 16 + src/NetHack_3.7/src/sit.c | 10 + src/NetHack_3.7/src/sounds.c | 18 + src/NetHack_3.7/src/sp_lev.c | 604 +++++++++++++++++++++++++++++++++ src/NetHack_3.7/src/spell.c | 61 ++++ src/NetHack_3.7/src/steal.c | 20 ++ src/NetHack_3.7/src/steed.c | 20 ++ src/NetHack_3.7/src/symbols.c | 18 + src/NetHack_3.7/src/sys.c | 4 +- src/NetHack_3.7/src/teleport.c | 9 +- src/NetHack_3.7/src/timeout.c | 14 +- src/NetHack_3.7/src/topten.c | 13 +- src/NetHack_3.7/src/track.c | 16 + src/NetHack_3.7/src/trap.c | 61 +++- src/NetHack_3.7/src/u_init.c | 25 ++ src/NetHack_3.7/src/uhitm.c | 70 ++++ src/NetHack_3.7/src/utf8map.c | 42 +++ src/NetHack_3.7/src/vault.c | 22 ++ src/NetHack_3.7/src/version.c | 26 ++ src/NetHack_3.7/src/vision.c | 13 +- src/NetHack_3.7/src/weapon.c | 7 +- src/NetHack_3.7/src/wield.c | 5 +- src/NetHack_3.7/src/windows.c | 61 ++++ src/NetHack_3.7/src/wizard.c | 12 + src/NetHack_3.7/src/worm.c | 6 + src/NetHack_3.7/src/worn.c | 8 + src/NetHack_3.7/src/write.c | 16 + src/NetHack_3.7/src/zap.c | 44 +++ 47 files changed, 1883 insertions(+), 36 deletions(-) diff --git a/src/NetHack_3.7/src/pickup.c b/src/NetHack_3.7/src/pickup.c index 41123d0..ab163e7 100644 --- a/src/NetHack_3.7/src/pickup.c +++ b/src/NetHack_3.7/src/pickup.c @@ -6,22 +6,71 @@ /* * Contains code for picking objects up, and container use. */ - /*1. in_container(struct obj *):这个函数用于将指定的物品放入容器中。 -2. out_container(struct obj *):这个函数用于将指定的物品从容器中取出。 -3. mbag_item_gone(boolean, struct obj *, boolean):这个函数用于处理从魔法袋中移除物品的情况,包括物品消失和重量变化。 -4. stash_ok(struct obj *):这个函数用于判断一个物品是否可以被存放在容器中。 -5. explain_container_prompt(boolean):这个函数用于显示容器操作的提示信息,如放入、取出物品等。 -6. traditional_loot(boolean):这个函数用于实现传统的物品搜刮操作,如打开容器、拾取物品等。 -7. menu_loot(int, boolean):这个函数用于显示一个菜单,让玩家选择从容器中拾取或放入物品。 -8. tip_ok(struct obj *):这个函数用于判断一个容器是否可以被倾倒。 -9. tipcontainer_gettarget(struct obj *, boolean *):这个函数用于获取玩家选择的倾倒容器的目标。 -10. tipcontainer_checks(struct obj *, struct obj *, boolean):这个函数用于检查倾倒容器操作是否合法,如容器是否已满等。 -11. in_or_out_menu(const char *, struct obj *, boolean, boolean, boolean, boolean):这个函数用于显示一个菜单,让玩家选择将物品放入容器或从容器中取出。 -12. able_to_loot(coordxy, coordxy, boolean):这个函数用于判断玩家是否能够在指定位置搜刮物品。 -13. reverse_loot(void):这个函数用于判断玩家是否希望反向搜刮,即从容器中取出物品。 -14. mon_beside(coordxy, coordxy):这个函数用于判断指定位置是否有怪物。 -15. do_loot_cont(struct obj **, int, int):这个函数用于处理玩家搜刮容器中的物品。*/ +/*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 e526ad0..e156ce8 100644 --- a/src/NetHack_3.7/src/pline.c +++ b/src/NetHack_3.7/src/pline.c @@ -2,13 +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(const char *):这个函数用于将传入的字符串(游戏中的消息)输出到屏幕上。 -You_buf(int):这个函数用于生成一个包含 "你"(You)的字符串,用于游戏中的消息。例如,当你在游戏中拾起一把剑时,消息可能是 "你拾起了一把剑"。 -execplinehandler(const char *):这个函数是在定义了 MSGHANDLER 时使用的。它用于执行一个外部程序来处理游戏中的消息。这个函数会检查环境变量 "NETHACK_MSGHANDLER",如果存在,则使用该程序处理消息。 -maybe_play_sound(const char *):这个函数用于在游戏中播放声音。它会检查传入的字符串是否与配置文件中定义的声音关联,如果是,则播放相应的声音。 -impossible(const char *, ...):这个函数用于处理游戏中的异常情况。当发生不可能的事件时,它会输出一条消息给玩家,并提示玩家报告这个问题。在某些情况下,它还会提示玩家保存游戏并重新加载,以解决问题。 -*/ +/*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 74b3dd1..94bfec2 100644 --- a/src/NetHack_3.7/src/polyself.c +++ b/src/NetHack_3.7/src/polyself.c @@ -18,12 +18,23 @@ * * polymon (called directly) usually golem petrification */ -/*see_monsters():此函数用于更新玩家视野内的怪物信息,以便玩家可以看到附近的怪物。 -encumber_msg():此函数用于检查玩家的负重情况,如果负重过重,会给出相应的提示信息。 -retouch_equipment(2):此函数用于重新调整玩家的装备,例如在玩家变形时调整装备以适应新的形态。 -selftouch():此函数用于处理玩家自身触摸的情况,例如玩家触摸到具有石化效果的物体,可能导致玩家石化。 -hides_under():此函数用于检查玩家是否可以在当前位置下隐藏,例如在地上的物品堆下隐藏。 -canletgo():此函数用于检查玩家是否可以放下或释放手中的物品,例如在需要脱下手套时放下武器。*/ +/*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/pray.c b/src/NetHack_3.7/src/pray.c index e70b3cc..68966c6 100644 --- a/src/NetHack_3.7/src/pray.c +++ b/src/NetHack_3.7/src/pray.c @@ -1,7 +1,55 @@ /* NetHack 3.7 pray.c $NHDT-Date: 1684138081 2023/05/15 08:08:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.194 $ */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ +/*prayer_done 函数:处理玩家角色完成祈祷的逻辑。 +worst_cursed_item 函数:返回玩家角色身上最糟糕的诅咒物品。 + +in_trouble 函数:检查玩家角色是否处于困境中。 + +fix_curse_trouble 函数:修复指定物品的诅咒问题。 + +fix_worst_trouble 函数:修复玩家角色身上最严重的问题。 + +angrygods 函数:处理神明对玩家角色生气的情况。 + +at_your_feet 函数:在游戏界面上显示一条信息,表示某事物在玩家角色脚下。 + +gcrownu 函数:赐予玩家角色神圣的头冠。 + +give_spell 函数:授予玩家角色一个法术。 + +pleased 函数:处理神明对玩家角色满意的情况。 + +godvoice 函数:以神明的声音向玩家角色传达信息。 + +god_zaps_you 函数:神明用力量攻击玩家角色。 + +fry_by_god 函数:神明用力量将玩家角色烧焦。 + +gods_angry 函数:处理神明对玩家角色生气的情况。 + +gods_upset 函数:处理神明对玩家角色不满的情况。 + +consume_offering 函数:处理祭品被消耗的逻辑。 + +offer_too_soon 函数:处理玩家角色过早地给予神明祭品的情况。 + +desecrate_high_altar 函数:亵渎高级祭坛的逻辑。 + +offer_real_amulet 函数:以真正的项链给予神明祭品。 + +offer_fake_amulet 函数:以伪造的项链给予神明祭品。 + +offer_different_alignment_altar 函数:在不同阵营的祭坛上给予神明祭品。 + +bestow_artifact 函数:神明授予玩家角色一件神器。 + +pray_revive 函数:通过祈祷使玩家角色复活。 + +water_prayer 函数:执行涉及水的祈祷效果。 + +blocked_boulder 函数:检查指定位置是否被巨石阻塞。 */ #include "hack.h" static int prayer_done(void); diff --git a/src/NetHack_3.7/src/priest.c b/src/NetHack_3.7/src/priest.c index 21350e7..d4ab57d 100644 --- a/src/NetHack_3.7/src/priest.c +++ b/src/NetHack_3.7/src/priest.c @@ -1,7 +1,41 @@ /* NetHack 3.7 priest.c $NHDT-Date: 1693292537 2023/08/29 07:02:17 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.93 $ */ /* Copyright (c) Izchak Miller, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ +/*newepri:为怪物分配额外的pri结构,用于存储与教堂和祭坛相关的信息。 +free_epri:释放pri结构。 + +move_special:处理祭司和店主的移动。根据一些条件,返回不同的值来表示是否移动、是否死亡等。 + +temple_occupied:检查指定数组中的房间是否被占用。 + +histemple_at:检查指定坐标是否在指定的教堂中。 + +inhistemple:检查怪物是否在其教堂中。 + +pri_move:处理祭司的移动。 + +priestini:为新的祭司分配位置和属性。 + +mon_aligntyp:获取怪物的对齐类型。 + +priestname:根据怪物的属性和状态返回名称。 + +p_coaligned:检查玩家是否与指定的祭司对齐。 + +has_shrine:检查指定的怪物是否在神龛中。 + +findpriest:查找特定房间中的祭司。 + +intemple:玩家进入教堂时触发的事件。 + +forget_temple_entry:重置用于限制教堂进入反馈的移动计数。 + +priest_talk:祭司与玩家对话事件。 + +mk_roamer:生成一个漫游怪物,并设置其对齐和平和状态。 + +*/ #include "hack.h" #include "mfndpos.h" diff --git a/src/NetHack_3.7/src/quest.c b/src/NetHack_3.7/src/quest.c index 9e12604..0db1bf8 100644 --- a/src/NetHack_3.7/src/quest.c +++ b/src/NetHack_3.7/src/quest.c @@ -1,7 +1,25 @@ /* NetHack 3.7 quest.c $NHDT-Date: 1687036547 2023/06/17 21:15:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.38 $ */ /* Copyright 1991, M. Stephenson */ /* NetHack may be freely redistributed. See license for details. */ +/*n_start:在游戏开始时初始化一些变量和状态。 +on_locate:当玩家找到地牢深处的目标时,触发该函数。 + +on_goal:当玩家抵达目标地点并完成任务时,触发该函数。 + +not_capable:检查玩家是否有足够的能力来完成任务。 + +is_pure:检查玩家是否为纯粹的角色,即没有背叛过阵营。 + +expulsion:将玩家从当前阵营中驱逐出去。 + +chat_with_leader:与玩家所在阵营的领袖进行对话。 + +chat_with_nemesis:与敌对阵营的领袖进行对话。 + +chat_with_guardian:与目标地点的守护者进行对话。 + +prisoner_speaks:与被俘虏的怪物进行对话,获取有用的信息或道具。*/ #include "hack.h" /* quest dungeon branch routines. */ diff --git a/src/NetHack_3.7/src/questpgr.c b/src/NetHack_3.7/src/questpgr.c index 04bb6e7..3dc1b0f 100644 --- a/src/NetHack_3.7/src/questpgr.c +++ b/src/NetHack_3.7/src/questpgr.c @@ -1,7 +1,29 @@ /* NetHack 3.7 questpgr.c $NHDT-Date: 1687036548 2023/06/17 21:15:48 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.82 $ */ /* Copyright 1991, M. Stephenson */ /* NetHack may be freely redistributed. See license for details. */ +/*intermed:返回中间目标的名称。 +find_qarti:查找并返回玩家背包中的特定物品。 + +neminame:返回敌对阵营领袖的名称。 + +guardname:返回目标地点守护者的名称。 + +homebase:返回玩家所属阵营的基地名称。 + +qtext_pronoun:将代词转换为与玩家性别相对应的形式。 + +convert_arg:将格式化字符串中的参数转换为正确的类型。 + +convert_line:将格式化字符串中的所有参数替换为正确的值。 + +deliver_by_pline:通过文本行向玩家传递消息。 + +deliver_by_window:通过弹出窗口向玩家传递消息。 + +skip_pager:检查是否需要显示以前的消息内容,如果是则跳过。 + +com_pager_core:核心函数,用来显示长消息并获取玩家输入。*/ #include "hack.h" #include "dlb.h" diff --git a/src/NetHack_3.7/src/read.c b/src/NetHack_3.7/src/read.c index cfa04c0..76c3668 100644 --- a/src/NetHack_3.7/src/read.c +++ b/src/NetHack_3.7/src/read.c @@ -2,7 +2,83 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*learnscrolltyp:确定卷轴类型并提供相应的信息。 +cap_spe:将装备特殊能力的道具名称大写。 + +erode_obj_text:生成道具已经损坏的文本描述。 + +hawaiian_design:生成一个夏威夷式的饰品名称。 + +read_ok:检查玩家阅读一本书或卷轴是否成功。 + +stripspe:移除装备的特殊能力。 + +p_glow1:为道具添加光芒效果。 + +p_glow2:为道具添加指定颜色的光芒效果。 + +forget:将某些变量重置为默认值,比如技能熟练度等。 + +maybe_tame:尝试驯服一只怪物。 + +can_center_cloud:检查云是否可以在给定坐标中心生成。 + +display_stinking_cloud_positions:在屏幕上显示当前臭云的位置。 + +seffect_enchant_armor:装备护甲道具时产生的效果。 + +seffect_destroy_armor:摧毁护甲道具时产生的效果。 + +seffect_confuse_monster:混乱怪物的效果。 + +seffect_scare_monster:恐吓怪物的效果。 + +seffect_remove_curse:解除道具的诅咒效果。 + +seffect_create_monster:召唤一个新的怪物。 + +seffect_enchant_weapon:装备武器道具时产生的效果。 + +seffect_taming:驯服怪物的效果。 + +seffect_genocide:灭族的效果。 + +seffect_light:光亮道具的效果。 + +seffect_charging:充能道具的效果。 + +seffect_amnesia:清空玩家记忆的效果。 + +seffect_fire:火焰道具的效果。 + +seffect_earth:地震道具的效果。 + +seffect_punishment:惩罚玩家的效果。 + +seffect_stinking_cloud:制造臭云的效果。 + +seffect_blank_paper:将纸张置为空白状态的效果。 + +seffect_teleportation:传送道具的效果。 + +seffect_gold_detection:探测金币的效果。 + +seffect_food_detection:探测食物的效果。 + +seffect_identify:鉴定道具的效果。 + +seffect_magic_mapping:生成魔法地图的效果。 + +set_lit:将指定区域内的所有格子点燃。 + +do_class_genocide:灭族某个职业的所有怪物。 + +do_stinking_cloud:在指定位置生成臭云。 + +create_particular_parse:解析创建特殊道具的参数。 + +create_particular_creation:根据参数创建特殊道具。*/ #include "hack.h" #define Your_Own_Role(mndx) ((mndx) == gu.urole.mnum) diff --git a/src/NetHack_3.7/src/rect.c b/src/NetHack_3.7/src/rect.c index 938ebb7..ed14a61 100644 --- a/src/NetHack_3.7/src/rect.c +++ b/src/NetHack_3.7/src/rect.c @@ -1,7 +1,25 @@ /* NetHack 3.7 rect.c $NHDT-Date: 1596498203 2020/08/03 23:43:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.14 $ */ /* Copyright (c) 1990 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ +/*init_rect()函数用于初始化内部结构,需要在每个新建的地图层级中调用。它会为矩形数组分配内存,并设置一个初始的矩形区域。 +free_rect()函数用于释放矩形数组占用的内存。 + +get_rect_ind()函数用于查找给定的矩形在矩形数组中的索引位置。 + +get_rect()函数用于查找包含给定矩形的空闲矩形区域。 + +rnd_rect()函数用于随机选择一个矩形区域。 + +intersect()函数用于计算两个矩形的交集,并将结果存储在第三个矩形中。 + +rect_bounds()函数用于计算包含两个矩形的最小矩形区域。 + +remove_rect()函数用于从矩形数组中移除一个矩形。 + +add_rect()函数用于将一个矩形添加到矩形数组中。 + +split_rects()函数用于将一个矩形分割成多个较小的矩形,并从矩形数组中移除原始矩形。*/ #include "hack.h" int get_rect_ind(NhRect *); diff --git a/src/NetHack_3.7/src/region.c b/src/NetHack_3.7/src/region.c index 1b0cac6..7d6f626 100644 --- a/src/NetHack_3.7/src/region.c +++ b/src/NetHack_3.7/src/region.c @@ -1,7 +1,33 @@ /* NetHack 3.7 region.c $NHDT-Date: 1683832331 2023/05/11 19:12:11 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.81 $ */ /* Copyright (c) 1996 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ +/*inside_gas_cloud()函数用于判断一个位置是否在气体云(gas cloud)内部。 +expire_gas_cloud()函数用于处理气体云的持续时间到期时的操作。 + +inside_rect()函数用于判断一个位置是否在指定的矩形区域内。 + +create_region()函数用于创建一个区域,包含一个矩形区域和一个回调函数。 + +add_rect_to_reg()函数用于将一个矩形区域添加到一个区域中。 + +add_mon_to_reg()函数用于将一个怪物(monst)添加到一个区域中。 + +remove_mon_from_reg()函数用于从一个区域中移除一个怪物。 + +mon_in_region()函数用于判断一个怪物是否在一个区域中。 + +free_region()函数用于释放一个区域占用的内存。 + +add_region()函数用于将一个区域添加到区域列表中。 + +remove_region()函数用于从区域列表中移除一个区域。 + +reset_region_mids()函数用于重置区域中的怪物标识符。 + +is_hero_inside_gas_cloud()函数用于判断英雄角色是否在气体云中。 + +callbacks数组存储了回调函数的指针,用于在区域操作中调用相应的函数。*/ #include "hack.h" /* diff --git a/src/NetHack_3.7/src/restore.c b/src/NetHack_3.7/src/restore.c index cebf27c..0a02ac7 100644 --- a/src/NetHack_3.7/src/restore.c +++ b/src/NetHack_3.7/src/restore.c @@ -2,7 +2,51 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2009. */ /* NetHack may be freely redistributed. See license for details. */ +/*dotcnt 和 dotrow 是与保存相关的变量,用于记录进度条的状态。 +zerocomp_minit() 函数用于初始化零压缩(zerocomp)模式。 + +zerocomp_mread() 函数用于从存档文件中读取数据,使用零压缩算法。 + +zerocomp_mgetc() 函数用于从存档文件中获取下一个字符,使用零压缩算法。 + +find_lev_obj() 函数用于查找当前地图层上的物品。 + +restlevchn() 函数用于恢复地图层的链表信息。 + +restdamage() 函数用于恢复地图上的损坏信息。 + +restobj() 函数用于恢复一个物品的状态。 + +restobjchn() 函数用于恢复整个物品链表。 + +restmon() 函数用于恢复一个怪物的状态。 + +restmonchn() 函数用于恢复整个怪物链表。 + +loadfruitchn() 函数用于从存档文件中加载水果链表。 + +freefruitchn() 函数用于释放水果链表所占用的内存。 + +ghostfruit() 函数用于处理幽灵怪物的水果。 + +restgamestate() 函数用于恢复游戏的状态。 + +restlevelstate() 函数用于恢复地图层的状态。 + +restlevelfile() 函数用于恢复一个地图层的文件。 + +rest_bubbles() 函数用于恢复气泡的状态。 + +restore_gamelog() 函数用于恢复游戏日志。 + +restore_msghistory() 函数用于恢复消息历史记录。 + +reset_oattached_mids() 函数用于重置物品上附着的怪物标识符。 + +rest_levl() 函数用于恢复地图层的状态。 + +rest_stairs() 函数用于恢复楼梯的状态。*/ #include "hack.h" #include "tcap.h" /* for TERMLIB and ASCIIGRAPH */ diff --git a/src/NetHack_3.7/src/rip.c b/src/NetHack_3.7/src/rip.c index e9ecf51..b7531e0 100644 --- a/src/NetHack_3.7/src/rip.c +++ b/src/NetHack_3.7/src/rip.c @@ -2,7 +2,14 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2017. */ /* NetHack may be freely redistributed. See license for details. */ +/*center(int line, char *text):将文本居中显示在指定的行上。 +genl_outrip(winid tmpwin, int how, time_t when):生成玩家角色死亡后的墓碑信息。根据角色死亡的方式、金币数量和死亡描述等信息,格式化生成墓碑信息并显示在游戏界面上。 + +winid tmpwin:窗口ID,用于在游戏界面上显示墓碑信息。 +int how:角色死亡的方式,表示角色是被怪物杀死、饥饿而死、摔死等等。 +time_t when:角色死亡的时间。 +注意:这部分代码使用了预编译指令,通过定义TEXT_TOMBSTONE宏来判断是否需要生成墓碑信息并显示。*/ #include "hack.h" /* Defining TEXT_TOMBSTONE causes genl_outrip() to exist, but it doesn't diff --git a/src/NetHack_3.7/src/rnd.c b/src/NetHack_3.7/src/rnd.c index bda9cbc..9d7a96d 100644 --- a/src/NetHack_3.7/src/rnd.c +++ b/src/NetHack_3.7/src/rnd.c @@ -1,7 +1,12 @@ /* NetHack 3.7 rnd.c $NHDT-Date: 1596498205 2020/08/03 23:43:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.30 $ */ /* Copyright (c) 2004 by Robert Patrick Rankin */ /* NetHack may be freely redistributed. See license for details. */ - +/*rn2(x): 这个函数返回一个大于等于0且小于x的随机整数。 +rnl(x): 这个函数返回一个大于等于0且小于x的随机整数,根据幸运值(Luck)进行调整。 +rnd(x): 这个函数返回一个大于1且小于等于x的随机整数。 +d(n, x): 这个函数返回n次投掷x面骰子的总和,其中n和x都是整数。 +rne(x): 这个函数返回一个大于等于1且小于等于u.ulevel/3或5的随机整数,其中u.ulevel表示玩家的等级。 +rnz(i): 这个函数根据参数i生成一个随机整数。*/ #include "hack.h" #ifdef USE_ISAAC64 diff --git a/src/NetHack_3.7/src/role.c b/src/NetHack_3.7/src/role.c index b77193c..44407c1 100644 --- a/src/NetHack_3.7/src/role.c +++ b/src/NetHack_3.7/src/role.c @@ -2,7 +2,17 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*validrole(int rolenum) 函数用于检查给定的角色编号是否有效,即是否在角色列表范围内。如果给定的角色编号有效,则返回真(true),否则返回假(false)。 +randrole(boolean for_display) 函数用于生成一个随机的角色编号。如果 for_display 为真,则使用可显示的随机数生成器,否则使用正常的随机数生成器。 + +randrole_filtered() 是一个静态函数,可能被 randrole(boolean for_display) 使用,但不对外公开。它可能用于过滤某些特定的随机角色。 + +promptsep(char *str, int num_choices) 函数用于创建一个用于提示用户选择的字符串。它将给定的字符串 str 和选择数量 num_choices 结合起来,返回一个新的字符串。 + +role_gendercount(int rolenum) 函数用于计算指定角色有多少种不同的性别选择。它返回一个整数,表示给定角色的性别数量。 + +race_alignmentcount(int racenum) 函数用于计算指定种族有多少种不同的阵营选择。它返回一个整数,表示给定种族的阵营数量。*/ #include "hack.h" /*** Table of all roles ***/ diff --git a/src/NetHack_3.7/src/rumors.c b/src/NetHack_3.7/src/rumors.c index ea5f8f7..5e17778 100644 --- a/src/NetHack_3.7/src/rumors.c +++ b/src/NetHack_3.7/src/rumors.c @@ -40,7 +40,19 @@ * records, separated by "---" lines. The first oracle is a special case, * and placed there by 'makedefs'. */ +/*unpadline(char *) 函数用于去除字符串末尾的下划线字符。在代码中,该函数可能被用于处理游戏中的一些文本内容,例如传说、墓志铭、刻在墙上的文字等。 +init_rumors(dlb *) 函数用于初始化传闻。它接受一个 dlb 类型的参数,可能是用于读取游戏文件中传闻数据的文件句柄。 + +get_rnd_line(dlb *, char *, unsigned, int (*)(int), long, long, unsigned) 函数用于从给定的文件中获取随机的一行文本。它接受多个参数,包括文件句柄、缓冲区、缓冲区大小、过滤函数、偏移量等。该函数通常用于获取随机的传闻、墓志铭、刻在墙上的文字等。 + +init_oracles(dlb *) 函数用于初始化神谕。它接受一个 dlb 类型的参数,可能是用于读取游戏文件中神谕数据的文件句柄。 + +others_check(const char *ftype, const char *, winid *) 函数用于检查其他文件是否存在或可访问。它接受文件类型和文件名作为参数,并可能返回一个窗口标识符,用于显示错误消息。 + +couldnt_open_file(const char *) 函数用于显示无法打开文件的错误消息。它接受文件名作为参数,并可能显示一条错误消息给玩家。 + +init_CapMons(void) 函数用于初始化 CapitalMon() 函数所需的数据。该函数将设置一些全局变量,包括计数器和数组,用于存储特殊怪物的前缀信息。*/ static void unpadline(char *); static void init_rumors(dlb *); static char *get_rnd_line(dlb *, char *, unsigned, int (*)(int), diff --git a/src/NetHack_3.7/src/save.c b/src/NetHack_3.7/src/save.c index 7d04cb1..0d655f9 100644 --- a/src/NetHack_3.7/src/save.c +++ b/src/NetHack_3.7/src/save.c @@ -2,7 +2,45 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2009. */ /* NetHack may be freely redistributed. See license for details. */ +/*savelevchn(NHFILE *) 函数用于将游戏的地图层次结构存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 +savelevl(NHFILE *,boolean) 函数用于将当前地图层的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个布尔值,表示是否保存所有的地图数据(包括未探索的地图块)。 + +savedamage(NHFILE *) 函数用于将游戏中的伤害信息存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +save_bubbles(NHFILE *, xint8) 函数用于将当前地图层的泡泡(气泡)信息存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个整型参数,表示泡泡的数量。 + +save_stairs(NHFILE *) 函数用于将地图上的楼梯信息存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +save_bc(NHFILE *) 函数用于将地图上的墙壁和障碍物信息存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +saveobj(NHFILE *,struct obj *) 函数用于将单个游戏物品的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个 obj 结构体指针,表示要保存的物品。 + +saveobjchn(NHFILE *,struct obj **) 函数用于将整个游戏物品链表的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个指向物品链表头部指针的指针。 + +savemon(NHFILE *,struct monst *) 函数用于将单个怪物的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个 monst 结构体指针,表示要保存的怪物。 + +savemonchn(NHFILE *,struct monst *) 函数用于将整个怪物链表的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个指向怪物链表头部指针的指针。 + +savetrapchn(NHFILE *,struct trap *) 函数用于将整个陷阱链表的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个指向陷阱链表头部指针的指针。 + +save_gamelog(NHFILE *) 函数用于将游戏日志的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +savegamestate(NHFILE *) 函数用于将游戏状态的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +savelev_core(NHFILE *, xint8) 函数用于将当前地图层的核心数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄,并且还接受一个整型参数,表示要保存的数据类型。 + +save_msghistory(NHFILE *) 函数用于将游戏消息历史记录的数据存储到文件中。它接受一个 NHFILE 类型的参数,可能是用于保存游戏状态的文件句柄。 + +zerocomp_bufon(int) 函数用于打开压缩模式的缓冲区。它接受一个整型参数,表示要开启压缩的缓冲区编号。 + +zerocomp_bufoff(int) 函数用于关闭压缩模式的缓冲区。它接受一个整型参数,表示要关闭压缩的缓冲区编号。 + +zerocomp_bflush(int) 函数用于刷新压缩模式的缓冲区。它接受一个整型参数,表示要刷新的缓冲区编号。 + +zerocomp_bwrite(int, genericptr_t, unsigned int) 函数用于将数据写入压缩模式的缓冲区。它接受一个整型参数,表示要写入的缓冲区编号,并且还接受一个指向数据的指针和数据的长度。 + +zerocomp_bputc(int) 函数用于将单个字符写入压缩模式的缓冲区。它接受一个整型参数,表示要写入的缓冲区编号。*/ #include "hack.h" #ifndef NO_SIGNAL diff --git a/src/NetHack_3.7/src/sfstruct.c b/src/NetHack_3.7/src/sfstruct.c index 6c15b18..47609b8 100644 --- a/src/NetHack_3.7/src/sfstruct.c +++ b/src/NetHack_3.7/src/sfstruct.c @@ -2,7 +2,23 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2009. */ /* NetHack may be freely redistributed. See license for details. */ +/*getidx(int, int) 函数的作用是返回两个整数的索引。它接受两个整型参数,并返回一个整数作为索引。 +#define USE_BUFFERING 是一个宏定义,用于定义编译时是否启用缓冲区功能。如果定义了该宏,则表示启用缓冲区功能。 + +struct restore_info 是一个结构体定义,表示游戏的恢复信息。它包含一个字符串字段和一个整数字段,分别表示恢复信息的名称和标志位。 + +MAXFD 是一个宏定义,表示最大文件描述符数量。 + +enum {NOFLG = 0, NOSLOT = 1}; 定义了两个枚举值,分别表示无标志和无插槽。 + +bw_sticky[MAXFD] 是一个整型数组,表示文件描述符的黏性(sticky)标记。初始值为-1。 + +bw_buffered[MAXFD] 是一个整型数组,表示文件描述符是否启用缓冲区。初始值为0。 + +#ifdef USE_BUFFERING 是一个条件编译指令,用于判断是否启用缓冲区功能。 + +bw_FILE[MAXFD] 是一个文件指针数组,用于存储文件描述符对应的文件指针。初始值为NULL。*/ #include "hack.h" /* diff --git a/src/NetHack_3.7/src/shk.c b/src/NetHack_3.7/src/shk.c index 80d9400..fffc66f 100644 --- a/src/NetHack_3.7/src/shk.c +++ b/src/NetHack_3.7/src/shk.c @@ -2,7 +2,121 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*makekops(coord *): 在指定的坐标处生成警察。 +call_kops(struct monst *, boolean): 指示指定的怪物召唤警察。 + +kops_gone(boolean): 通知警察已离开。 + +NOTANGRY(mon): 判断指定的怪物是否不愤怒。 + +ANGRY(mon): 判断指定的怪物是否愤怒。 + +IS_SHOP(x): 判断指定的地图位置是否为商店。 + +muteshk(shkp): 判断指定的商人是否无法说话(被束缚或是动物性质的商人)。 + +append_honorific(char *): 在字符串后追加敬语。 + +addupbill(struct monst *): 计算指定商人的账单总额。 + +pacify_shk(struct monst *, boolean): 使指定的商人平静下来或者愤怒起来。 + +onbill(struct obj *, struct monst *, boolean): 获取指定物品在指定商人账单上的条目。 + +next_shkp(struct monst *, boolean): 查找下一个商人。 + +shop_debt(struct eshk *): 获取指定商人的债务金额。 + +shk_owns(char *, struct obj *): 生成描述商人拥有指定物品的字符串。 + +mon_owns(char *, struct obj *): 生成描述怪物拥有指定物品的字符串。 + +clear_unpaid_obj(struct monst *, struct obj *): 清除指定物品在指定商人账单上的欠款标记。 + +clear_unpaid(struct monst *, struct obj *): 清除指定商人账单上所有物品的欠款标记。 + +clear_no_charge_obj(struct monst *, struct obj *): 清除指定物品在指定商人账单上的不收费标记。 + +clear_no_charge(struct monst *, struct obj *): 清除指定商人账单上所有物品的不收费标记。 + +check_credit(long, struct monst *): 检查指定商人是否有足够的信用购买指定金额的物品。 + +pay(long, struct monst *): 支付指定金额给指定商人。 + +get_cost(struct obj *, struct monst *): 获取指定物品在指定商人处的价格。 + +set_cost(struct obj *, struct monst *): 设置指定物品在指定商人处的价格。 + +shk_embellish(struct obj *, long): 根据价格装饰指定物品的描述。 + +cost_per_charge(struct monst *, struct obj *, boolean): 计算指定物品每次使用的花费。 + +cheapest_item(struct monst *): 找到指定商人最便宜的物品。 + +dopayobj(struct monst *, struct bill_x *, struct obj **, int, boolean): 处理支付指定物品的费用。 + +stolen_container(struct obj *, struct monst *, long, boolean): 处理被偷的容器。 + +corpsenm_price_adj(struct obj *): 获取指定尸体的价格调整值。 + +getprice(struct obj *, boolean): 获取指定物品的价格。 + +shk_names_obj(struct monst *, struct obj *, const char *, long, const char *): 为指定商人命名指定物品。 + +inherits(struct monst *, int, int, boolean): 判断指定怪物是否继承了指定商店的属性。 + +set_repo_loc(struct monst *): 设置指定商人的归还位置。 + +bp_to_obj(struct bill_x *): 将账单条目转换为物品。 + +get_pricing_units(struct obj *): 获取指定物品的计价单位。 + +angry_shk_exists(void): 判断是否存在愤怒的商人。 + +home_shk(struct monst *, boolean): 将指定商人送回其商店。 + +rile_shk(struct monst *): 激怒指定商人。 + +rouse_shk(struct monst *, boolean): 唤醒指定商人。 + +shk_impaired(struct monst *): 判断指定商人是否受伤。 + +repairable_damage(struct damage *, struct monst *): 判断指定商人是否可以修理指定损坏。 + +find_damage(struct monst *): 查找指定商人身上的损坏。 + +discard_damage_struct(struct damage *): 丢弃指定的损坏结构体。 + +discard_damage_owned_by(struct monst *): 丢弃指定商人身上的损坏。 + +shk_fixes_damage(struct monst *): 商人修理损坏。 + +litter_getpos(uint8 *, coordxy, coordxy, struct monst *): 获取物品的位置。 + +litter_scatter(uint8 *, coordxy, coordxy, struct monst *): 将物品散落在地面上。 + +litter_newsyms(uint8 *, coordxy, coordxy): 在地面上绘制物品符号。 + +repair_damage(struct monst *, struct damage *, boolean): 修复指定商人身上的损坏。 + +sub_one_frombill(struct obj *, struct monst *): 从指定商人的账单中减去一个物品。 + +add_one_tobill(struct obj *, boolean, struct monst *): 向指定商人的账单中添加一个物品。 + +dropped_container(struct obj *, struct monst *, boolean): 处理丢弃的容器。 + +add_to_billobjs(struct obj *): 将物品添加到全局账单物品列表中。 + +bill_box_content(struct obj *, boolean, boolean, struct monst *): 处理箱子内部物品的账单。 + +rob_shop(struct monst *): 抢劫商店。 + +deserted_shop(char *): 处理废弃的商店。 + +special_stock(struct obj *, struct monst *, boolean): 检查特殊库存物品。 + +cad(boolean): 返回一个表示货币单位的字符串。*/ #include "hack.h" #define PAY_SOME 2 diff --git a/src/NetHack_3.7/src/shknam.c b/src/NetHack_3.7/src/shknam.c index 45c9aca..17bfa48 100644 --- a/src/NetHack_3.7/src/shknam.c +++ b/src/NetHack_3.7/src/shknam.c @@ -4,7 +4,23 @@ /* NetHack may be freely redistributed. See license for details. */ /* shknam.c -- initialize a shop */ +/*stock_room_goodpos(struct mkroom *, int, int, int, int): 检查指定房间是否适合放置货物。 +veggy_item(struct obj * obj, int): 判断指定物品是否是蔬菜类物品。 + +shkveg(): 生成一个随机的蔬菜类物品。 + +mkveggy_at(int, int): 在指定位置生成一个蔬菜。 + +mkshobj_at(const struct shclass *, int, int, boolean): 在指定位置生成一个商店物品。 + +nameshk(struct monst *, const char *const *): 为商人生成一个特定名字。 + +good_shopdoor(struct mkroom *, coordxy *, coordxy *): 检查指定房间中是否有适合作为商店入口的门。 + +shkinit(const struct shclass *, struct mkroom *): 初始化商店。 + +VEGETARIAN_CLASS (MAXOCLASSES + 1): 定义蔬菜类物品的类别。*/ #include "hack.h" static boolean stock_room_goodpos(struct mkroom *, int, int, int, int); diff --git a/src/NetHack_3.7/src/sit.c b/src/NetHack_3.7/src/sit.c index d297aaa..2517f26 100644 --- a/src/NetHack_3.7/src/sit.c +++ b/src/NetHack_3.7/src/sit.c @@ -2,7 +2,17 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*take_gold:这个函数用于从玩家的物品栏中移除所有金币,并相应地更新游戏状态。 +throne_sit_effect:这个函数用于在玩家坐在王座上时触发可能的效果,例如增加或减少属性、恢复生命值、召唤怪物等。 + +lay_an_egg:这个函数用于让玩家的角色产卵,如果角色是雌性并且满足产卵条件的话。 + +dosit:这个函数是处理玩家执行坐下动作的主要函数,根据玩家所处的位置和状态做出相应的反应,比如坐在宝座上时触发效果,坐在水中或特殊地形上产生对应的消息。 + +rndcurse:这个函数用于随机诅咒玩家的一些物品,使它们变得不利或者有负面效果。 + +attrcurse:这个函数用于随机去除玩家身上的某种固有能力,使其失去相应的属性。*/ #include "hack.h" #include "artifact.h" diff --git a/src/NetHack_3.7/src/sounds.c b/src/NetHack_3.7/src/sounds.c index 3424586..6ea347c 100644 --- a/src/NetHack_3.7/src/sounds.c +++ b/src/NetHack_3.7/src/sounds.c @@ -1,7 +1,25 @@ /* NetHack 3.7 sounds.c $NHDT-Date: 1674548234 2023/01/24 08:17:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.134 $ */ /* Copyright (c) 1989 Janet Walz, Mike Threepoint */ /* NetHack may be freely redistributed. See license for details. */ +/*throne_mon_sound(struct monst *):这个函数用于判断在坐在王座上时,是否会引起周围怪物的注意并产生声音。 +beehive_mon_sound(struct monst *):这个函数用于判断在蜂巢地图中,是否会引起周围怪物的注意并产生声音。 + +morgue_mon_sound(struct monst *):这个函数用于判断在停尸房地图中,是否会引起周围怪物的注意并产生声音。 + +zoo_mon_sound(struct monst *):这个函数用于判断在动物园地图中,是否会引起周围怪物的注意并产生声音。 + +temple_priest_sound(struct monst *):这个函数用于判断在神殿地图中,是否会引起周围怪物的注意并产生声音。 + +mon_is_gecko(struct monst *):这个函数用于判断一个怪物是否是壁虎类怪物。 + +domonnoise(struct monst *):这个函数用于执行怪物的随机咆哮或其他声音效果。 + +dochat(void):这个函数用于与玩家进行对话,并根据对话结果进行相应的处理。 + +responsive_mon_at(int, int):这个函数用于判断指定位置上是否有怪物,并返回怪物的指针。 + +mon_in_room(struct monst *, int):这个函数用于判断指定怪物是否在指定类型的房间中。*/ #include "hack.h" static boolean throne_mon_sound(struct monst *); diff --git a/src/NetHack_3.7/src/sp_lev.c b/src/NetHack_3.7/src/sp_lev.c index d603e37..107c897 100644 --- a/src/NetHack_3.7/src/sp_lev.c +++ b/src/NetHack_3.7/src/sp_lev.c @@ -8,7 +8,611 @@ * * It contains also the special level loader. */ +/*int lspo_set_map_size(lua_State *); +Lua函数,设置地图大小。 +int lspo_get_map_size(lua_State *); +Lua函数,获取地图大小。 + +int lspo_set_terrain(lua_State *); +Lua函数,设置指定位置的地形。 + +int lspo_get_terrain(lua_State *); +Lua函数,获取指定位置的地形。 + +int lspo_set_wall(lua_State *); +Lua函数,设置指定位置的墙壁属性。 + +int lspo_get_wall(lua_State *); +Lua函数,获取指定位置的墙壁属性。 + +int lspo_set_feature(lua_State *); +Lua函数,设置指定位置的特征。 + +int lspo_get_feature(lua_State *); +Lua函数,获取指定位置的特征。 + +int lspo_create_room(lua_State *); +Lua函数,创建一个房间。 + +int lspo_create_corridor(lua_State *); +Lua函数,创建一个走廊。 + +int lspo_connect_rooms(lua_State *); +Lua函数,连接两个房间。 + +int lspo_connect_regions(lua_State *); +Lua函数,连接两个区域。 + +int lspo_place_player(lua_State *); +Lua函数,放置玩家角色。 + +int lspo_place_stairs(lua_State *); +Lua函数,放置楼梯。 + +int lspo_place_items(lua_State *); +Lua函数,放置物品。 + +int lspo_place_monster(lua_State *); +Lua函数,放置怪物。 + +int lspo_place_trap(lua_State *); +Lua函数,放置陷阱。 + +int lspo_place_feature(lua_State *); +Lua函数,放置特征。 + +int lspo_place_terrain(lua_State *); +Lua函数,放置地形。 + +int lspo_place_water(lua_State *); +Lua函数,放置水域。 + +int lspo_remove_item(lua_State *); +Lua函数,移除物品。 + +int lspo_remove_monster(lua_State *); +Lua函数,移除怪物。 + +int lspo_remove_trap(lua_State *); +Lua函数,移除陷阱。 + +int lspo_remove_feature(lua_State *); +Lua函数,移除特征。 + +int lspo_remove_terrain(lua_State *); +Lua函数,移除地形。 + +int lspo_remove_water(lua_State *); +Lua函数,移除水域。 + +int lspo_is_valid_location(lua_State *); +Lua函数,检查位置是否有效。 + +int lspo_is_walkable(lua_State *); +Lua函数,检查位置是否可行走。 + +int lspo_is_solid(lua_State *); +Lua函数,检查位置是否为实体。 + +int lspo_is_transparent(lua_State *); +Lua函数,检查位置是否透明。 + +int lspo_is_wall(lua_State *); +Lua函数,检查位置是否有墙壁。 + +int lspo_is_door(lua_State *); +Lua函数,检查位置是否有门。 + +int lspo_is_closed_door(lua_State *); +Lua函数,检查位置是否是关闭的门。 + +int lspo_is_locked_door(lua_State *); +Lua函数,检查位置是否是上锁的门。 + +int lspo_is_open_door(lua_State *); +Lua函数,检查位置是否是打开的门。 + +int lspo_is_feature(lua_State *); +Lua函数,检查位置是否有特征。 + +int lspo_is_terrain(lua_State *); +Lua函数,检查位置是否有地形。 + +int lspo_is_water(lua_State *); +Lua函数,检查位置是否有水域。 + +int lspo_get_room_id(lua_State *); +Lua函数,获取房间的ID。 + +int lspo_get_region_id(lua_State *); +Lua函数,获取区域的ID。 + +int lspo_get_item_id(lua_State *); +Lua函数,获取物品的ID。 + +int lspo_get_monster_id(lua_State *); +Lua函数,获取怪物的ID。 + +int lspo_get_trap_id(lua_State *); +Lua函数,获取陷阱的ID。 + +int lspo_get_feature_id(lua_State *); +Lua函数,获取特征的ID。 + +int lspo_get_terrain_id(lua_State *); +Lua函数,获取地形的ID。 + +int lspo_get_water_id(lua_State *); +Lua函数,获取水域的ID。 + +int lspo_get_map_id(lua_State *); +Lua函数,获取地图的ID。 + +int lspo_get_player_position(lua_State *); +Lua函数,获取玩家角色的位置。 + +int lspo_get_stairs_up_position(lua_State *); +Lua函数,获取楼梯上行的位置。 + +int lspo_get_stairs_down_position(lua_State *); +Lua函数,获取楼梯下行的位置。 +int lspo_light_region(lua_State *); +Lua函数,照亮区域。 + +int lspo_map(lua_State *); +Lua函数,生成完整地图。 + +int lspo_mazewalk(lua_State *); +Lua函数,在地图中生成迷宫。 + +int lspo_monster(lua_State *); +Lua函数,创建怪物。 + +int lspo_object(lua_State *); +Lua函数,创建物品。 + +int lspo_region(lua_State *); +Lua函数,创建区域。 + +int lspo_room(lua_State *); +Lua函数,创建房间。 + +int lspo_selection_flood(lua_State *); +Lua函数,根据选择器填充地图。 + +int lspo_stair(lua_State *); +Lua函数,创建楼梯。 + +int lspo_subroom(lua_State *); +Lua函数,创建子房间。 + +int lspo_terrain(lua_State *); +Lua函数,设置地形。 + +int lspo_trap(lua_State *); +Lua函数,创建陷阱。 + +int lspo_wall_property(lua_State *); +Lua函数,设置墙壁属性。 + +int lspo_warning(lua_State *); +Lua函数,发出警告信息。 + +int lspo_waterbody(lua_State *); +Lua函数,创建水域。 + +int lspo_grass(lua_State *); +Lua函数,生成草地。 + +int lspo_tree(lua_State *); +Lua函数,生成树木。 + +int lspo_rock(lua_State *); +Lua函数,生成岩石。 + +int lspo_pool(lua_State *); +Lua函数,生成水池。 + +int lspo_fountain(lua_State *); +Lua函数,生成喷泉。 + +int lspo_sink(lua_State *); +Lua函数,生成水槽。 + +int lspo_throne(lua_State *); +Lua函数,生成王座。 + +int lspo_altar_generic(lua_State *); +Lua函数,创建通用祭坛。 + +int lspo_feature_region(lua_State *); +Lua函数,在地图区域中创建特征。 + +int lspo_terrain_region(lua_State *); +Lua函数,在地图区域中设置地形。 + +int lspo_wallify_map(lua_State *); +Lua函数,给地图添加墙壁。 + +int lspo_replace_terrain(lua_State *); +Lua函数,替换地形。 + +int lspo_replace_feature(lua_State *); +Lua函数,替换特征。 + +int lspo_replace_terrain_region(lua_State *); +Lua函数,在地图区域中替换地形。 + +int lspo_replace_feature_region(lua_State *); +Lua函数,在地图区域中替换特征。 + +int lspo_random_corridors(lua_State *); +Lua函数,生成随机走廊。 + +int lspo_ensure_rng_seed(lua_State *); +Lua函数,确保随机数种子相同。 + +int lspo_adjust_branch_walls(lua_State *); +Lua函数,调整支路的墙壁。 + +int lspo_region_floodfill(lua_State *); +Lua函数,基于区域填充器进行填充。 + +int lspo_remove_rooms(lua_State *); +Lua函数,删除所有房间。 + +int lspo_remove_corridors(lua_State *); +Lua函数,删除所有走廊。 + +int lspo_remove_walls(lua_State *); +Lua函数,删除所有墙壁。 + +int lspo_remove_features(lua_State *); +Lua函数,删除所有特征。 + +int lspo_remove_terrain(lua_State *); +Lua函数,删除所有地形。 + +int lspo_remove_traps(lua_State *); +Lua函数,删除所有陷阱。 + +int lspo_remove_monsters(lua_State *); +Lua函数,删除所有怪物。 + +int lspo_remove_objects(lua_State *); +Lua函数,删除所有物品。 + +int lspo_remove_regions(lua_State *); +Lua函数,删除所有区域。 + +int lspo_remove_grass(lua_State *); +Lua函数,删除所有草地。 + +int lspo_remove_trees(lua_State *); +Lua函数,删除所有树木。 + +int lspo_remove_rocks(lua_State *); +Lua函数,删除所有岩石。 + +int lspo_remove_water(lua_State *); +Lua函数,删除所有水域和水池。 + +int lspo_remove_fountains(lua_State *); +Lua函数,删除所有喷泉。 + +int lspo_remove_sinks(lua_State *); +Lua函数,删除所有水槽。 + +int lspo_remove_throne(lua_State *); +Lua函数,删除所有王座。 + +int lspo_random_walls(lua_State *); +Lua函数,随机添加墙壁。 + +int lspo_dig(lua_State *); +Lua函数,挖掘地形。 + +int lspo_random_region(lua_State *); +Lua函数,随机选择地图区域。 + +int lspo_ensure_valid_map(lua_State *); +Lua函数,确保生成的地图是有效的。 +typedef void (*select_iter_func)(coordxy, coordxy, genericptr); +这是一个函数指针类型定义,用于迭代选择器。 + +void mkmap(lev_init *); +生成地图的函数。 + +static boolean match_maptyps(xint16, xint16); +检查地图坐标位置上的类型是否匹配。 + +static void solidify_map(void); +填充地图中未定义或未加固的区域。 + +static void map_cleanup(void); +清理地图,将未定义的区域填充为墙壁。 + +static void lvlfill_maze_grid(int, int, int, int, schar); +在地图中生成迷宫。 + +static void lvlfill_solid(schar, schar); +在地图中填充指定类型的实心墙。 + +static void lvlfill_swamp(schar, schar, schar); +在地图中填充沼泽。 + +static void flip_dbridge_horizontal(struct rm *); +水平翻转地牢桥。 + +static void flip_dbridge_vertical(struct rm *); +垂直翻转地牢桥。 + +static void flip_visuals(int, int, int, int, int); +翻转视觉元素。 + +static int flip_encoded_dir_bits(int, int); +翻转方向编码位。 + +static void flip_vault_guard(int, struct monst *, +coordxy, coordxy, coordxy, coordxy); +翻转金库守卫。 + +static void sel_set_wall_property(coordxy, coordxy, genericptr_t); +在选择区域中设置墙壁属性。 + +static void set_wall_property(coordxy, coordxy, coordxy, coordxy, int); +设置墙壁属性。 + +static void remove_boundary_syms(void); +删除边界符号。 + +static void set_door_orientation(int, int); +设置门的方向。 + +static boolean shared_with_room(int, int, struct mkroom *); +检查给定位置是否与给定房间共享。 + +static void maybe_add_door(int, int, struct mkroom *); +可能添加门。 + +static void link_doors_rooms(void); +连接门和房间。 + +static int rnddoor(void); +随机生成门方向。 + +static int rndtrap(void); +随机生成陷阱类型。 + +static void get_location(coordxy *, coordxy *, getloc_flags_t, +struct mkroom *); +获取位置坐标。 + +static void set_ok_location_func(boolean (*)(coordxy, coordxy)); +设置位置检查函数。 + +static boolean is_ok_location(coordxy, coordxy, getloc_flags_t); +检查给定位置是否可用。 + +static unpacked_coord get_unpacked_coord(long, int); +获取未打包的坐标。 + +static void get_room_loc(coordxy *, coordxy *, struct mkroom *); +获取房间位置。 + +static void get_free_room_loc(coordxy *, coordxy *, struct mkroom *, +packed_coord); +获取空闲房间位置。 + +static boolean create_subroom(struct mkroom *, coordxy, coordxy, coordxy, +coordxy, xint16, xint16); +创建子房间。 + +static void create_door(room_door *, struct mkroom *); +创建门。 + +static void create_trap(spltrap *, struct mkroom *); +创建陷阱。 + +static int noncoalignment(aligntyp); +非同盟对齐修正。 + +static boolean m_bad_boulder_spot(coordxy, coordxy); +检查给定位置是否适合放置巨石。 + +static int pm_to_humidity(struct permonst *); +将怪物转换为湿度。 + +static unsigned int sp_amask_to_amask(unsigned int sp_amask); +将特殊房间标志位转换为标准房间标志位。 + +static void create_monster(monster *, struct mkroom *); +创建怪物。 + +static struct obj *create_object(object *, struct mkroom *); +创建物品。 + +static void create_altar(altar *, struct mkroom *); +创建祭坛。 + +static boolean search_door(struct mkroom *, coordxy *, coordxy *, xint16, int); +查找门。 + +static void create_corridor(corridor *); +创建走廊。 + +static struct mkroom *build_room(room *, struct mkroom *); +构建房间。 + +static void light_region(region *); +照亮区域。 + +static void maze1xy(coord *, int); +在迷宫中获取坐标。 + +static void fill_empty_maze(void); +填充空迷宫。 + +static void splev_initlev(lev_init *); +初始化地图。 + +static boolean generate_way_out_method(coordxy nx, coordxy ny, +struct selectionvar *ov); +生成通路。 + +static void spo_end_moninvent(void); +结束怪物物品链表。 + +static void spo_pop_container(void); +弹出容器。 + +static int l_create_stairway(lua_State *, boolean); +创建楼梯。 + +static void spo_endroom(struct sp_coder *); +结束房间。 + +static void l_table_getset_feature_flag(lua_State *, int, int, const char *, +int); +获取或设置特征标志。 + +static void l_get_lregion(lua_State *, lev_region *); +获取地图区域。 + +static void sel_set_lit(coordxy, coordxy, genericptr_t); +在选择区域中设置光照。 + +static void add_doors_to_room(struct mkroom *); +将门添加到房间中。 + +static void selection_iterate(struct selectionvar *, select_iter_func, +genericptr_t); +迭代选择器。 + +static void sel_set_ter(coordxy, coordxy, genericptr_t); +在选择区域中设置地形。 + +static void sel_set_door(coordxy, coordxy, genericptr_t); +在选择区域中设置门。 + +static void sel_set_feature(coordxy, coordxy, genericptr_t); +在选择区域中设置特征。 + +static void levregion_add(lev_region *); +添加地图区域。 + +static void get_table_xy_or_coord(lua_State *, lua_Integer *, lua_Integer *); +获取表格中的坐标。 + +static int get_table_region(lua_State *, const char *, lua_Integer *, +lua_Integer *, lua_Integer *, lua_Integer *, boolean); +获取表格中的地图区域。 + +static void set_wallprop_in_selection(lua_State *, int); +在选择区域内设置墙壁属性。 + +static coordxy random_wdir(void); +随机方向。 + +static int floodfillchk_match_under(coordxy, coordxy); +检查给定位置是否与下面的类型匹配。 + +static int floodfillchk_match_accessible(coordxy, coordxy); +检查给定位置是否可通行。 + +static boolean sel_flood_havepoint(coordxy, coordxy, coordxy *, coordxy *, int); +判断选择器中是否有给定点。 + +static long line_dist_coord(long, long, long, long, long, long); +计算两个坐标之间的距离。 + +static void l_push_mkroom_table(lua_State *, struct mkroom *); +将房间转换为表格形式压入Lua栈。 + +static int get_table_align(lua_State *); +获取表格中的对齐方式。 + +static int get_table_monclass(lua_State *); +获取表格中的怪物类别。 + +static int find_montype(lua_State *, const char *, int *); +查找怪物类型。 + +static int get_table_montype(lua_State *, int *); +获取表格中的怪物类型。 + +static lua_Integer get_table_int_or_random(lua_State *, const char *, int); +获取表格中的整数或随机数。 + +static int get_table_buc(lua_State *); +获取表格中的容器。 + +static int get_table_objclass(lua_State *); +获取表格中的物品类别。 + +static int find_objtype(lua_State *, const char *); +查找物品类型。 + +static int get_table_objtype(lua_State *); +获取表格中的物品类型。 + +static const char *get_mkroom_name(int); +获取房间名称。 + +static int get_table_roomtype_opt(lua_State *, const char *, int); +获取表格中的房间类型。 + +static int get_table_traptype_opt(lua_State *, const char *, int); +获取表格中的陷阱类型。 + +static int get_traptype_byname(const char *); +根据名称获取陷阱类型。 + +static lua_Integer get_table_intarray_entry(lua_State *, int, int); +获取表格中的整数数组项。 + +static struct sp_coder *sp_level_coder_init(void); +初始化特殊房间编码器。 + +int lspo_altar(lua_State *); +Lua函数,创建祭坛。 + +int lspo_branch(lua_State *); +Lua函数,创建支路。 + +int lspo_corridor(lua_State *); +Lua函数,创建走廊。 + +int lspo_door(lua_State *); +Lua函数,创建门。 + +int lspo_drawbridge(lua_State *); +Lua函数,创建地牢桥。 + +int lspo_engraving(lua_State *); +Lua函数,进行题字刻印。 + +int lspo_feature(lua_State *); +Lua函数,创建特征。 + +int lspo_gold(lua_State *); +Lua函数,创建黄金。 + +int lspo_grave(lua_State *); +Lua函数,创建墓地。 + +int lspo_ladder(lua_State *); +Lua函数,创建梯子。 + +int lspo_level_flags(lua_State *); +Lua函数,设置地图标志。 + +int lspo_level_init(lua_State *); +Lua函数,初始化地图。 + +int lspo_levregion(lua_State *); +Lua函数,*/ #define IN_SP_LEV_C #include "hack.h" 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" diff --git a/src/NetHack_3.7/src/sys.c b/src/NetHack_3.7/src/sys.c index d1f9e0b..2b3e152 100644 --- a/src/NetHack_3.7/src/sys.c +++ b/src/NetHack_3.7/src/sys.c @@ -1,7 +1,9 @@ /* NetHack 3.7 sys.c $NHDT-Date: 1693083254 2023/08/26 20:54:14 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.63 $ */ /* Copyright (c) Kenneth Lorber, Kensington, Maryland, 2008. */ /* NetHack may be freely redistributed. See license for details. */ - +/*sys_early_init():初始化系统选项结构体sysopt,包括support、recover、wizards、debugfiles、dumplogfile、env_dbgfl、shellers、explorers、genericusers、maxplayers、bones_pools、livelog、persmax、entrymax、pointsmin、pers_is_uid、tt_oname_maxrank等选项的默认值。 +sysopt_release():释放系统选项结构体sysopt中动态分配的字符串内存。 +sysopt_seduce_set(int val):根据val参数来设置mons[PM_INCUBUS]和mons[PM_SUCCUBUS]的攻击属性来判断是否可以诱惑玩家角色。这个函数实际上在 NetHack 3.7 中已经被注释掉了,因为攻击替换现在是在getmattk()函数中实时完成的。 总之,这些函数都是用来初始化和管理游戏的系统选项的*/ #include "hack.h" #ifndef SYSCF diff --git a/src/NetHack_3.7/src/teleport.c b/src/NetHack_3.7/src/teleport.c index cd93512..4fe8fce 100644 --- a/src/NetHack_3.7/src/teleport.c +++ b/src/NetHack_3.7/src/teleport.c @@ -2,7 +2,14 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */ /* NetHack may be freely redistributed. See license for details. */ - +/*goodpos_onscary(coordxy, coordxy, struct permonst *):检查给定的坐标是否是在可怕的怪物周围的一个好位置。它用于确定在特定情况下玩家是否可以被传送到该位置。 +tele_jump_ok(coordxy, coordxy, coordxy, coordxy):检查从一个坐标跳到另一个坐标是否是允许的。它用于确定在特定情况下怪物是否可以进行跳跃。 +teleok(coordxy, coordxy, boolean):检查给定的坐标是否可以进行传送。它用于确定在特定情况下是否可以将一个对象(如玩家或怪物)传送到该位置。 +vault_tele(void):处理宝库传送的逻辑。它用于在特定情况下将玩家传送到宝库内部。 +rloc_pos_ok(coordxy, coordxy, struct monst *):检查给定的坐标是否适合将怪物重新定位到该位置。它用于确定在特定情况下怪物是否可以被重新定位到该位置。 +rloc_to_core(struct monst *, coordxy, coordxy, unsigned):将怪物重新定位到指定的坐标,并处理相关的碰撞和事件。它用于将怪物从一个位置移动到另一个位置。 +mvault_tele(struct monst *):处理怪物在宝库内传送的逻辑。它用于在特定情况下将怪物传送到宝库内部。 +m_blocks_teleporting(struct monst *):检查给定的怪物是否会阻碍其他对象进行传送。它用于确定在特定情况下怪物是否会干扰传送的过程。 这些函数主要用于处理传送、重新定位和宝库传送等与位置移动相关的逻辑。*/ #include "hack.h" #define NEW_ENEXTO diff --git a/src/NetHack_3.7/src/timeout.c b/src/NetHack_3.7/src/timeout.c index 65306af..0cf52aa 100644 --- a/src/NetHack_3.7/src/timeout.c +++ b/src/NetHack_3.7/src/timeout.c @@ -2,7 +2,19 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */ /* NetHack may be freely redistributed. See license for details. */ - +/*stoned_dialogue(void):处理玩家因吸入致幻气体而变成石头的对话。它用于在玩家变成石头时显示相应的对话框和信息。 +vomiting_dialogue(void):处理玩家因呕吐而失去行动力的对话。它用于在玩家呕吐时显示相应的对话框和信息。 +choke_dialogue(void):处理玩家因喉咙受阻而失去行动能力的对话。它用于在玩家窒息时显示相应的对话框和信息。 +levitation_dialogue(void):处理玩家因悬浮而无法踩在地上的对话。它用于在玩家悬浮时显示相应的对话框和信息。 +slime_dialogue(void):处理玩家被黏液覆盖的对话。它用于在玩家被黏液覆盖时显示相应的对话框和信息。 +slimed_to_death(struct kinfo *):处理玩家被黏液杀死的情况。它用于在玩家生命值归零时进行相应的清理和提示。 +sickness_dialogue(void):处理玩家因疾病而失去行动能力的对话。它用于在玩家生病时显示相应的对话框和信息。 +phaze_dialogue(void):处理玩家因幻觉而无法正常行动的对话。它用于在玩家幻觉时显示相应的对话框和信息。 +done_timeout(int, int):处理玩家的超时事件。它用于在指定时间内完成特定的任务或操作。 +slip_or_trip(void):处理玩家在滑动或跌倒时的逻辑。它用于在玩家滑动或跌倒时进行相应的清理和提示。 +see_lamp_flicker(struct obj *, const char *):处理火把等光源闪烁的情况。它用于在光源闪烁时显示相应的信息。 +lantern_message(struct obj *):处理灯笼等光源的电量提醒。它用于在光源电量不足时显示相应的信息。 +cleanup_burn(ANY_P *, long):清除某个对象上的烧伤效果。它用于在火焰消失时进行相应的清理和提示。 这些函数主要用于处理游戏中的各种状态和事件,例如中毒、疾病、失去行动能力等情况,以及光源的状态和灯笼电量提醒等。*/ #include "hack.h" static void stoned_dialogue(void); diff --git a/src/NetHack_3.7/src/topten.c b/src/NetHack_3.7/src/topten.c index 24f6e57..0502664 100644 --- a/src/NetHack_3.7/src/topten.c +++ b/src/NetHack_3.7/src/topten.c @@ -2,7 +2,18 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ - +/*topten_print(const char *):输出排行榜到终端或文件。 +topten_print_bold(const char *):输出加粗的排行榜到终端或文件。 +outheader(void):输出排行榜的表头信息。 +outentry(int, struct toptenentry *, boolean):输出一个排行榜条目。 +discardexcess(FILE *):扫描文件,如果条目数超过规定值则删除多余的条目。 +readentry(FILE *, struct toptenentry *):从文件中读取一个排行榜条目。 +writeentry(FILE *, struct toptenentry *):将一个排行榜条目写入文件。 +free_ttlist(struct toptenentry *):释放排行榜链表。 +classmon(char *):根据职业名称返回对应的怪物类型。 +score_wanted(boolean, int, struct toptenentry *, int, const char **, int):判断一个玩家是否符合排行榜条件。 +nsb_mung_line(char *):处理不支持方括号的系统中的字符串。 +nsb_unmung_line(char *):处理不支持方括号的系统中的字符串(反向)。*/ #include "hack.h" #include "dlb.h" diff --git a/src/NetHack_3.7/src/track.c b/src/NetHack_3.7/src/track.c index b5ccd2d..1b7eb5d 100644 --- a/src/NetHack_3.7/src/track.c +++ b/src/NetHack_3.7/src/track.c @@ -3,7 +3,23 @@ /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */ /* NetHack may be freely redistributed. See license for details. */ /* track.c - version 1.0.2 */ +/*initrack(void):初始化追踪系统,将计数器和指针重置为初始值。 +settrack(void):将玩家当前位置添加到追踪记录中。 + +gettrack(coordxy x, coordxy y):根据给定的坐标,查找最近的追踪记录,并返回该记录的指针。 + +UTSZ:定义了追踪记录的最大数量。 + +static NEARDATA int utcnt, utpnt:定义了追踪记录的计数器和指针变量。 + +static NEARDATA coord utrack[UTSZ]:定义了保存追踪记录的数组。 + +函数的作用如下: + +initrack 函数用于初始化追踪系统,将计数器和指针重置为初始值。 +settrack 函数将玩家当前位置添加到追踪记录中。如果追踪记录已满,则覆盖最早的记录。 +gettrack 函数根据给定的坐标,查找最近的追踪记录,并返回该记录的指针。它会遍历追踪记录数组,计算每个记录与给定坐标之间的距离,并返回最近的记录。*/ #include "hack.h" #define UTSZ 50 diff --git a/src/NetHack_3.7/src/trap.c b/src/NetHack_3.7/src/trap.c index a9d7ac0..de9a059 100644 --- a/src/NetHack_3.7/src/trap.c +++ b/src/NetHack_3.7/src/trap.c @@ -2,7 +2,66 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ - +/*mk_trap_statue(coordxy, coordxy):在给定的坐标上生成一个陷阱和一个雕像。 +dng_bottom(d_level *lev):返回给定地下层级的最底层。 +hole_destination(d_level *):确定一个角色掉入洞穴后的目的地。 +keep_saddle_with_steedcorpse(unsigned, struct obj *, struct obj *):当角色骑乘的生物死亡时,保留鞍和尸体。 +mu_maybe_destroy_web(struct monst *, boolean, struct trap *):判断怪物是否可能摧毁网格,并更新相关状态。 +t_missile(int, struct trap *):处理特定类型的陷阱对投掷物的影响。 +floor_trigger(int):触发地板陷阱并执行相应效果。 +check_in_air(struct monst *, unsigned):检查角色是否处于空中状态。 +trapeffect_arrow_trap(struct monst *, struct trap *, unsigned):处理箭陷阱的效果。 +trapeffect_dart_trap(struct monst *, struct trap *, unsigned):处理飞镖陷阱的效果。 +trapeffect_rocktrap(struct monst *, struct trap *, unsigned):处理岩石陷阱的效果。 +trapeffect_sqky_board(struct monst *, struct trap *, unsigned):处理吱吱作响的木板陷阱的效果。 +trapeffect_bear_trap(struct monst *, struct trap *, unsigned):处理捕熊夹陷阱的效果。 +trapeffect_slp_gas_trap(struct monst *, struct trap *, unsigned):处理催眠气体陷阱的效果。 +trapeffect_rust_trap(struct monst *, struct trap *, unsigned):处理生锈陷阱的效果。 +trapeffect_fire_trap(struct monst *, struct trap *, unsigned):处理火焰陷阱的效果。 +trapeffect_pit(struct monst *, struct trap *, unsigned):处理坑陷阱的效果。 +trapeffect_hole(struct monst *, struct trap *, unsigned):处理洞穴陷阱的效果。 +trapeffect_telep_trap(struct monst *, struct trap *, unsigned):处理传送陷阱的效果。 +trapeffect_level_telep(struct monst *, struct trap *, unsigned):处理层级传送陷阱的效果。 +trapeffect_web(struct monst *, struct trap *, unsigned):处理网陷阱的效果。 +trapeffect_statue_trap(struct monst *, struct trap *, unsigned):处理雕像陷阱的效果。 +trapeffect_magic_trap(struct monst *, struct trap *, unsigned):处理魔法陷阱的效果。 +trapeffect_anti_magic(struct monst *, struct trap *, unsigned):处理反魔法陷阱的效果。 +trapeffect_poly_trap(struct monst *, struct trap *, unsigned):处理变形陷阱的效果。 +trapeffect_landmine(struct monst *, struct trap *, unsigned):处理地雷陷阱的效果。 +trapeffect_rolling_boulder_trap(struct monst *, struct trap *, unsigned):处理滚石陷阱的效果。 +trapeffect_magic_portal(struct monst *, struct trap *, unsigned):处理魔法传送门陷阱的效果。 +trapeffect_vibrating_square(struct monst *, struct trap *, unsigned):处理振动方块陷阱的效果。 +trapeffect_selector(struct monst *, struct trap *, unsigned):根据陷阱类型选择相应的处理函数。 +trapnote(struct trap *, boolean):返回陷阱的描述信息。 +choose_trapnote(struct trap *):选择适当的陷阱描述信息。 +steedintrap(struct trap *, struct obj *):处理角色骑乘生物掉入陷阱的情况。 +launch_drop_spot(struct obj *, coordxy, coordxy):计算投掷物的落点坐标。 +find_random_launch_coord(struct trap *, coord *):在陷阱周围随机找一个投掷物的起始坐标。 +mkroll_launch(struct trap *, coordxy, coordxy, short, long):生成一个投掷物并计算其轨迹。 +isclearpath(coord *, int, schar, schar):检查路径是否可通行。 +dofiretrap(struct obj *):处理火焰陷阱的效果。 +domagictrap(void):处理魔法陷阱的效果。 +emergency_disrobe(boolean *):当角色被困在衣物中时进行紧急脱离。 +untrap_prob(struct trap *):计算解除陷阱的概率。 +move_into_trap(struct trap *):将角色移动到陷阱位置。 +try_disarm(struct trap *, boolean):试图解除陷阱。 +reward_untrap(struct trap *, struct monst *):根据解除陷阱的结果给予奖励。 +disarm_holdingtrap(struct trap *):解除捕兽夹陷阱。 +disarm_landmine(struct trap *):解除地雷陷阱。 +unsqueak_ok(struct obj *):检查物品是否可以解除吱吱作响的木板陷阱。 +disarm_squeaky_board(struct trap *):解除吱吱作响的木板陷阱。 +disarm_shooting_trap(struct trap *, int):解除射击陷阱。 +clear_conjoined_pits(struct trap *):清除相连的坑陷阱。 +adj_nonconjoined_pit(struct trap *):判断是否有非相连的坑陷阱。 +try_lift(struct monst *, struct trap *, int, boolean):尝试抬起陷阱。 +help_monster_out(struct monst *, struct trap *):帮助怪物逃离陷阱。 +untrap_box(struct obj *, boolean, boolean):解除掉落的箱子。 +maybe_finish_sokoban(void):检查是否完成了 Sokoban 迷宫的挑战。 +a_your[2]:表示 "a" 和 "your" 的字符串数组。 +A_Your[2]:表示 "A" 和 "Your" 的字符串数组。 +tower_of_flame[]:表示 "tower of flame" 的字符数组。 +A_gush_of_water_hits:表示 "A gush of water hits" 的字符串指针。 +blindgas[6]:表示不同气体类型的描述字符串数组。*/ #include "hack.h" extern const char *const destroy_strings[][3]; /* from zap.c */ diff --git a/src/NetHack_3.7/src/u_init.c b/src/NetHack_3.7/src/u_init.c index da653e3..72f101d 100644 --- a/src/NetHack_3.7/src/u_init.c +++ b/src/NetHack_3.7/src/u_init.c @@ -2,7 +2,32 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2017. */ /* NetHack may be freely redistributed. See license for details. */ +/*struct trobj: +这是一个结构体,用于定义游戏中的物品对象。它包括了物品的类型、特殊属性、类别、数量和祝福状态等信息。 +ini_inv(struct trobj *): +这是一个静态函数,用于初始化角色的初始物品清单。 + +knows_object(int): +这是一个静态函数,用于标记玩家已知道的特定物品。 + +knows_class(char): +这是一个静态函数,用于标记玩家已知道的特定类型物品,比如所有的宝石类物品。 + +restricted_spell_discipline(int): +这是一个静态函数,用于检查玩家是否限制了特定的法术技能。 + +#define: +这部分包括了一些宏定义,用于定义特定常量,比如UNDEF_TYP(未定义类型)、UNDEF_SPE(未定义特殊属性)和UNDEF_BLESS(未定义祝福状态)等。 + +static struct trobj: +这部分包括了不同职业(Archeologist、Barbarian等)的初始物品列表,每个职业有其特定的初始装备。 + +static struct trobj (Optional extra inventory items): +这部分包括了一些额外的物品列表,比如开罐器、魔法笔、油灯等。这些物品在游戏中并不是每个职业都会初始拥有的。 + +static const struct def_skill: +这部分包括了不同职业的默认技能水平,比如Archeologist有哪些技能是基础、专家或者精通级别的。*/ #include "hack.h" struct trobj { diff --git a/src/NetHack_3.7/src/uhitm.c b/src/NetHack_3.7/src/uhitm.c index 636a87b..056c86c 100644 --- a/src/NetHack_3.7/src/uhitm.c +++ b/src/NetHack_3.7/src/uhitm.c @@ -2,7 +2,77 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ +/*mhitm_mgc_atk_negated(struct monst *, struct monst *, boolean):用于判断一个怪物对另一个怪物进行魔法攻击时,是否被免疫或抵消。 +known_hitum(struct monst *, struct obj *, int *, int, int, struct attack *, int):用于判断玩家对怪物进行攻击是否成功,并计算造成的伤害。 + +theft_petrifies(struct obj *):用于判断物品是否具有盗窃能力并使目标石化。 + +steal_it(struct monst *, struct attack *):用于实施偷窃攻击,并从怪物身上偷取物品。 + +hitum_cleave(struct monst *, struct attack *):用于执行分裂攻击,对怪物进行连续的攻击。 + +double_punch(void):用于进行双重打击攻击。 + +hitum(struct monst *, struct attack *):用于对怪物进行一次普通攻击。 + +hmon_hitmon_barehands(struct _hitmon_data *, struct monst *):用于进行空手攻击。 + +hmon_hitmon_weapon_ranged(struct _hitmon_data *, struct monst *, struct obj *):用于进行远程武器攻击。 + +hmon_hitmon_weapon_melee(struct _hitmon_data *, struct monst *, struct obj *):用于进行近战武器攻击。 + +hmon_hitmon_weapon(struct _hitmon_data *, struct monst *, struct obj *):用于使用武器对怪物进行攻击。 + +hmon_hitmon_potion(struct _hitmon_data *, struct monst *, struct obj *):用于使用药水对怪物进行攻击。 + +hmon_hitmon_misc_obj(struct _hitmon_data *, struct monst *, struct obj *):用于使用其他物品对怪物进行攻击。 + +hmon_hitmon_do_hit(struct _hitmon_data *, struct monst *, struct obj *):用于执行对怪物的打击。 + +hmon_hitmon_dmg_recalc(struct _hitmon_data *, struct obj *):用于重新计算对怪物造成的伤害。 + +hmon_hitmon_poison(struct _hitmon_data *, struct monst *, struct obj *):用于对怪物进行中毒攻击。 + +hmon_hitmon_jousting(struct _hitmon_data *, struct monst *, struct obj *):用于进行骑士冲刺攻击。 + +hmon_hitmon_stagger(struct _hitmon_data *, struct monst *, struct obj *):用于使怪物晕厥的攻击。 + +hmon_hitmon_pet(struct _hitmon_data *, struct monst *, struct obj *):用于驯服怪物的攻击。 + +hmon_hitmon_splitmon(struct _hitmon_data *, struct monst *, struct obj *):用于分裂怪物的攻击。 + +hmon_hitmon_msg_hit(struct _hitmon_data *, struct monst *, struct obj *):用于显示攻击命中的消息。 + +hmon_hitmon_msg_silver(struct _hitmon_data *, struct monst *, struct obj *):用于显示使用银制武器攻击的消息。 + +hmon_hitmon_msg_lightobj(struct _hitmon_data *, struct monst *, struct obj *):用于显示使用光闪的物品攻击的消息。 + +hmon_hitmon(struct monst *, struct obj *, int, int):用于对怪物进行攻击。 + +joust(struct monst *, struct obj *):用于进行骑士冲刺攻击。 + +demonpet(void):用于召唤恶魔宠物。 + +m_slips_free(struct monst *, struct attack *):用于判断怪物在攻击过程中是否滑倒并逃脱。 + +start_engulf(struct monst *):用于怪物开始吞噬玩家或其他怪物。 + +end_engulf(void):用于结束吞噬状态。 + +gulpum(struct monst *, struct attack *):用于进行吞噬攻击。 + +hmonas(struct monst *):用于检查怪物是否处于幽灵状态。 + +nohandglow(struct monst *):用于处理怪物没有手部的情况。 + +mhurtle_to_doom(struct monst *, int, struct permonst **):用于将怪物推入死亡陷阱。 + +first_weapon_hit(struct obj *):用于处理玩家第一次攻击命中的特殊情况。 + +shade_aware(struct obj *):用于判断物品是否对暗影敏感。 + +PROJECTILE(obj):宏定义,用于判断物品是否为弹药*/ #include "hack.h" static const char brief_feeling[] = diff --git a/src/NetHack_3.7/src/utf8map.c b/src/NetHack_3.7/src/utf8map.c index 136ba4c..8d9c8de 100644 --- a/src/NetHack_3.7/src/utf8map.c +++ b/src/NetHack_3.7/src/utf8map.c @@ -1,7 +1,49 @@ /* NetHack 3.7 utf8map.c */ /* Copyright (c) Michael Allison, 2021. */ /* NetHack may be freely redistributed. See license for details. */ +/*extern const struct symparse loadsyms[];:声明一个外部定义的结构体数组,用于存储游戏中使用的符号和相应的属性。 +extern struct enum_dump monsdump[];:声明一个外部定义的结构体数组,用于存储游戏中的怪物数据。 + +extern struct enum_dump objdump[];:声明一个外部定义的结构体数组,用于存储游戏中的物品数据。 + +glyph_map glyphmap[MAX_GLYPH];:定义一个数组,用于存储游戏中的地图图像和相应的符号。 + +extern const char *const known_handling[];:声明一个外部定义的字符串数组,用于存储已知符号的处理方式。 + +#ifdef ENHANCED_SYMBOLS:编译时条件判断,如果定义了 ENHANCED_SYMBOLS,则继续编译下面的代码块。 + +enum reserved_activities { res_nothing, res_dump_glyphids, res_fill_cache };:定义一个枚举类型,用于表示保留活动的类型。 + +enum things_to_find { find_nothing, find_pm, find_oc, find_cmap, find_glyph };:定义一个枚举类型,用于表示要查找的内容类型。 + +struct find_struct {...};:定义一个结构体类型,用于表示要查找的内容、查找结果以及回调函数等信息。 + +const struct find_struct zero_find = { 0 };:定义一个初始化为零的结构体变量,用于初始化其他结构体变量。 + +struct glyphid_cache_t {...};:定义一个结构体类型,用于存储图像符号及其对应的编号。 + +static void init_glyph_cache(void);:声明一个静态函数,用于初始化图像符号缓存。 + +static void add_glyph_to_cache(int glyphnum, const char *id);:声明一个静态函数,用于将图像符号及其对应的编号添加到缓存中。 + +static int find_glyph_in_cache(const char *id);:声明一个静态函数,用于在图像符号缓存中查找给定符号的编号。 + +static uint32 glyph_hash(const char *id);:声明一个静态函数,用于根据给定符号计算哈希值。 + +static void to_custom_symset_entry_callback(int glyph, struct find_struct *findwhat);:声明一个静态函数,用于将图像符号转换为自定义符号集中的条目。 + +static int unicode_val(const char *cp);:声明一个静态函数,用于将 Unicode 字符串转换为整数。 + +static int parse_id(const char *id, struct find_struct *findwhat);:声明一个静态函数,用于解析符号查找的字符串表示。 + +static int glyph_find_core(const char *id, struct find_struct *findwhat);:声明一个静态函数,用于在游戏中查找符号。 + +static char *fix_glyphname(char *str);:声明一个静态函数,用于修复符号名称中的错误。 + +static int32_t rgbstr_to_int32(const char *rgbstr);:声明一个静态函数,用于将 RGB 颜色字符串转换为整数值。 + +boolean closest_color(uint32_t lcolor, uint32_t *closecolor, int *clridx);:定义一个函数,用于查找最接近给定颜色的游戏中的颜色。*/ #include "hack.h" #include diff --git a/src/NetHack_3.7/src/vault.c b/src/NetHack_3.7/src/vault.c index c658e4a..623f75b 100644 --- a/src/NetHack_3.7/src/vault.c +++ b/src/NetHack_3.7/src/vault.c @@ -2,7 +2,29 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */ /* NetHack may be freely redistributed. See license for details. */ +/*static boolean clear_fcorr(struct monst *, boolean);:清空虚假走廊,将虚假走廊的标志设置为已经探索过,并根据参数判断是否需要清除它们的隐蔽状态。 +static void blackout(coordxy, coordxy);:黑暗化区域,将指定坐标间的所有地图格子都设置为黑色。 + +static void restfakecorr(struct monst *);:修复虚假走廊,将虚假走廊的标志设置为未探索过。 + +static void parkguard(struct monst *);:将守卫怪物移动至离其目标位置最近的位置,并将守卫标志设置为true。 + +static boolean in_fcorridor(struct monst *, coordxy, coordxy);:判断怪物是否在虚假走廊中,如果是,则返回true。 + +static boolean find_guard_dest(struct monst *, coordxy *, coordxy *);:查找守卫怪物的目标位置,将结果存储在指针参数中,并返回是否成功查找到目标位置。 + +static void move_gold(struct obj *, int);:移动金币,将金币从一个地图格子移动到另一个地图格子,并更新地图中对应格子的显示。 + +static void wallify_vault(struct monst *);:将金库转换为实际墙壁,防止怪物和玩家通过金库中的虚假走廊进入。 + +static void gd_mv_monaway(struct monst *, int, int);:将怪物移开,使其离开指定坐标范围内的区域。 + +static void gd_pick_corridor_gold(struct monst *, int, int);:从虚假走廊中获取金币,并将其放置在地图上。 + +static int gd_move_cleanup(struct monst *, boolean, boolean);:清理守卫怪物移动时留下的痕迹,包括清除虚假走廊标志、修复地图等。 + +static void gd_letknow(struct monst *);:通知守卫怪物其目标位置已经被探索过了。*/ #include "hack.h" static boolean clear_fcorr(struct monst *, boolean); diff --git a/src/NetHack_3.7/src/version.c b/src/NetHack_3.7/src/version.c index cd8c862..437e172 100644 --- a/src/NetHack_3.7/src/version.c +++ b/src/NetHack_3.7/src/version.c @@ -2,7 +2,33 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2018. */ /* NetHack may be freely redistributed. See license for details. */ +/*version_string 函数:将游戏的短版本信息填充到缓冲区中。 +getversionstring 函数:填充并返回游戏的详细版本信息字符串,包括版本号、构建日期、构建时间、Git 信息等。 + +doversion 函数:用于执行 #versionshort 命令,显示游戏的版本信息。 + +doextversion 函数:用于执行 #version 命令,显示游戏的详细版本信息和配置文件信息。 + +early_version_info 函数:用于在程序的早期阶段显示游戏的版本信息。 + +insert_rtoption 函数:用于在配置文件信息中插入运行时的选项,例如 PATMATCH 和 LUAVERSION。 + +comp_times 函数:用于比较文件的修改时间和构建时间,判断文件是否已经过时。 + +check_version 函数:用于检查文件的版本信息和配置是否与当前游戏的版本和配置兼容。 + +uptodate 函数:用于检查文件是否是最新版本。 + +store_formatindicator 函数:用于存储文件的格式指示符。 + +store_version 函数:用于存储游戏的版本信息到文件中。 + +get_feature_notice_ver 函数:获取特定格式的版本号。 + +get_current_feature_ver 函数:获取当前游戏的特征版本号。 + +copyright_banner_line 函数:根据索引返回版权声明中的相应行。*/ #include "hack.h" #include "dlb.h" diff --git a/src/NetHack_3.7/src/vision.c b/src/NetHack_3.7/src/vision.c index 341ef9c..99a3dbc 100644 --- a/src/NetHack_3.7/src/vision.c +++ b/src/NetHack_3.7/src/vision.c @@ -1,7 +1,18 @@ /* NetHack 3.7 vision.c $NHDT-Date: 1657918095 2022/07/15 20:48:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.49 $ */ /* Copyright (c) Dean Luick, with acknowledgements to Dave Cohrs, 1990. */ /* NetHack may be freely redistributed. See license for details. */ - +/*static seenV could_see[2][ROWNO][COLNO]:定义一个三维数组 could_see,用于记录视野信息。 +static seenV *cs_rows0[ROWNO], *cs_rows1[ROWNO]:定义两个指针数组 cs_rows0 和 cs_rows1,用于记录视野信息。 +static coordxy cs_rmin0[ROWNO], cs_rmax0[ROWNO], cs_rmin1[ROWNO], cs_rmax1[ROWNO]:定义四个坐标数组,用于记录视野信息的边界范围。 +static char viz_clear[ROWNO][COLNO]:定义一个二维数组 viz_clear,用于记录视野中哪些位置可以看到,哪些位置被挡住了。 +static char *viz_clear_rows[ROWNO]:定义一个指针数组 viz_clear_rows,用于记录视野中哪些位置可以看到,哪些位置被挡住了。 +static coordxy left_ptrs[ROWNO][COLNO], right_ptrs[ROWNO][COLNO]:定义两个坐标数组,用于帮助实现光线跟踪算法。 +void fill_point(int, int):将指定位置填充为可见状态。 +void dig_point(int, int):将指定位置填充为地图上的通道或房间。 +void view_init(void):初始化视野相关的数据结构。 +void view_from(coordxy, coordxy, seenV**, coordxy*, coordxy*, int, void (*)(coordxy, coordxy, genericptr_t), genericptr_t):计算从指定位置开始的视野范围,并将结果保存到相应的数据结构中。 +void get_unused_cs(seenV***, coordxy**, coordxy**):获取一个未被使用的视野缓存区域,用于计算视野范围时的临时存储。 +void rogue_vision(seenV**, coordxy*, coordxy*):计算地牢风格游戏中的视野范围*/ #include "hack.h" #include diff --git a/src/NetHack_3.7/src/weapon.c b/src/NetHack_3.7/src/weapon.c index f613c4a..180b577 100644 --- a/src/NetHack_3.7/src/weapon.c +++ b/src/NetHack_3.7/src/weapon.c @@ -2,7 +2,12 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */ /* NetHack may be freely redistributed. See license for details. */ - +/*static void give_may_advance_msg(int):给予可能进阶的提示信息,参数是技能等级。 +static void finish_towel_change(struct obj *obj, int):完成换毛巾的操作,传入参数是物品对象和标志位。 +static boolean could_advance(int):检查是否可以进阶到下一个技能等级,返回布尔值。 +static boolean peaked_skill(int):检查是否已经达到技能的顶峰等级,返回布尔值。 +static int slots_required(int):计算所需技能槽的数量,返回整数值。 +static void skill_advance(int):技能进阶操作,根据当前技能等级进行相应的处理。*/ /* * This module contains code for calculation of "to hit" and damage * bonuses for any given weapon used, as well as weapons selection diff --git a/src/NetHack_3.7/src/wield.c b/src/NetHack_3.7/src/wield.c index c6da678..0fb1717 100644 --- a/src/NetHack_3.7/src/wield.c +++ b/src/NetHack_3.7/src/wield.c @@ -2,7 +2,10 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2009. */ /* NetHack may be freely redistributed. See license for details. */ - +/*cant_wield_corpse:检查是否无法装备尸体,用于判断是否能够装备某个物品。 +ready_weapon:准备武器,返回需要进行的动作次数(0表示成功,-1表示失败)。 +ready_ok:检查是否可以准备武器,用于判断是否可以准备某个物品作为主要武器。 +wield_ok:检查是否可以装备武器,用于判断是否可以装备某个物品。*/ #include "hack.h" /* KMH -- Differences between the three weapon slots. diff --git a/src/NetHack_3.7/src/windows.c b/src/NetHack_3.7/src/windows.c index 11892a1..74c4674 100644 --- a/src/NetHack_3.7/src/windows.c +++ b/src/NetHack_3.7/src/windows.c @@ -1,7 +1,68 @@ /* NetHack 3.7 windows.c $NHDT-Date: 1661202202 2022/08/22 21:03:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.97 $ */ /* Copyright (c) D. Cohrs, 1993. */ /* NetHack may be freely redistributed. See license for details. */ +/*def_raw_print:默认的原始输出函数,用于将字符串直接输出到控制台或终端。 +def_wait_synch:默认的同步等待函数,用于同步游戏的状态,等待玩家操作完成。 +#ifdef TTY_GRAPHICS + +wintty.h:包含了与终端图形界面相关的函数和数据结构。 #endif +#ifdef CURSES_GRAPHICS + +curses_procs:用于Curses图形界面的窗口处理函数。 #endif +#ifdef X11_GRAPHICS + +X11_procs:用于X11图形界面的窗口处理函数。 +win_X11_init:初始化X11图形界面。 #endif +#ifdef QT_GRAPHICS + +Qt_procs:用于Qt图形界面的窗口处理函数。 #endif +#ifdef GEM_GRAPHICS + +wingem.h:包含了与Gem图形界面相关的函数和数据结构。 #endif +#ifdef MAC + +mac_procs:用于Mac图形界面的窗口处理函数。 #endif +#ifdef BEOS_GRAPHICS + +beos_procs:用于BeOS图形界面的窗口处理函数。 +be_win_init:初始化BeOS图形界面。 #endif +#ifdef AMIGA_INTUITION + +amii_procs:用于Amiga Intuition图形界面的窗口处理函数。 +amiv_procs:用于Amiga V39 Intuition图形界面的窗口处理函数。 +ami_wininit_data:初始化Amiga图形界面。 #endif +#ifdef GNOME_GRAPHICS + +Gnome_procs:用于Gnome图形界面的窗口处理函数。 #endif +#ifdef MSWIN_GRAPHICS + +mswin_procs:用于Microsoft Windows图形界面的窗口处理函数。 #endif +#ifdef SHIM_GRAPHICS +shim_procs:用于Shim图形界面的窗口处理函数。 #endif +#ifdef WINCHAIN + +chainin_procs:用于输入链的窗口处理函数。 +chainin_procs_init:初始化输入链。 +chainin_procs_chain:将输入链连接到指定位置。 +chainout_procs:用于输出链的窗口处理函数。 +chainout_procs_init:初始化输出链。 +chainout_procs_chain:将输出链连接到指定位置。 +trace_procs:用于跟踪链的窗口处理函数。 +trace_procs_init:初始化跟踪链。 +trace_procs_chain:将跟踪链连接到指定位置。 #endif +#ifdef DUMPLOG +这些函数是用于记录游戏过程的日志文件。 + +dump_create_nhwindow:创建用于日志记录的窗口。 +dump_clear_nhwindow:清空日志记录窗口。 +dump_display_nhwindow:显示日志记录窗口的内容。 +dump_destroy_nhwindow:销毁日志记录窗口。 +dump_start_menu:开始记录日志中的菜单。 +dump_add_menu:向日志中记录添加菜单项。 +dump_end_menu:结束日志中的菜单记录。 +dump_select_menu:在日志中选择菜单项。 +dump_putstr:向日志中记录字符串。 #endif /* DUMPLOG */*/ #include "hack.h" #include "dlb.h" #ifdef TTY_GRAPHICS diff --git a/src/NetHack_3.7/src/wizard.c b/src/NetHack_3.7/src/wizard.c index c179669..4aa36b0 100644 --- a/src/NetHack_3.7/src/wizard.c +++ b/src/NetHack_3.7/src/wizard.c @@ -2,7 +2,19 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2016. */ /* NetHack may be freely redistributed. See license for details. */ +/*tatic short which_arti(int):这个函数用于确定在指定的槽位上是否存在一件指定类型的神器,并返回该神器的编号。 +static boolean mon_has_arti(struct monst *, short):这个函数用于检查指定怪物是否拥有指定编号的神器。 + +static struct monst *other_mon_has_arti(struct monst *, short):这个函数用于检查除了指定怪物之外的其他怪物是否拥有指定编号的神器,并返回第一个拥有该神器的怪物。 + +static struct obj *on_ground(short):这个函数用于返回地面上指定类型的物品。 + +static boolean you_have(int):这个函数用于检查玩家是否拥有指定编号的物品。 + +static unsigned long target_on(int, struct monst *):这个函数用于返回指定怪物身上指定类型的装备的目标。它会考虑怪物当前的策略和状态,以确定最佳目标。 + +static unsigned long strategy(struct monst *):这个函数用于根据指定怪物的特性和状态来确定它的策略。它会返回一个表示怪物策略的位掩码。*/ /* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */ /* - heavily modified to give the wiz balls. (genat!mike) */ /* - dewimped and given some maledictions. -3. */ diff --git a/src/NetHack_3.7/src/worm.c b/src/NetHack_3.7/src/worm.c index 6ff5bdb..852185f 100644 --- a/src/NetHack_3.7/src/worm.c +++ b/src/NetHack_3.7/src/worm.c @@ -2,7 +2,13 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2009. */ /* NetHack may be freely redistributed. See license for details. */ +/*struct wseg *wheads[MAX_NUM_WORMS]:这是一个指向虫子怪物身体部分的指针数组。它用于存储每个虫子怪物的头部的位置。 +struct wseg *wtails[MAX_NUM_WORMS]:这是一个指向虫子怪物身体部分的指针数组。它用于存储每个虫子怪物的尾部的位置。 + +long wgrowtime[MAX_NUM_WORMS]:这是一个长整型数组,用于存储每个虫子怪物最后一次增长的时间。 + +这些变量一起工作,用于记录和跟踪虫子怪物的身体部分。通过这些变量,游戏可以维护虫子怪物的形状和状态,并在需要时进行生长或缩小*/ #include "hack.h" #define newseg() (struct wseg *) alloc(sizeof (struct wseg)) diff --git a/src/NetHack_3.7/src/worn.c b/src/NetHack_3.7/src/worn.c index 392cdea..986c197 100644 --- a/src/NetHack_3.7/src/worn.c +++ b/src/NetHack_3.7/src/worn.c @@ -2,7 +2,15 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ +/*static void m_lose_armor(struct monst *, struct obj *):这个函数用于使怪物失去指定的护甲物品。它会修改怪物的属性,例如减少防御能力或改变外观。 +static void clear_bypass(struct obj *):这个函数用于清除指定物品的"bypass"标记。在NetHack中,当玩家试图获取一件被怪物保护的物品时,这个标记会阻止怪物自动捡起该物品。 + +static void m_dowear_type(struct monst *, long, boolean, boolean):这个函数用于让怪物穿上指定类型的装备。它会根据传入的参数决定是否同时移除当前穿戴的同类型装备,并调整怪物的属性和战斗能力。 + +static int extra_pref(struct monst *, struct obj *):这个函数用于计算怪物对于指定物品的额外偏好值。它会根据怪物的特性、种族和当前状态来评估对该物品的喜好程度,并返回一个整数值。 + +这些函数在游戏中用于处理怪物的装备、属性和行为。它们帮助控制怪物的装备选择、损耗和交互,以及评估怪物对特定物品的喜好程度。*/ #include "hack.h" static void m_lose_armor(struct monst *, struct obj *); diff --git a/src/NetHack_3.7/src/write.c b/src/NetHack_3.7/src/write.c index 924ce45..a061059 100644 --- a/src/NetHack_3.7/src/write.c +++ b/src/NetHack_3.7/src/write.c @@ -1,6 +1,22 @@ /* NetHack 3.7 write.c $NHDT-Date: 1596498232 2020/08/03 23:43:52 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.26 $ */ /* NetHack may be freely redistributed. See license for details. */ +/*cost(struct obj *otmp):计算写在卷轴或咒语书上的基础成本。根据物品的类型和特定属性来返回不同的成本值。 +label_known(int scrolltype, struct obj *objlist):判断玩家是否知道特定卷轴的标签。如果玩家已经知道了卷轴的类型,或者给卷轴取过名字,则返回真。 + +write_ok(struct obj *obj):用于确定可以写作的对象。检查玩家是否可以将内容写在指定的卷轴或咒语书上,并返回相应的标志。 + +dowrite(struct obj *pen):实际执行写作操作的函数。根据玩家的选择和条件,使用魔法笔在卷轴或咒语书上写入内容。 + +new_book_description(int booktype, char *outbuf):用于生成新书籍描述的函数。根据书籍的类型,返回一个描述书籍外观的字符串。 + +这些函数一起构成了NetHack游戏中与写作相关的功能。 + + + + + +*/ #include "hack.h" static int cost(struct obj *); diff --git a/src/NetHack_3.7/src/zap.c b/src/NetHack_3.7/src/zap.c index dbc1a1d..e360edf 100644 --- a/src/NetHack_3.7/src/zap.c +++ b/src/NetHack_3.7/src/zap.c @@ -2,7 +2,51 @@ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ +/*zaptype(int):根据传入的参数判断魔法的类型,返回对应的值。 +probe_objchain(struct obj *):遍历一个物品链表,并根据每个物品的属性进行处理。 + +zombie_can_dig(coordxy x, coordxy y):判断僵尸是否能够挖掘特定位置。 + +polyuse(struct obj *, int, int):处理多变能力的物品的使用情况。 + +create_polymon(struct obj *, int):根据传入的物品和标志创建一个多变怪物。 + +stone_to_flesh_obj(struct obj *):将石头转化为肉的函数。 + +zap_updown(struct obj *):处理与上下方向相关的魔法效果。 + +zhitu(int, int, const char *, coordxy, coordxy):执行击中目标的操作。 + +revive_egg(struct obj *):将蛋复活成生物的函数。 + +zap_steed(struct obj *):用魔法效果影响骑乘的生物。 + +skiprange(int, int *, int *):跳过指定范围内的数值。 + +maybe_explode_trap(struct trap *, struct obj *, boolean *):检查陷阱是否可能爆炸,并进行相应的处理。 + +zap_map(coordxy, coordxy, struct obj *):根据传入的魔法效果在地图上产生相应的影响。 + +zap_hit(int, int):判断魔法是否命中目标,并返回相应的值。 + +disintegrate_mon(struct monst *, int, const char *):将怪物化为灰尘的函数。 + +adtyp_to_prop(int):将攻击类型转换为属性的函数。 + +backfire(struct obj *):处理魔法发动失败的情况。 + +zap_ok(struct obj *):判断是否可以使用指定的魔法效果,并返回相应的值。 + +boxlock_invent(struct obj *):处理箱子和锁相关的物品。 + +spell_hit_bonus(int):根据传入的参数计算法术的命中加成。 + +destroy_one_item(struct obj *, int, int):销毁一个物品的函数。 + +wishcmdassist(int):辅助处理愿望命令的函数。 + +这些函数一起构成了NetHack游戏中的一部分功能,用于处理游戏中与魔法、物品和效果相关的操作。*/ #include "hack.h" /* Disintegration rays have special treatment; corpses are never left.