【NSMBW】MoreSpritesの導入

こんにちは。ワチです、ReaZ0nです。この記事では、NewerSMBWにMoreSpritesを導入する方法について書いていきます。


環境

NewerSMBW:1.2.0
コンパイラ:Clang (Code Warriorの場合、手順が異なります。)
ROM:JPN v1
More Sprites:v1.1.1

ダウンロード

以下のサイトにアクセスします。

ぶっちゃけ導入方法もここに書いてあるのですが、ここに書かれているのはコンパイラがCode Warriorである前提の導入方法ですので、今回は手順の一部を変更して書いていきます。
ということで、リンク先のkamekフォルダ内のファイルを全てダウンロードしてください。手元にasm_profiles.S, profile.h, profile.S, prifile.cpp, profileid.h, profile.yaml の6つのファイルが用意できたらOKです。

導入

ファイルの移動

ダウンロードしたファイルたちを定位置に移動させます。
asm_profiles.S, profile.h → include フォルダ
profile.S, profile.cpp, profileid.h  src フォルダ
profile.yaml → ルートフォルダ

既存のファイルの編集

ルートフォルダ内の NewerProject.yaml (NewerProjectKP.yanlがある場合はそちらも) を開いて、Newerの行群の直下に

  - processed/profile.yaml

を追加します。
また、同ディレクトリのkamek_base.xファイルを開き、Newerのアドレス群の直下に

	originalSprites = 0x8030a340;
	originalProfiles = 0x8076a748;
	ObjectProfileList = 0x8042a698;
	spriteFiles = 0x8031ab4c;
	profileNames = 0x80320b58;
	searchByProfileId__7fBase_cFUsP7fBase_c = 0x80162E90;

を追加します。
次に、includeフォルダに移動し、game.h ファイルを開きます。fBase_c クラスにある

u16 name;

を、

union {
	u16 name;
	u16 profileId;
};

に変更します。
また、同クラス内の

static fBase_c *search(u32 id);

の下に、

static fBase_c *searchByProfileId(u16 profileId, fBase_c *previous = 0);

を追加します。

Clang向けにファイルの編集

コンパイラにCode Warriorを使用している人は、この工程は全く必要ないです。はい。
ルートフォルダにある profile.yaml を編集します。89行目らへんにある以下のコード↓を、

  - name: SetObjectProfileList
    type: branch_insn
    branch_type: b
    src_addr_pal: 0x80768690
    target_func: 'SetObjectProfileList(void)'

このように変更します。↓

  - name: SetObjectProfileList
    type: branch_insn
    branch_type: b
    src_addr_pal: 0x80768690
    target_func: 'SetObjectProfileList()'

要は、丸括弧内のvoidを消すだけです。これで、ClangでもMore Spritesを使用できるようになります。

終わり

以上です。解散

この記事が気に入ったらサポートをしてみませんか?