Coverage for thb/meta/characters/meirin.py : 66%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
3# -- stdlib --
4# -- third party --
5# -- own --
6from thb import actions, characters
7from thb.cards.classes import AttackCard, GrazeCard
8from thb.meta.common import ui_meta
11# -- code --
14@ui_meta(characters.meirin.RiverBehind)
15class RiverBehind:
16 # Skill
17 name = '背水'
18 description = (
19 '|B觉醒技|r,准备阶段开始时,若你体力值为全场最低或之一且不大于2时,你减1点体力上限并获得技能|R太极|r。\n'
20 '|B|R>> |b太极|r:你可将|G弹幕|r当|G擦弹|r,|G擦弹|r当|G弹幕|r使用或打出。'
21 )
24@ui_meta(characters.meirin.Taichi)
25class Taichi:
26 # Skill
27 name = '太极'
28 description = '你可将|G弹幕|r当|G擦弹|r,|G擦弹|r当|G弹幕|r使用或打出。'
30 def clickable(self, g):
31 try:
32 act = g.action_stack[-1]
33 if isinstance(act, actions.ActionStage):
34 return True
36 if act.cond([self.build_handcard(AttackCard)]):
37 return True
39 if act.cond([self.build_handcard(GrazeCard)]):
40 return True
42 except Exception:
43 pass
45 return False
47 def is_complete(self, skill):
48 cl = skill.associated_cards
49 from thb.cards.classes import AttackCard, GrazeCard
50 if len(cl) != 1 or not (cl[0].is_card(AttackCard) or cl[0].is_card(GrazeCard)):
51 return (False, '请选择一张【弹幕】或者【擦弹】!')
52 return (True, '动之则分,静之则合。无过不及,随曲就伸')
54 def is_action_valid(self, sk, tl):
55 rst, reason = self.is_complete(sk)
56 if not rst:
57 return (rst, reason)
58 else:
59 return sk.treat_as().ui_meta.is_action_valid(sk, tl)
61 def effect_string(self, act):
62 # for LaunchCard.ui_meta.effect_string
63 source = act.source
64 return (
65 '动之则分,静之则合。无过不及,随曲就伸……|G【%s】|r凭|G太极|r之势,轻松应对。'
66 ) % (
67 source.ui_meta.name,
68 )
70 def sound_effect(self, act):
71 return 'thb-cv-meirin_taichi'
74@ui_meta(characters.meirin.LoongPunch)
75class LoongPunch:
76 # Skill
77 name = '龙拳'
78 description = '每当你使用的|G弹幕|r被其他角色使用的|G擦弹|r抵消时,或其他角色使用的|G弹幕|r被你使用的|G擦弹|r抵消时,你可以弃置其1张手牌。'
81@ui_meta(characters.meirin.LoongPunchHandler)
82class LoongPunchHandler:
83 # choose_option
84 choose_option_buttons = (('发动', True), ('不发动', False))
85 choose_option_prompt = '你要发动【龙拳】吗?'
88@ui_meta(characters.meirin.LoongPunchAction)
89class LoongPunchAction:
90 def effect_string_before(self, act):
91 if act.type == 'attack':
92 return '|G【%s】|r闪过了|G弹幕|r,却没有闪过|G【%s】|r的拳劲,一张手牌被|G【%s】|r震飞!' % (
93 act.target.ui_meta.name,
94 act.source.ui_meta.name,
95 act.source.ui_meta.name,
96 )
97 if act.type == 'graze':
98 return '|G【%s】|r擦过弹幕,随即以拳劲沿着弹幕轨迹回震,|G【%s】|r措手不及,一张手牌掉在了地上。' % (
99 act.source.ui_meta.name,
100 act.target.ui_meta.name,
101 )
103 def sound_effect(self, act):
104 return 'thb-cv-meirin_loongpunch'
107@ui_meta(characters.meirin.RiverBehindAwake)
108class RiverBehindAwake:
109 def effect_string_before(self, act):
110 return '|G【%s】|r发现自己处境危险,于是强行催动内力护住身体,顺便参悟了太极拳。' % (
111 act.target.ui_meta.name,
112 )
114 def sound_effect(self, act):
115 return 'thb-cv-meirin_rb'
118@ui_meta(characters.meirin.Meirin)
119class Meirin:
120 # Character
121 name = '红美铃'
122 title = '我只打盹我不翘班'
123 illustrator = '霏茶'
124 cv = '小羽'
126 port_image = 'thb-portrait-meirin'
127 figure_image = 'thb-figure-meirin'
128 miss_sound_effect = ('thb-cv-meirin_miss1', 'thb-cv-meirin_miss2')