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

User:LolHacksRule/Angry Birds Classic

From The Cutting Room Floor
Jump to navigation Jump to search

Click to upload a new image...Dummy link

Angry Birds Classic

Developer: Rovio
Publisher: Rovio
Platforms: Windows, Mac OS X, iOS, Android, Nintendo 3DS, Wii U, Xbox 360, Xbox One, Windows Phone, Samsung Smart TV
Released internationally: January 4, 2011


CodeIcon.png This game has unused code.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
SoundIcon.png This game has unused sounds.
DebugIcon.png This game has debugging material.


Hmmm...
To do:
  • Look at vehicles\work and vehicles\common in older versions.
  • Old versions of the game may have internal developer tools, search them.
  • Install Chinese versions of the game and spot regional differences.
  • Leftovers from Angry Birds Magic and unused graphics.
  • Make a Prerelease page, with the sketch Jaakko Iisalo made for the game and the In-game trailer from the Angry Birds YouTube channel, that contains some unreleased content.
  • Debug printouts in all versions under 3.0.0

Angry Birds is an award-winning strategy game for multiple platforms. The game was rebranded as Angry Birds Classic' in 2017.

Version Differences

Hmmm...
To do:
Find and check every version of Angry Birds, there is unused or early content that were removed in the transition between different versions.

Splash Screens

The Splash Screen has seen many revisions and revamps since the start.

1.0-1.3.4 1.4.0-1.5.0 1.5.1-1.6.3 2.0.2-6.1.0
AB Early Splash.png AB 2010 Splash Screen.png Angry Birds 2011 Splash.png Angry Birds (PC)-title.png

Unused Levels

Hmmm...
To do:
there are two more levels named MudLevel and PigFeederLevel, if they work, check if they were used or not.

The prototyping folder is present on 6.2.1 and later releases, with four unused levels.

Stella

Stella is an unused level that refuses to load, even with hacking. It is thought to be a level where you only use Stella, who is not in the original Angry Birds.

Bubble

Bubble when loaded
Bubble, unlike Stella, is actually able to load. Sadly, it is considered useless, as it does not have any enemies or any objectives to it. Thus, the final score will always be zero points.

Title theme changes

In one of the updates, the game's main theme was replaced with Angry Birds Trilogy's main theme to celebrate the chapter "Red's Mighty Feathers", where Red finally gets a chapter-exclusive ability. It was then reverted back to the original track.

Versions 3.2.0 & 3.3.0
(Angry Birds Trilogy theme)
All other versions
(Angry Birds theme)

Debugging Functions

Device Configuration Settings

The game uses a number of settings in config.lua on computers to optimize the game for the platform and locate assets. The game executable also has undocumented support for loading a device configuration file through commandline or simple drag-and-drop instead of reading config.lua in the working directory.

Name Function
framerate Caps the game framerate, the number must be between 1-59 to have an effect as greater enforces 60FPS.
publisher Game publisher name for saves.
product Game product name for saves.
renderer Game renderers, gl2, gl1, gl, dx11, gles1, gles2 and xna are supported.
icon The game's icon resource in the executable to load for the game window, a number that is not related to the icon in the executable makes the game not display the icon. This was changed to iconResourceID in later entries.
orientation Changes the game's orientation for reading mouse inputs, the value has to be 90, 180 or 270.
debugMemoryAllocs Unknown.
depthBuffer Unknown.
dllPath Sets the game's DLL path to use instead of the working directory.
captureMouse Aggressively captures mouse input and forces it at center of the executable window.
showCursor Shows the computer mouse pointer overtop the game's mouse cursor.
fullscreen Loads the game in fullscreen.
singleton Unknown.
bits Unknown.
width Width of the game window.
height Height of the game window.
name Name of the game window.
autoOrientations Unknown.

Mighty League Levels in Level Select

If the build is not a release build and has developer cheats on, an episode called MightyLeague Test Levels will appear in the level select, the framerate is really choppy while here.

Debugging info in Credits

If the game is not a release build, the player account ID, game environment and customerString is shown in the credits.

Developer Cheats

If developer cheats are on, these can be used and are shown during gameplay (there are also key-based commands).

FPS and Memory Display

A display on the bottom middle of the screen, for the FPS and memory in MB is visible, showFps is the internal flag name if using the Debug Console to enable.

ABPC FPS+Memory Display.png

Debug Console

Hmmm...
To do:
Is there macros?

A giant overlay for both logging and entering text, covering the entire screen, called and hidden by by Shift-D it is possible to edit in-game flags and values for a session by using it, the same way for loading it on mobile releases (Right corner multi click) is also a method to load on the PC version. Using @ in your entry will close the debug console after it is entered. Also, using launchMightyBait() in your entry will use mighty eagle without purchasing and probably using bundleReward(?) in your entry will receive powerup reward, works on mobile too. Just replace "?" with number amount.

ABPC Debug Console.png

Main Menu

QA button

Freezes the game if the settings.lua file is incorrectly created, like data made from a beta build but not release, otherwise shows a menu with a few options,

  • Display Force Update Popup: Displays the force update popup (big on small devices, use back or wait to escape).
  • Reset All Settings: Resets all status ASIDES from currency + power up amounts and Mighty League customizations + account ID.
  • Open All Levels: Unlocks all levels with no stars for a save.
  • Add 100 Gems: Adds 100 Gems to a save.

