
Contents
Starlightとは
StarlightとはSplatoon 2の実行ファイルにhookして自由自在にプログラムを実行することができるツールのこと。

導入のハードルが高いこともあり、恐らく唯一の日本語で書かれたStarlight導入記事だと思います、もっと褒めていいぞ。
サブルーチンをhookして別のコードを実行できるのでこんなこともできちゃう。
ただし、注意点としてバージョンが3.1.0まででしか動作しません。
3.1.0のNSPの入手はかなり困難なので、現実的には1.0.0を用いることが多いでしょう。
WSL導入の手引き
WSLとはWindows Subsystem for Linuxの略で、Windowsで動作するLinuxのことです。
Starlightを導入するためにはLinuxが必要不可欠なので、WSLの導入が必要になってきます。
まずはコントロールパネルから “プログラムと機能” と検索しましょう。

Windows Subsystem for Linuxがデフォルトではチェックが外れていると思うのでチェックを入れましょう。
これでWSLの機能が有効化されます。
ただし、このままでは機能が有効化されただけで実際にLinuxはインストールされていないのでLinuxをインストールする必要があります。
定番なのはUbuntuなので今回はそれにしました。16.04と18.04があるのですが今回は16.04を利用します。
チェックを入れると再起動を促されるので、再起動したら下のボタンを押します。
Ubuntu 16.04 LTSのインストール画面になるのでインストールします。
終わったらユーザ名とパスワードを入力してWSLの設定は終了です。
Starlight導入の手引き
ここからが本題なので頑張りましょう。
結構長いのでいくつかのパートに分けて解説します。
レポジトリの更新
これをやっておかないと、各種ツールがインストールできなかったりするので必須。
sudo apt update
devkitpro
自作コードをビルドするために必要、これを開発した人は多分神。
$ wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb $ sudo dpkg -i devkitpro-pacman.deb
環境変数にパスを追加して動くようにします
$ vi ~/.bash_profile
以下のコードを書きます。
export DEVKITPRO=/opt/devkitpro export DEVKITARM=${DEVKITPRO}/devkitARM export DEVKITPPC=${DEVKITPRO}/devkitPPC export PATH=${DEVKITPRO}/tools/bin:$PATH
有効化するために以下のコマンドを叩きます。
$ source ~/.bash_profile
Switch-dev
StarlightはNX向けなのでまずはpacmanでデータをとってきます。
$ dkp-pacman -Sy switch-dev
実行するとどのプラットフォームで開発するか選べるんですが、デフォルトで良いと思うのでエンターキーを押せばいいと思います。
(starlight) me@DESKTOP-AEBKONR:~$ dkp-pacman -Sy switch-dev :: Synchronizing package databases... dkp-libs is up to date dkp-linux is up to date :: There are 6 members in group switch-dev: :: Repository dkp-libs 1) libnx 2) switch-examples :: Repository dkp-linux 3) devkit-env 4) devkitA64 5) general-tools 6) switch-tools Enter a selection (default=all):
全部で43MBくらいのファイルをダウンロードして、インストールしてくれます。
だいたい三分くらいかかります。
keystone
ここで詰まってものすごく時間がかかったので、他の方が詰まらないようにメモを残しておきます。
keystone
まずはkeystoneをmakeするために必要なファイルを用意します。
このkeystoneは不要になったかもしれない?でも一応やっておくと良いかも
$ sudo apt install libssl-dev cmake g++ $ pip install keystone
keystoneの方はpipから簡単にインストールできます。
keystone-engine
keystoneの他にkeystone-engineが必要なのでこちらもインストールします。
こっちは必要だとおもう、多分
$ git clone https://github.com/keystone-engine/keystone.git $ cd keystone $ mkdir build $ cd build $ ../make-share.sh $ sudo make install $ sudo ldconfig $ cd ../bindings/python $ sudo make install3
こっちが死ぬほど動かなかったんですが、多分これで大丈夫です。
keystone-engineのインストールには以下のissueを参考にさせていただきました。
https://github.com/avatartwo/avatar2/issues/23
Python3.7
Ubuntu16.04だとPython3.7がデフォルトで使えないので以下のコマンドで導入します。
sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.7
libnx
Starlightのアップデートでlibnxの編集は不要になりました。
$ git clone https://github.com/switchbrew/libnx $ cd libnx $ vi nx/source/runtime/switch_crt0.s
最終行近くを以下のように変更する。
.global __nx_mod0 __nx_mod0: .ascii "MOD0" .word _DYNAMIC - __nx_mod0 .word __bss_start__ - __nx_mod0 .word __bss_end__ - __nx_mod0 .word __eh_frame_hdr_start - __nx_mod0 .word __eh_frame_hdr_end - __nx_mod0 .word __nx_module_runtime - __nx_mod0 // Replace
変更するのは93行目だけなので問題ないでしょう。
編集が成功したらmakeしてそれをインストールします。
$ make $ sudo make install DEVKITPRO=/opt/devkitpro
何故かbash_profileに設定したDEVKITPROの環境変数を読み取ってくれないので自分で指定しましょう。
このように編集したlibnxを使用すると他のHBが作成できなくなるので注意してください。
Starlight
いよいよ本命のStarlightです。
本家のStarlightでもいいんですが、そのままだとエラーがでる箇所があるので修正版をForkしたものを公開しておきます。
$ git clone https://github.com/tkgstrator/Starlight.git $ cd Starlight $ git checkout wip-menu
現在開発が進んでいるのはmasterではなくてwip-menuなのでブランチを切り替えます。
Makefile
Makefileを自分が使いやすいように編集しましょう。
S2VER ?= 310 S2VERSTR ?= 3.1.0 S2ROMTYPE ?= US IP ?= 192.168.0.14 all: starlight
IPアドレスには自分のニンテンドースイッチのIPアドレスを設定します。このとき、FTPが有効化されていないと接続できないので気をつけましょう。
S2ROMTYPE | |
国内版 | JP |
北米版 | US |
欧州版 | EU |
一応体験版なども使えますが、使う人はいないと思うので省略します。
makeをして以下のように表示されたら成功です。
IPSファイル
できたパッチをコピーする必要があるのですが、Starlightにはコピーするためのコマンドが備わっているのでそれを利用します。
make | パッチ作成のみ |
make clean | 一時ファイル全削除 |
make install | パッチ作成してからコピー |
パッチが上手く作成できるかどうか(ちゃんと環境ができているかどうか)をチェックする目的くらいでしかmakeコマンドは使わず、基本的にはmake installでいいと思います。
ただ、ソースコード(main.cpp)を書き換えた際は一度make cleanを挟まないと同じ一時ファイルを使用してしまうので注意が必要です。
それがめんどくさかったのでぼくのForkではmake installを実行すると自動でmake cleanを行い、常に最新の変更が反映されるようになっています。

