If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

User:OlieGamerTV/Club Penguin: Game Day! Unused Code

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of User:OlieGamerTV.

Throughout the game, there are remnants of a lot of code from an older period of time. From test scripts to full on unused and removed code.

Unused Squirrel Scripts

The simplest of the bunch. There are a whole bunch of script files that never get called left in the game for the Hub scene.

Early Opening Cutscene Scripts

A seemingly scrapped opening for the game, complete with characters. Crashes when attempted to load in due to missing animation files.

Script Name Code
Demo_op_Main.nut
// インクルードスクリプト
IncludeScript( "Demo/Demo_op_referee.nut" );
IncludeScript( "Demo/Demo_op_red.nut" );
IncludeScript( "Demo/Demo_op_blue.nut" );
IncludeScript( "Demo/Demo_op_green.nut" );
IncludeScript( "Demo/Demo_op_yellow.nut" );
IncludeScript( "Demo/Demo_op_title.nut" );

// 配置データを読み込む
LoadSetData("hub/set/Demo_op.set" );

// フェードありデモ開始
function Demo_op_Main()
{
	PlayFadeDemo( Demo_op_Main_DemoInit, Demo_op_Main_DemoMain, Demo_op_Main_DemoEnd, FADE_TIME_DEFAULT, FADE_COLOR_DEFAULT )
}

// デモ開始の暗転中に行う処理を実行
function Demo_op_Main_DemoInit()
{
   // 最初に呼び出す処理を実行
   local func = Demo_op_Main_func41
   while(func)
   {
       func = func();
   }
}

// デモのメイン処理
function Demo_op_Main_DemoMain()
{
   // 最初に呼び出す処理を実行
   local func = Demo_op_Main_func3
   while(func)
   {
       func = func();
   }
}

// デモ終了の暗転中に行う処理を実行
function Demo_op_Main_DemoEnd()
{
   // 最初に呼び出す処理を実行
   local func = Demo_op_Main_func32
   while(func)
   {
       func = func();
   }
}

function Demo_op_Main_func1()
{
	CameraLoadMotion( "Demo_op_camera", "demo_op_cam" )
	return Demo_op_Main_func2
}

function Demo_op_Main_func2()
{

	local pos = ::GetLocaterPos("SET_Demo_op");
	local rot = ::GetLocaterRot("SET_Demo_op");
	
	// カメラモーション再生
	CameraPlayMotion( "Demo_op_camera", pos ,rot );
	
	// ポーズ状態で待機
	PauseCameraMotion( true );
	return Demo_op_Main_func43
}

function Demo_op_Main_func3()
{
	PauseCameraMotion( false )
	return Demo_op_Main_func9
}

function Demo_op_Main_func4()
{
	RestoreCamera( FrameTime * 0 );
	return Demo_op_Main_func45
}

function Demo_op_Main_func5()
{
	WaitCameraMotion()
	return null
}

function Demo_op_Main_func8()
{
	CreateNPC( Demo_op_referee )
	return Demo_op_Main_func24
}

function Demo_op_Main_func9()
{
	PauseMotion( "Demo_op_referee", false )
	return Demo_op_Main_func28
}

function Demo_op_Main_func12()
{
	WaitCameraMotionFrame( 360 )
	return Demo_op_Main_func13
}

function Demo_op_Main_func13()
{
	WaitCameraMotionFrame( 420 )
	return Demo_op_Main_func15
}

function Demo_op_Main_func14()
{
	WaitCameraMotionFrame( 240 )
	return Demo_op_Main_func12
}

function Demo_op_Main_func15()
{
	WaitCameraMotionFrame( 480 )
	return Demo_op_Main_func16
}

function Demo_op_Main_func16()
{
	WaitCameraMotionFrame( 540 )
	return Demo_op_Main_func17
}

function Demo_op_Main_func17()
{
	WaitCameraMotionFrame( 600 )
	return Demo_op_Main_func18
}

function Demo_op_Main_func18()
{
	WaitCameraMotionFrame( 835 )
	return Demo_op_Main_func42
}

function Demo_op_Main_func19()
{
	WaitCameraMotionFrame( 1380 )
	return Demo_op_Main_func20
}

function Demo_op_Main_func20()
{
	WaitCameraMotionFrame( 1400 )
	return Demo_op_Main_func21
}

function Demo_op_Main_func21()
{
	WaitCameraMotionFrame( 1420 )
	return Demo_op_Main_func22
}

function Demo_op_Main_func22()
{
	WaitCameraMotionFrame( 1440 )
	return Demo_op_Main_func23
}

function Demo_op_Main_func23()
{
	WaitCameraMotionFrame( 1460 )
	return Demo_op_Main_func5
}

function Demo_op_Main_func24()
{
	CreateNPC( Demo_op_red )
	return Demo_op_Main_func25
}

function Demo_op_Main_func25()
{
	CreateNPC( Demo_op_blue )
	return Demo_op_Main_func26
}

function Demo_op_Main_func26()
{
	CreateNPC( Demo_op_green )
	return Demo_op_Main_func27
}

function Demo_op_Main_func27()
{
	CreateNPC( Demo_op_yellow )
	return Demo_op_Main_func1
}

function Demo_op_Main_func28()
{
	PauseMotion( "Demo_op_red", false )
	return Demo_op_Main_func29
}

