the cutting room mirror

Developer Leftovers

This is a sub-page of Splatoon 3.

Sub-Pages#

Layouts#

The game has a small number of layouts defined that do not have files present. As of v1.1.0, the references were silently removed but added back in v1.2.0 and then removed again in v2.0.0 onward.

Development Shaders#

Download Development Shaders

File: SPL3_Development_Shaders.zip (913 KB) (info)

Various shaders tagged with the develop tag were accidentally added to the files in the Drizzle Season 2023 (Version 5.0.0) update, and were subsequently removed in the Version 5.0.1 update a week later.
Most of the shaders were for the skyboxes seen in most stages, but other ones such as a shader for the Shipshape Cargo Co. stage and the King Mesh Tee were also included.

Uncompiled Shaders#

To do:
Any more archives with them?

The BtnSelectFriend_00 layout archive of the game data (of v1.1.0+) has the original source shaders in the bgsh dirctory.

#if NW_COMBINERUSERSHADER_TYPE == 1
#include "ColorGap_05.glsl"
#endif
//
// Generated shader code
//

#ifndef _SGEFUNC_ADD_FLOAT_FLOAT_
#define _SGEFUNC_ADD_FLOAT_FLOAT_
float Add( float a, float b )
{
    return a + b;
}
#endif // _SGEFUNC_ADD_FLOAT_FLOAT_
#ifndef _SGEFUNC_ADD_VEC2_VEC2_
#define _SGEFUNC_ADD_VEC2_VEC2_
vec2 Add( vec2 a, vec2 b )
{
    return a + b;
}
#endif // _SGEFUNC_ADD_VEC2_VEC2_
#ifndef _SGEFUNC_CLAMP01_FLOAT_
#define _SGEFUNC_CLAMP01_FLOAT_
float Clamp01( float x )
{
    return clamp( x, 0.0, 1.0 );
}
#endif // _SGEFUNC_CLAMP01_FLOAT_
#ifndef _SGEFUNC_INVERSE_FLOAT_
#define _SGEFUNC_INVERSE_FLOAT_
float Inverse( float x )
{
    return 1.0 / x;
}
#endif // _SGEFUNC_INVERSE_FLOAT_
#ifndef _SGEFUNC_INVERSE_VEC3_
#define _SGEFUNC_INVERSE_VEC3_
vec3 Inverse( vec3 x )
{
    return vec3( 1.0 / x.x, 1.0 / x.y, 1.0 / x.z );
}
#endif // _SGEFUNC_INVERSE_VEC3_
#ifndef _SGEFUNC_MIX_VEC4_VEC4_VEC4_
#define _SGEFUNC_MIX_VEC4_VEC4_VEC4_
vec4 Mix( vec4 x, vec4 y, vec4 a )
{
    return mix( x, y, a );
}
#endif // _SGEFUNC_MIX_VEC4_VEC4_VEC4_
#ifndef _SGEFUNC_MULTIPLY_FLOAT_FLOAT_
#define _SGEFUNC_MULTIPLY_FLOAT_FLOAT_
float Multiply( float x, float y )
{
    return x * y;
}
#endif // _SGEFUNC_MULTIPLY_FLOAT_FLOAT_
#ifndef _SGEFUNC_MULTIPLY_VEC2_FLOAT_
#define _SGEFUNC_MULTIPLY_VEC2_FLOAT_
vec2 Multiply( vec2 x, float y )
{
    return x * y;
}
#endif // _SGEFUNC_MULTIPLY_VEC2_FLOAT_
#ifndef _SGEFUNC_MULTIPLY_VEC3_VEC3_
#define _SGEFUNC_MULTIPLY_VEC3_VEC3_
vec3 Multiply( vec3 x, vec3 y )
{
    return x * y;
}
#endif // _SGEFUNC_MULTIPLY_VEC3_VEC3_
#ifndef _SGEFUNC_MULTIPLY_VEC4_VEC4_
#define _SGEFUNC_MULTIPLY_VEC4_VEC4_
vec4 Multiply( vec4 x, vec4 y )
{
    return x * y;
}
#endif // _SGEFUNC_MULTIPLY_VEC4_VEC4_
#ifndef _SGEFUNC_SUB_VEC2_VEC2_
#define _SGEFUNC_SUB_VEC2_VEC2_
vec2 Sub( vec2 a, vec2 b )
{
    return a - b;
}
#endif // _SGEFUNC_SUB_VEC2_VEC2_
#ifndef _SGEFUNC_OUTPUT_VEC4_
#define _SGEFUNC_OUTPUT_VEC4_
void Output( vec4 color )
{
    OUTPUT_COLOR = color;

    // alpha processing
    OUTPUT_COLOR.a = CalcAlphaProcess( OUTPUT_COLOR.a );

    // custom shader
    FinalAdjustmentFragmentColor();

}
#endif // _SGEFUNC_OUTPUT_VEC4_
#ifndef _SGEFUNC_GETTEXTURE0UV_
#define _SGEFUNC_GETTEXTURE0UV_
vec2 GetTexture0UV()
{
    return nwTextureCoord0;
}
#endif // _SGEFUNC_GETTEXTURE0UV_
#ifndef _SGEFUNC_GETTEXTURE0_VEC2_
#define _SGEFUNC_GETTEXTURE0_VEC2_
vec4 GetTexture0( vec2 uv )
{
    vec4 color = texture( nwAlbedoTexture0, uv );
    return color;
}
#endif // _SGEFUNC_GETTEXTURE0_VEC2_
#ifndef _SGEFUNC_GETCONSTANTCOLORBLACK_
#define _SGEFUNC_GETCONSTANTCOLORBLACK_
vec4 GetConstantColorBlack()
{
    return nwConstantColor0;
}
#endif // _SGEFUNC_GETCONSTANTCOLORBLACK_
#ifndef _SGEFUNC_GETCONSTANTCOLORWHITE_
#define _SGEFUNC_GETCONSTANTCOLORWHITE_
vec4 GetConstantColorWhite()
{
    return nwConstantColor1;
}
#endif // _SGEFUNC_GETCONSTANTCOLORWHITE_
#ifndef _SGEFUNC_GETEXUSERDATAVEC3_0_
#define _SGEFUNC_GETEXUSERDATAVEC3_0_
vec3 GetExUserDataVec3_0()
{
    return nwExUserDataVec3_0;
}
#endif // _SGEFUNC_GETEXUSERDATAVEC3_0_
#ifndef _SGEFUNC_GETEXUSERDATAVEC3_1_
#define _SGEFUNC_GETEXUSERDATAVEC3_1_
vec3 GetExUserDataVec3_1()
{
    return nwExUserDataVec3_1;
}
#endif // _SGEFUNC_GETEXUSERDATAVEC3_1_
#ifndef _SGEFUNC_GETEXUSERDATAVEC2_0_
#define _SGEFUNC_GETEXUSERDATAVEC2_0_
vec2 GetExUserDataVec2_0()
{
    return nwExUserDataVec2_0;
}
#endif // _SGEFUNC_GETEXUSERDATAVEC2_0_
#ifndef _SGEFUNC_GETVERTEXCOLOR_
#define _SGEFUNC_GETVERTEXCOLOR_
vec4 GetVertexColor()
{
    return vColor;
}
#endif // _SGEFUNC_GETVERTEXCOLOR_
#ifndef _SGEFUNC_COMBF4_FLOAT_FLOAT_FLOAT_FLOAT_
#define _SGEFUNC_COMBF4_FLOAT_FLOAT_FLOAT_FLOAT_
vec4 CombF4( float f1, float f2, float f3, float f4 )
{
    return vec4( f1, f2, f3, f4 );
}
#endif // _SGEFUNC_COMBF4_FLOAT_FLOAT_FLOAT_FLOAT_
#ifndef _SGEFUNC_DIVF3_FLOAT_FLOAT_FLOAT_VEC3_
#define _SGEFUNC_DIVF3_FLOAT_FLOAT_FLOAT_VEC3_
void DivF3( out float f0, out float f1, out float f2, vec3 v3 )
{
    f0 = v3.x;
    f1 = v3.y;
    f2 = v3.z;
}
#endif // _SGEFUNC_DIVF3_FLOAT_FLOAT_FLOAT_VEC3_

