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

Mario Kart 8/Kiosk Demo (April 4th, 2016)

From The Cutting Room Floor
Jump to navigation Jump to search
So very stubbly.
This page is rather stubbly and could use some expansion.
Are you a bad enough dude to rescue this article?

This is a sub-page of Mario Kart 8.

A kiosk demo for Mario Kart 8.

Debug Folder

A folder named debug wasn't fully removed, with leftovers that were most likely used by debug builds of the game.

Build Date and Resource Revision

Present in the root of the directory are the files builddate.dat and resourcerev.dat, respectively stating the the build date (04/16 14:58:16) and resource revision (96168).

Symbol Map

A symbol map for a non-Production build of the executable was left in the root directory, under the filename Turbo.map. The metadata states it was built on a Windows 7 PC on Wed Apr 16 14:58:55 2014 however the map does not match the provided executable due to it being a Production build which stripped the debug code.

Download.png Download Debug Build Symbol Map
File: MK8_RetailDemo_SymbolMap.zip (966 KB) (info)


gfx Folder

All SARC files have SHARC files with plaintext shader data for AGL and GSys inside, same for the one SHARC file.

Download.png Download Sources for AGL shaders
File: MK8_RetailDemo_Dev_ShaderSource.zip (194 KB) (info)


gx2_font Directory

Leftovers from LayoutViewer in the NW4F SDK.

Scripts

Cacti speak Japanese.
...But what does it mean?
This game has text or audio that needs to be translated. If you are fluent with this language, please read our translation guidelines and then submit a translation!

partsCheck.nut

function main()
{
    local startPCIdx = 0;       // テストするPCのインデックス
    local testPCNum = 1;        // テストするPCの台数
    local startIdx = 0;         // 開始インデックス
    local comp = false;         // Masterのみで全パターン試すか
    local mii = true;           // Miiあり


    local max_pattern = Game.RaceInfo.GetMaxPatternIdx(4,false,false)
    local jobNum = (max_pattern / testPCNum) + 1;     // PC一台あたりの仕事量
    local partsStartIdx = jobNum * startPCIdx + startIdx;
    local courseIdx = 0;
    local end = false;
    
    Game.System.WaitFrame(2);
    while( !end && startIdx < jobNum )
    {
        Game.System.WaitFrame(2);

        end = Game.RaceInfo.SetNextPartsSetAll4( partsStartIdx + startIdx, comp, mii );
        
        if( !end )
        {
            Game.RaceInfo.SetNextCourse( Course.Gu_MarioCircuit + courseIdx );
            ++courseIdx;
            courseIdx = courseIdx % 32;

	        print( "[Squirrel] __PARTS_CHECK_START__" + startIdx + ".\n" );

        	// 決定ボタンを押してレースに入る
    		local controller = Game.Controller.CreateUI(0);
    		controller.PressButton( UIButton.Decide );
    		controller.Reflect();

        	// レース待ち
            Game.System.WaitNextScene();
        	Game.System.WaitFrame(30);

        	controller.PressButton(UIButton.Decide);
        	controller.Reflect();
        	
        	Game.System.WaitNextPage();
            
            ++startIdx;
        }
    }

    Game.Test.End( true );
}

random_menu_debug.nut

//---------------------------------------------
//
// 自動でレースに入るテスト
//
//---------------------------------------------

function main()
{
	// メニューに入るのを待つ
	Game.System.WaitNextScene();
	Game.System.WaitFrame( 60 );

	controller <- Game.Controller.CreateUI(0);

	controller.PressButton( UIButton.Up );
	controller.Reflect();
	Game.System.WaitFrame(1);

	controller.PressButton( UIButton.OK );
	controller.Reflect();
	Game.System.WaitFrame(1);

	Game.System.WaitNextScene();

	Game.Controller.Recognize(0, ControllerType.DRC);
	Game.Controller.Recognize(1, ControllerType.WiiRemoteSolo);

	Game.System.WaitFrame( 120 );

	controller.PressButton( UIButton.Down );
	controller.Reflect();
	Game.System.WaitFrame(10);

	controller.PressButton( UIButton.OK );
	controller.Reflect();
	Game.System.WaitFrame(10);
	
	while(1){
		controller1 <- Game.Controller.CreateUI(0);
		controller1.PressButton( UIButton.Right );
		controller1.Reflect();

		controller2 <- Game.Controller.CreateUI(1)
		controller2.PressButton( UIButton.Down );
		controller2.Reflect();
		
		Game.System.WaitRandomFrame(1, 10);
	}
}

test.nut

function main()
{
	Game.System.WaitNextScene();

	{
		local controller = Game.Controller.CreateUI(0);

		controller.PressButton(UIButton::OK);
		controller.Reflect();
	}

}

test_race.nut

//---------------------------------------------
//
// 自動でレースに入るテスト
//
//---------------------------------------------

