the cutting room mirror

Gameloft Classics

To do:
Check for unused text.

  • There's code for handling IAPs. It's probably best to refer to 1.2.2 for knowing a portion of uncompiled Java file names.
  • Cheat codes DO work despite the unofficial wiki say otherwise, find them all if possible.

For Gameloft's 20th anniversary, the company decided to package 30 legacy Java titles in this single app. If you want to relive this era, this is the app for you.

Development Leftovers#

Compatibility List Document#

support.txt in the root of the app is a compatibility list for various devices.


support

jsr 030 - cldc 1.0
jsr 037 - midp 1.0
jsr 075 - file connection 1.0 (pda)
jsr 082 - bluetooth
jsr 118 - midp 2.0
jsr 120 - wma 1.1
jsr 135 - mobile media api
jsr 139 - cldc 1.1
jsr 184 - m3g
jsr 205 - wma 2.0
jsr 234 - amms

sprint api
sprint pcs licence mrc 
nokia UI
samsung api
vodafone vscl 1.1.0
vodafone vscl 2.0
jscl 1.2.2
doja up to doja 5.1

Internal Sound Material#

Present in the sounds directory are two files not used by the game, a sound design document written by an unknown author, modified on February 14th in 2019 at 7:15AM. There is also _ForSoundTech.7z, most likely for sound designers but its contents are locked under a password... PHD is most likely Pocket HD as Gameloft's other games internally or itself as a company commonly mentions that term.

Download Gameloft Classics Sound Leftovers

File: GloftClassicsSoundLeftovers.zip (440 KB) (info)

Uncompiled Sprites#

To do:
Check other distributions for these files.

In the assets directory, there are three uncompiled sprite files along with said images as .png files.

Anim_coin.sprite:

// C:\1.Project\ClassicGooglePlay\__Wrapper_Rewirte_Freemium\data\USE_MULTI_GAMES\assets\Anim_coin.sprite
// saved by AuroraGT v0.7.1 (SpriteEditor v0.8.1)
////////////////////////////////////////////////////////////////////////////////
/*SPRITE*/ {

    VERSION 0001

    // Images:  1
    // Modules: 6
    // Frames:  6
    // Anims:   1

////////////////////////////////////////////////////////////////////////////////
// Images...
// <Image> := IMAGE [id] "file" [TRANSP transp_color]

    IMAGE 0x0000 ".\Anim_coin.png" TRANSP 0x00FF00FF // 0  size: 615 x 133  palettes: 1

////////////////////////////////////////////////////////////////////////////////
// Modules...
// <Modules> := MODULES { <MD1> <MD2> ... }
// <MDi>     := MD id Type [params] ["desc"]
// Type      := MD_IMAGE | MD_RECT | ...
// [params]  := if (Type == MD_IMAGE)     -> image x y width height
//              if (Type == MD_RECT)      -> color width height
//              if (Type == MD_FILL_RECT) -> color width height
//              if (Type == MD_ARC)       -> color width height
//              if (Type == MD_FILL_ARC)  -> color width height

    MODULES
    {
        MD  0x1003  MD_IMAGE    0   65  3   126 126
        MD  0x1002  MD_IMAGE    0   346 3   67  126
        MD  0x1001  MD_IMAGE    0   218 3   110 126
        MD  0x1000  MD_IMAGE    0   5   3   24  126
        MD  0x1004  MD_IMAGE    0   420 3   111 126
        MD  0x1005  MD_IMAGE    0   538 3   67  126
    }

////////////////////////////////////////////////////////////////////////////////
// Frames...
// <Frame> := FRAME ["desc"] { id <RC1> [<RC2> ...] <FM1> [<FM2> ...] }
// <RCi>   := RC x1 y1 x2 y2
// <FMi>   := FM module_or_frame_id ox oy [FLAGS hex_flags] [+Flags]
// Flags   := HYPER_FM | FLIP_X | FLIP_Y | ROT_90

    FRAME "" // Index = 0, FModules = 1
    {
        0x2000
        FM  0x1000  -10 0
    }

    FRAME "" // Index = 1, FModules = 1
    {
        0x2002
        FM  0x1002  -31 1
    }

    FRAME "" // Index = 2, FModules = 1
    {
        0x2001
        FM  0x1001  -53 1
    }

    FRAME "" // Index = 3, FModules = 1
    {
        0x2003
        FM  0x1003  -63 1
    }

    FRAME "" // Index = 4, FModules = 1
    {
        0x2004
        FM  0x1004  -55 0
    }

    FRAME "" // Index = 5, FModules = 1
    {
        0x2005
        FM  0x1005  -33 0
    }

////////////////////////////////////////////////////////////////////////////////
// Animations...
// <Anim> := ANIM ["desc"] { id [<AF1> <AF2> ...] }
// <AFi>  := AF frame_id time ox oy [FLAGS hex_flags] [+Flags]
// Flags  := FLIP_X | FLIP_Y | ROT_90

    ANIM "" // Index = 0, AFrames = 6
    {
        0x3000
        AF  0x2000  100 0   1
        AF  0x2002  100 0   0
        AF  0x2001  100 0   0
        AF  0x2003  100 0   0
        AF  0x2004  100 0   1
        AF  0x2005  100 0   1
    }

////////////////////////////////////////////////////////////////////////////////
// Tilesets...

    SPRITE_END

} // SPRITE
////////////////////////////////////////////////////////////////////////////////

