|
| 1 | +define_set am_pung, ~s"0 0 0" |
| 2 | +define_set am_kong, ~s"0 0 0 0" |
| 3 | +define_set am_quint, ~s"0 0 0 0 0" |
| 4 | +define_set am_news_kong, ~s"1z 2z 3z 4z" |
| 5 | +define_set am_dragon_pung, ~s"0z 6z 7z" |
| 6 | +define_set am_dragons_wings, ~s"1s 1s 0z 0z 0z 0z 6z 6z 6z 6z 7z 7z 7z 7z" |
| 7 | + |
| 8 | +# category |
| 9 | +define_match any_like_numbers_true, ~a"X0a X0b X0c" |
| 10 | +define_match any_like_numbers_false, ~a"NN|EE|WW|SS", ~a"X0a X1a|X2a|X3a|X4a|X5a|X6a|X7a|X8a" |
| 11 | +define_match winds_news_true, ~a"NN EE WW SS" |
| 12 | +define_match winds_news_false, ~a"X0a" |
| 13 | +define_match winds_ns_true, ~a"NN SS" |
| 14 | +define_match winds_ns_false, ~a"X0a", ~a"EE|WW" |
| 15 | +define_match winds_ew_true, ~a"EE WW" |
| 16 | +define_match winds_ew_false, ~a"X0a", ~a"NN|SS" |
| 17 | +define_match num_369_true, ~a"3a 6a 9a" |
| 18 | +define_match num_369_false, ~a"X0a X0b", ~a"1a|2a|4a|5a|7a|8a|NN|EE|WW|SS" |
| 19 | +define_match num_2468_true, ~a"2a 4a 6a", ~a"4a 6a 8a" |
| 20 | +define_match num_2468_false, ~a"X0a X0b", ~a"1a|3a|5a|7a|9a|NN|EE|WW|SS" |
| 21 | +define_match num_135_true, ~a"1a 3a 5a" |
| 22 | +define_match num_135_false, ~a"X0a X0b", ~a"2a|4a|6a|8a|9a|NN|EE|WW|SS" |
| 23 | +define_match num_579_true, ~a"5a 7a 9a" |
| 24 | +define_match num_579_false, ~a"X0a X0b", ~a"2a|4a|6a|8a|1a|NN|EE|WW|SS" |
| 25 | +define_match num_357_true, ~a"3a 5a 7a" |
| 26 | +define_match num_357_false, ~a"X0a X0b", ~a"2a|4a|6a|8a|1a|9a|NN|EE|WW|SS" |
| 27 | +define_match consecutive_run_34_true, ~a"X0a X1a X2a" |
| 28 | +define_match consecutive_run_34_false, ~a"X0a X0b", ~a"X0a X4a|X5a|X6a|X7a|X8a", ~a"NN|EE|WW|SS" |
| 29 | +define_match consecutive_run_56_true, ~a"X0a X1a X2a X3a X4a" |
| 30 | +define_match consecutive_run_56_false, ~a"X0a X0b", ~a"X0a X6a|X7a|X8a", ~a"NN|EE|WW|SS" |
| 31 | + |
| 32 | +# block pattern |
| 33 | +# 3 unique blocks |
| 34 | +define_match blocks_7, ~m"(am_pung am_dragon_pung):2, am_quint:1" |
| 35 | +define_match blocks_8, ~m"(am_kong am_news_kong):1, am_quint:2" |
| 36 | +# 4 unique blocks |
| 37 | +define_match blocks_1, ~m"pair:1, (am_kong am_news_kong):3" |
| 38 | +define_match blocks_6, ~m"pair:2, am_quint:2" |
| 39 | +define_match blocks_9, ~m"(am_pung am_dragon_pung):2, (am_kong am_news_kong):2" |
| 40 | +# 5 unique blocks |
| 41 | +define_match blocks_2, ~m"pair:3, (am_kong am_news_kong):2" |
| 42 | +define_match blocks_4, ~m"pair:1, (am_pung am_dragon_pung):4" |
| 43 | +# 6 unique blocks |
| 44 | +define_match blocks_3, ~m"pair:5, (am_kong am_news_kong):1" |
| 45 | +define_match blocks_5, ~m"pair:4, (am_pung am_dragon_pung):2" |
| 46 | +define_match blocks, "blocks_1", "blocks_2", "blocks_3", "blocks_4", "blocks_5", "blocks_6", "blocks_7", "blocks_8", "blocks_9" |
| 47 | + |
| 48 | +define_match am_dragons_love, ~a"DDDDa DDDDb FFF FFF" |
| 49 | +define_match am_dragons_wings, ~m"am_dragons_wings:1" |
| 50 | +define_match am_dragons_breath, ~a"NN EE WW SS RR GG 00" |
| 51 | +define_match dragon_hand_win, "am_dragons_love", "am_dragons_wings", "am_dragons_breath" |
| 52 | + |
| 53 | +# unique tiles |
| 54 | +on after_start do |
| 55 | + tag_tiles("flower", ["1f", "2f", "3f", "4f", "1g", "2g", "3g", "4g"]) |
| 56 | + add_attr_tagged("flower", ["_flower"]) |
| 57 | +end |
| 58 | +define_set unique_tile, ~s""" |
| 59 | + 1m | 2m | 3m | 4m | 5m | 6m | 7m | 8m | 9m |
| 60 | + | 1p | 2p | 3p | 4p | 5p | 6p | 7p | 8p | 9p |
| 61 | + | 1s | 2s | 3s | 4s | 5s | 6s | 7s | 8s | 9s |
| 62 | + | 1z | 2z | 3z | 4z | 0z | 6z | 7z | any@flower |
| 63 | + """ |
| 64 | +define_match unique_3, ~m"(unique unique_tile):3" |
| 65 | +define_match unique_4, ~m"(unique unique_tile):4" |
| 66 | +define_match unique_5, ~m"(unique unique_tile):5" |
| 67 | +define_match unique_6, ~m"(unique unique_tile):6" |
| 68 | + |
| 69 | +define_yaku yaku, "Base Value", 25, not_match(["hand", "call_tiles", "winning_tile"], ["dragon_hand_win"]) |
| 70 | +define_yaku yaku, "Quints", 5, match(["hand", "call_tiles", "winning_tile"], ~m"am_quint:1") |
| 71 | +define_yaku yaku, "Quints", 5, match(["hand", "call_tiles", "winning_tile"], ~m"am_quint:2") |
| 72 | +define_yaku yaku, "Pure", 5, not_match(["hand", "call_tiles", "winning_tile"], ~m"(1z 2z 3z 4z 0z 6z 7z any@flower):1") |
| 73 | +define_yaku yaku, "Suit", 5, |
| 74 | + winning_hand_consists_of("1m","2m","3m","4m","5m","6m","7m","8m","9m","1z","2z","3z","4z","7z") |
| 75 | + or winning_hand_consists_of("1p","2p","3p","4p","5p","6p","7p","8p","9p","1z","2z","3z","4z","0z") |
| 76 | + or winning_hand_consists_of("1s","2s","3s","4s","5s","6s","7s","8s","9s","1z","2z","3z","4z","6z") |
| 77 | +define_yaku yaku, "Concealed", 10, has_no_call_named("am_pung", "am_kong", "am_quint") |
| 78 | + |
| 79 | +apply delete, "buttons.mahjong_heavenly.show_when", "is_tenpai_american" |
| 80 | +apply delete, "buttons.mahjong_draw.show_when", "is_tenpai_american" |
| 81 | +apply delete, "buttons.mahjong_discard.show_when", "is_tenpai_american" |
| 82 | + |
| 83 | +set open_win_definition, [[]] |
| 84 | +set win_definition, [[]] |
| 85 | +apply set, "score_calculation.arrange_american_yaku", false |
| 86 | +apply set, "score_calculation.highest_scoring_yaku_only", false |
| 87 | + |
| 88 | +define_const win_con, match(["hand", "call_tiles", "draw"], ["dragon_hand_win"]) |
| 89 | + or (match(["hand", "call_tiles", "draw"], ["blocks"]) |
| 90 | + and ( |
| 91 | + (match(["hand", "call_tiles", "draw"], ["any_like_numbers_true"]) and not_match(["hand", "call_tiles", "draw"], ["any_like_numbers_false"])) |
| 92 | + or (match(["hand", "call_tiles", "draw"], ["winds_news_true"]) and not_match(["hand", "call_tiles", "draw"], ["winds_news_false"])) |
| 93 | + or (match(["hand", "call_tiles", "draw"], ["winds_ns_true"]) and not_match(["hand", "call_tiles", "draw"], ["winds_ns_false"])) |
| 94 | + or (match(["hand", "call_tiles", "draw"], ["winds_ew_true"]) and not_match(["hand", "call_tiles", "draw"], ["winds_ew_false"])) |
| 95 | + or (match(["hand", "call_tiles", "draw"], ["num_369_true"]) and not_match(["hand", "call_tiles", "draw"], ["num_369_false"])) |
| 96 | + or (match(["hand", "call_tiles", "draw"], ["num_2468_true"]) and not_match(["hand", "call_tiles", "draw"], ["num_2468_false"])) |
| 97 | + or (match(["hand", "call_tiles", "draw"], ["num_135_true"]) and not_match(["hand", "call_tiles", "draw"], ["num_135_false"])) |
| 98 | + or (match(["hand", "call_tiles", "draw"], ["num_579_true"]) and not_match(["hand", "call_tiles", "draw"], ["num_579_false"])) |
| 99 | + or (match(["hand", "call_tiles", "draw"], ["num_357_true"]) and not_match(["hand", "call_tiles", "draw"], ["num_357_false"])) |
| 100 | + or (match(["hand", "call_tiles", "draw"], ["consecutive_run_34_true"]) and not_match(["hand", "call_tiles", "draw"], ["consecutive_run_34_false"])) |
| 101 | + or (match(["hand", "call_tiles", "draw"], ["consecutive_run_56_true"]) and not_match(["hand", "call_tiles", "draw"], ["consecutive_run_56_false"])) |
| 102 | + )) |
| 103 | + |
| 104 | +apply append, "buttons.mahjong_heavenly.show_when", [[@win_con]] |
| 105 | +apply append, "buttons.mahjong_draw.show_when", [[@win_con]] |
| 106 | +apply append, "buttons.mahjong_discard.show_when", [[@win_con]] |
| 107 | +replace all, "buttons.mahjong_discard.show_when", ["hand", "call_tiles", "draw"], ["hand", "call_tiles", "last_discard"] |
0 commit comments