Debugging information like the device ID, AD watcher ID and Install Date are also shown.

Mighty League

QA button

Shows a menu with many developer cheats to trigger, including: Reset Tutorial (Resets tutorial progress), Skip Tutorial (Skips Tutorial), Fake Day End (Make the game act like the day ended for a tournament), I Cheat :) (Adds a lot of Shockwaves to your save), Add Stars (Adds 100 stars to your current balance.), Edit Avatar (Allows you to edit your player avatar, always fails to save if still in tutorial), Select Emblem (Select player emblem icons/customizations), Switch Server (Switch between: the Development and QA servers, you cannot go back to the Production server by using this.) Free Stuff! (Gives you 25x Power Potions, Birdquakes and Shockwaves) Clear Friend Cache (Clears friend cache), Post Score (Post your current scores for levels 1-6 in a tournament.), Migrate (Upgrade league or downgrade, cannot be done on the Production server.) and 100 Eggs! (???), a display for the tutorial step and the server type is also present on the lower right corner after access.

  • Debug log for connection error: Errors are in much more detail.

Daily Rewards

  • Mock video watching: Watch ADS offline and take the reward while making the game treat the player like it did watch the advertisement.

Sling Scope Timer

  • Mock video watching: Watch ADS offline and take the reward while making the game treat the player like it did watch the advertisement.

In-Game

  • Mock video watching: Watch ADS offline and take the reward while making the game treat the player like it did watch the advertisement.
  • Instant win: Touching near the bottom left corner will make the game act like the level was completed and rigs approximately the amount for a 3-star score.

Anywhere

  • Call debug console: If the game is responding, it's possible to call the debug console. Touching near the bottom right corner two times will call it, the log scrolling bug crashing the game is also fixed unlike the PC version, but = symbols aren't visible when typed but entered. Using @ in your entry will close the debug console after it is entered.
  • Save file corruption alert: If a save file is corrupted on bootup, a popup by the name of QA Popup will show saying The file XXX.lua was corrupted.

Aside from manual usage, the Mighty Eagle randomly unlocks for the settings section of the save for a session if the save file is created via a beta build, due to corruption after reboot, the save gets recreated without it but retail settings sections support full save writing without corruption.

Cheat keys

In-game

  • C = Simulates a three star completion, ignoring the current score and using a predetermined score, the same way for using it on mobile releases (Left corner multi click) is also a method to load on other versions.
  • PgUp = Previous level.
  • PgDown = Next level, ignores level lock restrictions.