giftbox_animation.sprite:

// saved by AuroraGT v0.1.1.5 (SpriteEditor v0.1.1.0)
////////////////////////////////////////////////////////////////////////////////
/*SPRITE*/ {

    VERSION 0001

    // Images:  1
    // Modules: 19
    // Frames:  18
    // Anims:   1

////////////////////////////////////////////////////////////////////////////////
// Images...
// <Image> := IMAGE [id] "file" [ALPHA "alpha_file"] [TRANSP transp_color]

    IMAGE 0x0000 ".\giftbox_animation.png" TRANSP 0x00FF00FF // 0  size: 3523 x 2799  palettes: 1

////////////////////////////////////////////////////////////////////////////////
// Modules...
// <Modules> := MODULES { <MD1> <MD2> ... }
// <MDi>     := MD id Type [params] ["desc"]
// Type      := MD_IMAGE | MD_RECT | ...
// [params]  := if (Type == MD_IMAGE)     -> image x y width height
//              if (Type == MD_RECT)      -> color width height
//              if (Type == MD_FILL_RECT) -> color width height
//              if (Type == MD_ARC)       -> color width height startAngle arcAngle
//              if (Type == MD_FILL_ARC)  -> color width height startAngle arcAngle
//              if (Type == MD_MARKER)    -> color width height
//              if (Type == MD_TRIANGLE)  -> color p2X p2Y p3X p3Y
//              if (Type == MD_FILL_TRIANGLE)  -> color p2X p2Y p3X p3Y
//              if (Type == MD_LINE)       -> color width height
//              if (Type == MD_FILL_RECT_GRAD) -> color01 color02 direction width height
//              if (Type == MD_GRADIENT_TRIANGLE) -> x0 y0 color0 x1 y1 color1 x2 y2 color2
//              if (Type == MD_GRADIENT_RECT) -> x0 y0 color0 x1 y1 color1 x2 y2 color2 x3 y3 color3

    MODULES
    {
        MD  0x1012  MD_IMAGE    0   2129    2112    650 650
        MD  0x1011  MD_IMAGE    0   1410    2112    650 650
        MD  0x1010  MD_IMAGE    0   709 2105    650 650
        MD  0x100F  MD_IMAGE    0   8   2106    650 650
        MD  0x100E  MD_IMAGE    0   2832    1396    650 650
        MD  0x100D  MD_IMAGE    0   2134    1394    650 650
        MD  0x100C  MD_IMAGE    0   1414    1394    650 650
        MD  0x100A  MD_IMAGE    0   717 1401    650 650
        MD  0x1009  MD_IMAGE    0   6   1400    650 650
        MD  0x1008  MD_IMAGE    0   2832    693 650 650
        MD  0x1007  MD_IMAGE    0   2140    694 650 650
        MD  0x1006  MD_IMAGE    0   1424    694 650 650
        MD  0x1005  MD_IMAGE    0   712 694 650 650
        MD  0x1004  MD_IMAGE    0   0   697 650 650
        MD  0x1003  MD_IMAGE    0   2584    4   650 650
        MD  0x1002  MD_IMAGE    0   1880    0   650 650
        MD  0x1001  MD_IMAGE    0   1181    0   650 650
        MD  0x1000  MD_IMAGE    0   481 0   650 650
        MD  0x100B  MD_IMAGE    0   27  47  417 518
    }

////////////////////////////////////////////////////////////////////////////////
// Frames...
// <Frame> := FRAME ["desc"] { id <RC1> [<RC2> ...] <FM1> [<FM2> ...] }
// <RCi>   := RC x1 y1 x2 y2
// <FMi>   := FM module_or_frame_id ox oy [FLAGS hex_flags] [+Flags]
// Flags   := HYPER_FM | FLIP_X | FLIP_Y | ROT_90 | FREE_ROT

    FRAME "" // Index = 0, FModules = 2
    {
        0x2000
        FM  0x1012  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 1, FModules = 2
    {
        0x2001
        FM  0x1011  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 2, FModules = 2
    {
        0x2002
        FM  0x1010  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 3, FModules = 2
    {
        0x2003
        FM  0x100F  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 4, FModules = 2
    {
        0x2004
        FM  0x100E  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 5, FModules = 2
    {
        0x2005
        FM  0x100D  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 6, FModules = 2
    {
        0x2006
        FM  0x100C  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 7, FModules = 2
    {
        0x2007
        FM  0x100A  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 8, FModules = 2
    {
        0x2008
        FM  0x1009  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 9, FModules = 2
    {
        0x2009
        FM  0x1008  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 10, FModules = 2
    {
        0x200A
        FM  0x1007  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 11, FModules = 2
    {
        0x200B
        FM  0x1006  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 12, FModules = 2
    {
        0x200C
        FM  0x1005  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 13, FModules = 2
    {
        0x200D
        FM  0x1004  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 14, FModules = 2
    {
        0x200E
        FM  0x1003  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 15, FModules = 2
    {
        0x200F
        FM  0x1002  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 16, FModules = 2
    {
        0x2010
        FM  0x1001  -241    -168
        FM  0x100B  -117    -125
    }

    FRAME "" // Index = 17, FModules = 2
    {
        0x2011
        FM  0x1000  -241    -168
        FM  0x100B  -117    -125
    }

////////////////////////////////////////////////////////////////////////////////
// Animations...
// <Anim> := ANIM ["desc"] { id [<AF1> <AF2> ...] }
// <AFi>  := AF frame_id time ox oy [FLAGS hex_flags] [+Flags]
// Flags  := FLIP_X | FLIP_Y | ROT_90

    ANIM "" // Index = 0, AFrames = 18
    {
        0x3000
        AF  0x2000  120 0   0
        AF  0x2001  120 0   0
        AF  0x2002  120 0   0
        AF  0x2003  120 0   0
        AF  0x2004  120 0   0
        AF  0x2005  120 0   0
        AF  0x2006  120 0   0
        AF  0x2007  120 0   0
        AF  0x2008  120 0   0
        AF  0x2009  120 0   0
        AF  0x200A  120 0   0
        AF  0x200B  120 0   0
        AF  0x200C  120 0   0
        AF  0x200D  120 0   0
        AF  0x200E  120 0   0
        AF  0x200F  120 0   0
        AF  0x2010  120 0   0
        AF  0x2011  120 0   0
    }

    SPRITE_END

} // SPRITE
////////////////////////////////////////////////////////////////////////////////

unlock_animation.sprite:

// saved by AuroraGT v0.1.1.5 (SpriteEditor v0.1.1.0)
////////////////////////////////////////////////////////////////////////////////
/*SPRITE*/ {

    VERSION 0001

    // Images:  1
    // Modules: 3
    // Frames:  3
    // Anims:   1

////////////////////////////////////////////////////////////////////////////////
// Images...
// <Image> := IMAGE [id] "file" [ALPHA "alpha_file"] [TRANSP transp_color]

    IMAGE 0x0000 ".\unlock_animation.png" TRANSP 0x00FF00FF // 0  size: 751 x 233  palettes: 1

////////////////////////////////////////////////////////////////////////////////
// Modules...
// <Modules> := MODULES { <MD1> <MD2> ... }
// <MDi>     := MD id Type [params] ["desc"]
// Type      := MD_IMAGE | MD_RECT | ...
// [params]  := if (Type == MD_IMAGE)     -> image x y width height
//              if (Type == MD_RECT)      -> color width height
//              if (Type == MD_FILL_RECT) -> color width height
//              if (Type == MD_ARC)       -> color width height startAngle arcAngle
//              if (Type == MD_FILL_ARC)  -> color width height startAngle arcAngle
//              if (Type == MD_MARKER)    -> color width height
//              if (Type == MD_TRIANGLE)  -> color p2X p2Y p3X p3Y
//              if (Type == MD_FILL_TRIANGLE)  -> color p2X p2Y p3X p3Y
//              if (Type == MD_LINE)       -> color width height
//              if (Type == MD_FILL_RECT_GRAD) -> color01 color02 direction width height
//              if (Type == MD_GRADIENT_TRIANGLE) -> x0 y0 color0 x1 y1 color1 x2 y2 color2
//              if (Type == MD_GRADIENT_RECT) -> x0 y0 color0 x1 y1 color1 x2 y2 color2 x3 y3 color3

    MODULES
    {
        MD  0x1000  MD_IMAGE    0   0   0   230 233
        MD  0x1001  MD_IMAGE    0   254 0   230 233
        MD  0x1002  MD_IMAGE    0   521 0   230 233
    }

////////////////////////////////////////////////////////////////////////////////
// Frames...
// <Frame> := FRAME ["desc"] { id <RC1> [<RC2> ...] <FM1> [<FM2> ...] }
// <RCi>   := RC x1 y1 x2 y2
// <FMi>   := FM module_or_frame_id ox oy [FLAGS hex_flags] [+Flags]
// Flags   := HYPER_FM | FLIP_X | FLIP_Y | ROT_90 | FREE_ROT

    FRAME "" // Index = 0, FModules = 1
    {
        0x2000
        FM  0x1000  0   0
    }

    FRAME "" // Index = 1, FModules = 1
    {
        0x2001
        FM  0x1001  0   0
    }

    FRAME "" // Index = 2, FModules = 1
    {
        0x2002
        FM  0x1002  0   0
    }

////////////////////////////////////////////////////////////////////////////////
// Animations...
// <Anim> := ANIM ["desc"] { id [<AF1> <AF2> ...] }
// <AFi>  := AF frame_id time ox oy [FLAGS hex_flags] [+Flags]
// Flags  := FLIP_X | FLIP_Y | ROT_90

    ANIM "" // Index = 0, AFrames = 3
    {
        0x3000
        AF  0x2000  200 0   0
        AF  0x2001  200 0   0
        AF  0x2002  200 0   0
    }

    SPRITE_END

} // SPRITE
////////////////////////////////////////////////////////////////////////////////

Oddly the versions of Aurora Game Tools and the related sprite editor are different.

Cheat Codes#

Block Breaker 3 Unlimited#

Press D-Pad Left, D-Pad Right, D-Pad Right, D-Pad Left on the main menu to open the cheat menu, interestingly this code is designed for the one in the collection and not seen in other releases of the game. Note the in-game functions that use the number pad (diagonal D-Pad inputs) do not work as the game treats keypresses of 1 and 3 as well as 7 and 9 as holding left and right.

References#


  1. https://web.archive.org/web/20200417044801/https://play.google.com/store/apps/details?id=com.gameloft.android.ANMP.GloftGLCL↩︎