Hide keyboard shortcuts

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 -*- 

2 

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 

9 

10 

11# -- code -- 

12 

13 

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 ) 

22 

23 

24@ui_meta(characters.meirin.Taichi) 

25class Taichi: 

26 # Skill 

27 name = '太极' 

28 description = '你可将|G弹幕|r当|G擦弹|r,|G擦弹|r当|G弹幕|r使用或打出。' 

29 

30 def clickable(self): 

31 g = self.game 

32 try: 

33 act = g.action_stack[-1] 

34 if isinstance(act, actions.ActionStage): 

35 return True 

36 

37 if act.cond([self.build_handcard(AttackCard)]): 

38 return True 

39 

40 if act.cond([self.build_handcard(GrazeCard)]): 

41 return True 

42 

43 except Exception: 

44 pass 

45 

46 return False 

47 

48 def is_complete(self, skill): 

49 cl = skill.associated_cards 

50 from thb.cards.classes import AttackCard, GrazeCard 

51 if len(cl) != 1 or not (cl[0].is_card(AttackCard) or cl[0].is_card(GrazeCard)): 

52 return (False, '请选择一张【弹幕】或者【擦弹】!') 

53 return (True, '动之则分,静之则合。无过不及,随曲就伸') 

54 

55 def is_action_valid(self, sk, tl): 

56 rst, reason = self.is_complete(sk) 

57 if not rst: 

58 return (rst, reason) 

59 else: 

60 return sk.treat_as().ui_meta.is_action_valid(sk, tl) 

61 

62 def effect_string(self, act): 

63 # for LaunchCard.ui_meta.effect_string 

64 source = act.source 

65 return ( 

66 '动之则分,静之则合。无过不及,随曲就伸……|G【%s】|r凭|G太极|r之势,轻松应对。' 

67 ) % ( 

68 source.ui_meta.name, 

69 ) 

70 

71 def sound_effect(self, act): 

72 return 'thb-cv-meirin_taichi' 

73 

74 

75@ui_meta(characters.meirin.LoongPunch) 

76class LoongPunch: 

77 # Skill 

78 name = '龙拳' 

79 description = '每当你使用的|G弹幕|r被其他角色使用的|G擦弹|r抵消时,或其他角色使用的|G弹幕|r被你使用的|G擦弹|r抵消时,你可以弃置其1张手牌。' 

80 

81 

82@ui_meta(characters.meirin.LoongPunchHandler) 

83class LoongPunchHandler: 

84 # choose_option 

85 choose_option_buttons = (('发动', True), ('不发动', False)) 

86 choose_option_prompt = '你要发动【龙拳】吗?' 

87 

88 

89@ui_meta(characters.meirin.LoongPunchAction) 

90class LoongPunchAction: 

91 def effect_string_before(self, act): 

92 if act.type == 'attack': 

93 return '|G【%s】|r闪过了|G弹幕|r,却没有闪过|G【%s】|r的拳劲,一张手牌被|G【%s】|r震飞!' % ( 

94 act.target.ui_meta.name, 

95 act.source.ui_meta.name, 

96 act.source.ui_meta.name, 

97 ) 

98 if act.type == 'graze': 98 ↛ exitline 98 didn't return from function 'effect_string_before', because the condition on line 98 was never false

99 return '|G【%s】|r擦过弹幕,随即以拳劲沿着弹幕轨迹回震,|G【%s】|r措手不及,一张手牌掉在了地上。' % ( 

100 act.source.ui_meta.name, 

101 act.target.ui_meta.name, 

102 ) 

103 

104 def sound_effect(self, act): 

105 return 'thb-cv-meirin_loongpunch' 

106 

107 

108@ui_meta(characters.meirin.RiverBehindAwake) 

109class RiverBehindAwake: 

110 def effect_string_before(self, act): 

111 return '|G【%s】|r发现自己处境危险,于是强行催动内力护住身体,顺便参悟了太极拳。' % ( 

112 act.target.ui_meta.name, 

113 ) 

114 

115 def sound_effect(self, act): 

116 return 'thb-cv-meirin_rb' 

117 

118 

119@ui_meta(characters.meirin.Meirin) 

120class Meirin: 

121 # Character 

122 name = '红美铃' 

123 title = '我只打盹我不翘班' 

124 illustrator = '霏茶' 

125 cv = '小羽' 

126 

127 port_image = 'thb-portrait-meirin' 

128 figure_image = 'thb-figure-meirin' 

129 miss_sound_effect = ('thb-cv-meirin_miss1', 'thb-cv-meirin_miss2')