void main()
{
    vec4 GetConstantColorBlack_return_23831 = GetConstantColorBlack();

    vec4 GetConstantColorWhite_return_23915 = GetConstantColorWhite();

    vec3 GetExUserDataVec3_0_return_16172 = GetExUserDataVec3_0();

    vec3 Inverse_return_16558 = Inverse(vec3(255.0, 255.0, 255.0));

    vec3 Multiply_return_16359 = Multiply(GetExUserDataVec3_0_return_16172, Inverse_return_16558);

    float DivF3_f0_17119;
    float DivF3_f1_17119;
    float DivF3_f2_17119;
    DivF3(DivF3_f0_17119, DivF3_f1_17119, DivF3_f2_17119, Multiply_return_16359);

    vec2 GetTexture0UV_return_397 = GetTexture0UV();

    vec2 GetExUserDataVec2_0_return_22286 = GetExUserDataVec2_0();

    float Inverse_return_22926 = Inverse(100.0);

    vec2 Multiply_return_22803 = Multiply(GetExUserDataVec2_0_return_22286, Inverse_return_22926);

    vec2 Add_return_463 = Add(GetTexture0UV_return_397, Multiply_return_22803);

    vec4 GetTexture0_return_178 = GetTexture0(Add_return_463);

    float Multiply_return_17466 = Multiply(DivF3_f0_17119, GetTexture0_return_178.w);

    vec3 GetExUserDataVec3_1_return_16264 = GetExUserDataVec3_1();

    vec3 Multiply_return_16887 = Multiply(GetExUserDataVec3_1_return_16264, Inverse_return_16558);

    float DivF3_f0_17227;
    float DivF3_f1_17227;
    float DivF3_f2_17227;
    DivF3(DivF3_f0_17227, DivF3_f1_17227, DivF3_f2_17227, Multiply_return_16887);

    vec2 Sub_return_668 = Sub(GetTexture0UV_return_397, Multiply_return_22803);

    vec4 GetTexture0_return_839 = GetTexture0(Sub_return_668);

    float Multiply_return_18231 = Multiply(DivF3_f0_17227, GetTexture0_return_839.w);

    float Add_return_19050 = Add(Multiply_return_17466, Multiply_return_18231);

    float Multiply_return_17715 = Multiply(DivF3_f1_17119, GetTexture0_return_178.w);

    float Multiply_return_18498 = Multiply(DivF3_f1_17227, GetTexture0_return_839.w);

    float Add_return_19335 = Add(Multiply_return_17715, Multiply_return_18498);

    float Multiply_return_17970 = Multiply(DivF3_f2_17119, GetTexture0_return_178.w);

    float Multiply_return_18771 = Multiply(DivF3_f2_17227, GetTexture0_return_839.w);

    float Add_return_19626 = Add(Multiply_return_17970, Multiply_return_18771);

    float Add_return_20334 = Add(GetTexture0_return_178.w, GetTexture0_return_839.w);

    float Clamp01_return_20643 = Clamp01(Add_return_20334);

    vec4 CombF4_return_19923 = CombF4(Add_return_19050, Add_return_19335, Add_return_19626, Clamp01_return_20643);

    vec4 Mix_return_24001 = Mix(GetConstantColorBlack_return_23831, GetConstantColorWhite_return_23915, CombF4_return_19923);

    vec4 GetVertexColor_return_24309 = GetVertexColor();

    vec4 Multiply_return_24416 = Multiply(Mix_return_24001, GetVertexColor_return_24309);

    Output(Multiply_return_24416);

}