function Demo_op_Main_func29()
{
	PauseMotion( "Demo_op_blue", false )
	return Demo_op_Main_func30
}

function Demo_op_Main_func30()
{
	PauseMotion( "Demo_op_green", false )
	return Demo_op_Main_func31
}

function Demo_op_Main_func31()
{
	PauseMotion( "Demo_op_yellow", false )
	return Demo_op_Main_func37
}

function Demo_op_Main_func32()
{
	DeleteNPC( "Demo_op_referee" )
	return Demo_op_Main_func33
}

function Demo_op_Main_func33()
{
	DeleteNPC( "Demo_op_red" )
	return Demo_op_Main_func34
}

function Demo_op_Main_func34()
{
	DeleteNPC( "Demo_op_blue" )
	return Demo_op_Main_func35
}

function Demo_op_Main_func35()
{
	DeleteNPC( "Demo_op_green" )
	return Demo_op_Main_func36
}

function Demo_op_Main_func36()
{
	DeleteNPC( "Demo_op_yellow" )
	return Demo_op_Main_func4
}

function Demo_op_Main_func37()
{
	CreateEffectDemo( 0, "ef_demo_op_01a0000", "SET_Demo_op_eff00" )
	return Demo_op_Main_func38
}

function Demo_op_Main_func38()
{
	CreateEffectDemo( 20, "ef_demo_op_01a0000", "SET_Demo_op_eff01" )
	return Demo_op_Main_func39
}

function Demo_op_Main_func39()
{
	CreateEffectDemo( 40, "ef_demo_op_01a0000", "SET_Demo_op_eff02" )
	return Demo_op_Main_func40
}

function Demo_op_Main_func40()
{
	CreateEffectDemo( 60, "ef_demo_op_01a0000", "SET_Demo_op_eff03" )
	return Demo_op_Main_func14
}

function Demo_op_Main_func41()
{
	AddDemoResource( ::TEAMCOL_ALL, ::DEMO_OP )
	return Demo_op_Main_func8
}

function Demo_op_Main_func42()
{
	PlayDemoLayout( ::TEAMCOL_ALL, ::DEMO_OP )
	return Demo_op_Main_func19
}

function Demo_op_Main_func43()
{
	// タイムラインを作成
	Demo_op_title();
	return Demo_op_Main_func44
}

function Demo_op_Main_func44()
{
	EnableDof( false )
	return null
}

function Demo_op_Main_func45()
{
	EnableDof( true )
	return null
}
Demo_op_title.nut
    // 赤リーダー
    function Demo_op_title_func1()
    {
	DispCaptionDemo( 360, 60, UITEXT_adv_common_op_002_000 )
	return Demo_op_title_func2
    }
    // 青リーダー
    function Demo_op_title_func2()
    {
	DispCaptionDemo( 420, 60, UITEXT_adv_common_op_003_000 )
	return Demo_op_title_func3
    }
  
    // 緑リーダー
    function Demo_op_title_func3()
    {
	DispCaptionDemo( 480, 60, UITEXT_adv_common_op_004_000 )
	return Demo_op_title_func4
    }
  
    // 黄リーダー
    function Demo_op_title_func4()
    {
	DispCaptionDemo( 540, 60, UITEXT_adv_common_op_005_000 )
	return Demo_op_title_func6
    }
  
    // ついにこの時が
    function Demo_op_title_func5()
    {
	DispCaptionDemo( 130, 110, UITEXT_adv_common_op_000_000 )
	return Demo_op_title_func8
    }
  
    // 4つのチームによる戦いの始まり
    function Demo_op_title_func6()
    {
	DispCaptionDemo( 600, 110, UITEXT_adv_common_op_006_000 )
	return Demo_op_title_func9
    }
  
    // 6つのハブ
    function Demo_op_title_func7()
    {
	DispCaptionDemo( 900, 110, UITEXT_adv_common_op_008_000 )
	return Demo_op_title_func10
    }
  
    // Games Day.それは・・
    function Demo_op_title_func8()
    {
    
	DispCaptionDemo( 240, 110, UITEXT_adv_common_op_001_000 )
	return Demo_op_title_func1
    }
  
    // 最後に残るチームは・・・
    function Demo_op_title_func9()
    {
	DispCaptionDemo( 720, 110, UITEXT_adv_common_op_007_000 )
	return Demo_op_title_func7
    }
  
    // コンカーしていくのです
    function Demo_op_title_func10()
    {
	DispCaptionDemo( 1120, 110, UITEXT_adv_common_op_009_000 )
	return null
    }
  

// Demo_op_titleを作成
function Demo_op_title()
{
	// 初期化処理を実行
	local func = null
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_title_Loop )
}

// 作成 & 実行処理
function Demo_op_title_Loop()
{
	local func = Demo_op_title_func5

	while( func )
	{
		func = func();
	}
}
Demo_op_referee.nut
    function Demo_op_referee_func2()
    {
	PenguinLoadExtraMotion( "Demo_op_referee_mot", "demo_op_referee" )
	return Demo_op_referee_func4
    }
  
    function Demo_op_referee_func4()
    {
	// モーションの登録と再生を同時に行う
	PenguinEntryExtraMotion( "Demo_op_referee", "Demo_op_referee_mot" )
	PlayMotion( "Demo_op_referee" , ::Penguin.MOTION_EXTRA + 0 );

	// ポーズ状態で待機
	PauseMotion( "Demo_op_referee", true );
	return null
    }
  
