the cutting room mirror

Fruit Ninja: Puss In Boots

This article has a talk page!
view on tcrf.net

This game is defunct.
Do note the game no longer works at all without modifications. This is most likely due to the game's servers being shut down. As a result, further official developments with the game are unlikely to happen.

Fruit Ninja: Puss In Boots is a spinoff of Fruit Ninja starring Puss in Boots from the Shrek animated movie franchise, made to promote his 2011 spin-off film.

Compiled Windows executables#

This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Most of them aside from Android v1.04 appear to crash, fix the assets possible.

The assets.zip archive containing the data in the iOS version has four compiled Windows executables of the game, being for the iPhone Lite/Free, iPad/HD Lite/Free and full versions of the two for both devices, all are debug enabled. They all have a Fruit Ninja icon, instead of this game. Despite being built for iOS devices, Android assets can also be used. The Lite/Free and iPad builds use xgs audio files instead of ogg and wav.pcm, they also read string tables starting with translations instead of FruitNinjaPussInBoots. The iPhone build has a lot more printouts compared to the other builds.

Download Fruit Ninja: Puss In Boots (iPhone) Windows executables

File: FNPIB_iPhoneBuild_WindowsEXEs.zip (6727 KB) (info)

Download Fruit Ninja: Puss In Boots (iPad) Windows executables

File: FNPIB_iPadBuild_WindowsEXEs.zip (5693 KB) (info)

Debug Menu#

Pressing 'D' on the keyboard pauses game logic and shows a debug menu with the following options. Unfortunately the debug folder with the textures is missing, making no textures visible, you can find it along with readable textures in the Final Android version. You can change the input by altering Input/Input.txt. Every option aside from QUIT plays a click sound.

Option

In-game effect

FRAME STEP

Advances one frame.

CHALLENGE SELECT

Shows a menu with the following options:

Option

In-game effect

DISABLE CHALLENGE OVERRIDE

Disables the challenge override from below.

%s

Event to override the one selected next time, only present in Bandito mode.

PARTICLE EDITOR

Unknown? Doesn't appear to work on iPhone.

FORCE_RESULT

Instant result toggle. Can be set to NO FORCE RESULT, being using standard game logic to determine a win or a loss. FORCE PASS forcing a success or FORCE FAIL forcing a failure, In Classic, forces a Game Over.

UNLOCK STASH

Stash unlock toggle. Can be set to STASH NORMAL which follows original requirements while STASH UNLOCKED unlocks everything available temporarily.

UI EDIT MODE

Unknown?

CHANGE LANGUAGE

Changes the language of the game.

DRAW COLLISION

See Collision Display. A button call rather than a keypress. Doesn't appear to work on iPhone.

LITE UPSELL MODE

Can be set to UPSELL NORMAL, FN UPSELL or JETPACK UPSELL.

GIVE HEART

Adds a heart to your life meter.

GIVE BEAN

Adds a Magic Bean to the playfield.

GIVE PINATA

Adds a Pinata to the playfield.

INFINITE PINATA TIME

Grants infinite time to break the Pinata.

QUIT

Closes the Debug Menu.

Direct3D Shaders#

The shaders directory has three shaders for the game on Windows, likely related to the leftover Windows builds of the game.

basicmodel.fx#

Texture2D DiffuseMap : register(t0);
SamplerState linearSampler : register(s0);


cbuffer simpleConstantBuffer : register( b0 )
{
    matrix worldmatrix;
    matrix viewmatrix;
    matrix projectionmatrix;
    matrix texturematrix;

    float4 displayColour;
};


struct VertexShaderInput
{
    float2 IN_uv : TEXCOORD0;
    uint4 IN_vertexcolour :   COLOR0;
    float3 IN_normal : NORMAL0;
    float3 IN_position : POSITION0;
    
    
    
};