Locker Goods Capture#

In the 1.0.0 revision of the game, a debug folder named LockerGoodsCapture exists that is not present in any subsequent version. This folder contains parameter files to set a camera position for certain gear types. Based on the name, these files are likely leftovers used to capture the icons for items and gear.

Text#

To do:
v1.0.0 also has some unlocalized entries.

Message Test#

CommonMsg/MsgTest.msbt is referenced in the game executable. Unfortunately the file was removed from the product. The following string IDs are present.

Msg_Test_01
Msg_Test_02
Msg_Test_03
Msg_Test_04
Msg_Test_05
Msg_Test_06
Msg_Test_07
Msg_Test_20
Msg_Test_21
Msg_Test_30
Msg_Test_31
Msg_Test_32

Test X Menu#

LayoutMsg/Cmn_TestXMenu_00.msbt is currently present in all releases, only containing a single text line for all languages.

Shop

Region Change#

To do:
Fix the encoding if possible, the string ID is referenced by the executable.

SystemWindow/SystemMsg_CloudSave.msbt in v1.1.0 has a string entry for likely telling the user to change their region to a non-Japanese one after rebooting. Interestingly, it has different localizations for the new languages, Korean and Chinese.

Msg_ConfirmFestRegion_Reboot (String ID)

Japanese

<color id="1"/><fun_00110004 arg="0x00000000"/><color id="65535"/>向けのフェスは、
日本語に対応していません
フェスの開催中は、ソフトを再起動してゲーム内の表示を
<color id="1"/><fun_00120004 arg="0x00000000"/><color id="65535"/>に切り替える必要があります
それでもよろしいですか?

Simplified Chinese

