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, g): 

31 try: 

32 act = g.action_stack[-1] 

33 if isinstance(act, actions.ActionStage): 

34 return True 

35 

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

37 return True 

38 

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

40 return True 

41 

42 except Exception: 

43 pass 

44 

45 return False 

46 

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, '动之则分,静之则合。无过不及,随曲就伸') 

53 

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) 

60 

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 ) 

69 

70 def sound_effect(self, act): 

71 return 'thb-cv-meirin_taichi' 

72 

73 

74@ui_meta(characters.meirin.LoongPunch) 

75class LoongPunch: 

76 # Skill 

77 name = '龙拳' 

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

79 

80 

81@ui_meta(characters.meirin.LoongPunchHandler) 

82class LoongPunchHandler: 

83 # choose_option 

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

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

86 

87 

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 ) 

102 

103 def sound_effect(self, act): 

104 return 'thb-cv-meirin_loongpunch' 

105 

106 

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 ) 

113 

114 def sound_effect(self, act): 

115 return 'thb-cv-meirin_rb' 

116 

117 

118@ui_meta(characters.meirin.Meirin) 

119class Meirin: 

120 # Character 

121 name = '红美铃' 

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

123 illustrator = '霏茶' 

124 cv = '小羽' 

125 

126 port_image = 'thb-portrait-meirin' 

127 figure_image = 'thb-figure-meirin' 

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