function main()
{

	//----------------------------------
	// 設定
	//----------------------------------
	local test_frame     = 5 * 60					// 計測するフレーム数
	local course_id      = 0;						// テストするコースのID
	local course_name    = "Gu_MarioCircuit";		// テストするコースの名前
	local output_yaml    = false;					// 処理計測の yaml を出力するか
	local output_capture = false;					// 処理落ちのスクリーンショットを出力するか
	local master_num     = 1;						// プレイヤーの数

	// CPU
	local driver_name	= [Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario, Driver.Mario];
	local body_name		= [Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std, Body.K_Std];
	local tire_name		= [Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std, Tire.Std];
	local wing_name		= [Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std, Wing.Std];
	local worst_mii		= -1;
	local ctrl			= [ControllerType.DRC, ControllerType.WiiRemoteSolo, ControllerType.WiiRemoteSolo, ControllerType.WiiRemoteSolo];

	// 定点観測箇所
	local snap_available	= false;												// 観測するかどうか
	local snap_beginindex	= 0;													// 観測番号の開始index
	local snap_max			= 3;													// 観測枚数
	local cam_pos			= [ [0, 0,  -10.0], [0, 0,  -10.0], [0, 0,  -10.0] ];	// 観測座標(pos)
	local cam_at			= [ [0, 0, 	0], [0, 0,	0], [0, 0,	0] ];				// 観測座標(at)
	local screenshot_dir	= "D:";													// スクリーンショットの保存場所
	
	//----------------------------------
	// テスト
	//----------------------------------
	// デバッグメニューに入るのを待つ
	Game.System.WaitScene( SceneID.DebugMenu );
	Game.System.WaitFrame( 60 );
	print( "[Squirrel] DebugMenu enter.\n" );

	// 処理落ちスクリーンショットを出力するか設定
	if( output_capture )
	{
		Game.Test.EnableCapture();
	}

	// ドライバーとパーツをセットする
	local i;

	for( i = 0;  i < master_num;  ++i )
	{
		Game.RaceInfo.SetNextWholeKart( i, PlayerType.Master, driver_name[i], body_name[i], tire_name[i], wing_name[i] );
	}

	for( ;  i < 12;  ++i )
	{
		Game.RaceInfo.SetNextWholeKart( i, PlayerType.CPU, driver_name[i], body_name[i], tire_name[i], wing_name[i] );
	}

	// コントローラをセットする
	Game.System.WaitFrame( 5 );

	for( i = 0;  i < master_num;  ++i )
	{
		Game.Controller.Recognize( i, ctrl[i] );
	}

	Game.System.WaitFrame( 5 );

	// ワーストMii 12体 にする
	if( worst_mii >= 0 )
	{
		Game.System.SetWorstMii( worst_mii );
	}

	// コースをセットする
	if( course_id >= 0 )
	{
		Game.RaceInfo.SetNextCourse( course_id );
	}
	else
	{
		Game.RaceInfo.SetNextTestCourse( course_name );
	}

	// レースモードを Test にする
	Game.RaceInfo.SetNextRaceMode( Play.Local, Rule.Test, Enter.Race );

	// 決定ボタンを押してレースに入る
	controller <- Game.Controller.CreateUI(0);
	controller.PressButton( UIButton.Decide );
	controller.Reflect();

	// レースに入るのを待つ
	Game.System.WaitNextScene();
	print( "[Squirrel] Race enter.\n" );

	// レースに入ったら、一定時間待つ
	Game.System.WaitFrame( test_frame );

	// yaml出力
	if( output_yaml )
	{
		Game.System.SuspendGameThread();
		Game.Test.PutsProcYaml();
		Game.System.ResumeGameThread();
	}

	// 定点観測
	if ( snap_available != false )
	{
		// デバッグスクリーン無効
		Game.Test.DisableDebugScreen();

		// デバッグ描画無効
		Game.Test.DisableDebugDraw();

		// 処理バー消去
		dcontroller <- Game.Controller.CreateDebug();
		dcontroller.PressButton( DebugButton.Z | DebugButton.Right );
		dcontroller.Reflect();
		Game.System.WaitFrame( 2 );
		dcontroller.PressButton( DebugButton.Z | DebugButton.Right );
		dcontroller.Reflect();
		Game.System.WaitFrame( 1 );

		// 二秒待つ
		Game.System.WaitFrame( 120 );

		// 周回観測撮影
		local kart = Game.Kart.Create(5);
		for (i=0; i<4; ++i)
		{
			local mtx = Game.Test.GetTestStartMtx( i )
			Game.System.SuspendGameThread();
			kart.Reset();
			kart.SetMtx(mtx);
			Game.System.ResumeGameThread();
			Game.System.WaitFrame( 2 );
			Game.Test.SnapScreen( screenshot_dir, i + snap_beginindex );
		}

		// UI消去
		dcontroller.PressButton( DebugButton.R | DebugButton.L | DebugButton.Up );
		dcontroller.Reflect();

		Game.System.WaitFrame( 120 );

		// カリング無効
		Game.Test.DisableCulling();

		// カメラセット
		Game.Test.AttachCamera();

		// 撮影
		local n;
		for (n=0; n<snap_max; ++n)
		{
			Game.Test.SetCameraPos(
				Game.Test.GetVector3f( cam_pos[n][0], cam_pos[n][1], cam_pos[n][2] ),
				Game.Test.GetVector3f( cam_at[n][0], cam_at[n][1], cam_at[n][2] ),
				Game.Test.GetVector3f( 0.0, 1.0, 0.0 ),
				56.0
			);
			Game.System.WaitFrame( 2 );
			Game.Test.SnapScreen( screenshot_dir, n + 4 + snap_beginindex );
		}

		Game.System.WaitFrame( 120 );
	}

	// テスト終了
	Game.Test.End();

}