面向<color id="1"/><fun_00110004 arg="0x00000000"/><color id="65535"/>举行的祭典
并未对应简体中文。
举行祭典期间,必须重新启动软件,
将游戏内容切换为以<color id="1"/><fun_00120004 arg="0x00000000"/><color id="65535"/>显示。
是否仍要选择此地区?

Korean

<color id="1"/><fun_00110004 arg="0x00000000"/><color id="65535"/>의 페스티벌은
한국어에 대응하지 않습니다
페스티벌 개최 중에는 소프트웨어를 재기동하여 게임 내 표시를
<color id="1"/><fun_00120004 arg="0x00000000"/><color id="65535"/><fun_000800C9 arg="0x04003CC75CB802005CB8"/> 전환해야 합니다
그래도 괜찮겠습니까?

Traditional Chinese

此為<color id="1"/><fun_00110004 arg="0x00000000"/><color id="65535"/>舉行的祭典
並未對應繁體中文。
祭典舉行期間,必須重新啟動軟體,
將遊戲內容切換為以<color id="1"/><fun_00120004 arg="0x00000000"/><color id="65535"/>顯示。
是否仍確定要選擇此地區?

Locker Debug Menu#

LayoutMsg/Lobby_TestLockerCaption_00.msbt is present in v1.0.0 with multiple entries referencing debug controls. The layout file under the same name was removed but referenced in the game executable and memory heap size configuration (with a size of 15512 bytes). Interestingly, a layout named TestLockerBtn_00 is also mentioned in the game executable to most likely reference this file but again, was removed. The other layout file referenced in both is Lobby_TestLockerMenu_00 (with a size of 100400 bytes).

String ID

Japanese

Japanese (Translated)

T_text_00

X:デバッグ生成
X: Debug Creation

T_text_01

A:つかむ・はなす
A: Grab/Release

T_text_02

B:けす
B: Erase

T_text_03

ZL/ZR:おおきく回転
ZL/ZR: Large Rotation

T_text_04

L/R:ちいさく回転
L/R: Small Rotation

T_text_05

左右キー:えらぶ
Left/Right: Select

T_text_06

右スティック:向きを変える
Right Stick: Change Direction

T_text_07

左スティック:カーソル移動
Left Stick: Move Cursor

T_text_08

●おける
●Place

T_text_09

●おけぬ
●Don't Place

Bug Reporting#

CommonMsg/Dev.msbt contains a single text entry, being a template most likely relating to a feature used by developer/playtester builds of the game to interactively report bugs to programmers. There's no references for this file and/or text entry in any form so it is unsure if this is entirely hardcoded or referenced in a layout. It has most likely the same text translated so we don't really need to manually translate.

String ID

Text

BugReportContent

――――
■手順 / Procedures
1.
2.
3.

■結果 / Result

■試行回数 / Number of attempts
X/X

■備考 / Remarks

――――

Debug Scenes#

To do:
More explanation.

Name

Internal Label

Internal Label (Translated/Localized)

Version Added

Version Removed

Notes

Dev Portal

開発ポータル

Development Portal

1.0.0

2.0.0

Likely equivalent to DbgSetting in previous games

EnemyTest

99_Msn エネミーテストシーン

99_Msn Enemy Test Scene

1.0.0

2.0.0

MapPartsTest

99_Msn マップパーツテストシーン

99_Msn Map Parts Test Scene

1.0.0

2.0.0

MiniGameEditDeckTest

ミニゲーム デッキエディタテスト

MiniGame Deck Editor Test

1.2.0

2.0.0

MiniGameTest

ミニゲームテスト

MiniGame Test

1.2.0

2.0.0

MiniGameUICheck

ミニゲームUIチェックシーン

MiniGame UI Check Scene

1.2.0

2.0.0

ObjectTest

99_Msn オブジェクトテストシーン

99_Msn Object Test Scene

1.0.0

2.0.0

PlayerViewer

プレイヤービューワー

Player Viewer

1.2.0

2.0.0

Debug tool to view players with a large degree of customization options, often used to make promotional renders

TestMatchScene

P2Pテストマッチシーン

P2P Test Match Scene

1.0.0

2.0.0

Likely equivalent to DbgSetting's matchmaking in previous games

UICheck

UIチェックシーン

UI Check Scene

1.2.0

2.0.0

UniformNameCheck

お揃い称号チェックシーン

Matching Title Check Scene

1.2.0

2.0.0

Vss_TF0905

Test マサバ 鹿野01

Test "Mackerel Kano"01

1.0.0

1.1.0

Likely a Hammerhead Bridge TestField

(Source: Splatoon Datasheets)