struct PixelShaderInput
{
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD0;
    float4 colour: COLOR0;
    
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PixelShaderInput VS( VertexShaderInput Input )
{
        PixelShaderInput result;

        float4 pos;
        
        pos.xyz=Input.IN_position;
        pos.w=1.0;

        // Transform the vertex position into projection space.
        pos = mul(pos, worldmatrix);
        pos = mul(pos, viewmatrix);
        pos = mul(pos, projectionmatrix);
        
        result.uv = Input.IN_uv;

        result.colour = Input.IN_vertexcolour / 255.0f;

        result.position = pos;
        return result;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PixelShaderInput input ) : SV_Target
{
    float4 textureSample = DiffuseMap.Sample(linearSampler, input.uv) *  input.colour ;
    

    return textureSample;
/// return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
}

gles1_vertex_unlit.fx#

Texture2D DiffuseMap : register(t0);
SamplerState linearSampler : register(s0);


cbuffer simpleConstantBuffer : register( b0 )
{
    matrix worldmatrix;
    matrix viewmatrix;
    matrix projectionmatrix;
    matrix texturematrix;

    float4 displayColour;
};


struct VertexShaderInput
{
    float3 IN_position : POSITION0;
    float3 IN_normal : NORMAL0;
    float3 IN_tangent :  NORMAL1; 
    float3 IN_bitangent :   NORMAL2; 
    float4 IN_vertexcolour :   COLOR0;
    float2 IN_uv : TEXCOORD0;
    
};

struct PixelShaderInput
{
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD0;
    float4 colour: COLOR0;
    
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PixelShaderInput VS( VertexShaderInput Input )
{
        PixelShaderInput result;

        float4 pos;
        
        pos.xyz=Input.IN_position;
        pos.w=1.0;

        // Transform the vertex position into projection space.
        pos = mul(pos, worldmatrix);
        pos = mul(pos, viewmatrix);
        pos = mul(pos, projectionmatrix);
        
        result.uv = Input.IN_uv;

        result.colour = (Input.IN_vertexcolour / 255.0f) * (displayColour / 255.0f);

        result.position = pos;
        return result;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PixelShaderInput input ) : SV_Target
{
    float4 textureSample = DiffuseMap.Sample(linearSampler, input.uv) *  input.colour ;
    

    return textureSample;
/// return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
}

gles1_vertex_unlit_notexture#

Texture2D DiffuseMap : register(t0);
SamplerState linearSampler : register(s0);


cbuffer simpleConstantBuffer : register( b0 )
{
    matrix worldmatrix;
    matrix viewmatrix;
    matrix projectionmatrix;
    matrix texturematrix;

    float4 displayColour;
};


struct VertexShaderInput
{
    float3 IN_position : POSITION0;
    float3 IN_normal : NORMAL0;
    float3 IN_tangent :  NORMAL1; 
    float3 IN_bitangent :   NORMAL2; 
    float4 IN_vertexcolour :   COLOR0;
    float2 IN_uv : TEXCOORD0;
    
};

struct PixelShaderInput
{
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD0;
    float4 colour: COLOR0;
    
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PixelShaderInput VS( VertexShaderInput Input )
{
        PixelShaderInput result;

        float4 pos;
        
        pos.xyz=Input.IN_position;
        pos.w=1.0;

        // Transform the vertex position into projection space.
        pos = mul(pos, worldmatrix);
        pos = mul(pos, viewmatrix);
        pos = mul(pos, projectionmatrix);
        
        result.uv = Input.IN_uv;

        result.colour = (Input.IN_vertexcolour / 255.0f) * (displayColour / 255.0f);

        result.position = pos;
        return result;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PixelShaderInput input ) : SV_Target
{
    //float4 textureSample = DiffuseMap.Sample(linearSampler, input.uv) *  input.colour ;
    float4 textureSample = input.colour ;
    

    return textureSample;
/// return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
}

gles1_vertex_unlit_notexture#

Texture2D DiffuseMap : register(t0);
SamplerState linearSampler : register(s0);


cbuffer simpleConstantBuffer : register( b0 )
{
    matrix worldmatrix;
    matrix viewmatrix;
    matrix projectionmatrix;
    matrix texturematrix;

    float4 displayColour;
};


struct VertexShaderInput
{
    float3 IN_position : POSITION0;
    float3 IN_normal : NORMAL0;
    float3 IN_tangent :  NORMAL1; 
    float3 IN_bitangent :   NORMAL2; 
    float4 IN_vertexcolour :   COLOR0;
    float2 IN_uv : TEXCOORD0;
    
};

struct PixelShaderInput
{
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD0;
    float4 colour: COLOR0;
    
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PixelShaderInput VS( VertexShaderInput Input )
{
        PixelShaderInput result;

        float4 pos;
        
        pos.xyz=Input.IN_position;
        pos.w=1.0;

        // Transform the vertex position into projection space.
        pos = mul(pos, worldmatrix);
        pos = mul(pos, viewmatrix);
        pos = mul(pos, projectionmatrix);
        
        result.uv = Input.IN_uv;

        result.colour = (Input.IN_vertexcolour / 255.0f) * (displayColour / 255.0f);

        result.position = pos;
        return result;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PixelShaderInput input ) : SV_Target
{
    //float4 textureSample = DiffuseMap.Sample(linearSampler, input.uv) *  input.colour ;
    float4 textureSample = input.colour ;
    

    return textureSample;
/// return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
}