LoginSignup
2
2

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-03-06

要約

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

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

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

はじめに

ナワバトラーとは

Nintendo Switch専用ソフト"Splatoon3"内でプレイできるミニゲームです。

公式紹介映像
スプラトゥーン3 Direct 2022.8.10

前提知識

スペシャルマス

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

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

スペシャルアタック

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

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

発火の例

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

トライストリンガー (発火させる側)
トライストリンガー.png
LACT-450 (発火する側)
LACT-450.png
オレンジマス=スペシャルマス、黄色マス=通常マス
GameWith スプラトゥーン3攻略wiki より画像引用

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

目的

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

方法

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

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

GameWith スプラトゥーン3攻略wiki
カード情報はこちらからクローリングします。

カード情報取得

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

カード画像取得

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

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

2. データの成形

カード画像は全ては8×8のマスなので、opencvでカード画像を8×8の数値配列に変換します。
以下になるように変換します。

  • スペシャルマス(オレンジ)=2
  • 通常マス(黄色)=1
  • 空白マス(それ以外の色)=0

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

コード

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

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

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

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

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
2 アジオ 112 アジオ.png
3 ふしぎせいぶつマンタロー 110 ふしぎせいぶつマンタロー.png
4 バトロイカ 106 バトロイカ.png
5 ガチホコ 103 ガチホコ.png
6 スプラマニューバー 98 スプラマニューバー.png
7 アナアキ 84 アナアキ.png
8 エンペリー 73 エンペリー.png
9 タココマンダー 69 タココマンダー.png
10 ヒッセン・ヒュー 65 ヒッセン・ヒュー.png
10 クラーゲス 65 クラーゲス.png
10 ヒッセン 65 ヒッセン.png
10 タコストライク 65 タコストライク.png

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

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

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

順位 発火させるカード 発火成立数 画像
1 クマサン 49 クマサン.png
2 ウツホ 45 ウツホ.png
2 DJタコワサ将軍 45 DJタコワサ将軍.png
3 ヤシガニさん 42 ヤシガニさん.png
4 タココマンダー 41 タココマンダー.png
4 フウカ 41 フウカ.png
4 タコスナイパー 41 タコスナイパー.png
5 サメ使いのフウカ 38 サメ使いのフウカ.png
6 ガチヤグラ 37 ガチヤグラ.png
6 ダイバー 37 ダイバー.png
7 アメフラシ 36 アメフラシ.png
8 ガチホコ 35 ガチホコ.png
8 ジャッジくん 35 ジャッジくん.png
9 タコミラーボール 34 タコミラーボール.png
10 サメライド 33 サメライド.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】
「クイックボム」の画像を数値化した際にスペシャルマス扱いではなく通常マス扱いになってしまうバグを修正しました。
これによる結果の影響はありません。(「クイックボム」はどのカードと組み合わせても発火しないため)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2