// Demo_op_refereeを作成
function Demo_op_referee()
{
	// ペンギンを作成
	local isSp = ::Penguin.JUDGE;
	if( isSp != -1 )
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_referee", isSp );
	}
	else
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_referee" )
		
		// カラーを設定
		PenguinSetColor( "Demo_op_referee", 1 )
	}

	// キャラ・マップ両方のコリジョンを無効に設定
	IgnoreMapColli(	"Demo_op_referee", true );
	IgnoreChrColli(	"Demo_op_referee", true );
		
	// 位置と向きを設定
	local pos = GetLocaterPos( "SET_Demo_op" );
	local rot = GetLocaterRot( "SET_Demo_op" );
	InitPos( "Demo_op_referee", pos, rot );

	// 初期化処理を実行
	local func = Demo_op_referee_func2
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_referee_Loop )
}

// 作成 & 実行処理
function Demo_op_referee_Loop()
{
	local func = null

	while( func )
	{
		func = func();
	}
}
Demo_op_red.nut
    function Demo_op_red_func1()
    {
	PenguinLoadExtraMotion( "Demo_op_red_mot", "demo_op_red" )
	return Demo_op_red_func2
    }
  
    function Demo_op_red_func2()
    {
	// モーションの登録と再生を同時に行う
	PenguinEntryExtraMotion( "Demo_op_red", "Demo_op_red_mot" )
	PlayMotion( "Demo_op_red" , ::Penguin.MOTION_EXTRA + 0 );

	// ポーズ状態で待機
	PauseMotion( "Demo_op_red", true );
	return null
    }
  
    // 表情変化
    function Demo_op_red_func3()
    {
	PenguinSetFaceDemo( 310, "Demo_op_red", 5, 2 )
	return Demo_op_red_func4
    }
  
    // 表情通常に戻る
    function Demo_op_red_func4()
    {
	PenguinSetFaceDemo( 420, "Demo_op_red", 2, 0 )
	return Demo_op_red_func5
    }
  
    // 表情変化
    function Demo_op_red_func5()
    {
	PenguinSetFaceDemo( 630, "Demo_op_red", 1, 0 )
	return Demo_op_red_func6
    }
  
    // 表情通常に戻る
    function Demo_op_red_func6()
    {
	PenguinSetFaceDemo( 680, "Demo_op_red", 2, 0 )
	return Demo_op_red_func7
    }
  
    // 表情変化
    function Demo_op_red_func7()
    {
	PenguinSetFaceDemo( 790, "Demo_op_red", 5, 0 )
	return Demo_op_red_func8
    }
  
    // 表情通常に戻る
    function Demo_op_red_func8()
    {
	PenguinSetFaceDemo( 840, "Demo_op_red", 2, 0 )
	return Demo_op_red_func9
    }
  
    // 表情変化
    function Demo_op_red_func9()
    {
	PenguinSetFaceDemo( 1380, "Demo_op_red", 2, 3 )
	return Demo_op_red_func10
    }
  
    // 表情通常に戻る
    function Demo_op_red_func10()
    {
	PenguinSetFaceDemo( 1500, "Demo_op_red", 2, 0 )
	return null
    }

// Demo_op_redを作成
function Demo_op_red()
{
	// ペンギンを作成
	local isSp = ::Penguin.NPC_RED00;
	if( isSp != -1 )
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_red", isSp );
	}
	else
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_red" )
		
		// カラーを設定
		PenguinSetColor( "Demo_op_red", 8 )
	}

	// キャラ・マップ両方のコリジョンを無効に設定
	IgnoreMapColli(	"Demo_op_red", true );
	IgnoreChrColli(	"Demo_op_red", true );
		
	// 位置と向きを設定
	local pos = GetLocaterPos( "SET_Demo_op" );
	local rot = GetLocaterRot( "SET_Demo_op" );
	InitPos( "Demo_op_red", pos, rot );

	// 初期化処理を実行
	local func = Demo_op_red_func1
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_red_Loop )
}

// 作成 & 実行処理
function Demo_op_red_Loop()
{
	local func = Demo_op_red_func3
	while( func )
	{
		func = func();
	}
}
Demo_op_blue.nut
    function Demo_op_blue_func1()
    {
	PenguinLoadExtraMotion( "Demo_op_blue_mot", "demo_op_blue" )
	return Demo_op_blue_func2
    }
  
    function Demo_op_blue_func2()
    {
	// モーションの登録と再生を同時に行う
	PenguinEntryExtraMotion( "Demo_op_blue", "Demo_op_blue_mot" )
	PlayMotion( "Demo_op_blue" , ::Penguin.MOTION_EXTRA + 0 );

	// ポーズ状態で待機
	PauseMotion( "Demo_op_blue", true );
	return null
    }
  
    // 表情変化
    function Demo_op_blue_func3()
    {
	PenguinSetFaceDemo( 270, "Demo_op_blue", 2, 0 )
	return Demo_op_blue_func4
    }
  
    // 表情通常に戻る
    function Demo_op_blue_func4()
    {
	PenguinSetFaceDemo( 490, "Demo_op_blue", 2, 0 )
	return Demo_op_blue_func7
    }
  
    // 表情変化
    function Demo_op_blue_func5()
    {
	PenguinSetFaceDemo( 1400, "Demo_op_blue", 1, 0 )
	return Demo_op_blue_func6
    }
  
    // 表情通常に戻る
    function Demo_op_blue_func6()
    {
	PenguinSetFaceDemo( 1510, "Demo_op_blue", 2, 0 )
	return null
    }
  
    // 表情変化
    function Demo_op_blue_func7()
    {
	PenguinSetFaceDemo( 600, "Demo_op_blue", 2, 0 )
	return Demo_op_blue_func8
    }
  
    // 表情通常に戻る
    function Demo_op_blue_func8()
    {
	PenguinSetFaceDemo( 820, "Demo_op_blue", 2, 0 )
	return Demo_op_blue_func5
    }

