吧里有没有做过改版的大佬呢?
nethack吧
全部回复
仅看楼主
level 12
蘑菇王🍄 楼主
最近手痒了想做个改版玩玩,但却不知道该从哪下手。虽然在学校里学过编程,但毕业后并没有做这方面的工作,面对别人写的程序还是一头雾水。想在吧里从大佬们身上取点经。
目前想从一个比较简单的功能开始,把天生失明改成天生幻觉,并堵住所有解除幻觉的方法。
2026年06月02日 06点06分 1
level 13
如果说只做主楼所说的小改动,不一定要完全熟悉代码结构,能熟练使用软件工具、英语语感好点就行。比如说 天生失明,名字叫 blind from birth,开启方式是配置 OPTIONS=blind,就全局搜索这些关键词就好了。
搜 from birth(图一),与源码直接相关的文件就只有三个,其中 attrib.c 这个最可疑,有一个判断是 u.uroleplay.blind. 那就再搜这个(图二),八个文件相关。在 u_init.c 中发现依赖这个判断属性的赋值语句,这大概率就是核心了。这是个位运算,为 HBlinded 添加了一个标志位 FROMOUTSIDE. 更重要的是这个注释,它解释了这句话是在“设置 PermaBlind”。perma=permanently,那 PermaBlind 就是永久失明了,那就去找 PermaBlind(图三)。youprop.h 中发现,这是个判断宏,通过 HBlinded 和 FROMOUTSIDE 两个标志位做与位运算实现,那就大概明白这几个符号之间的关系了:OPTIONS=blind 配置后先会设置 u.uroleplay.blind 属性,后续判断为这个属性就会为 HBlinded 设置 FROMOUTSIDE 这个flag,HBlinded 是玩家的一个内在属性,改成 HHallucination 就能实现 设置天生失明->得到天生幻觉(这些信息都可以转到 HBlinded 的定义位置查看)。(图四)这一处改动最关键,但只改这个很可能是不够的,刚刚拿到的所有相关信息都要全局搜索检查一次,和 blind 相关的很多判断都是和 眼部/视觉 在一起的,一个个检查需不需要一起改。直接定义一个新的配置项 OPTIONS:hallu 没准要更简单,毕竟是全新的就可以自己全权掌握,当然那就是另外的操作路径了。
这种改动还算比较清晰,但 NetHack 是历史包袱很重的项目,里面的逻辑组织和很多写法以现在的眼光来看是有难绷之处的,不是所有需求都那么好改
2026年06月02日 10点06分 0
大佬好思路,我回去试一试[真棒]
2026年06月02日 10点06分
level 6
相当难,我汉化slashem看结构都得研究半天
2026年06月02日 07点06分 2
level 13
试过了,按照三楼图四那样改 u_init.c ,设置 OPTIONS=blind 后还真可以出生自带幻觉,不过光改这一处肯定是比较粗糙的,相关逻辑最好都检查一遍
2026年06月02日 10点06分 4
level 7
把源码抓到本地,装个AI助手,让它把项目结构说清楚;nh的历史代码很多,早期编写风格还是有些抽象的,什么宏生成代码都来了,没有全局观直接读根本读不懂,但现在有AI了不是。
2026年06月02日 12点06分 5
level 10
如果能把初始宠物改成魅魔就好了[花心]
2026年06月02日 13点06分 6
@BFG10k6 键盘给你,代码你来写。顺便画笔也给你,CG 也交给你了,到时候做出来给大伙瞧瞧[滑稽]
2026年06月03日 02点06分
哦,顺带一提,原版改设置就能魅魔开局的,但是头疼机制还在[滑稽]
2026年06月03日 02点06分
然后再把头疼机制去掉这样就能无限大草了[花心]
2026年06月02日 13点06分
唉,头疼机制
2026年06月03日 04点06分
1