概要
ステラソラでパーティ構成と素質構成をプリセットコードとして共有できるようになりました。そこで、プリセットコードがどのような仕様なのか調べてみました。
デコードツール
下記のリポジトリで実際にデコードできますので、興味ありましたらご参照ください。
- ツール
- リポジトリ
仕様
プリセットコードは base64 でエンコードされた文字列で表現されています。
("A"が多いことから、base64でエンコードされた文字列であると推測可能)
AAAAbgAAAJUAAACbwpgFhS4wAimzLmIYCaMu
まずは base64 でデコードし、バイト配列に変換します。
# バイト配列を二進数表記
000000000000000000000000011011100000000000000000000000001001010100000000000000000000000010011011110000101001100000000101100001010010111000110000000000100010100110110011001011100110001000011000000010011010001100101110
そして、以下のビットフィールド仕様に沿ってパースします。
| # | 項目名 | オフセット | 長さ | 型 | ビット配列 | 値 |
|---|---|---|---|---|---|---|
| 1 | 主力キャラクターID | 0 | 32 | int | 00000000000000000000000001101110 | 110(フィレン) |
| 2 | 支援1キャラクターID | 32 | 32 | int | 00000000000000000000000010010101 | 149 (グレイ) |
| 3 | 支援2キャラクターID | 64 | 32 | int | 00000000000000000000000010011011 | 155(シア) |
| 4 | 主力メイン素質 | 96 | 4(1×4) | int[] | 1100 | 1,1,0,0 |
| 5 | 主力サブ素質 | 100 | 36(3×12) | int[] | 001010011000000001011000010100101110 | 1,2,3,0,0,1,3,0,2,4,5,6 |
| 6 | 支援1メイン素質 | 136 | 4(1×4) | int[] | 0011 | 0,0,1,1 |
| 7 | 支援1サブ素質 | 140 | 36(3×12) | int[] | 000000000010001010011011001100101110 | 0,0,0,2,1,2,3,3,1,4,5,6 |
| 8 | 支援2メイン素質 | 176 | 4(1×4) | int[] | 0110 | 0,1,1,0 |
| 9 | 支援2サブ素質 | 180 | 36(3×12) | int[] | 001000011000000010011010001100101110 | 1,0,3,0,0,2,3,2,1,4,5,6 |
キャラクターIDの対応表
| ID | 名前 | ID | 名前 | ID | 名前 | ID | 名前 |
|---|---|---|---|---|---|---|---|
| 103 | コハク | 118 | クルニス | 133 | ナツカ | 149 | グレイ |
| 107 | ティリア | 119 | ナノハ | 134 | フユカ | 150 | ラール |
| 108 | カシミラ | 120 | カナーチェ | 135 | ミスティ | 155 | シア |
| 110 | フィレン | 123 | アンズ | 141 | チーシア | 156 | ナズナ |
| 111 | アヤメ | 125 | フリージア | 142 | コゼット | 158 | ラール(聖夜) |
| 112 | セイナ | 126 | フローラ | 143 | レイス | 159 | クルニス(華服) |
| 113 | シーミャオ | 127 | テレサ | 144 | チトセ | ||
| 116 | レイセン | 130 | トーナ | 145 | オトハ | ||
| 117 | ジンリン | 132 | ミネルバ | 147 | キャラメル |
サブ素質の順序について
「ゲーム上の表示順」と「デコードされた値の並び順」が一致していません。
例えば下記のように素質を表示順に取得してみます(サブ素質はlv1~lv6を順番に設定)。
この状況下でデコードすると、各素質は下記の値となります。
| # | 項目名 | ビット列 | 値 |
|---|---|---|---|
| 1 | 主力メイン素質 | 1100 | 1,1,0,0 |
| 2 | 主力サブ素質 | 001010011000000001011000010100101110 | 1,2,3,0,0,1,3,0,2,4,5,6 |
| 3 | 支援1メイン素質 | 0011 | 0,0,1,1 |
| 4 | 支援1サブ素質 | 000000000010001010011011001100101110 | 0,0,0,2,1,2,3,3,1,4,5,6 |
| 5 | 支援2メイン素質 | 1010 | 1,0,1,0 |
| 6 | 支援2サブ素質 | 001000011000000010011010001100101110 | 1,0,3,0,0,2,3,2,1,4,5,6 |
ここから分かることは
- メイン素質はUI上の表示順とビット位置が一致する
- サブ素質はUI上の表示順とビット位置が一致しない
つまり、各サブ素質は固定のビット位置を有しており、それは表示順とはまた別に管理されていますので、仮に正確なデコードを実装するにはサブ素質ごとのビット位置を調査する必要があります。