// Demo_op_blueを作成
function Demo_op_blue()
{
	// ペンギンを作成
	local isSp = ::Penguin.NPC_BLUE00;
	if( isSp != -1 )
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_blue", isSp );
	}
	else
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_blue" )
		
		// カラーを設定
		PenguinSetColor( "Demo_op_blue", 0 )
	}

	// キャラ・マップ両方のコリジョンを無効に設定
	IgnoreMapColli(	"Demo_op_blue", true );
	IgnoreChrColli(	"Demo_op_blue", true );
		
	// 位置と向きを設定
	local pos = GetLocaterPos( "SET_Demo_op" );
	local rot = GetLocaterRot( "SET_Demo_op" );
	InitPos( "Demo_op_blue", pos, rot );

	// 初期化処理を実行
	local func = Demo_op_blue_func1
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_blue_Loop )
}

// 作成 & 実行処理
function Demo_op_blue_Loop()
{
	local func = Demo_op_blue_func3
	while( func )
	{
		func = func();
	}
}
Demo_op_yellow.nut
    function Demo_op_yellow_func1()
    {
	PenguinLoadExtraMotion( "Demo_op_yellow_mot", "demo_op_yellow" )
	return Demo_op_yellow_func2
    }
  
    function Demo_op_yellow_func2()
    {
	// モーションの登録と再生を同時に行う
	PenguinEntryExtraMotion( "Demo_op_yellow", "Demo_op_yellow_mot" )
	PlayMotion( "Demo_op_yellow" , ::Penguin.MOTION_EXTRA + 0 );

	// ポーズ状態で待機
	PauseMotion( "Demo_op_yellow", true );
	return null
    }
  
    // 表情変化
    function Demo_op_yellow_func3()
    {
	PenguinSetFaceDemo( 535, "Demo_op_yellow", 5, 7 )
	return Demo_op_yellow_func5
    }
  
    // 表情通常に戻る
    function Demo_op_yellow_func5()
    {
	PenguinSetFaceDemo( 605, "Demo_op_yellow", 2, 0 )
	return Demo_op_yellow_func6
    }
  
    // 表情変化
    function Demo_op_yellow_func6()
    {
	PenguinSetFaceDemo( 685, "Demo_op_yellow", 5, 7 )
	return Demo_op_yellow_func7
    }
  
    // 表情通常に戻る
    function Demo_op_yellow_func7()
    {
	PenguinSetFaceDemo( 755, "Demo_op_yellow", 2, 0 )
	return Demo_op_yellow_func8
    }
  
    // 表情変化
    function Demo_op_yellow_func8()
    {
	PenguinSetFaceDemo( 1430, "Demo_op_yellow", 5, 7 )
	return Demo_op_yellow_func9
    }
  
    // 表情通常に戻る
    function Demo_op_yellow_func9()
    {
	PenguinSetFaceDemo( 1490, "Demo_op_yellow", 2, 0 )
	return null
    }
  
// Demo_op_yellowを作成
function Demo_op_yellow()
{
	// ペンギンを作成
	local isSp = ::Penguin.NPC_YELLOW00;
	if( isSp != -1 )
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_yellow", isSp );
	}
	else
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_yellow" )
		
		// カラーを設定
		PenguinSetColor( "Demo_op_yellow", 4 )
	}

	// キャラ・マップ両方のコリジョンを無効に設定
	IgnoreMapColli(	"Demo_op_yellow", true );
	IgnoreChrColli(	"Demo_op_yellow", true );
		
	// 位置と向きを設定
	local pos = GetLocaterPos( "SET_Demo_op" );
	local rot = GetLocaterRot( "SET_Demo_op" );
	InitPos( "Demo_op_yellow", pos, rot );

	// 初期化処理を実行
	local func = Demo_op_yellow_func1
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_yellow_Loop )
}