test_title.nut

//---------------------------------------------
//
// 自動でレースに入るテスト
//
//---------------------------------------------

function main()
{
	print( "[Squirrel] Start test_title.nut\n" );

	//----------------------------------
	// テスト
	//----------------------------------
	// デバッグメニューに入るのを待つ
	Game.System.WaitScene( SceneID.DebugMenu );
	Game.System.WaitFrame( 60 );
	print( "[Squirrel] Entered DebugMenu.\n" );

	// コントローラをセットする
	Game.Controller.Recognize( 0, ControllerType.DRC );

	// タイトルへ
	controller <- Game.Controller.CreateUI(0);

	Game.System.WaitFrame( 10 );
	controller.PressButton( UIButton.Up );
	controller.Reflect();

	Game.System.WaitFrame( 10 );
	controller.PressButton( UIButton.OK );
	controller.Reflect();

	Game.System.WaitNextScene();
	Game.System.WaitFrame( 20 );

	// タイトルで10回くらいAボタン押す
	Game.Controller.Recognize( 0, ControllerType.DRC );
	controller <- Game.Controller.CreateUI(0);
	local i;
	for(i=0;i<11;i++)
	{
		Game.System.WaitFrame( 60 );
		controller.PressButton( UIButton.OK );
		controller.Reflect();
	}
	Game.System.WaitFrame( 300 );

	// テスト終了
	Game.Test.End();
}

Unknown XML File

There's an XML file called snapcamera_info.xml. It is not known what this is used for.

<?xml version="1.0" encoding="utf-8"?>
<snap_camera_info format-version="2013-05" language="ja">

	<course name="Gu_MarioCircuit">
		<snap_available>true</snap_available>
		<snap_beginindex>0</snap_beginindex>
		<snap_max>2</snap_max>
		<cam_pos>[ [-383.42, 2931.29, -931.10], [-700.00, 3136.51, 320.79] ]</cam_pos>
		<cam_at>[ [-392.58, 2931.97, -882.81], [-631.87, 3083.40, 645.92] ]</cam_at>
	</course>
	<course name="Gu_Expert">
		<snap_available>true</snap_available>
		<snap_beginindex>6</snap_beginindex>
		<snap_max>2</snap_max>
		<cam_pos>[ [1039.828, 1929.794, -2320.251], [-535.314, 5509.352, 2007.498] ]</cam_pos>
		<cam_at>[  [980.340, 1903.015, -2198.546],  [-535.299, 5421.264, 2008.783] ]</cam_at>
	</course>
	<course name="Gu_Ocean">
		<snap_available>true</snap_available>
		<snap_beginindex>12</snap_beginindex>
		<snap_max>2</snap_max>
		<cam_pos>[ [-544.878, 1421.169, 1888.901], [3070.654, 1198.968, -1882.904] ]</cam_pos>
		<cam_at>[  [-240.463, 1335.869, 1967.313], [2830.759, 1128.128, -1738.266] ]</cam_at>
	</course>
	<course name="Gu_Cloud">
		<snap_available>true</snap_available>
		<snap_beginindex>18</snap_beginindex>
		<snap_max>2</snap_max>
		<cam_pos>[ [-803.598, 2593.699, -2023.524], [3930.619, 3354.679, 2392.996] ]</cam_pos>
		<cam_at>[  [-644.812, 2583.936, -1928.528], [3175.667, 3377.062, 2186.490] ]</cam_at>
	</course>
	<course name="Gu_WaterPark">
		<snap_available>true</snap_available>
		<snap_beginindex>24</snap_beginindex>
		<snap_max>2</snap_max>
		<cam_pos>[ [-1382.559, 1162.894, 2351.215], [546.849, 880.395, 771.440] ]</cam_pos>
		<cam_at>[  [-1065.294, 1121.404, 1363.156], [-110.402, 487.601, 1819.613] ]</cam_at>
	</course>                                            


</snap_camera_info>