aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/BRP/src/__init__.py1
-rw-r--r--examples/BRP/src/character.py663
2 files changed, 664 insertions, 0 deletions
diff --git a/examples/BRP/src/__init__.py b/examples/BRP/src/__init__.py
new file mode 100644
index 0000000..8f356b7
--- /dev/null
+++ b/examples/BRP/src/__init__.py
@@ -0,0 +1 @@
+__rule_book__ = "BASIC ROLEPLAYING"
diff --git a/examples/BRP/src/character.py b/examples/BRP/src/character.py
new file mode 100644
index 0000000..1dd9442
--- /dev/null
+++ b/examples/BRP/src/character.py
@@ -0,0 +1,663 @@
+import inspect
+from hydro_roll_core.development import Character
+from typing import Literal, List, Tuple, Union, Dict, Generic, Optional
+
+
+class Identity:
+ """
+ 身份
+ ----
+
+ 在这个部分里,角色的基本信息会得到细化充
+ 实,而这些要素几乎没有游戏效果。这些就是角色
+ 扮演要素——它们让角色成为“人”,而不只是属
+ 性和技能的简单罗列。玩家可以现在就填完这些信
+ 息,也可以填一部分,然后跳到生成属性和技能的
+ 部分;或者先放在一边,留待进一步了解角色的游
+ 戏系统要素之后再来填写。
+ """
+
+ def t_name(self) -> str:
+ """姓名: 给角色起个合适的名字"""
+
+ def t_race(self) -> Optional[Literal["人类"]]:
+ """种族: 基础规则只包含“人类”,但当然也可以是其他种族"""
+
+ def t_gender(self) -> Literal["女性", "男性"]:
+ """性别: “女性”或者“男性”,或者特定设定中适用的任意性别——在游戏系统中,性别之间没有任何差异"""
+
+ def t_dominant_hand(self) -> Optional[Literal["左撇子", "右撇子"]]:
+ """惯用手: 角色是右撇子还是左撇子?任选一个——在游戏系统中没有差异"""
+
+ def t_height_and_weight(self) -> Union[int, str]:
+ """身高和体重: 请根据你的体型(SIZ)来决定。不需要是具体的数字,可以只大概写上“高个”、“普通身材”或者“块头大”"""
+ _siz = int(Attributes.SIZ)
+ _pre_load_dict = {
+ (0, 20): "常年患病在身",
+ (21, 40): "体弱多病",
+ (41, 60): "不会生什么大毛病",
+ (61, 80): "健硕,浑身湿透也不会感冒",
+ (81, 100): "身体素质极好,精神抖擞",
+ }
+ for k, v in _pre_load_dict.items():
+ if k[0] <= _siz <= k[1]:
+ return v
+
+ def t_description(self) -> str:
+ """描述: 角色的简单外观描述,可能包含颜色特征(发色、瞳色、肤色)、姿态、穿着打扮等等"""
+
+ def t_age(self) -> Union[int, str]:
+ """年龄: 挑一个适合角色的年龄,记得参照角色属性"""
+
+ def t_feature(self) -> str:
+ """特征: 参照外貌(APP)属性,角色是否有明显的特征?这可以是显眼的伤疤、塌掉的鼻子、奇特的发型、或者不同寻常的穿着。请写下一些特征。外貌越高或者越低,特征就会越多"""
+
+ def t_job(self) -> str:
+ """职业:指角色的事业,他们最受认同的职业,或者他们谋生的方式。章节 2.7 中给出了一份职业列表"""
+
+
+class Attributes:
+ """
+ 属性
+ ----
+
+ 基本角色扮演中的角色可以用多种方式来评估。
+ 最基础的是属性,也就是角色的天生能力,诸如如
+ 聪明、强壮、魅力等等。这些都不是后天学得的能
+ 力,但有时可以通过训练和成功的使用来增强。正
+ 常人类的属性低至 3(极其糟糕),高至 18(人类
+ 巅峰),平均值在 10 或 11。属性越高,这名角色
+ 在该项能力上就越强大。
+
+ 这些属性是:力量、体质、体型、智力、意志、
+ 敏捷以及外貌,以下是详细描述:11111111111
+ """
+
+ def t_STR(self) -> Union[int, str]:
+ """力量(STR): 力量就是指角色的气力大小。这不一定是指单纯的肌肉强度,而是指角色能多有效地运用肌肉力量来完成困难的体力任务。投掷 3D6 来决定力量。"""
+
+ def t_CON(self) -> Union[int, str]:
+ """体质(CON): 体质是对角色的健壮程度和韧性的度量。它能帮助玩家抵抗疾病,但它最显著的作用是确定角色在死亡前能承受多少伤害。投掷 3D6 来决定体质。"""
+
+ def t_SIZ(self) -> Union[int, str]:
+ """体型(SIZ): 体型是指角色的块头有多大。它不一定是单纯指身高——而是指身体重量的大概范围。体型较高的角色可能会非常高(并且瘦),也可能是身高普通但重量超标。投掷 2D6+6 来决定体型。"""
+
+ def t_INT(self) -> Union[int, str]:
+ """智力(INT): 智力是指角色有多聪明:不一定是指记住了多少信息,而是指逻辑思考能力、思维有多敏锐,解决问题的能力有多强,以及直觉有多强。投掷 2D6+6 来决定智力。"""
+
+ def t_POW(self) -> Union[int, str]:
+ """意志(POW): 意志是一个无形的属性,它是指角色的意志力、精力以及灵魂能量。意志较高的角色时刻都充满能量,他非常幸运,并且存在感很强,而意志较低的角色时常会被忽略或忘记,常常会倒霉。投掷3D6来决定POW。"""
+
+ def t_DEX(self) -> Union[int, str]:
+ """敏捷(DEX): 敏捷是指角色肉搏战时的平衡性、身体速度以及总体上的灵巧程度。敏捷决定角色在战斗中的行动速度,同时也和闪避技能基础值有关。投掷 3D6 来决定敏捷。"""
+
+ def t_APP(self) -> Union[int, str]:
+ """外貌(APP): 外貌属性囊括了几个方面,包括魅力,优雅、美貌/英俊,乃至角色对他人的吸引力。外貌较高的角色在人群中会特别显眼,因为魅力与气质在他身上无形地交融在一起。投掷 3D6 来决定外貌。(在某些版本的规则里,魅力(CHA)取代了外貌)"""
+
+ def d_1(self):
+ """如果所得的属性与想要的有出入,玩家可将 3
+ 点属性从一项转移到另一项去。例如,如果比起聪
+ 明的角色更偏强壮的角色,就可以将 3 点从智力移
+ 到力量上去。玩家无需一次移满 3 点,也不是必须
+ 要移动点数。
+
+ 玩家应当查看这组属性,并思考这些数字代表
+ 了什么。角色是不是强壮而笨拙?矮小且行动迅速?
+ 或者各方面都很普通?比起诉诸暴力,他是不是更
+ 善于思考?
+
+ 如果数值与玩家想要的角色类型并不匹配,那
+ 么玩家应该询问主持人是否可以从头来过,重新骰
+ 一组新的属性。只要所有玩家机会相同,并且对自
+ 己所得结果感觉满意,一切就都没有问题。
+ """
+
+
+class AttributesCheck:
+ """
+ 属性检定
+ --------
+
+ 角色的许多能力都可以用技能来衡量。但是,
+ 有时也需要一种基于属性的简单检定来决定角色是
+ 否能在行动中取得成功。如果存在对抗数值,请使
+ 用对抗表(详见下文)。如果没有明显的数值要对
+ 抗,那就使用属性检定。
+
+ 每次属性检定都是与属性*5 进行对比,以百分
+ 比成功率的形式体现。例如,力量为 10 的情况下,
+ 气力检定要与10*5进行对比,也可以用成功率50%
+ 来表示。
+ """
+
+ def t_strength_check(self):
+ """气力检定: 要运用力量来对某种环境物体施加
+ 影响,就会用到气力检定,该检定是基于力量
+ *5。要做完一百个俯卧撑就要进行一次气力检
+ 定。"""
+
+ def t_endurance_check(self):
+ """耐力检定:长时间的体力运动和对身体耐受力
+ 的考验都会用到体质检定,该检定是基于体质
+ *5。若要避免染上普通感冒或是要喝下一整瓶
+ 色拉酱,都需要进行一次耐力检定。"""
+
+ def t_inspiration_check(self):
+ """灵感检定:角色偶然间的灵光一闪,以及他是
+ 否“知晓”某种玩家知道的信息,能否能弄清
+ 玩家不曾知晓的事,这些都会用到灵感检定。
+ 游戏主持人有时也可以用这项检定来推动不知
+ 道接下来该做什么(与此同时他们的角色应该
+ 知道)的玩家。从用图钉标示出一系列犯罪现
+ 场的城市地图中找出规律,会需要一次灵感检
+ 定。"""
+
+ def t_luck_check(self):
+ """幸运检定:幸运检定用于决定命运是否愿意给
+ 角色一个喘息的机会,或者是让他在随机的运
+ 气是决定性因素的场合里(例如,轮盘赌)侥
+ 幸成功。该检定是基于意志*5。要决定掷硬币
+ 时谁获胜,或者谁是那个倒霉蛋,就会用到幸
+ 运检定。
+ """
+
+ def t_dexterity_check(self):
+ """灵巧检定:灵巧检定适用于天然的手眼协调能
+ 力比训练更加重要的场合,像是在容易滑倒的
+ 表面上奔跑,或是在东西落地前抓住它。该检
+ 定是基于敏捷*5。如果角色要接住伴随着一声
+ “接好了!”向他丢过来的东西,就会需要一次
+ 灵巧检定。"""
+
+ def t_charm_check(self):
+ """魅力检定:这是指纯粹的魅力,也就是依靠出
+ 众的外表和个人魅力来吸引注意力、取信于人
+ 的能力。该检定是基于外貌*5。要吸引保安的
+ 注意,让他放自己进入一家高档俱乐部,就会
+ 需要一次魅力检定。"""
+
+
+class DerivedAttributes(Character.Attribute):
+ """这些属性是由其他属性衍生而来,并且可能会因其他因素(例如种族)而增减。"""
+
+ def t_MOV(self) -> Union[int, str]:
+ """移动力(MOV):移动力(MOV)是一项游
+ 戏数值,它决定了角色在一个战斗轮中可以移
+ 动多远。所有人类的移动力都是 10。移动力是
+ 一个灵活的数值,但通常来说,一点移动力意
+ 味着能移动一米。如果是奔跑,那么每一点移
+ 动力可以移动三米。"""
+
+ def t_HP(self) -> Union[int, str]:
+ """生命值:生命值(HP)等于角色的体质与体
+ 型之和的一半(向上取整)。角色受到肉体伤
+ 害或其他形式的伤害时,生命值就会扣除相应
+ 点数。当角色的生命值降至 1 或 2 点时,他会
+ 陷入昏迷。如果生命值在战斗轮结束时为零,
+ 角色就会死去"""
+
+ def t_PP(self) -> Union[int, str]:
+ """能量值(PP):能量值等于意志(POW),
+ 用于施展魔法或使用其他能力。当角色的能量
+ 值降到 0 点时,他会陷入昏迷。在完整的一天
+ (需包含一晚的睡眠)后,能量值会完全回复。"""
+
+ def t_damage_bonus(self) -> Union[int, str]:
+ """伤害加值:体型更大,更强壮的角色在使用近
+ 战武器时会给他的敌人造成更多伤害。角色使
+ 用任何近战武器进行攻击时,都要加上这项伤
+ 害调整。把力量和体型相加,然后对照下表:
+
+ *伤害加值*
+
+ +------------+--------------+
+ | 力量+体型 | 伤害调整 |
+ +------------+--------------+
+ | 2 to 12 | –1D6 |
+ +------------+--------------+
+ | 13 to 16 | –1D4 |
+ +------------+--------------+
+ | 17 to 24 | 无 |
+ +------------+--------------+
+ | 25 to 32 | +1D4 |
+ +------------+--------------+
+ | 33 to 40 | +1D6 |
+ +------------+--------------+
+ | 41 to 56 | +2D6 |
+ +------------+--------------+
+ """
+ _damage_adjustment = {
+ (2, 12): "-1D6",
+ (13, 16): "-1D4",
+ (17, 24): "",
+ (25, 32): "+1D4",
+ (33, 40): "+1D6",
+ (41, 56): "+2D6",
+ }
+ _str = int(Attributes.t_STR)
+ _siz = int(Attributes.t_SIZ)
+ _str_plus_siz = _str + _siz
+ for k, v in _damage_adjustment.items():
+ if k[0] <= _str_plus_siz <= k[1]:
+ return v
+
+
+class Skills:
+ """
+ 技能
+ ----
+
+ 以下是一份角色可能使用的技能的列表。技能
+ 的高低以技能概率(也就是角色尝试使用这项技能
+ 时的百分成功率)的形式来表示,其数值介于 0%
+ (无论如何都不可能成功)和 100%或更高之间
+ (意味着只要不掷出 00 就都会成功)。技能的基
+ 础成功率已在技能名字后的括号中给出,所以只要
+ 这个数字高于 00%,你就至少有百分之一的机会成
+ 功使用该技能。在使用数值为 01%的技能时,成功
+ 通常意味着撞大运。如果技能值是 00%,那么无论
+ 如何尝试都不可能成功。
+
+ 角色投入到某项技能中的技能点数会与基础值
+ 相加。游戏主持人可以根据游戏背景来调整技能基
+ 础值。
+
+ 如果角色的某项技能低于 05%,那他在这方面
+ 是个倒霉的门外汉。如果技能在 06-25%之间,那
+ 他是个新手。技能在 51-75%之间意味着他是个能
+ 力优秀的专业人士。专家在对应方面会有 76-90%
+ 的技能,而 91%甚至更高意味着角色在这项技能上
+ 是一位大师。技能高于 100%就意味着角色在一定
+ 程度上,拥有其他人无法掌握的神秘知识或能力。
+
+ 技能数值也可以表示基本的能力。25%的技能
+ 值并不是说角色日常使用这项技能时会有四分之三
+ 的几率失败——而是说在紧张的情况下(例如冒险、
+ 战斗、等等),角色只有四分之一的机会成功。大
+ 部分像是开车去工作这样的日常活动都不需要技能
+ 检定,只要这些事处在合理的能力范围内,但像是
+ 在繁忙的十字路口高速转向,同时用手枪向窗外射
+ 击就肯定需要一次检定。
+
+ 许多技能都有专精项,标注在技能名称后的括
+ 号中。专精项是能细分技能的具体子技能。例如,
+ 角色拥有70%的知识(法律),并不意味着他在所有
+ 知识领域都有 70%的了解,而是单指法律这一项。
+ 除非在技能的其余专精项中另行投入技能点,否则
+ 就仍会是基础值。
+ """
+
+ def t_1(self):
+ """估价(15%): 评估物品的价值,或是判断它是否具有某种不能一眼看出的能力。"""
+
+ def t_2(self):
+ """艺术(各类)(05%):颜料画、绘画、雕塑、
+ 照相或者其他艺术种类。每一种艺术都是一个
+ 专精项,因此艺术(摄影)是一项技能,而艺
+ 术(颜料画)是另一项。推荐的艺术专精项包
+ 括建筑、书法、电影、绘画、摄影、雕塑等等。"""
+
+ def t_3(self):
+ """炮术(各类)(%随武器而定):使用重型武
+ 器的能力,包括投石器、火炮、导弹发射器等。"""
+
+ def t_4(self):
+ """议价(05%):可以顺利进行讨价还价。在游
+ 戏主持人的裁量下,成功使用这项技能可以让
+ 一件物品的价格从某个范围(难以企及>极其
+ 珍贵>昂贵>价格合理>不贵>便宜>免费)降至
+ 更低的范围。上述范围仅仅是建议,可以根据
+ 需要来修改。"""
+
+ def t_5(self):
+ """搏斗(25%):能在近身搏斗中击中对方,不
+ 论是用拳、头槌、脚踢或是用嘴咬。成功的搏
+ 斗攻击会给对手造成 1D3 点伤害。"""
+
+ def t_6(self):
+ """攀爬(40%):可以沿着墙壁、绳索或其他难
+ 以攀缘的表面进行攀爬。"""
+
+ def t_7(self):
+ """指挥(05%):指挥小队至大队的随从参与战
+ 斗或者其他需要组织纪律的事,并协调他们的
+ 行动。如果这项技能失败了,那么所有人都是
+ 各自为战,无法有效地进行合作。"""
+
+ def t_8(self):
+ """手艺(各类)(05%):可以制造实物物品,
+ 像是木工、铁匠、缝纫、烹饪。与艺术相比,
+ 手艺通常会更加实用,但会更难获得荣誉和认
+ 可。每一种手艺都是一个专精项。"""
+
+ def t_9(self):
+ """爆破(01%):能设置并引爆爆破物,让其发
+ 挥最大效果。所有人都能拉开手榴弹拉环——
+ 而爆破则适用于临时用家用化学品制作炸弹,
+ 或者将爆炸物安装在合适的位置来炸塌一栋建
+ 筑的场合。"""
+
+ def t_10(self):
+ """伪装(01%):用于隐藏身份或相貌,或者运
+ 用化妆和变装的手段来假扮成另一个人或物。"""
+
+ def t_11(self):
+ """闪避(敏捷*2%):可以免受物理攻击的伤害。
+  驾驶车辆(各类)(20%或 1%):可以驾驶
+ 陆上载具。对于现代世界的角色,驾驶基础值
+ 是 20%;而其他时代的基础值是 01%。每一种
+ 载具(如汽车、马车、战车、卡车等)都是一
+ 个专精项。"""
+
+ def t_12(self):
+ """能量武器(各类)(%视武器专精项):能使
+ 用能量武器瞄准目标并射击。每一种能量武器
+ 都是一个专精项,例如能量手枪及能量步枪。
+  礼仪(05%):知晓社交场合中的言行要求,
+ 也懂得某个社会阶层的各类社交礼仪。"""
+
+ def t_13(self):
+ """话术(05%):通过交谈摆脱困境,或是在来
+ 不及据理力争的时候能用话语唬住对方。
+  精细操作(05%):指手指灵活性,对匆忙之
+ 中拆解物品或是对手的协调性要求较高的工作
+ 尤为重要。这可以用于撬锁。"""
+
+ def t_14(self):
+ """枪械(各类)(%视武器专精项):使用枪械
+ 瞄准目标并射击。每一种枪械都是一个专精项,
+ 例如机枪、手枪、左轮、步枪、霰弹枪和冲锋
+ 枪。"""
+
+ def t_15(self):
+ """急救(30%或智力×1):治疗轻伤。对于来
+ 自现代或未来的角色,本技能的基础值是 30%;
+ 而在历史时期,基础值是智力×1。每次成功
+ 使用急救可以让一名受伤的角色恢复 1D3 点生
+ 命值,而特殊成功能恢复 1D3+3 点生命值。"""
+
+ def t_16(self):
+ """飞行(敏捷×½或敏捷×4):如果角色是使
+ 用技术手段(例如喷气背包)来飞行,那么技
+ 能基础值是敏捷×½。如果角色天生就有飞行
+ 能力(例如生有翅膀),基础值是敏捷×4。
+ 一般飞行并不需要检定——在飞行中做出机动
+ 动作、进行战斗或是表演复杂的飞行特技,才
+ 会用到这个技能。"""
+
+ def t_17(self):
+ """博弈(智力+意志):知晓各种概率游戏(例:
+ 卡牌,骰子)的规则及概率算法,以及如何赢
+ 得这类游戏。"""
+
+ def t_18(self):
+ """擒抱(25%):指摔跤和其他依靠平衡及姿势
+ 来压制或束缚对手的徒手搏斗术。"""
+
+ def t_19(self):
+ """重型机械(各类)(01%):操作和维护重型
+ 机械,如工厂印刷机、打谷机等等。每种不同
+ 的重型机械技能都是一个专精项。"""
+
+ def t_20(self):
+ """重型武器(各类)(%视武器专精项):使用
+ 重型武器瞄准目标并射击。每种不同的重型武
+ 器技能都是一个专精项,例如巴祖卡火箭弹,
+ 重型机枪、转管机枪和火箭发射器等等)"""
+
+ def t_21(self):
+ """躲藏(10%):能避免自己或者物品被人看见。
+ 经常会和潜行结合使用。"""
+
+ def t_22(self):
+ """洞察(05%):根据其他角色下意识的行为,
+ 揣测他/她没有表露的想法和/或动机。在某些
+ 背景下,洞察可能会有洞察(精灵)或者洞察
+ (外星人)的专精项。"""
+
+ def t_23(self):
+ """跳跃(25%):跃过障碍物或跳出一段距离。
+ 对多数人类而言,成功的跳跃能让他跳出三米
+ 远或是一米高。"""
+
+ def t_24(self):
+ """知识(各类)(05%或01%):熟知某一特定
+ 学术分支的知识。对现代或未来的角色,基础
+ 值是 05%;对历史时期中的角色,基础值是
+ 01%。每一种知识技能都是一个专精项。知识
+ 的专精项数量众多,其中就包括人类学、考古
+ 学、区域知识(某一地区)、民俗学、团体知
+ 识(某个组织)、历史、语言学、文学、神话
+ 知识、神秘学、政治、街头知识等等。"""
+
+ def t_25(self):
+ """语 言 ( 各 类 ) ( 母 语 : 智 力 × 5, 其 他 :
+ 00%):能说和听懂一种语言。语言(母语)
+ 是角色自身的母语,其基础值是智力×5。通
+ 常来说,玩家角色用母语和其他同样使用这种
+ 语言的人交流并不涉及语言检定。语言(其他)
+ 是另外的语言,其基础值是 00%。每一种其他
+ 语言都是一个专精项。"""
+
+ def t_26(self):
+ """聆听(25%):能听见响动或是微弱的声音,
+ 例如有人正悄悄通过你身边,或是有怪物正在
+ 靠近。"""
+
+ def t_27(self):
+ """读写能力(各类)(%等于语言基础值):主
+ 要适用于教育并不普及的背景。角色能读懂并
+ 理解他所阅读的东西。在那些并不一定存在文
+ 字记载的背景下,这项技能的基础值可能是
+ 00%。"""
+
+ def t_28(self):
+ """武术(01%):运用源自严格训练的搏斗技巧,
+ 给对手造成更猛烈的打击,或是用手脚格挡攻
+ 击避免受到伤害。游戏主持人可以限定谁能使
+ 用武术,也可以调整初始技能值。与其他技能
+ 不同的是,武术并不是单独检定:如果角色能
+ 成功进行一次搏斗攻击,并且投掷出的数值也
+ 低于或等于武术的技能值,那么伤害骰(但并
+ 不包括伤害加值)就可翻倍。在运用搏斗技能
+ 招架近战武器的场合,武术可以帮助角色抵消
+ 3 点伤害。"""
+
+ def t_29(self):
+ """医学(05%或 00%):能通过药物,疗法和手
+ 术等手段治疗严重的伤病。对于现代或未来的
+ 角色,技能基础值是 05%;对于历史时期中的
+ 角色,基础值是 00%。医学治疗是一个费时较
+ 多的过程,并不能立即回复生命值。"""
+
+ def t_30(self):
+ """近战武器(各类)(%视武器专精项):使用
+ 近战(白刃战)武器进行战斗,包括攻击和格
+ 挡。每一种近战武器技能是一个专精项,例如
+ 斧子、棍棒、匕首、连枷、锤子、狼牙棒、戟、
+ 矛、杖、剑等。"""
+
+ def t_31(self):
+ """远程武器(各类)(%视武器专精项):使用
+ 某种“人力”发射的武器瞄准并击中目标。每
+ 一种远程武器是一个专精项,例如弓、十字弩、
+ 长矛等等。"""
+
+ def t_32(self):
+ """导航(10%):能借助易于辨识的地标、星座
+ 来寻找并绘制路线,或是能通过地图找到方向。
+  表演(各类)(05%):某种形式的娱乐节目
+ 或表演,可以是音乐、演戏、体操、喜剧等等。
+ 每一种表演都是一个专精项。"""
+
+ def t_33(self):
+ """说服(15%):用逻辑、道理和情绪感染力说
+ 服某人,让他同意特定的行动方案或思路。和
+ 话术不同的是,说服需要时间和支持论据,也
+ 需要对方愿意倾听。"""
+
+ def t_34(self):
+ """驾驶载具(各类)(01%):驾驶空中、海上
+ 或太空载具。每一种载具都是一个专精项,并
+ 且有些载具需要多名驾驶员才能操控。"""
+
+ def t_35(self):
+ """能量放射(敏捷×2):如果游戏中可以使用
+ 超凡力量(魔法,超能力,灵能等等),那么
+ 这个技能就是引导超凡力量来攻击目标的能力。"""
+
+ def t_36(self):
+ """精神治疗(01%):用精神病学和精神分析来
+ 确定病人的精神问题并予以治疗。急救能治疗
+ 身体,但精神治疗可以治愈心灵。这种治疗过
+ 程时间长,要分多次进行,并且需要深入的个
+ 人精神状态评估和心理咨询。若是用于历史时
+ 期,则这个技能是指灵性咨询。"""
+
+ def t_37(self):
+ """维修(各类)(15%):修理因损坏、卡壳、
+ 被拆开或是其他原因无法正常工作的东西。每
+ 一种类型的维修都是一个专精项,例如电气维
+ 修、电子维修、机械维修、结构维修、量子维
+ 修等等。"""
+
+ def t_38(self):
+ """查阅资料(25%):查阅某种信息来源(图书
+ 馆、报刊档案、计算机网络、互联网、巫师的
+ 魔法书等),从中找到需要的信息。"""
+
+ def t_39(self):
+ """骑术(各类)(01%):能骑乘动物,并能在
+ 遇到糟糕情况时保持对它的控制。骑乘每一种
+ 动物(马、龙、巨型猫头鹰等)都是一个专精
+ 项。"""
+
+ def t_40(self):
+ """科学(各类)(01%):精通自然科学方面的
+ 某个学术领域。每一种科学技能都是一个专精
+ 项,例如天文学、生物学、植物学、化学、基
+ 因学、地理学、数学、气象学、物理学、动物
+ 学等等。"""
+
+ def t_41(self):
+ """感知(10%):综合了嗅觉、味觉和触觉——
+ 能通过这些感官察觉细微的或是隐藏起来的事
+ 物。"""
+
+ def t_42(self):
+ """盾牌(各类)(%视盾牌类型):用盾牌招架
+ 攻击。每一种盾牌技能都是一个专精项,例如
+ 小圆盾、能量盾、全身盾、半身盾、斗盾、步
+ 兵圆盾、鸢盾、圆盾等等。"""
+
+ def t_43(self):
+ """妙手(05%):魔术手法和误导技巧,例如扒
+ 窃、藏硬币、耍纸牌和其他依赖手法的小把戏。"""
+
+ def t_44(self):
+ """侦查(25%):能发现容易被忽略或者被隐藏
+ 起来的物品。"""
+
+ def t_45(self):
+ """地位(各类)(15%):指社会地位,或者说
+ 让自己所处的社会环境更有利于自己的能力,
+ 例如借钱、赢得亲睐、给其他人留下好印象等
+ 等。每一种地位技能都是一个专精项。专精项
+ 可能包括:城市(特定城市)、群体(某个群
+ 体或组织)、上流社会、宗教、种族(特定种
+ 族)等等。"""
+
+ def t_46(self):
+ """潜行(10%):悄然行动从而避免被发现,或
+ 是采取其他隐秘的行动;"""
+
+ def t_47(self):
+ """战术(01%):对情势进行战术评估,洞悉战
+ 场情况和敌人所用的战术,并得出一个最优解。
+ 通常会用于军事及政治场合。"""
+
+ def t_48(self):
+ """游泳(25%):能在水中自如移动,不会溺水。"""
+
+ def t_49(self):
+ """教导(10%):向其他人传授知识。更多信息
+ 参见 17 页的成长章节。"""
+
+ def t_50(self):
+ """技术(各类)(00%):能使用某种复杂的设
+ 备或技术工艺。该技能的基础值会随背景而变,
+ 故而应由游戏主持人酌情决定。每一种技术都
+ 是一个专精项,例如计算机编程、计算机使用、
+ 电子学、机器人技术、传感器系统、攻城器械、
+ 陷阱等等。"""
+
+ def t_51(self):
+ """投掷(25%):瞄准并投掷物品(飞镖、橄榄
+ 球、棒球、石块、帽子等等),让它从空中划
+ 过并击中目标。和远程武器技能不同的是,所
+ 有并非专门作为武器的物品都笼统地归类在这
+ 个技能下,并且检定成功也并不一定表示对目
+ 标造成了伤害。"""
+
+ def t_52(self):
+ """追踪(10%):跟踪人的脚印和野兽的足迹等
+ 等,寻找其来处或去处。"""
+
+ def d_1(self):
+ """
+ 如有需要,游戏主持人可以按照给定的背景修
+ 改技能列表,使其与设定相符。游戏主持人可以自
+ 由地删除技能,给技能重新命名,也可以加入新的
+ 技能。例如,在中世纪奇幻背景中可能用不到能量
+ 武器、重型机械、心理分析或者技术。技能的初始数
+ 值也可以根据具体的战役和背景来调整。
+ """
+
+
+class Weapons:
+ ...
+
+
+class Armor:
+ ...
+
+
+class Equipment:
+ ...
+
+
+class BRPCharacter(Character):
+ """
+ 角色卡
+ ------
+
+ 每名玩家都需要一张位于本书末尾的角色卡。
+ 你也可以将所有内容都写在白纸上,但角色卡会让一切大大简化。角色卡包含这些部分:
+
+ - 身份: 这是角色的基础信息:这方面的信息并没有任何游戏效果,但能帮助细化角色的身份;
+ - 属性和检定: 这些数值描述了角色的各项素质,例如他有多么强壮、聪明、迅速或者迷人。检定是基于属性,即是掷百分骰来决定角色能否完成一项任务。
+ - 生命值: 这个数值用于衡量角色在死亡前能承受多少伤害。块头更大和/或更加健康的角色拥有更多生命值(HP),而体型更小和/或更虚弱的角色生命值也就更少。
+ - 技能: 指角色与生俱来、或是通过训练、教育所获得的能力。每一项都用百分比成功率表达,用于检定角色是否取得成功。
+ - 武器: 指角色使用的武器或攻击方式,此外还描述了它们对其他角色造成伤害的方式;
+ - 护甲: 角色穿着的任意护甲,可能会降低玩家受到攻击时承受的伤害;
+ - 装备: 角色可以携带的也许能派上用场的其他物品。
+ """
+
+ def t_identity(self) -> Identity: ...
+ def t_attributes(self) -> Attributes: ...
+ def t_attribute_check(self) -> AttributesCheck: ...
+ def t_skills(self) -> Skills: ...
+ def t_weapons(self) -> Weapons: ...
+ def t_armor(self) -> Armor: ...
+ def t_equipment(self) -> Equipment: ...
+
+
+brp = BRPCharacter()
+
+class_docstring = BRPCharacter.__doc__
+print(f"{class_docstring}")
+
+for name, method in inspect.getmembers(brp, predicate=inspect.ismethod):
+ if name.startswith("t_"):
+ print(f"{method.__doc__}")
+ print(f"{inspect.signature(method).return_annotation.__doc__}")