// 作成 & 実行処理
function Demo_op_yellow_Loop()
{
	local func = Demo_op_yellow_func3

	while( func )
	{
		func = func();
	}
}
Demo_op_green.nut
    function Demo_op_green_func1()
    {
	PenguinLoadExtraMotion( "Demo_op_green_mot", "demo_op_green" )
	return Demo_op_green_func2
    }
  
    function Demo_op_green_func2()
    {
	// モーションの登録と再生を同時に行う
	PenguinEntryExtraMotion( "Demo_op_green", "Demo_op_green_mot" )
	PlayMotion( "Demo_op_green" , ::Penguin.MOTION_EXTRA + 0 );

	// ポーズ状態で待機
	PauseMotion( "Demo_op_green", true );
	return null
    }
  
    // 表情変化
    function Demo_op_green_func3()
    {
	PenguinSetFaceDemo( 480, "Demo_op_green", 2, 2 )
	return Demo_op_green_func4
    }
  
    // 表情通常に戻る
    function Demo_op_green_func4()
    {
	PenguinSetFaceDemo( 540, "Demo_op_green", 2, 0 )
	return null
    }

// Demo_op_greenを作成
function Demo_op_green()
{
	// ペンギンを作成
	local isSp = ::Penguin.NPC_GREEN00;
	if( isSp != -1 )
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_green", isSp );
	}
	else
	{
		// ペンギン作成
		PenguinCreate( "Demo_op_green" )
		
		// カラーを設定
		PenguinSetColor( "Demo_op_green", 10 )
	}

	// キャラ・マップ両方のコリジョンを無効に設定
	IgnoreMapColli(	"Demo_op_green", true );
	IgnoreChrColli(	"Demo_op_green", true );
		
	// 位置と向きを設定
	local pos = GetLocaterPos( "SET_Demo_op" );
	local rot = GetLocaterRot( "SET_Demo_op" );
	InitPos( "Demo_op_green", pos, rot );

	// 初期化処理を実行
	local func = Demo_op_green_func1
	while(func)
	{
		func = func();
	}
	
	// スレッドを作成
	CreateThread( Demo_op_green_Loop )
}

// 作成 & 実行処理
function Demo_op_green_Loop()
{
	local func = Demo_op_green_func3

	while( func )
	{
		func = func();
	}
}

hub01_town_Com_ESNPC_SS.nut

An unused NPC script for Bean Balance featuring an older version of the EventStartNPC class, lacking a motion parameter in its constructor.

// hub01_town_Com_ESNPC_SS イベント起動NPCクラス
class hub01_town_Com_ESNPC_SS_class extends EventStartNPC
{
	// コンストラクタ
	constructor(_name,_start,_select,_end,_event)
	{
		::EventStartNPC.constructor(_name,_start,_select,_end,_event)
	}
}
// 死亡フラグ
DEAFFLAG_hub01_town_Com_ESNPC_SS <- false;

// hub01_town_Com_ESNPC_SSを作成
function hub01_town_Com_ESNPC_SS()
{
	// NPC情報を設定
	SettingNPC( "hub01_town_Com_ESNPC_SS", "SET_hub01_town_Com_ESNPC_SS", 1, ::COLLI_TYPE_FIX, ::Penguin.SENSEI );
	
	// スレッドを作成
	CreateThread( hub01_town_Com_ESNPC_SS_Loop )
}

// 作成 & 実行処理
function hub01_town_Com_ESNPC_SS_Loop()
{
	// イベント起動NPCクラスを作成
	local instance = hub01_town_Com_ESNPC_SS_class( "hub01_town_Com_ESNPC_SS", UITEXT_Event_SS_00_00, UITEXT_Event_SS_01_01, UITEXT_Event_SS_02_00, ::COFFEEBAGS )
	
	// NPCを実行
	while( 1 )
	{
		// 死亡フラグが立ったら、スレッド終了
		if( DEAFFLAG_hub01_town_Com_ESNPC_SS == true )
		{
			return;
		}
	
		instance.Exec();
				
		Wait();
	}
}

hub02_village_Com_SSNPC_01.nut

An unused NPC script for the cut Snow Sports Shopkeeper. It pulls up the regular catalogue if interacted with.

// hub02_village_Com_SSNPC_01 イベント起動NPCクラス
class hub02_village_Com_SSNPC_01_class extends ShopStartNPC
{
	// コンストラクタ
	constructor(_name,_start,_select,_motion)
	{
		::ShopStartNPC.constructor(_name,_start,_select,_motion)
	}
}
// 死亡フラグ
DEAFFLAG_hub02_village_Com_SSNPC_01 <- false;

// hub02_village_Com_SSNPC_01を作成
function hub02_village_Com_SSNPC_01()
{
	// NPC情報を設定
	SettingNPC( "hub02_village_Com_SSNPC_01", "SET_hub02_village_Com_SSNPC_01", 0, ::COLLI_TYPE_FIX, -1 );
	
	// スレッドを作成
	CreateThread( hub02_village_Com_SSNPC_01_Loop )
}

// 作成 & 実行処理
function hub02_village_Com_SSNPC_01_Loop()
{
	// イベント起動NPCクラスを作成
	local instance = hub02_village_Com_SSNPC_01_class( "hub02_village_Com_SSNPC_01", UITEXT_Shop_SS_00_00, UITEXT_Shop_SS_01_01, -1 )
	
	// NPCを実行
	while( 1 )
	{
		// 死亡フラグが立ったら、スレッド終了
		if( DEAFFLAG_hub02_village_Com_SSNPC_01 == true )
		{
			return;
		}
	
		instance.Exec();
				
		Wait();
	}
}

hub05_skihill_BLUE_SS_TEST.nut

A test NPC for the Ski Hill. This was likely used to test choice messages and the catalogues.

