English README:README_en.md
无需本地编译,可直接在本项目 Release 页面下载自动构建的汉化预览版
- tty 界面 UTF-8 支持
- curses 界面 UTF-8 支持
- win32 界面 UTF-8 支持
- 合并来自 SunnyYuer/NetHack-cn 的翻译
- 使用 deepseek-v4-flash 完成初步 AI 翻译
- 怪物翻译
- 物品翻译
- 许愿机制
- 灭绝机制
- allmain.c
- alloc.c
- apply.c
- artifact.c
- attrib.c
- ball.c
- bones.c
- botl.c
- calendar.c
- cfgfiles.c
- cmd.c
- coloratt.c
- date.c
- dbridge.c
- decl.c
- detect.c
- dig.c
- display.c
- dlb.c
- do.c
- dog.c
- dogmove.c
- dokick.c
- dothrow.c
- do_name.c
- do_wear.c
- drawing.c
- dungeon.c
- earlyarg.c
- eat.c
- end.c
- engrave.c
- exper.c
- explode.c
- extralev.c
- files.c
- fountain.c
- getpos.c
- glyphs.c
- hack.c
- hacklib.c
- iactions.c
- insight.c
- invent.c
- isaac64.c
- light.c
- lock.c
- mail.c
- makemon.c
- mcastu.c
- mdlib.c
- mhitm.c
- mhitu.c
- minion.c
- mklev.c
- mkmap.c
- mkmaze.c
- mkobj.c
- mkroom.c
- mon.c
- mondata.c
- monmove.c
- monst.c
- mplayer.c
- mthrowu.c
- muse.c
- music.c
- nhlobj.c
- nhlsel.c
- nhlua.c
- nhmd4.c
- objects.c
- objnam.c
- options.c
- o_init.c
- pager.c
- pickup.c
- pline.c
- polyself.c
- potion.c
- pray.c
- priest.c
- quest.c
- questpgr.c
- read.c
- rect.c
- region.c
- report.c
- restore.c
- rip.c
- rnd.c
- role.c
- rumors.c
- save.c
- selvar.c
- sfbase.c
- sfstruct.c
- shk.c
- shknam.c
- sit.c
- sounds.c
- spell.c
- sp_lev.c
- stairs.c
- steal.c
- steed.c
- strutil.c
- symbols.c
- sys.c
- teleport.c
- tile.c
- timeout.c
- topten.c
- track.c
- trap.c
- uhitm.c
- utf8map.c
- u_init.c
- vault.c
- version.c
- vision.c
- weapon.c
- were.c
- wield.c
- windows.c
- wizard.c
- wizcmds.c
- worm.c
- worn.c
- write.c
- zap.c
发现最后输出使用函数 getchar 逐个字符输出,而 getchar 支持宽字节。
于是调整输出逻辑:在当前指针指向的是 utf-8 内容时将整个字符串转为 wchar_t * 然后输出。
同时要调整 console.cursor 屏幕指针移动逻辑,当是宽字节时一次移动两个字符。
新增一种 cell 类型 wide_char_follower_cell, 用于标记宽字符的下一个cell为占用状态,使得清屏等操作能正确渲染。
编译 Nethack 时定义宏 CURSES_UNICODE, PDC_WIDE, PDC_FORCE_UTF8, PDC_RGB
对 pdcursesmod/pdcurses/refresh.c 进行了补丁,修复了一处 assert 引起的崩溃 bug。
使用宏劫持 windows API 函数 drawTextA, drawText, ListView_InsertColumn。将它们替换成自定义的支持 utf8 的版本。
位置: hack.h
功能: 根据数量参数 x 获取复数后缀的宏。
处理方案: 统一返回空字符串,不区分单复数形式。
位置: objnam.c
功能: 将 oldstr 转成复数形式返回
处理方案: 将加后缀 s 的位置全部改成加空字符串
位置: objnam.c
功能: 调用了 just_an(),处理后,一般会给字符串前面加上 "a " 或者 "an "
处理方案: just_an() 返回 "一个"
位置: hacklib.c
功能: 给字符串加 "s" 后缀
处理方案: 直接返回 s
位置: objnam.c
功能: 返回在现在时第三人称下动词 verb 的正确形式
处理方案: 将加后缀 s 的位置改成加空字符串