【Splatoon3】ナワバトラーのスペシャルマスの発火表を作る【part1 データ取得編】

## 要約
Splatoon3のナワバトラーの記事です。

スペシャルマスを発火させる2枚のカードの組み合わせを列挙する作業を自動化しました。

発火表を作り、以下スプレッドシートに格納しました。
https://docs.google.com/spreadsheets/d/1zdpuMJ0PXy19cIg5Uyk4SbHwGMSueR0okNOW7_7ds0g/edit#gid=0

## はじめに

#### ナワバトラーとは
Nintendo Switch専用ソフト"Splatoon3"内でプレイできるミニゲームです。

公式紹介映像
[スプラトゥーン3 Direct 2022.8.10](https://youtu.be/lrGvap_lXno?t=954)


#### 前提知識

##### スペシャルマス
ナワバトラーのカードに設定されているマスです。
(一部のカードを除き)、ほぼすべてのカードに1マス設定されています。

スペシャルマスの周囲8マスを全て塗ると、
スペシャルマスの所有プレイヤーにスぺシェルポイントが+1加算されます。
(以降これを発火と呼びます)

##### スペシャルアタック
スペシャルマス以外のマスを塗り返すことができる強力な行動です。

ただスペシャルアタックにはスペシャルポイントが1~6ポイント必要なため、
スペシャルポイントを多く溜められるデッキ、
即ちスペシャルマスを多く発火できるようなカードの組み合わせでデッキを組むことが重要です。

##### 発火の例

スペシャルマスの発火の例として、トライストリンガーとLACT-450が組み合わせが有名です。

トライストリンガー (発火させる側)
![トライストリンガー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/0045833f-b68d-e4cc-646d-595c871103af.png)
LACT-450 (発火する側)
![LACT-450.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/471f8f96-42f3-465c-a715-1d608498f87b.png)
オレンジマス=スペシャルマス、黄色マス=通常マス
[GameWith スプラトゥーン3攻略wiki より画像引用](https://gamewith.jp/splatoon3/article/show/362713)

トライストリンガーの中央に出っ張っている2マスと
LACT-450の左上を合わせるように置くことで、
LACT-450のスペシャルマスが発火します。


## 目的
全種類のカードから発火する組み合わせを列挙します。
得た情報は強いデッキを組むための判断材料に使います。

## 方法

組み合わせの列挙の具体的な流れは以下の通りです。
[1. データのクローリング](#1-データのクローリング)
[2. データの成形](#2-データの成形)
[3. カード間で発火があるかどうか調査](#3-カード間で発火があるかどうか調査)
[4. 結果確認](#4-結果確認)

## 1. データのクローリング

[GameWith スプラトゥーン3攻略wiki](https://gamewith.jp/splatoon3/article/show/362713)
カード情報はこちらからクローリングします。


#### カード情報取得
```python:
import pandas as pd
import requests
from bs4 import BeautifulSoup
import time

# カード情報のテーブルを抜き出す
tables=pd.read_html("https://gamewith.jp/splatoon3/article/show/362713",encoding="utf-8")
df1=tables[1].assign(レアリティ="フレッシュ")
df2=tables[2].assign(レアリティ="レア")
df3=tables[3].assign(レアリティ="コモン")

# 3つのテーブルを1つにする
df_all=df1.append(df2, ignore_index=True).append(df3, ignore_index=True)

# カード画像のurlを取得する
response = requests.get('https://gamewith.jp/splatoon3/article/show/362713')
soup = BeautifulSoup(response.text,'lxml')
for table in soup.findAll("table")[1:4]:
    for tr in table.findAll("tr")[1:]: 
        time.sleep(0.01)
        card_name=tr.find("td").text
        img_url=tr.find("img").get("data-original")
        #pandasのテーブルにurl情報を新しい列として追加する
        df_all.loc[df_all['カード'] ==card_name, 'イメージ'] = img_url

# csvファイル書き出し
df_all.to_csv("./cardlist.csv")

display(df_all)

```
#### 結果

|    | カード             | マス   |   スペシャルポイント | レアリティ   | イメージ                                                          |
|---:|:-------------------|:-------|---------------------:|:-------------|:------------------------------------------------------------------|
|  0 | ヒーローシューター |     12 |                    5 | フレッシュ   | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_1.png  |
|  1 | コジャケ           |      3 |                    1 | フレッシュ   | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_93.png |
|  2 | アタリメ           |     14 |                    5 | フレッシュ   | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_94.png |
|   ... | ...                 | ... |                    ... | ...   | ...  |
| 195 | スプラチャージャーコラボ |      8 |                    3 | コモン       | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_185.png |
| 196 | スプラスコープコラボ     |     10 |                    4 | コモン       | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_186.png |
| 197 | ヒッセン・ヒュー         |      5 |                    2 | コモン       | https://img.gamewith.jp/article_tools/splatoon3/gacha/card_187.png |


#### カード画像取得

```python:
import os
import time
import urllib.error
import urllib.request
import pandas as pd

# 画像をダウンロードする関数(引数=[画像url,保存先パス])
def download_file(url, dst_path):
    try:
        with urllib.request.urlopen(url) as web_file:
            data = web_file.read()
            with open(dst_path, mode='wb') as local_file:
                local_file.write(data)
    except urllib.error.URLError as e:
        print(e)

# カード情報テーブルを開く
df = pd.read_csv('cardlist.csv',index_col=0)

# 画像保存用ディレクトリ作成
DIR_NAME = 'img'
if not os.path.exists(DIR_NAME):
    os.mkdir(DIR_NAME)

# 画像保存用ディレクトリに画像をダウンロード
for card, img_url in zip(df['カード'],df['イメージ']):
    print(card, img_url)
    dst_path = 'img/'+card+'.png'
    download_file(img_url, dst_path)
    time.sleep(0.5)
```

#### 結果

![image_card.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/ab6fa646-ffb7-cd48-4afd-a47451e693ca.png)

ダウンロードできました。次は各画像を数値データに変換します。
しかし、背景にイラスト入ってたり明るさが異なったり画素に統一感がないため、そこを注意する必要があります。


## 2. データの成形
カード画像は全ては8×8のマスなので、opencvでカード画像を8×8の数値配列に変換します。
以下になるように変換します。
- スペシャルマス(オレンジ)=2
- 通常マス(黄色)=1
- 空白マス(それ以外の色)=0

オレンジ/黄色/それ以外の色、でそれぞれ輝度が異なるため、グレースケール化した後に閾値を設けて色を分類します。

#### コード

```python
from PIL import Image
import cv2
import os
import numpy as np
import matplotlib.pyplot as plt

# opencv型 -> pillow型
def cv2pil(image):
    new_image = image.copy()
    if new_image.ndim == 2:  # モノクロ
        pass
    elif new_image.shape[2] == 3:  # カラー
        new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB)
    elif new_image.shape[2] == 4:  # 透過
        new_image = cv2.cvtColor(new_image, cv2.COLOR_BGRA2RGBA)
    new_image = Image.fromarray(new_image)
    return new_image

# OpenCV型 -> OpenCV型(8×8のグレースケール)
def img2array88(img):
    # グレースケール変換
    img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    # 縦横8等分のドットに変換
    img_h=img_gray.shape[0]
    img_w=img_gray.shape[1]
    for i in range(8):
        for k in range(8):
            img_mini=img_gray[img_h//8*i:img_h//8*(i+1),img_w//8*k:img_w//8*(k+1)]
            #　最頻値を出す
            unique, freq = np.unique(img_mini, return_counts=True) #return_counts=Trueが肝
            mode = unique[np.argmax(freq)]
            # 最頻値でドット化
            img_mini[:]=mode

    # ピクセルサイズ8×8に縮小
    img_8_8=cv2.resize(img_gray, dsize=(8, 8),interpolation = cv2.INTER_LINEAR)
    
    return img_8_8

# OpenCV型 -> OpenCV型(要素{0,1,2}の8*8配列)
def img2array(img):
    array88=img2array88(img)
    max_int=np.max(array88)
    min_int=np.min(array88)

    card_array=np.zeros((8,8))

    for i in range(8):
        for k in range(8):
            # 輝度上位～12％を黄色扱い→1
            if max_int-((max_int-min_int)//10)*1.2 <= array88[i,k]:
                card_array[i,k]=1
            # 輝度上位12％～30％をオレンジ扱い→2
            elif max_int-((max_int-min_int)//10)*3 <= array88[i,k]:
                card_array[i,k]=2
            # 輝度上位30％～を黒扱い→0
            else:
                card_array[i,k]=0
    return card_array


# inputディレクトリ
path = "img/"

# outputディレクトリ
save_path1="img_mini/"
save_path2="img_plt/"
# ディレクトリが存在しなければ作成する
if not os.path.exists(save_path1):
    os.makedirs(save_path1)
if not os.path.exists(save_path2):
    os.makedirs(save_path2)

files = os.listdir(path)

# 全ての画像ファイルを要素{0,1,2}の8*8配列にする
for file in files:
    
    # 日本語読み込めないのでpillowを通して読み込み
    img = np.array(Image.open(path+file).convert("RGB"))  
    # カード画像を{黒=0, 通常マス=1, スペシャルマス=2} に変換
    card_array = img2array(img)
    
    # クイックボムは1マスのせいか、輝度の差で色分けすると通常マス扱いになってしまう
    # 対策として後で1から2に置換する
    if (file=="クイックボム.png"):
        card_array = np.array(np.where(card_array == 1,2,0), dtype=np.uint8)
    
    # 画像で保存(opencvだと日本語保存できないからpillowを使う)
    card_pil=cv2pil(card_array).convert('RGB')
    card_pil.save(save_path1+file)
    
    # 出力用
    print(file)
    print(card_array)
    fig = plt.figure(figsize=(4, 3)) # 幅4インチ、高さ3インチの図を作成
    plt.imshow(card_array,vmax=2)
    plt.axis("off")  # 余白を削除
    plt.savefig(save_path2+file,bbox_inches="tight", pad_inches=0.0)
    plt.show()
```


### 結果

![image_plt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/972aa387-c36e-cfc3-3e30-62e01cbbfa85.png)


うまく数値化できました。
matplotlibで出力しているのでわかりづらいですが、黄色が2、青が1、紫が0です。
全カード画像が正しく数値化できたのかは目視で確認しました。



## 3-カード間で発火があるかどうか調査

ここからが本題です。
先ほど得たカードの数値配列を使って、2組のカード間で発火があるか調査します。



```python
import pandas as pd
import numpy as np
import itertools
import cv2
import matplotlib.pyplot as plt
from PIL import Image

df = pd.read_csv('cardlist.csv',index_col=0)
# カードの組み合わせのdataframeを作成する
df_combo = pd.DataFrame(list(itertools.product(df["カード"].tolist(),df["カード"].tolist())),columns=["発火するカード","発火させるカード"])
df_combo = df_combo[df_combo["発火するカード"]!=df_combo["発火させるカード"]].reset_index(drop=True)

# ナワバトラーのルールでカードが置けるか2値化画像で判定する
def judge_card_put_rule(bin_img_played, bin_img_put, h, w):
    
    # 置くカードの高さと幅を取得
    put_h=bin_img_put.shape[0]
    put_w=bin_img_put.shape[1]

    # 発火するカード上に発火させるカードを置く
    bin_img_played_c=bin_img_played.copy()
    bin_img_played_c[0+h:put_h+h,0+w:put_w+w]+=bin_img_put

    
    # マスが重なったところがある場合処理対象外
    if (bin_img_played_c.max() > 1):
        return False

    # 輪郭を抽出する
    contours, hierarchy = cv2.findContours(bin_img_played_c, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  
    # 輪郭抽出で1つになっていない場合は接地していないため、処理対象外
    if (len(contours)!=1):
        return False
    
    return True
    
# カードが発火するか判定する (戻り値 0: 発火しない, 1:発火する)
def judge_card_fire_rule(img_played, img_put, h, w):
    # 置くカードの高さと幅を取得
    put_h=img_put.shape[0]
    put_w=img_put.shape[1] 
    
    # 発火するカード上に発火させるカードを置く
    img_played_c=img_played.copy()
    img_played_c[0+h:put_h+h,0+w:put_w+w]+=img_put
    
    # 3x3配列でスペシャルマスの周りが囲まれていると「208」を出力する畳込フィルタ要素を用意
    kernel = np.array(([[1,1,1],
                        [1,100,1],
                        [1,1,1]]))

    # スペシャルマス発火判定
    img_played_conved = cv2.filter2D(img_played_c, -1, kernel)
    if (img_played_conved.max()==208):
        return True
    else:
        return False

# カードの組み合わせの数だけループさせる
for ind in range(len(df_combo)):
    # 発火する/させるカードの名前を取得
    card_fire_name=df_combo.loc[ind,"発火するカード"]
    card_trigger_name=df_combo.loc[ind,"発火させるカード"]
    # 求める値の初期値を入力
    df_combo.loc[ind,'発火パターン']=0
    df_combo.loc[ind,'発火成立']=False
    df_combo.loc[ind,'発火同時成立']=False
    
    # 4方向に回転して精査するため4回繰り返す
    for rotate in range(4):
        # 日本語読み込めないのでpillowを通して読み込み
        card_fire_img = np.array(Image.open('img_mini/'+card_fire_name+'.png').convert("L"))
        card_trigger_img = np.array(Image.open('img_mini/'+card_trigger_name+'.png').convert("L"))

        # 発火するカード：走査のために8×8→24×24になるようにパディングしてコピー
        card_fire_img_pad = cv2.copyMakeBorder(card_fire_img, 8, 8, 8, 8, cv2.BORDER_CONSTANT, (0,)).copy()

        # 発火させるカード：回転処理
        if rotate == 0:
            # 1回目は何もしない
            pass
        elif rotate in (1, 2, 3):
            # 2回目以降は発火させるカードを回転する
            card_trigger_img = np.rot90(card_trigger_img, rotate)

        # 画像の2値化
        _, card_fire_img_pad_bin = cv2.threshold(card_fire_img_pad.copy(), 0, 1, cv2.THRESH_BINARY)
        _, card_trigger_img_bin = cv2.threshold(card_trigger_img.copy(), 0, 1, cv2.THRESH_BINARY)

        # 高さ・幅取得
        h_fire_img_pad = card_fire_img_pad.shape[0]
        w_fire_img_pad = card_fire_img_pad.shape[1]
        h_trigger_img = card_trigger_img.shape[0]
        w_trigger_img = card_trigger_img.shape[1] 

        # 発火するカード上に発火させるカードを1ピクセルずつ走査するように置き、コンボがあるか判定する
        for i in range(h_fire_img_pad):
            # 縦方向の走査が終了したら次のカードの走査を行う
            if (h_trigger_img + i > h_fire_img_pad):
                break
            # 横方法方向に1ピクセルをずらす
            for k in range(w_fire_img_pad):
                # 横方向の走査が終了したら縦方向の操作を行う
                if (w_trigger_img + k > w_fire_img_pad):
                    break

                # カードが置けるか判定
                if not judge_card_put_rule(card_fire_img_pad_bin, card_trigger_img_bin, i, k):
                    continue

                # 発火するカード側が発火するか判定
                if judge_card_fire_rule(card_fire_img_pad ,card_trigger_img_bin, i, k):
                    # 発火した場合、結果列を書き換える
                    df_combo.loc[ind,'発火パターン']+=1
                    df_combo.loc[ind,'発火成立']=True
                    # 発火させるカード側が発火するか判定
                    if judge_card_fire_rule(card_fire_img_pad_bin ,card_trigger_img, i, k):
                        # 発火した場合、結果列を書き換える
                        df_combo.loc[ind,'発火同時成立']=True

# csvファイル書き出し
df_combo.to_csv("cardcombo.csv")
display(df_combo)
```

(思ってたよりコードが長くなってしまいました。)

#### 結果

|    | 発火するカード     | 発火させるカード   |   発火パターン | 発火成立   | 発火同時成立   |
|---:|:-------------------|:-------------------|-----------------:|:-------------|:-----------------|
|  0 | ヒーローシューター | コジャケ           |                0 | False        | False            |
|  1 | ヒーローシューター | アタリメ           |                0 | False        | False            |
|  2 | ヒーローシューター | 司令               |                1 | True         | False            |
|  3 | ヒーローシューター | アオリ             |                0 | False        | False            |
|  4 | ヒーローシューター | ホタル             |                0 | False        | False            |
|  ... | ... | ...             |                ... | ...        | ...            |
| 39001 | ヒッセン・ヒュー | ラピッドブラスターデコ   |                1 | True         | False            |
| 39002 | ヒッセン・ヒュー | L3リールガンD            |                1 | True         | False            |
| 39003 | ヒッセン・ヒュー | スプラローラーコラボ     |                1 | True         | False            |
| 39004 | ヒッセン・ヒュー | スプラチャージャーコラボ |                1 | True         | False            |
| 39005 | ヒッセン・ヒュー | スプラスコープコラボ     |                2 | True         | False            |


デッキに入れられる同名カードは1枚までの制約があるため、同名カード同士の比較はスキップしています。
以下列の説明。
- 発火するカード
    - スペシャルマスが発火する側のカード名
- 発火させるカード
    - スペシャルマスを発火させる側のカード名。
- 発火パターン
    - 発火のパターン数。1以上の場合は発火パターンが存在する。2以上の場合は置き方によっては複数の発火パターンがあることを表す。
- 発火成立
    - True：発火パターンが存在する
    - False：〃が存在しない
- 同時発火成立
    - True：発火するカードと発火させるカードの両方のスペシャルマスが同時に発火するパターンが存在する
    - False：〃が存在しない




#### スプレッドシートで見れるようにしてみる

もろもろの結果は以下に格納しました。
https://docs.google.com/spreadsheets/d/1zdpuMJ0PXy19cIg5Uyk4SbHwGMSueR0okNOW7_7ds0g/edit#gid=0


## 4-結果確認

結果を見ていきます。

#### 発火するカードで発火成立が多いものTop10





|   順位 | 発火するカード             |   発火成立数 |  画像 |
|-------:|:---------------------------|-----------:|----|
|      1 | ヒーローシューター         |        131 |![ヒーローシューター.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/7550f338-9780-2109-7147-a279dfc68e30.png)|
|      2 | アジオ                     |        112 |![アジオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/33c2f94d-0658-ed63-5d2d-aa630f8d290b.png)|
|      3 | ふしぎせいぶつマンタロー   |        110 |![ふしぎせいぶつマンタロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/9bee6167-6dbe-5c18-2bba-a96cc94f6806.png)|
|      4 | バトロイカ                 |        106 |![バトロイカ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/181cf703-3ca9-2a1c-62de-5238da11197b.png)|
|      5 | ガチホコ                   |        103 |![ガチホコ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/1b86e810-a714-d676-7bd7-f331da17d507.png)|
|      6 | スプラマニューバー         |         98 |![スプラマニューバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/85c3ea79-82cf-f36d-02c2-369eae0563c5.png)|
|      7 | アナアキ                   |         84 |![アナアキ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/6aac1844-b3f2-463c-9761-63e83f6da12a.png)|
|      8 | エンペリー                 |         73 |![エンペリー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/98276dd7-4b8e-368e-5001-6744b780bf40.png)|
|      9 | タココマンダー             |         69 |![タココマンダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/dede472c-2ccf-c32e-4825-4b65175aa42b.png)|
|     10 | ヒッセン・ヒュー           |         65 |![ヒッセン・ヒュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/ca79a72c-1403-e5a6-e833-f65288d677fc.png)|
|     10 | クラーゲス                 |         65 |![クラーゲス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/64313d42-271a-f11e-2dbf-dfdab2b23b14.png)|
|     10 | ヒッセン                   |         65 |![ヒッセン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/2b622ee5-0516-3303-313e-aa1a73ca39c2.png)|
|     10 | タコストライク             |         65 |![タコストライク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/245a6c1a-170b-87d6-e8e5-5cf0e1f37f8a.png)|

発火するカードは「ヒーローシューター」が1位でした。
10位以下から2倍近く差があるため非常に発火させやすいカードであることがわかります。
次いで、アップデートで追加された「アジオ」と「ふしぎせいぶつマンタロー」もランクインしています。
特徴としては、やはりスペシャルマスの周りにすでにマスがあるカード群は発火しやすいようです。

個人的に注目してるのは、「ヒーローシューター」「スプラマニューバー」「ヒッセン」「ヒッセン・ヒュー」です。
必要なスペシャルポイントが少ないカードであるため、デッキに入れやすい汎用的なカードだと思います。

#### 発火させるカードで発火成立が多いものTop10

|   順位 | 発火させるカード          |   発火成立数 |  画像 |
|-------:|:---------------------------|-----------:|----|
|      1 | クマサン                   |         49 | ![クマサン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/91a09777-3a63-a49d-ee9c-f35b3a5e4a0e.png) |
|      2 | ウツホ                     |         45 | ![ウツホ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/fd66bc71-a313-7c66-0f81-c4cace2ed6c6.png)|
|      2 | DJタコワサ将軍             |         45 | ![DJタコワサ将軍.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/eafa3585-15f8-abeb-c441-5c35917c6405.png)
|      3 | ヤシガニさん               |         42 |![ヤシガニさん.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/13b88eaa-f773-81ad-7f3d-d1f0de9a771a.png)
|      4 | タココマンダー             |         41 |![タココマンダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/99871db7-7e2c-8c78-23d6-e37d757dd644.png)
|      4 | フウカ                     |         41 |![フウカ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/99550ff3-ebf1-15cb-19d9-08abc4701335.png)
|      4 | タコスナイパー             |         41 |![タコスナイパー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/909b6e70-98b4-74bc-1bda-b4c885e17615.png)
|      5 | サメ使いのフウカ           |         38 |![サメ使いのフウカ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/ba13072a-51f3-2f37-497d-93e827ab456e.png)
|      6 | ガチヤグラ                 |         37 |![ガチヤグラ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/790bc52c-4ad6-cb21-e2b7-3fb692670672.png)
|      6 | ダイバー                   |         37 | ![ダイバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/d0a45a97-0633-b3af-d2e9-f32d008dd04d.png)
|      7 | アメフラシ                 |         36 |![アメフラシ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/fbc44b1f-2e4c-3925-7510-f5365a6ee871.png)
|      8 | ガチホコ                   |         35 |![ガチホコ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/f8644288-1113-5fbd-8eb6-515cd11e81b3.png)
|      8 | ジャッジくん               |         35 |![ジャッジくん.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/03153f96-21f3-8662-c3bb-f71e9c26da53.png)
|      9 | タコミラーボール           |         34 |![タコミラーボール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/f44fd4ba-3d13-5a1d-d0dc-559fb8944e7b.png)
|     10 | サメライド                 |         33 |![サメライド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539787/f67cec18-ea47-fe84-47f8-fc5f55c9edfb.png)

クマサンが1位でした。10位以内もかなりの接戦です。
共通点としては「 の形のマスが外側にある点でしょうか。
ただどれもマスが多く重いカードなので、デッキ構築は慎重に行う必要がありそうです。


#### 発火同時成立

スペシャルマスが同時に発火できるカードの組み合わせ一覧です。
相性が良いため、この組み合わせを軸にデッキを構築するといいかもしれません。

| 発火するカード           | 発火させるカード         |
|:-------------------------|:-------------------------|
| .96ガロン                | エゾッコリー             |
| 4Kスコープ               | スプラスコープ           |
| 4Kスコープ               | プロモデラーMG           |
| H3リールガン             | 踊るギャングスターウツホ |
| L3リールガン             | 踊るギャングスターウツホ |
| LACT-450                 | ふしぎせいぶつマンタロー |
| LACT-450                 | インクリーナー           |
| LACT-450                 | パラシューター           |
| LACT-450                 | 司令                     |
| N-ZAP85                  | 踊るギャングスターウツホ |
| R-PEN5H                  | 踊るギャングスターウツホ |
| Rブラスターエリート      | ダイバー                 |
| Rブラスターエリート      | プロモデラーRG           |
| ふしぎせいぶつマンタロー | LACT-450                 |
| ふしぎせいぶつマンタロー | エチゼン                 |
| ふしぎせいぶつマンタロー | タコッペリン号           |
| ふしぎせいぶつマンタロー | バケットスロッシャー     |
| ふしぎせいぶつマンタロー | ヒッセン・ヒュー         |
| ふしぎせいぶつマンタロー | プロモデラーMG           |
| ふしぎせいぶつマンタロー | ホクサイ                 |
| わかばシューター         | 踊るギャングスターウツホ |
| アイロニック             | キンシャケ               |
| アオリ                   | エチゼン                 |
| アオリ                   | ソイチューバー           |
| アオリ                   | バケットスロッシャー     |
| アオリ                   | ホタル                   |
| アジオ                   | アナアキ                 |
| アタリメ                 | キャンピングシェルター   |
| アナアキ                 | アジオ                   |
| アナアキ                 | ソイチューバー           |
| アネモ                   | スパイキー               |
| アネモ                   | ダウニー                 |
| インクリーナー           | LACT-450                 |
| インクリーナー           | エンペリー               |
| ウツホ                   | ホタル                   |
| エゾッコ                 | タコスナイパー           |
| エゾッコ                 | ボールドマーカー         |
| エゾッコ                 | ボールドマーカーネオ     |
| エゾッコ                 | ヤコ                     |
| エゾッコリー             | .96ガロン                |
| エゾッコリー             | スプラッシュシールド     |
| エゾッコリー             | スプラマニューバー       |
| エゾッコリー             | ハイドラント             |
| エチゼン                 | ふしぎせいぶつマンタロー |
| エチゼン                 | アオリ                   |
| エチゼン                 | バケットスロッシャーデコ |
| エンペリー               | インクリーナー           |
| エンペリー               | バトロイカ               |
| オーバーフロッシャー     | ガチホコ                 |
| オームラ                 | ガチホコ                 |
| カーリングボム           | タココマンダー           |
| ガチアサリ               | スプラマニューバー       |
| ガチアサリ               | ヒーローシューター       |
| ガチホコ                 | オーバーフロッシャー     |
| ガチホコ                 | オームラ                 |
| ガチホコ                 | ジャッジくん             |
| ガチホコ                 | フウカ                   |
| ガチホコ                 | ラビットブラスター       |
| キャンピングシェルター   | アタリメ                 |
| キャンピングシェルター   | タコゾネス               |
| キャンピングシェルター   | ブキチ                   |
| キューバンボム           | ドロシャケ               |
| キンシャケ               | アイロニック             |
| キンシャケ               | クマサン                 |
| キンシャケ               | パル子                   |
| キンシャケ               | マンタロー               |
| クマサン                 | キンシャケ               |
| クラーゲス               | スプラマニューバー       |
| グリル                   | タテタコトルーパー       |
| ケルビン525              | タココマンダー           |
| ケルビン525              | ボールドマーカー         |
| ケルビン525              | ヤコ                     |
| コウモリ                 | ホタックス               |
| サメ使いのフウカ         | タコスナイパー           |
| サメ使いのフウカ         | ボールドマーカー         |
| サメ使いのフウカ         | ボールドマーカーネオ     |
| サメ使いのフウカ         | ヤコ                     |
| シャケ                   | タココマンダー           |
| シャープマーカー         | タココマンダー           |
| シャープマーカーネオ     | タココマンダー           |
| ジムワイパー             | 踊るギャングスターウツホ |
| ジャッジくん             | ガチホコ                 |
| ジャンプビーコン         | ハナガサ                 |
| ジャンプビーコン         | ロッケンベルグ           |
| ジャンプビーコン         | 大容量タコポッド         |
| スクイックリンα          | スプラスコープコラボ     |
| スクイックリンα          | プロモデラーRG           |
| スタコラー               | パル子                   |
| スパイキー               | アネモ                   |
| スパイキー               | ダウニー                 |
| スパイキー               | ビートタコスタンプ       |
| スプラシューターコラボ   | スプラマニューバー       |
| スプラシューターコラボ   | ヒーローシューター       |
| スプラスコープ           | 4Kスコープ               |
| スプラスコープ           | プロモデラーMG           |
| スプラスコープコラボ     | スクイックリンα          |
| スプラスコープコラボ     | プロモデラーRG           |
| スプラスピナー           | 踊るギャングスターウツホ |
| スプラチャージャー       | タコスナイパー           |
| スプラチャージャー       | ボールドマーカー         |
| スプラチャージャー       | ボールドマーカーネオ     |
| スプラチャージャー       | ヤコ                     |
| スプラチャージャーコラボ | タコスナイパー           |
| スプラチャージャーコラボ | ボールドマーカー         |
| スプラチャージャーコラボ | ボールドマーカーネオ     |
| スプラチャージャーコラボ | ヤコ                     |
| スプラッシュシールド     | エゾッコリー             |
| スプラマニューバー       | エゾッコリー             |
| スプラマニューバー       | ガチアサリ               |
| スプラマニューバー       | クラーゲス               |
| スプラマニューバー       | スプラシューターコラボ   |
| スプラマニューバー       | タコストライク           |
| スプラマニューバー       | ダイバー                 |
| スプラマニューバー       | バトロイカ               |
| スプラマニューバー       | ヒッセン                 |
| スプラマニューバー       | プライムシューターコラボ |
| スプラローラーコラボ     | 踊るギャングスターウツホ |
| ソイチューバー           | アオリ                   |
| ソイチューバー           | アナアキ                 |
| ソイチューバー           | バケットスロッシャーデコ |
| タココマンダー           | カーリングボム           |
| タココマンダー           | ケルビン525              |
| タココマンダー           | シャケ                   |
| タココマンダー           | シャープマーカー         |
| タココマンダー           | シャープマーカーネオ     |
| タココマンダー           | ドスコイ                 |
| タココマンダー           | バクダン                 |
| タココマンダー           | バトロイカ               |
| タココマンダー           | ホタックス               |
| タココマンダー           | リッター4K               |
| タコストライク           | スプラマニューバー       |
| タコスナイパー           | エゾッコ                 |
| タコスナイパー           | サメ使いのフウカ         |
| タコスナイパー           | スプラチャージャー       |
| タコスナイパー           | スプラチャージャーコラボ |
| タコスナイパー           | ナベブタ                 |
| タコゾネス               | キャンピングシェルター   |
| タコッペリン号           | ふしぎせいぶつマンタロー |
| タコポッド               | ドロシャケ               |
| タテタコトルーパー       | グリル                   |
| タマヒロイ               | ロッケンベルグ           |
| タンサンボム             | ドロシャケ               |
| ダイバー                 | Rブラスターエリート      |
| ダイバー                 | スプラマニューバー       |
| ダウニー                 | アネモ                   |
| ダウニー                 | スパイキー               |
| ダウニー                 | ビートタコスタンプ       |
| ドスコイ                 | タココマンダー           |
| ドライブワイパー         | 踊るギャングスターウツホ |
| ドロシャケ               | キューバンボム           |
| ドロシャケ               | タコポッド               |
| ドロシャケ               | タンサンボム             |
| ナベブタ                 | タコスナイパー           |
| ナベブタ                 | ボールドマーカー         |
| ナベブタ                 | ボールドマーカーネオ     |
| ナベブタ                 | ヤコ                     |
| ハイドラント             | エゾッコリー             |
| ハシラ                   | 踊るギャングスターウツホ |
| ハナガサ                 | ジャンプビーコン         |
| ハナガサ                 | 大容量タコポッド         |
| バクダン                 | タココマンダー           |
| バケットスロッシャー     | ふしぎせいぶつマンタロー |
| バケットスロッシャー     | アオリ                   |
| バケットスロッシャー     | バケットスロッシャーデコ |
| バケットスロッシャーデコ | エチゼン                 |
| バケットスロッシャーデコ | ソイチューバー           |
| バケットスロッシャーデコ | バケットスロッシャー     |
| バケットスロッシャーデコ | ホタル                   |
| バトロイカ               | エンペリー               |
| バトロイカ               | スプラマニューバー       |
| バトロイカ               | タココマンダー           |
| パラシューター           | LACT-450                 |
| パル子                   | キンシャケ               |
| パル子                   | スタコラー               |
| パル子                   | ポイズンミスト           |
| ヒッセン                 | スプラマニューバー       |
| ヒッセン・ヒュー         | ふしぎせいぶつマンタロー |
| ヒーローシューター       | ガチアサリ               |
| ヒーローシューター       | スプラシューターコラボ   |
| ビートタコスタンプ       | スパイキー               |
| ビートタコスタンプ       | ダウニー                 |
| フウカ                   | ガチホコ                 |
| ブキチ                   | キャンピングシェルター   |
| プライムシューターコラボ | スプラマニューバー       |
| プロモデラーMG           | 4Kスコープ               |
| プロモデラーMG           | ふしぎせいぶつマンタロー |
| プロモデラーMG           | スプラスコープ           |
| プロモデラーRG           | Rブラスターエリート      |
| プロモデラーRG           | スクイックリンα          |
| プロモデラーRG           | スプラスコープコラボ     |
| ホクサイ                 | ふしぎせいぶつマンタロー |
| ホタックス               | コウモリ                 |
| ホタックス               | タココマンダー           |
| ホタル                   | アオリ                   |
| ホタル                   | ウツホ                   |
| ホタル                   | バケットスロッシャーデコ |
| ボールドマーカー         | エゾッコ                 |
| ボールドマーカー         | ケルビン525              |
| ボールドマーカー         | サメ使いのフウカ         |
| ボールドマーカー         | スプラチャージャー       |
| ボールドマーカー         | スプラチャージャーコラボ |
| ボールドマーカー         | ナベブタ                 |
| ボールドマーカー         | リッター4K               |
| ボールドマーカーネオ     | エゾッコ                 |
| ボールドマーカーネオ     | サメ使いのフウカ         |
| ボールドマーカーネオ     | スプラチャージャー       |
| ボールドマーカーネオ     | スプラチャージャーコラボ |
| ボールドマーカーネオ     | ナベブタ                 |
| ポイズンミスト           | パル子                   |
| マンタロー               | キンシャケ               |
| ヤコ                     | エゾッコ                 |
| ヤコ                     | ケルビン525              |
| ヤコ                     | サメ使いのフウカ         |
| ヤコ                     | スプラチャージャー       |
| ヤコ                     | スプラチャージャーコラボ |
| ヤコ                     | ナベブタ                 |
| ラビットブラスター       | ガチホコ                 |
| リッター4K               | タココマンダー           |
| リッター4K               | ボールドマーカー         |
| ロッケンベルグ           | ジャンプビーコン         |
| ロッケンベルグ           | タマヒロイ               |
| ロッケンベルグ           | 大容量タコポッド         |
| ワイドローラー           | 踊るギャングスターウツホ |
| 司令                     | LACT-450                 |
| 大容量タコポッド         | ジャンプビーコン         |
| 大容量タコポッド         | ハナガサ                 |
| 大容量タコポッド         | ロッケンベルグ           |
| 踊るギャングスターウツホ | H3リールガン             |
| 踊るギャングスターウツホ | L3リールガン             |
| 踊るギャングスターウツホ | N-ZAP85                  |
| 踊るギャングスターウツホ | R-PEN5H                  |
| 踊るギャングスターウツホ | わかばシューター         |
| 踊るギャングスターウツホ | ジムワイパー             |
| 踊るギャングスターウツホ | スプラスピナー           |
| 踊るギャングスターウツホ | スプラローラーコラボ     |
| 踊るギャングスターウツホ | ドライブワイパー         |
| 踊るギャングスターウツホ | ハシラ                   |
| 踊るギャングスターウツホ | ワイドローラー           |

ちなみに頻出順は
「踊るギャングスターウツホ」11
「タココマンダー」10
「スプラマニューバー」9
「ふしぎせいぶつマンタロー」7
「ボールドマーカー」7
「ヤコ」6
・・・
といったようになっています。


## おわりに

今回スペシャルマスの発火表を作りました。
これを参考にデッキを考えてみたいと思います。

時間があればトリプル発火、壁を組み合わせた発火なども考えたいですね。




## 追記

【2023/03/26】
壁の発火について調査しました。
https://qiita.com/gigi/items/4ef836727d007c329eda



【2023/03/07】
「クイックボム」の画像を数値化した際にスペシャルマス扱いではなく通常マス扱いになってしまうバグを修正しました。
これによる結果の影響はありません。(「クイックボム」はどのカードと組み合わせても発火しないため)