// hub05_skihill_BLUE_SS_TEST 会話NPCクラス
class hub05_skihill_BLUE_SS_TEST_class extends TalkNPC
{
	// コンストラクタ
	constructor(_name)
	{
		::TalkNPC.constructor(_name)
	}

	function Talk()
	{
		// 最初に呼び出す処理を実行
		local func = hub05_skihill_BLUE_SS_TEST_func1
		while(func)
		{
			func = func();
		}
	}

    function hub05_skihill_BLUE_SS_TEST_func1()
    {
	DispMessageWaitNoClose( UITEXT_Shop_SS_00_00, -1 )
	return hub05_skihill_BLUE_SS_TEST_func2
    }
  
    function hub05_skihill_BLUE_SS_TEST_func2()
    {
	DispSelectMessage3NoClose( UITEXT_Shop_SS_01_01, UITEXT_Shop_SS_01_02, UITEXT_Shop_SS_01_03 )
	
	switch( GetSelectMessage() )
	{
	case 0:
		return hub05_skihill_BLUE_SS_TEST_func3
		break;
	case 1:
		return hub05_skihill_BLUE_SS_TEST_func3
		break;
	case 2:
		return null
		break;
	}
    }
  
    function hub05_skihill_BLUE_SS_TEST_func3()
    {
	OpenShopCatalog()
	return null
    }
}
// 死亡フラグ
DEAFFLAG_hub05_skihill_BLUE_SS_TEST <- false;

// hub05_skihill_BLUE_SS_TESTを作成
function hub05_skihill_BLUE_SS_TEST()
{
	// NPC情報を設定
	SettingNPC( "hub05_skihill_BLUE_SS_TEST", "SET_hub01_town_Blue_cha1_TNPC_01", 0, ::COLLI_TYPE_FIX, -1 );
	
	// スレッドを作成
	CreateThread( hub05_skihill_BLUE_SS_TEST_Loop )
}

// 作成 & 実行処理
function hub05_skihill_BLUE_SS_TEST_Loop()
{
	// 会話NPCを作成
	local instance = hub05_skihill_BLUE_SS_TEST_class( "hub05_skihill_BLUE_SS_TEST" )
	
	// NPCを実行
	while( 1 )
	{
		// 死亡フラグが立ったら、スレッド終了
		if( DEAFFLAG_hub05_skihill_BLUE_SS_TEST == true )
		{
			return;
		}
		instance.Exec();	
		Wait();
	}
}

Test Scripts

A few test scripts were also left in the game files in /test/script, which just run a bunch of tests to ensure things are working.

Script Name Code
test.nut
IncludeScript("test/script/test2.nut");

// シーンの初期化周り

// シーン読み込み
LoadScene("scene/village.scene");
// モデルリソース登録
AddResourceModel("hub/hub_village_00.cmpres");
// バイナリリソース登録
AddResourceBin("hub/hub_village_bin_00.cmparc");

// 最初に作られるスレッド
function main()
{
	// フェードイン
	FadeIn(1.0);
	
	// シーン開始
	StartScene();
	
	// フェード待ち
	WaitFade();
	
	local vec1 = Vector(1.2,2.2,3.2);
	local vec2 = Vector(2.7,5.5,6.4);
	
	print("vec1.x : "+vec1.x+"\n");
	print("vec1.y : "+vec1.y+"\n");
	print("vec1.z : "+vec1.z+"\n");
	print("vec2.x : "+vec2.x+"\n");
	print("vec2.y : "+vec2.y+"\n");
	print("vec2.z : "+vec2.z+"\n");
	
	vec1 = vec1 + vec2;
	
	print("(vec1+vec2).x : "+vec1.x+"\n");
	print("(vec1+vec2).y : "+vec1.y+"\n");
	print("(vec1+vec2).z : "+vec1.z+"\n");
	
	print("math.PI : "+math.PI+"\n");
	
	CreateThread(TestThread1);
	
	local id = CreateThread(TestThread3);
	while(ExistThread(id))
	{
		Wait();
	}
	
	// フェードアウト
	FadeOut(1.0);
	// フェード待ち
	WaitFade();
	
	print("End\n");
}

function TestThread1()
{
	CreateThread(TestThread2);
	
	print("test1\n");
}

function TestThread2()
{
	print("test2\n");
}


test2.nut
function TestThread3()
{
	for(local i=0; i<16; i++)
	{
		print("test3 : " + i + "\n");
		Wait(0.5);
	}
}
test_hub1.nut
// 共通処理
//IncludeScript("test/script/common.nut");

// シーン読み込み
Grp.LoadScene("scene/village.scene");
// モデルリソース登録
Grp.AddResourceModel("hub/hub_village_00.cmpres");
// バイナリリソース登録
Grp.AddResourceBin("hub/hub_village_bin_00.cmparc");

// 最初に作られるスレッド
function main()
{
	// シーン開始
	Grp.StartScene();
	
	// セットデータ読み込み
	Hub.LoadSetData("test/script/village.set");
	// アクティビティ作成
	Hub.CreateActivity(2,"village_ukiwa_act.rmdl",Hub.ACTIVITY_POINT_PRESS,false);
	// プレーヤー作成
	Hub.CreatePlayer();
	
	// フェードイン
	Grp.FadeIn(1.0);
	// フェード待ち
	Grp.WaitFade();
	
	while(!Input.Press(0,Input.B))
	{
		Wait();
	}
	
	// フェードアウト
	Grp.FadeOut(1.0);
	// フェード待ち
	Grp.WaitFade();
	// シーン終了
	Hub.ChangeScene(Hub.TOWN);
}
test_hub2.nut
// シーンの初期化周り

