From 28a7b2ecd90e7e67427682a99b8616e13042b4ab Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Tue, 28 May 2024 00:28:39 +0800 Subject: chore: refresh source tree files --- examples/BRP/src/__init__.py | 1 + examples/BRP/src/character.py | 663 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 664 insertions(+) create mode 100644 examples/BRP/src/__init__.py create mode 100644 examples/BRP/src/character.py (limited to 'examples') 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__}") -- cgit v1.2.3-70-g09d2