実行してみた
無事にStarlightを起動することができました。
Starlightで何ができるかは “Starlight/source/main.cpp” に記述されています。
C++でのコーディングができるなら、なんでもできるということですね。
この記事書くのにすっごい時間かかったので、アマゾンのリンクからいろいろ買ってくれると助かります!!!
自身を天才と信じて疑わないマッドサイエンティスト。二つ上の姉は大英図書館特殊工作部勤務、額の十字架の疵は彼女につけられた。
コメント
Scene変更なども出来ますか?
EventSwitcherという機能があるので、それを使えばできると思います。
Scene変更はデフォルトでそういう機能がついていたようなきがします。
WSLを導入するにはコントロールパネルからプログラムと機能と検索してくださいと書いてあるのですがその後どこを押せばいいのか分からないのですが…
英語版のWindowsなのでわからないのですが、恐らく “Windowsの機能の有効化” のような項目だと思います。
Haxxie氏のStarlionを導入したいんですけど、やり方がわかりません。
導入方法を教えてください。お願いします
導入記事を書いてみました。
Starlionを利用するためにはスプラトゥーンの3.1.0が必要なのですが導入されていますか?
導入してませんでした。
っていうか3.1.0のRomFSとExeFSはどうやって入手するのですか?
あと何でダンプするのですか?
入手するためには3.1.0のバージョンがインストールされたニンテンドースイッチからダンプする以外に方法はありません。
CDNSPというスイッチから証明書を抜き出してニンテンドーのサーバから直接アップデータを(バージョンを指定して)ダウンロードできる仕組みが以前ありましたが使った瞬間速攻でBANされるので意味がありませんし、ダウンロードの仕組みが変わったようで現在は使えないようです。
仮に使えたとしてもBAN覚悟で証明書を公開して他人にアップデータをダウンロードさせてくれるような人はいないと思われます。
Starlightを元がStarlightということはsplatoon 2 BASE(1.0.0)でも対応しますか?
すいませんわかりにくかったですね💦
Starlightをもとにしているならsplatoon 2 BASE(1.0.0)でも対応していますか?
という意味です
はい。StarlionはStarlightをベースにできているので(というかコア機能は100%Starlightです)Starlightが動作できるならStarlionも動作します。
ただ、公開されているStarlionは3.1.0用なので1.0.0では起動しません。1.0.0向けで起動させるためには自分でビルドする必要があります。
また、Starlightも3.1.0向けにしかコーディングされていないので1.0.0向けに移植する必要があります。
ものすごい労力のかかる作業ですが、今更1.0.0でStarlightを動かそうとする人は誰もいないので全部一人でやることになると思います。