// シーン読み込み
LoadScene("scene/town.scene");
// モデルリソース登録
AddResourceModel("hub/hub_town_00.cmpres");
// バイナリリソース登録
AddResourceBin("hub/hub_town_bin_00.cmparc");


// 最初に作られるスレッド
function main()
{
	// プレーヤー作成
	CreatePlayer();
	// シーン開始
	StartScene();
	// フェードイン
	Grp.FadeIn(1.0);
	// フェード待ち
	Grp.WaitFade();
	
	while(!Input.Press(0,Input.B))
	{
		Wait();
	}
	
	// フェードアウト
	Grp.FadeOut(1.0);
	// フェード待ち
	Grp.WaitFade();
	// シーン終了
	ChangeScene(HUB_VILLAGE);
}

Unused Squirrel Functions

Found inside some of the Squirrel scripts, functions that are left completely unused can still be found.

DoPuzzle

A function for starting and ending some kind of puzzle minigame, will crash the game when called due to the puzzle functions used no longer existing. Found in command.nut.

// パズル実行
function DoPuzzle( port )
{
	// キャラの停止
	PauseGroupChara(true,::LEVEL_DEMO);
	// 全プレーヤー移動停止
	StopAllPlayer();
	
	// メニュー閉じる
	CloseMenu(true);
	// メニュー消去
	DispMenu(false);

	// パズル開く
	OpenPuzzle( port );

	// パズル中
	while( GetPuzzleState() == ::PUZZLE_STATE_PLAY )
	{
		Wait();
	}
	
	local res = GetPuzzleState();
	
	// パズル閉じる
	ClosePuzzle();
	
	// メニュー表示
	DispMenu(true);
	
	// キャラの停止解除
	PauseGroupChara(false,::LEVEL_DEMO);
	
	// パズルが成功した?
	if( res == ::PUZZLE_STATE_SUCCESS )
	{
		return true;
	}
	
	return false;
}

PenguinPlayCoffeeWait

A function for assigning a coffee cup to a specified penguin. Neither of the models referenced exist in the final files. Found in command.nut.

// コーヒー持ってる待機モーションに設定
function PenguinPlayCoffeeWait( name, coffee )
{
	local model = "gimd_coffeecup02";
	if( coffee == false )
	{
		model = "gimd_coffeecup01";
	}

	PenguinSetExpandParts( name, ::Penguin.EXPNODE_HAND_R, model, false );
	
	// デフォルトの待機モーションに登録
	PenguinSetWaitMotion( name, ::Penguin.MOTION_COFFEE_WAIT );

	PlayMotion( name, ::Penguin.MOTION_COFFEE_WAIT );
}

PlayBinocularsDemo

A function for playing a potential binoculars cutscene. This likely would have utilized the demo_binoculars_cam animation left in /hub/hub_common.cmpres. Found in demo.nut.

// 双眼鏡デモを再生する
function PlayBinocularsDemo( initFunc, mainFunc, endFunc )
{
	local fadeTime = FADE_TIME_DEFAULT;
	local fadeColor = FADE_COLOR_DEFAULT;

	// フレーム数をタイムに変換
	fadeTime *= FrameTime
	
	// デモ状態に
	EnterDemo();
	
	// フェードアウト・・暗転開始
	Grp.FadeOut( fadeTime, fadeColor );
	// フェード待ち
	Grp.WaitFade();
	
	// NPC非表示に
	VisibleGroupChara(false,::LEVEL_DEMO);

	// 初期化処理を実行
	initFunc();
	
	// 双眼鏡マスク表示
	OpenBinoculars( 0 );
	
	// フェードイン・・暗転終了
	Grp.FadeIn( fadeTime, fadeColor );
	// フェード待ち
	Grp.WaitFade();
	
	// デモメイン処理実行
	do
	{
		mainFunc();
	}
	while( IsEndBinoculars() == false);
	
	// フェードアウト・・暗転開始
	Grp.FadeOut( fadeTime, fadeColor );
	// フェード待ち
	Grp.WaitFade();
	
	// 終了処理を実行
	endFunc();
	
	// 双眼鏡マスク非表示
	CloseBinoculars();
	
	// NPC表示に
	VisibleGroupChara(true,::LEVEL_DEMO);
	
	// フェードイン・・暗転終了
	Grp.FadeIn( fadeTime, fadeColor );
	// フェード待ち
	Grp.WaitFade();
	
	// デモ終了
	ExitDemo();
}

Unused Executable Functions

There's a fair amount of classes and functions within the actual executable code and the connected RSO modules that aren't used in the final game, yet are still present.
For simplicity, these are all based around the American release, and the addresses they are first created at.

CrossCountryKey

This class can be found in main.dol. It is likely tied to a scrapped minigame that still has assets present in the final files. The functions left in this are the following:

