Skip to content
yuer edited this page Sep 5, 2022 · 46 revisions

汉化过程中需注意的

遇得多的

an()

位置:objnam.c

调用了just_an(),处理后,一般会给字符串前面加上"a "或者"an "

所以在处理中文字符串时,要去掉an(),an(str)改为str


aobjnam(otmp, verb)

位置:objnam.c

调用了cxname(otmp),有数量的在前面加上数量,最后加上动词verb

我作了修改,Strcat(bp, " ");改为Strcat(bp, "");

汉化时无需额外处理


cxname(obj)

位置:objnam.c

返回"某某怪尸体"或者"某物品"


simpleonames(obj)

位置:objnam.c

获取简化的obj的名字,然后调用makeplural()


ansimpleoname(obj)

位置:objnam.c

调用了simpleonames(obj),判断物品obj的数量是否是单数,是就会调用an(simpleoname),我作了修改

simpleoname = an(simpleoname);改为simpleoname = simpleoname;

汉化时无需额外处理


yobjnam(obj, verb)

位置:objnam.c

调用了aobjnam(obj, verb),如果是你携带的物品或任务神器,会在字符串前面加"你的"


Yobjnam2(obj, verb)

位置:objnam.c

调用了yobjnam(obj, verb),然后首字母大写


Tobjnam(otmp, verb)

位置objnam.c

会调用The(),最后加上动词verb,我作了修改

Strcat(bp, " ");改为Strcat(bp, "");

汉化时无需额外处理


ing_suffix(str)

位置hacklib.c

会给字符串str加上"ing",我作了修改

Strcat(buf, "ing");改为Strcat(buf, "");

汉化时无需额外处理


makeplural(str)

位置objnam.c

把字符串变成复数形式

我做了修改Strcpy(spot + 1, "'s");改为Strcpy(spot + 1, "");

Strcasecpy(spot + 1, "s");改为Strcasecpy(spot + 1, "");

汉化时无需额外处理


otense(otmp, verb)

位置objnam.c

先判断物品otmp的数量是否是复数,不是复数,就调用vtense(),否则直接返回动词

汉化时无需处理


vtense(subj, verb)

位置objnam.c

判断物品subj本身为单数还是复数,最后决定动词verb是否要加"s"或者"es",结果返回动词

中文下,verb都会处理为加"s",我作了修改

Strcasecpy(bspot + 1, "s");改为Strcasecpy(bspot + 1, "");

汉化时无需额外处理,注意verb不能为空


plur(x)

位置hack.h

是个宏定义的标识符,判断x的数量,不是单数的话,就返回"s"

汉化时需删除整个plur(x)


strncmp(str1, str2, n)

通用函数,把 str1 和 str2 进行比较,最多比较前 n 个字节

在处理中文时,中文在不同编码下的字节不一样,不能使用这个函数

我在config.h中定义了3种标识符

#define cnstrcmpi(bp, str, l) strncmpi(bp, str, l = strlen(str))

#define cnstrcmp(bp, str) strncmp(bp, str, strlen(str))

#define cnbstrcmp(bp, p, str) BSTRCMPI(bp, p - strlen(str), str)

所以把strncmp(str1, str2, n)替换为cnstrcmp(str1, str2)


strncmpi(str1, str2, l = n)

把strncmpi(str1, str2, l = n)替换为cnstrcmpi(str1, str2, l)


BSTRCMPI(str1, p - n, str2)

把BSTRCMPI(str1, p - n, str2)替换为cnbstrcmp(str1, p, str2)


s_suffix(str)

位置hacklib.c

一般给字符串str后面加上"'s",我作了修改

Strcat(buf, "'");改为Strcat(buf, "的");

Strcat(buf, "'s");改为Strcat(buf, "的");

汉化时无需额外处理


str_end_is(str, chkstr)

位置hacklib.c

判断字符串str是否以chkstr结尾


strprepend(s, pref)

位置objnam.c

返回pref+s的字符串


strsubst(str1, str2, str3)

位置hacklib.c

例,str1="123456789456",str2="456",str3="a"

结果str1="123a789456"


the()

位置objnam.c

判断是否在字符串前面加"the ",我作了修改

Strcpy(buf, "the ");改为Strcpy(buf, "");

汉化时无需额外处理


The()

位置objnam.c

调用了the(),并将t大写为T

汉化时无需额外处理


统一的翻译

shine, shining

多数为神器使用,是在明亮的发光,不是闪耀

一般翻译为照耀


大量修改的地方

formatkiller()

位置topten.c

在decl.h中定义了#define DIE_OF 3,用于在死亡信息前加"死于"