Elsewhere

  • Backspace-Q/W/E/R/T/Y/U = Crashes the game, attempts to call powerups while PC version doesn't enable them or have the files.
  • Ctrl-Alt-# = "#" can be 1 (English), 2 (French), 3 (Italian), 4 (German), 5 (Spanish), 6 (Chinese), 7 (Taiwanese), 8 (Japanese), 9 (Portuguese) or 0 (Polish). Attempts to change the text locale, setting an unexisting locale other than Japanese or English crashes the game...
  • S = Toggle sounds on or off.
  • Ctrl-F5 = Attempts to create an Lua file containing the layout of a screen, crashes due to the folder layouts in the game data directory does not exist, manually creating it fixes the function to make a plaintext file.
  • Shift-F12: Toggles mouse cursor visibility.
  • Shift-C: Enables IAPs (doesn't work).
  • Shift-Z: Powerup bundle reward (Crashes).
  • Shift-X: Powerup slot machine (Crashes).
  • F: Toggles visibility of the FPS and memory display.

Level Editor

If the game value to show the Level Editor, is true, an "Editor" button will appear on the main menu, giving a menu with many options.

On newer versions of the game, the MuseumMode button on newer releases freezes the game when tapped. Beating or attempting to exit a level will also freeze the game if write access is not enabled by platform nature, also due to lack of touch screen support aside from testing levels (2-finger click) moving the camera (finger drag) and exiting the level (4-finger click), it's only useful for previewing levels.

Unused Trick Or Treat Episode

In version 1.3.5 on Android, there was text for an unused 5th episode called "Trick Or Treat". It's likely this turned into the episode under the same name in Angry Birds Seasons, and was meant to appear in the original Angry Birds. There also exists a level select graphic for this episode. The text and the image were later removed in the next update (1.4.0), though the text made a return in version 1.4.3, likely as a placeholder for Ham 'Em High's text in 1.5.0.

5. Trick Or Treat

Angry Birds Trick or Treat Level Select Image.png

Old Level and Game Complete

The sound used for when the player completes a level in the previous versions of Angry Birds. It was replaced with the ranking system from Angry Birds Rio, but the sound file still lays there as a leftover, it is only used when the player completes an episode.

Bundle Index Code

Versions v1.0.0 to v2.2.0 have code for loading a file in the data path called bundleIndex.idx. The code is always executed on booting up those releases but never used as no file was present, which causes an alternative boot sequence to load raw content that was the standard for all releases and eventually ensured for later releases. The game would load the index file and use it to locate files in a given binary file per entry. The format of a file entry is listed below. This format was used in Bounce Boing Battle so it was probably carried from that.

*.bin,filelocation,offset,size\n

Development Leftovers/Mistakes

Although Rovio makes most releases of their games, clean of development assets and mistakes, some assets slipped under their radar in some.

Unstripped Lua Files

The following releases do not have debugging info stripped after compilation, making them significantly easier to study logic for while also providing the source location of the original file.

Android (Google Play) 2.1.0-2.2.0 (assets\data\scripts)
MacOS 3.0.0 (/Users/bserve/jenkins/workspace/AngryBirds-osx-3.0.0/AngryBirdsClassic/build/osx/AngryBirdsClassic/../../../game)

Inconsistent Pattern of Uncompiled Lua Files

Hmmm...
To do:
List them.

The following releases do not use compiled scripts or left them uncompiled in both certain newer than and behind older versions, making them significantly easier to study logic for.

Unknown JSON File

A similar JSON file from Angry Birds Seasons made it's way in version 3.0.0 for Android.

{
    "additionalPermissions": [], 
    "appName": "Angry Birds", 
    "archs": [
        "arm", 
        "armv7", 
        "x32"
    ], 
    "buildDate": "2012-12-13", 
    "buildStartedBy": "Jyri Vaha-Pietila", 
    "compatibleScreens": [], 
    "compileLua": true, 
    "compressLua": true, 
    "copyAssets": [
        [
            "game/config.lua", 
            ""
        ], 
        [
            "game/data_src/levels", 
            "data"
        ], 
        [
            "game/data_src/localization_android/**", 
            "data/localization"
        ], 
        [
            "game/data_src/scripts", 
            "data"
        ], 
        [
            "common/scripts/game/**", 
            "data/scripts_common"
        ], 
        [
            "game/data_src/images/320x240_android_partial", 
            "data/images"
        ], 
        [
            "game/data_src/images/480x320_android_partial", 
            "data/images"
        ], 
        [
            "game/data_src/images/864x480", 
            "data/images"
        ], 
        [
            "game/data_src/fonts/320x240", 
            "data/fonts"
        ], 
        [
            "game/data_src/fonts/480x320", 
            "data/fonts"
        ], 
        [
            "game/data_src/fonts/864x480", 
            "data/fonts"
        ], 
        [
            "game/data_src/audio/16000hz-16bit-mono-mp3/**", 
            "data/audio"
        ], 
        [
            "external/Fusion/data/shaders/gles2", 
            "data"
        ]
    ], 
    "copyExcludes": [
        "game/data_src/levels/packLite", 
        "game/data_src/levels/free", 
        "game/data_src/levels/pack[2-9][0-9]"
    ], 
    "copyPatterns": [
        [
            "build/android/res/**", 
            "res"
        ]
    ], 
    "copyTo": "/Resigned/2012-12-13_3.0.0_(23497)_appchina", 
    "customLuaOptions": {
        "gamelua.applyChinaRestictions": true, 
        "gamelua.bingIsEnabled": false, 
        "gamelua.cheatsEnabled": false, 
        "gamelua.customerString": "'appchina'", 
        "gamelua.disableShopButton": false, 
        "gamelua.enableAssertions": false, 
        "gamelua.g_hasWebBrowser": true, 
        "gamelua.g_is_free_version": false, 
        "gamelua.g_registrationEnabled": false, 
        "gamelua.g_updateCheckEnabled": false, 
        "gamelua.gameId": "'abc'", 
        "gamelua.gameVersionNumber": "'3.0.0'", 
        "gamelua.isKorea": false, 
        "gamelua.isPremium": false, 
        "gamelua.isSeasonsAvailable": true, 
        "gamelua.powerUpsEnabled": false, 
        "gamelua.releaseBuild": true, 
        "gamelua.showEditor": false, 
        "gamelua.svnRevisionNumber": "'23497'", 
        "gamelua.timeMachineServer": "dev", 
        "gamelua.useDynamicAssets": false, 
        "gamelua.useMockAchievementLimits": "not True"
    }, 
    "customScripts": {
        "assetFilter": "update_level_filenames.py"
    }, 
    "customer": "appchina", 
    "debug": false, 
    "defines": [
        "ZIPPED_LUA_FILES", 
        "CRYPTED_LUA_FILES", 
        "USE_FLURRY", 
        "USE_PRODUCTION_ADS"
    ], 
    "dirSuffix": "", 
    "encryptLua": true, 
    "encryptionKey": "__SECRET__", 
    "externalModules": [], 
    "failOnConfigurationWarnings": true, 
    "fusionDefines": [], 
    "includeDirs": [
        "../../source", 
        "../../external/Fusion/include", 
        "../../common/dependencies/box2d/Box2D", 
        "../../common/source/"
    ], 
    "jobs": 8, 
    "keyAlias": "__SECRET__", 
    "keyAliasPassword": "__SECRET__", 
    "keyStore": "__SECRET__", 
    "keyStorePassword": "__SECRET__", 
    "luaOptionsFile": "data/scripts/options.lua", 
    "minSdkVersion": "8", 
    "modules": [
        "flurry", 
        "framework", 
        "grgles1", 
        "grgles2", 
        "game", 
        "gr", 
        "hgr", 
        "img", 
        "io", 
        "lua", 
        "net", 
        "pf", 
        "util", 
        "audio", 
        "math", 
        "lang", 
        "ads"
    ], 
    "obfuscate": true, 
    "outputName": "_NoIAP_appchina_DISTRIBUTION", 
    "packageName": "angrybirds", 
    "platform": "android", 
    "projectName": "AngryBirdsClassic", 
    "releasePackage": true, 
    "sourceExcludes": [
        "../../common/source/*IPHONE*.cpp", 
        "../../common/source/*iOS*.cpp", 
        "../../common/source/AppUpWrapper.cpp", 
        "../../common/source/GameFlurr*.cpp", 
        "../../common/source/Nook*", 
        "../../common/source/AdMob*", 
        "../../common/source/RovioAcc*", 
        "../../common/source/Cloud*"
    ], 
    "sourceFiles": [
        "../../source/**.cpp", 
        "../../common/source/*.cpp"
    ], 
    "subDir": "gen", 
    "svnRevision": "23497", 
    "targetPrefix": "android-", 
    "targetSdkVersion": "13", 
    "verbosity": 1, 
    "versionCode": "3000", 
    "versionString": "3.0.0"
}
{
    "additionalPermissions": [], 
    "appName": "Angry Birds", 
    "archs": [
        "arm", 
        "armv7", 
        "x32"
    ], 
    "buildDate": "2012-12-13", 
    "buildStartedBy": "Jyri Vaha-Pietila", 
    "compatibleScreens": [], 
    "compileLua": true, 
    "compressLua": true, 
    "copyAssets": [
        [
            "game/config.lua", 
            ""
        ], 
        [
            "game/data_src/levels", 
            "data"
        ], 
        [
            "game/data_src/localization_android/**", 
            "data/localization"
        ], 
        [
            "game/data_src/scripts", 
            "data"
        ], 
        [
            "common/scripts/game/**", 
            "data/scripts_common"
        ], 
        [
            "game/data_src/images/320x240_android_partial", 
            "data/images"
        ], 
        [
            "game/data_src/images/480x320_android_partial", 
            "data/images"
        ], 
        [
            "game/data_src/images/864x480", 
            "data/images"
        ], 
        [
            "game/data_src/fonts/320x240", 
            "data/fonts"
        ], 
        [
            "game/data_src/fonts/480x320", 
            "data/fonts"
        ], 
        [
            "game/data_src/fonts/864x480", 
            "data/fonts"
        ], 
        [
            "game/data_src/audio/16000hz-16bit-mono-mp3/**", 
            "data/audio"
        ], 
        [
            "external/Fusion/data/shaders/gles2", 
            "data"
        ]
    ], 
    "copyExcludes": [
        "game/data_src/levels/packLite", 
        "game/data_src/levels/free", 
        "game/data_src/levels/pack[2-9][0-9]"
    ], 
    "copyPatterns": [
        [
            "build/android/res/**", 
            "res"
        ]
    ], 
    "copyTo": "/Resigned/2012-12-13_3.0.0_(23497)_appchina", 
    "customLuaOptions": {
        "gamelua.applyChinaRestictions": true, 
        "gamelua.bingIsEnabled": false, 
        "gamelua.cheatsEnabled": false, 
        "gamelua.customerString": "'appchina'", 
        "gamelua.disableShopButton": false, 
        "gamelua.enableAssertions": false, 
        "gamelua.g_hasWebBrowser": true, 
        "gamelua.g_is_free_version": false, 
        "gamelua.g_registrationEnabled": false, 
        "gamelua.g_updateCheckEnabled": false, 
        "gamelua.gameId": "'abc'", 
        "gamelua.gameVersionNumber": "'3.0.0'", 
        "gamelua.isKorea": false, 
        "gamelua.isPremium": false, 
        "gamelua.isSeasonsAvailable": true, 
        "gamelua.powerUpsEnabled": false, 
        "gamelua.releaseBuild": true, 
        "gamelua.showEditor": false, 
        "gamelua.svnRevisionNumber": "'23497'", 
        "gamelua.timeMachineServer": "dev", 
        "gamelua.useDynamicAssets": false, 
        "gamelua.useMockAchievementLimits": "not True"
    }, 
    "customScripts": {
        "assetFilter": "update_level_filenames.py"
    }, 
    "customer": "appchina", 
    "debug": false, 
    "defines": [
        "ZIPPED_LUA_FILES", 
        "CRYPTED_LUA_FILES", 
        "USE_FLURRY", 
        "USE_PRODUCTION_ADS"
    ], 
    "dirSuffix": "", 
    "encryptLua": true, 
    "encryptionKey": "__SECRET__", 
    "externalModules": [], 
    "failOnConfigurationWarnings": true, 
    "fusionDefines": [], 
    "includeDirs": [
        "../../source", 
        "../../external/Fusion/include", 
        "../../common/dependencies/box2d/Box2D", 
        "../../common/source/"
    ], 
    "jobs": 8, 
    "keyAlias": "__SECRET__", 
    "keyAliasPassword": "__SECRET__", 
    "keyStore": "__SECRET__", 
    "keyStorePassword": "__SECRET__", 
    "luaOptionsFile": "data/scripts/options.lua", 
    "minSdkVersion": "8", 
    "modules": [
        "flurry", 
        "framework", 
        "grgles1", 
        "grgles2", 
        "game", 
        "gr", 
        "hgr", 
        "img", 
        "io", 
        "lua", 
        "net", 
        "pf", 
        "util", 
        "audio", 
        "math", 
        "lang", 
        "ads"
    ], 
    "obfuscate": true, 
    "outputName": "_NoIAP_appchina_DISTRIBUTION", 
    "packageName": "angrybirds", 
    "platform": "android", 
    "projectName": "AngryBirdsClassic", 
    "releasePackage": true, 
    "sourceExcludes": [
        "../../common/source/*IPHONE*.cpp", 
        "../../common/source/*iOS*.cpp", 
        "../../common/source/AppUpWrapper.cpp", 
        "../../common/source/GameFlurr*.cpp", 
        "../../common/source/Nook*", 
        "../../common/source/AdMob*", 
        "../../common/source/RovioAcc*", 
        "../../common/source/Cloud*"
    ], 
    "sourceFiles": [
        "../../source/**.cpp", 
        "../../common/source/*.cpp"
    ], 
    "subDir": "gen", 
    "svnRevision": "23497", 
    "targetPrefix": "android-", 
    "targetSdkVersion": "13", 
    "verbosity": 1, 
    "versionCode": "3000", 
    "versionString": "3.0.0"
}


Scripts Directory Notes

scripts_Note.txt is present in the scripts directory of time travel version from China.

这个目录为主项目的目录 scripts

scripts likely refers to the source directory of uncompiled game scripts, likely game/data_src/scripts.

game_Note.txt is also present in the scripts_common directory of that release.

这个目录为主项目的目录 game

game likely refers to the source directory of uncompiled common game scripts, likely common/scripts/game.

Debug Environment Server Setup

The Chinese Talkweb version of the game left a setup file from GDB, a debugger for Android, providing more insight on source code directories.

set solib-search-path ./obj/local/armeabi-v7a
directory D:/android-ndk-r12b/build//../platforms/android-16/arch-arm/usr/include F:/ABC/ABCMightLeague/external/Fusion/external/7z/C modules/jni/7zip/../.. F:/ABC/ABCMightLeague/include F:/ABC/ABCMightLeague/external/Fusion/include F:/ABC/ABCMightLeague/external/GameUtil/lua_util/include F:/ABC/ABCMightLeague/source F:/ABC/ABCMightLeague/source/Camera F:/ABC/ABCMightLeague/source/TestExamples F:/ABC/ABCMightLeague/common/dependencies/box2d_abc/Box2D F:/ABC/ABCMightLeague/common/dependencies/box2d_abc/Contributions F:/ABC/ABCMightLeague/common/source F:/ABC/ABCMightLeague/external/Fusion/external/lua/src F:/ABC/ABCMightLeague/external/Fusion/modules/game.legacy/include F:/ABC/ABCMightLeague/external/Fusion/modules/img/include F:/ABC/ABCMightLeague/common/dependencies/box2d_abc/include F:/ABC/ABCMightLeague/external/Fusion/modules/net/include F:/ABC/ABCMightLeague/external/Fusion/modules/io/include F:/ABC/ABCMightLeague/external/Fusion/modules/aes/include F:/ABC/ABCMightLeague/external/Fusion/modules/gr/include F:/ABC/ABCMightLeague/external/Fusion/modules/game/include F:/ABC/ABCMightLeague/external/CloudToolkit/include F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/include F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/external/Toons/include F:/ABC/ABCMightLeague/external/Fusion/include/gr F:/ABC/ABCMightLeague/external/Fusion/include/math F:/ABC/ABCMightLeague/external/CloudToolkit/include/lua F:/ABC/ABCMightLeague/external/Fusion/modules/apprater/include F:/ABC/ABCMightLeague/external/Fusion/modules/math/include F:/ABC/ABCMightLeague/external/Fusion/external/protobuf/src F:/ABC/ABCMightLeague/external/TalkwebModule/include F:/ABC/ABCMightLeague/external/Fusion/modules/audio/include F:/ABC/ABCMightLeague/external/Fusion/modules/loggers/include F:/ABC/ABCMightLeague/external/Fusion/modules/jni/include F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/source F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/sdk/build/unity/swig/cpp F:/ABC/ABCMightLeague/external/Fusion/external/zlib F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/external/smc/CPP F:/ABC/ABCMightLeague/external/CloudServicesNativeSDK/source/rovio/ads F:/ABC/ABCMightLeague/external/Fusion/include/pf/Android F:/ABC/ABCMightLeague/external/Fusion/modules/lua/include F:/ABC/ABCMightLeague/external/Fusion/modules/flurry/include F:/ABC/ABCMightLeague/external/Fusion/modules/framework/include F:/ABC/ABCMightLeague/external/Fusion/modules/pf/include F:/ABC/ABCMightLeague/external/Fusion/modules/util/include F:/ABC/ABCMightLeague/external/Fusion/modules/lang/include D:/android-ndk-r12b/build//../sources/cxx-stl/gnu-libstdc++/4.9/include D:/android-ndk-r12b/build//../sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include D:/android-ndk-r12b/build//../sources/cxx-stl/gnu-libstdc++/4.9/include/backward jni/.. modules/jni/CloudServicesNativeSDK/../.. modules/jni/CloudToolkit/../.. modules/jni/TalkwebModule/../.. F:/ABC/ABCMightLeague/external/Fusion/external/AES modules/jni/aes/../.. modules/jni/apprater/../.. F:/ABC/ABCMightLeague/external/Fusion/external/libogg/include F:/ABC/ABCMightLeague/external/Fusion/external/libvorbis/include F:/ABC/ABCMightLeague/external/Fusion/external/libvorbis/lib modules/jni/audio/../.. modules/jni/box2d_abc/../.. F:/ABC/ABCMightLeague/external/Fusion/modules/cpufeatures/include F:/ABC/ABCMightLeague/build/android/release/cpufeatures modules/jni/cpufeatures/../.. modules/jni/external.aes/../.. F:/ABC/ABCMightLeague/external/Fusion/external/lua51/src F:/ABC/ABCMightLeague/external/Fusion/external/luaprofiler/src modules/jni/external.lua/../.. modules/jni/flurry/../.. modules/jni/framework/../.. modules/jni/game/../.. modules/jni/game.legacy/../.. modules/jni/gr/../.. F:/ABC/ABCMightLeague/external/Fusion/modules/grgles2/include modules/jni/grgles2/../.. F:/ABC/ABCMightLeague/external/Fusion/external/webp F:/ABC/ABCMightLeague/external/Fusion/external/jpeg F:/ABC/ABCMightLeague/external/Fusion/external/libpng modules/jni/img/../.. F:/ABC/ABCMightLeague/external/Fusion/external/zlib/contrib/minizip modules/jni/io/../.. modules/jni/jni/../.. modules/jni/jpeg/../.. modules/jni/lang/../.. modules/jni/loggers/../.. modules/jni/lua/../.. modules/jni/lua_util/../.. modules/jni/math/../.. F:/ABC/ABCMightLeague/external/Fusion/external/curl-fusion/android/include modules/jni/net/../.. modules/jni/libogg/../.. modules/jni/pf/../.. modules/jni/libpng/../.. F:/ABC/ABCMightLeague/external/Fusion/external/protobuf/config/android modules/jni/protobuf/../.. modules/jni/util/../.. modules/jni/libvorbis/../.. modules/jni/webp/../.. modules/jni/zlib/../..

SVN Leftovers

BlackBerry Tablet version 2.1.0 left a .svn subdirectory in the assets directory, with a tiny amount of information about where the app icon and splash screen's assets were from.

Since the version control expects you to be connected to Rovio's internal server, you cannot access the revision history of the repository.

10

dir
91889
https://svn/repos/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets
https://svn/repos



2012-02-10T08:54:55.610594Z
86264
antti.alho


svn:special svn:externals svn:needs-lock











507d547c-9613-0410-96c6-edd5cc76dab3
�
icon.png
file




2012-03-21T09:42:36.978000Z
c541f38ba00f0e074861ba036d8f3137
2012-02-10T08:54:55.610594Z
86264
antti.alho
has-props




















16045
�
splash.png
file




2012-03-21T09:42:37.310000Z
62ec4aac67f8928c1ec9ff28543ef5c8
2012-02-10T08:54:55.610594Z
86264
antti.alho
has-props




















33391
�

We can get a glimpse of the properties of these files/directories by running a Subversion command such as svn info -R --include-externals in the /assets directory.
NOTE: Since these files are in an older version of the format (format 10), the command svn upgrade has to be executed before the one above if using newer versions of Subversion.

Path: .
Working Copy Root Path: assets
URL: https://svn/repos/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets
Relative URL: ^/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets
Repository Root: https://svn/repos
Repository UUID: 507d547c-9613-0410-96c6-edd5cc76dab3
Revision: 91889
Node Kind: directory
Schedule: normal
Last Changed Author: antti.alho
Last Changed Rev: 86264
Last Changed Date: 2012-02-10 00:54:55 -0800 (Fri, 10 Feb 2012)
Path: icon.png
Name: icon.png
Working Copy Root Path: assets
URL: https://svn/repos/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets/icon.png
Relative URL: ^/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets/icon.png
Repository Root: https://svn/repos
Repository UUID: 507d547c-9613-0410-96c6-edd5cc76dab3
Revision: 91889
Node Kind: file
Schedule: normal
Last Changed Author: antti.alho
Last Changed Rev: 86264
Last Changed Date: 2012-02-10 00:54:55 -0800 (Fri, 10 Feb 2012)
Text Last Updated: 2012-03-21 02:42:36 -0700 (Wed, 21 Mar 2012)
Checksum: 320f39fbaf54772f378d2167abcb878caeca3533
Path: splash.png
Name: splash.png
Working Copy Root Path: assets
URL: https://svn/repos/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets/splash.png
Relative URL: ^/Rovio_Linnut/branches/generic_2.1.0/build/blackberry/assets/splash.png
Repository Root: https://svn/repos
Repository UUID: 507d547c-9613-0410-96c6-edd5cc76dab3
Revision: 91889
Node Kind: file
Schedule: normal
Last Changed Author: antti.alho
Last Changed Rev: 86264
Last Changed Date: 2012-02-10 00:54:55 -0800 (Fri, 10 Feb 2012)
Text Last Updated: 2012-03-21 02:42:37 -0700 (Wed, 21 Mar 2012)
Checksum: 01bb275b31914f18786644bbb876a4c4c47bc261

All of these files and directories were last changed by Antti Alho, who oddly enough is not mentioned in the game credits.
The revision number for these leftovers are 86264.

The revisions of the files in the folder are byte-to-byte identical to the used versions.

Git Patch

diff --git a/game/data_src/shaders_Mali/2d-sprite-alpha-masked.fx b/game/data_src/shaders_Mali/2d-sprite-alpha-masked.fx
index 9c1cc0d..1412938 100644
--- a/game/data_src/shaders_Mali/2d-sprite-alpha-masked.fx
+++ b/game/data_src/shaders_Mali/2d-sprite-alpha-masked.fx
@@ -3,6 +3,5 @@
 #define ENABLE_ALPHA_FACTOR
 #define ENABLE_ALPHA_MASK
 #define ENABLE_TWOSIDED
-#define ENABLE_SATURATION_ADJUST
 
-#include "pp.fx"
+#include "pp.fx"
\ No newline at end of file
diff --git a/game/data_src/shaders_Mali/2d-sprite-alpha.fx b/game/data_src/shaders_Mali/2d-sprite-alpha.fx
index 854b24f..b5c2e92 100644
--- a/game/data_src/shaders_Mali/2d-sprite-alpha.fx
+++ b/game/data_src/shaders_Mali/2d-sprite-alpha.fx
@@ -2,6 +2,5 @@
 #define ENABLE_PREMULT_ALPHA_BLENDING
 #define ENABLE_ALPHA_FACTOR
 #define ENABLE_TWOSIDED
-#define ENABLE_SATURATION_ADJUST
 
-#include "pp.fx"
+#include "pp.fx"
\ No newline at end of file
diff --git a/game/data_src/shaders_Mali/2d-sprite.fx b/game/data_src/shaders_Mali/2d-sprite.fx
index f7dee61..4d8af16 100644
--- a/game/data_src/shaders_Mali/2d-sprite.fx
+++ b/game/data_src/shaders_Mali/2d-sprite.fx
@@ -1,5 +1,4 @@
 #define DISABLE_DEPTH_TEST
 #define ENABLE_TWOSIDED
-#define ENABLE_SATURATION_ADJUST
 
-#include "pp.fx"
+#include "pp.fx"
\ No newline at end of file
diff --git a/game/data_src/shaders_Mali/2d-vertexcolor-alpha.fx b/game/data_src/shaders_Mali/2d-vertexcolor-alpha.fx
index aa619cc..e1fbe14 100644
--- a/game/data_src/shaders_Mali/2d-vertexcolor-alpha.fx
+++ b/game/data_src/shaders_Mali/2d-vertexcolor-alpha.fx
@@ -4,6 +4,5 @@
 #define ENABLE_ALPHA_BLENDING
 #define ENABLE_ALPHA_FACTOR
 #define ENABLE_TWOSIDED
-#define ENABLE_SATURATION_ADJUST
 
-#include "pp.fx"
+#include "pp.fx"
\ No newline at end of file
diff --git a/game/data_src/shaders_Mali/2d-vertexcolor.fx b/game/data_src/shaders_Mali/2d-vertexcolor.fx
index 0e7a01d..5a12578 100644
--- a/game/data_src/shaders_Mali/2d-vertexcolor.fx
+++ b/game/data_src/shaders_Mali/2d-vertexcolor.fx
@@ -2,6 +2,5 @@
 #define ENABLE_VERTEXCOLOR
 #define DISABLE_TEXTURE
 #define ENABLE_TWOSIDED
-#define ENABLE_SATURATION_ADJUST
 
-#include "pp.fx"
+#include "pp.fx"
\ No newline at end of file
diff --git a/game/data_src/shaders_Mali/commons/uniforms.sh b/game/data_src/shaders_Mali/commons/uniforms.sh
index 30282ce..669531d 100644
--- a/game/data_src/shaders_Mali/commons/uniforms.sh
+++ b/game/data_src/shaders_Mali/commons/uniforms.sh
@@ -30,7 +30,6 @@ uniform mediump vec4 TEX0_OFFSET;
 uniform lowp float SHININESS;
 uniform mediump float GLOSSINESS;
 uniform lowp float ALPHA_FACTOR;
-uniform mediump float COLOR_SATURATION;
 
 uniform mediump float TIME;
 
diff --git a/game/data_src/shaders_Mali/pixelShaders/pp.ps b/game/data_src/shaders_Mali/pixelShaders/pp.ps
index 00c72d3..5d6d9f2 100644
--- a/game/data_src/shaders_Mali/pixelShaders/pp.ps
+++ b/game/data_src/shaders_Mali/pixelShaders/pp.ps
@@ -2,13 +2,6 @@
 #include "../commons/uniforms.sh"
 #include "../commons/varyings.sh"
 
-mediump vec4 Desaturate(mediump vec4 color, mediump float saturation)
-{
-	mediump vec3 grayXfer = vec3(0.3, 0.59, 0.11);
-	mediump vec3 gray = vec3(dot(grayXfer, color.rgb));
-	return vec4(mix(gray, color.rgb, saturation), color.a);
-}
-
 void main()
 {
 
@@ -43,9 +36,5 @@ void main()
 	color *= ALPHA_FACTOR;
 #endif
 
-#ifdef ENABLE_SATURATION_ADJUST
-	color = Desaturate(color, COLOR_SATURATION);
-#endif
-
 	gl_FragColor = color;
 }

A Git patch, present in the 2012 Samsung Smart TV version.

Facebook SDK builder(?)

build-android-fbwapid.py is present in 7.2.0 and up.

import xml.etree.ElementTree as ET
import os
import sys
from os.path import join

def run(log, builder):
	def parse_strings(xml_file, property_name, app_id):

		try:
			with open(xml_file, 'r') as read_file:
				tree = ET.parse(read_file)
				root = tree.getroot()

				for child in root:
					name = child.get('name')
					if name == property_name:
						log.info('string %s = %s in %s' % (name, child.text, xml_file))
						child.text = app_id

				read_file.close()

			with open(xml_file, 'w+') as write_file:
				tree.write(write_file)
				write_file.close()

		except IOError as e:
			log.warning("{0}: I/O error({1}): {2}".format(xml_file, e.errno, e.strerror))

        fbSdkName = "FacebookSDK"
        try:
                if (builder.conf.custom.FacebookSDK_module_name != ""):
                        fbSdkName = builder.conf.custom.FacebookSDK_module_name
        except KeyError as e:
                log.debug("Using default facebook sdk module: {0}".format(fbSdkName))
	path_to_facebook = join("modules", fbSdkName, "res", "values", "strings.xml")
	facebook_id_property_name = 'facebook_app_id'

	try:
		parse_strings(path_to_facebook, facebook_id_property_name, builder.conf.custom.facebookAppId)
	except KeyError:
		pass

Pepperfish Lua Profiler

Hmmm...
To do:
Check iOS/other releases to ensure accuracy?

In version 7.1.0 on Android, a tools directory was copied into the scripts directory. It contains a file called pepperfish.lua and a README.txt, dating from likely March 17, 2011. Oddly ever since updates of this one and newer releases of other Angry Birds games, these files are still present and unchanged.

README.txt:

Original source http://lua-users.org/wiki/PepperfishProfiler (last update: 17 March 2011).

Modified to dump data in excel-compatible format (tabs instead of spaces).
Modified to log percentage of root call.

Integration:
1.	load the profiler code (1st line in gamelogic.lua)
	loadLuaFile(commonScriptPath .. "/../tools/pepperfish.lua", "")
2.	add the lua debug library (uncomment luaopen_debug around LuaState.cpp:41)
3.	start/stop the profiler using a key (update() function around gamelogic.lua:2279)
	if(keyHold["CONTROL"] and keyPressed["G"]) then
		if not g_profiler then
			g_profiler = newProfiler()
			g_profiler:start()
		else
			g_profiler:stop()
			local outfile = io.open( "pepperfish.txt", "w+" )
			g_profiler:report( outfile )
			outfile:close()
			g_profiler = nil
		end
	end

Press Ctrl-G once to start the profiling session. Press Ctrl-G a second time to dump results to a pepperfish.txt.
The dump file will be in current working directory (game). It will be overwritten by subsequent dumps.

The only change to the text file is adding _G. before io.

Unfortunately, a debug library in the one of the game engine's source code files has to be uncommented on line 41, which is not possible.

Encryption Scripts

Versions 4.2.0-4.2.1 on Android in both Free and HD releases have batch files in the data directory, unfortunately the tool isn't present...

Hmmm...
To do:
What is encrypter.exe? OpenSSL?

enc.bat

..\..\..\external\Fusion\tools\bin\encrypter.exe "USCaPQpA4TSNVxMI1v9SK9UC0yZuAnb2" %1 %2

Appears to encrypt a dropped asset.

dec.bat

..\..\..\external\Fusion\tools\bin\encrypter.exe -d "USCaPQpA4TSNVxMI1v9SK9UC0yZuAnb2" %1 %2

Almost the same as enc.bat but decrypts a dropped asset.

Files directory

Internal Project Name

The internal name of the game is Linnut, roughly "Birds" in Finnish according to the game executable build path in older versions and PC. (With or without Rovio), the sound file names for the cutscene intro and endings can also suggest the translation.[1][2][3][4][5][6]

  1. /Users/miika/Documents/Rovio_Linnut/build/iphone/build/Rovio_Linnut.build/Distribution-iphoneos/Rovio_Linnut.build (1.4.3 iPhone)
  2. /Users/bserve/Applications/Hudson/home/jobs/AngryBirds-iphone-1.6.3/workspace/Rovio_Linnut/build/iphone/build/Rovio_Linnut.build/Distribution-iphoneos/Rovio_Linnut.build/ (1.6.3 iPhone)
  3. audio/birds_intro and audio/birds_outro (Possibly translated)
  4. E:\eclipse-workspace\Rovio_Linnut_PC_phase1\build\msvc10\Distribution AppUp\AngryBirds.pdb
  5. D:\Hudson\workspace\AngryBirds-windows-2.3.0\AngryBirds\build\msvc10\Distribution PC\Rovio_Linnut.pdb
  6. BB10 SVN Leftovers