CrossCountryKey
Function Name Symbol Name Location
Game::Hikey::CrossCountryKey::IsSwing IsSwing__Q34Game5Hikey15CrossCountryKeyFv 800d4428
Game::Hikey::CrossCountryKey::IsSwingX IsSwingX__Q34Game5Hikey15CrossCountryKeyFv 800d44e4
Game::Hikey::CrossCountryKey::Update Update__Q34Game5Hikey15CrossCountryKeyFv 800d41d4
Game::Hikey::CrossCountryKey::~CrossCountryKey __dt__Q34Game5Hikey15CrossCountryKeyFv 800d4590

WifiNews

This class can be found in penguin_maker.rso. It was likely intended to be a newspaper the player could receive through the internet. The functions left in this are the following:

WifiNews
Function Name Symbol Name Location
WifiRoom::WifiNews::WifiNews __ct__Q28WifiRoom8WifiNewsFP 814d061c
WifiRoom::WifiNews::~WifiNews __dt__Q28WifiRoom8WifiNewsFv 814d07b0
WifiRoom::WifiNews::Create Create__Q28WifiRoom8WifiNewsFv 814d0828
WifiRoom::WifiNews::Release Release__Q28WifiRoom8WifiNewsFv 814d08a4
WifiRoom::WifiNews::Update Update__Q28WifiRoom8WifiNewsFv 814d08b0
WifiRoom::WifiNews::SendNewspaper SendNewspaper__Q28WifiRoom8WifiNewsFP 814d0b28
WifiRoom::WifiNews::SendJpegData SendJpegData__Q28WifiRoom8WifiNewsF 814d1054
WifiRoom::WifiNews::GetRTI GetRTI__Q28WifiRoom8WifiNewsCFv 814d11ac

WifiDlgPoll

This class can be found in penguin_maker.rso. It was likely intended to be a vote poll that the player could receive through the internet. The functions left in this are the following:

WifiDlgPoll
Function Name Symbol Name Location
WifiRoom::WifiDlgPoll::WifiDlgPoll __ct__Q28WifiRoom11WifiDlgPollFP 814ccf28
WifiRoom::WifiDlgPoll::~WifiDlgPoll __dt__Q28WifiRoom11WifiDlgPollFv 814cd23c
WifiRoom::WifiDlgPoll::Release Release__Q28WifiRoom11WifiDlgPollFv 814cd2b4
WifiRoom::WifiDlgPoll::Create Create__Q28WifiRoom11WifiDlgPollFv 814cd310
WifiRoom::WifiDlgPoll::SetPollText SetPollText__Q28WifiRoom11WifiDlgPollFRC 814cd680
WifiRoom::WifiDlgPoll::SetPercent SetPercent__Q28WifiRoom11WifiDlgPollFRC 814cd9fc
WifiRoom::WifiDlgPoll::ClearPercent ClearPercent__Q28WifiRoom11WifiDlgPollFv 814cdb9c
WifiRoom::WifiDlgPoll::SetResultView SetResultView__Q28WifiRoom11WifiDlgPollFv 814cdc88
WifiRoom::WifiDlgPoll::CalcPollPos CalcPollPos__Q28WifiRoom11WifiDlgPollFi 814cdcfc
WifiRoom::WifiDlgPoll::exec exec__Q28WifiRoom11WifiDlgPollFv 814cde74
WifiRoom::WifiDlgPoll::GetResult GetResult__Q28WifiRoom11WifiDlgPollFv 814cdf7c
WifiRoom::WifiDlgPoll::GetRTI GetRTI__Q28WifiRoom11WifiDlgPollCFv 814ce1d8

Along with these, there's also a button and selector class present for the same functionality.

WifiDlgPollButton

WifiDlgPollButton
Function Name Symbol Name Location
WifiRoom::WifiDlgPollButton::WifiDlgPollButton __ct__Q28WifiRoom17WifiDlgPollButtonFP 814cdf84
WifiRoom::WifiDlgPollButton::IsSelectAnmEnd IsSelectAnmEnd__Q28WifiRoom17WifiDlgPollButtonCFv 814cdfdc
WifiRoom::WifiDlgPollButton::Update Update__Q28WifiRoom17WifiDlgPollButtonFv 814ce03c
WifiRoom::WifiDlgPollButton::GetRTI GetRTI__Q28WifiRoom17WifiDlgPollButtonCFv 814ce1e4
WifiRoom::WifiDlgPollButton::~WifiDlgPollButton __dt__Q28WifiRoom17WifiDlgPollButtonFv 814ce294

WifiDlgPollSelector

WifiDlgPollSelector
Function Name Symbol Name Location
WifiRoom::WifiDlgPollSelector::WifiDlgPollSelector __ct__Q28WifiRoom19WifiDlgPollSelectorFP 814ce0cc
WifiRoom::WifiDlgPollSelector::UpMove UpMove__Q28WifiRoom19WifiDlgPollSelectorFv 814ce124
WifiRoom::WifiDlgPollSelector::DownMove DownMove__Q28WifiRoom19WifiDlgPollSelectorFv 814ce17c
WifiRoom::WifiDlgPollSelector::GetRTI GetRTI__Q28WifiRoom19WifiDlgPollSelectorCFv 814ce1f0
WifiRoom::WifiDlgPollSelector::~WifiDlgPollSelector __dt__Q28WifiRoom19WifiDlgPollSelectorFv 814ce1fc