Title Theme#
Before the release of Rio 2, the game's main theme was an upbeat, samba-esque remix of the original Angry Birds theme. After the game changed to match the film release, the theme was changed to a more relaxing remix with birds mentioned in Brazilian Portuguese.
|
Before 2.0.0 |
After 2.0.0 |
|---|---|
Unused Graphics#
|
|
To do: |
Birds#
Bomb#
A unique collision sprite for Bomb. Since Bomb only displays his idle and special sprites when colliding with objects, this sprite goes unused.
Stella#
A unique collision sprite for Stella in her Classic design. While Stella is in the game, she is only used in Rio 2 levels using her Toons design post-2.0.0, and a corpse for Stella does not get used at all, so this goes unused. This was used in version 1.8.0 where Rocket Rumble was added, as it was originally a Rio level.
Shakira Bird#
Sprites intended for a bird version of the pop singer Shakira, of whom had appeared in other games in the franchise for a limited time in 2015, can be found in multiple sprite sheets since v2.5.0.
Heart-shaped bubbles found in the INGAME_COMMON_PARTICLES_1 sheet, which imply that Shakira was planned to replace Stella for a limited time.
Also found in the INGAME_RIO2_RIO_2_BIRDS sheet is a strange shockwave sprite intended for Shakira. It's unknown how this would've been used.
Slingshot Pulling Back#
A sprite of the slingshot pulling back, labeled as SLING_SHOT_02 in the DAT file for the INGAME_BLOCKS_MISC_1 sprite sheet. This sprite is also present and unused in the files of Angry Birds Space as well, since Space was forked from this game.
Debugging Functions#
Just like other Angry Birds games built with Lua, debugging functions are mentioned in certain Lua files and named certain Lua files.
FPS+Memory+Stack(?) Display#
If the game is not a release build, on every bootup, the game will show a display for those status on the bottom corner.
Debugging Info in Credits#
If the game is not a release build, the game will show the customerString in the credits menu.
Developer Cheats#
Main Menu#
This button loads a list of 9 functions that can be done:
- Clear Level Progress = Wipes level progress for a save.
- Clear Achievements = Wipes achievements for a save.
In-Game#
- Lose = Makes the game act like you lost the level.
- 1xStar = Makes the game act like you beat the level but rigs the score to approximately one star.
- 2xStar = Makes the game act like you beat the level but rigs the score to approximately two stars.
- 3xStar = Makes the game act like you beat the level but rigs the score to approximately three stars.
Elsewhere#
- Image boxes: Pressing D will toggle visibility of boxes on the majority of textures.
- FPS + Memory display: Pressing F will toggle visibility of the given display.
Level Editor#
A level editor is present in the game's files and is shown at the main menu if the value to show it is enabled in the build settings.
The mobile release however lacks support for touch controls, meaning you can only look at levels. Unlike Angry Birds where its editor uses right-click to test levels (which mobiles call double-finger click), this game zooms in/out on levels, and it's similar to the computer version's editor.
Developer Leftovers#
SVN Remnants#
|
|
To do: |
BlackBerry Tablet version 1.4.4 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
94211
https://svn/repos/Rovio_AngryBirdsRio/branches/Rovio_Rio_1.4.4/build/blackberry/assets
https://svn/repos
2012-02-10T14:38:04.329633Z
86409
antti.alho
svn:special svn:externals svn:needs-lock
507d547c-9613-0410-96c6-edd5cc76dab3
�
icon.png
file
2012-04-16T13:04:30.227000Z
90f4e15ae8bedbe5e616b786434a5644
2012-02-10T14:38:04.329633Z
86409
antti.alho
has-props
17688
�
splash.png
file
2012-04-16T13:04:30.239000Z
62ec4aac67f8928c1ec9ff28543ef5c8
2012-02-10T14:38:04.329633Z
86409
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.
All of these files and directories were last changed by Antti Alho, credited under the "Post production" team. The revision number for these leftovers are 86409.
The revisions of the files in the folder are byte-to-byte identical to the used versions.
Trailer Source Path#
scripts/menu/CutscenePage.lua uncompiled has a comment that mentions a source path for the Free version's end movie.
C:\rovio\Rovio_AngryBirdsRio\game\data_src\videos\ABRio_trailer.m4v
Unknown JSON File#
A similar JSON file from Angry Birds Seasons made it's way in version 1.5.0 for Android. Unlike other similar files, this one has an edited value for the options file, being set to "not True".
{
"additionalPermissions": [],
"appName": "Angry Birds",
"archs": [
"arm",
"armv7",
"x32"
],
"buildDate": "2012-12-12",
"buildStartedBy": "",
"compatibleScreens": [],
"compileLua": true,
"compressLua": true,
"copyAssets": [
[
"game/config.lua",
""
],
[
"game/data_src/levels",
"data"
],
[
"game/data_src/localization",
"data"
],
[
"game/data_src/localization_android",
"data"
],
[
"game/data_src/scripts",
"data"
],
[
"game/data_src/audio/16000hz-16bit-mono/**",
"data/audio"
],
[
"external/Fusion/data/shaders/gles2",
"data/shaders"
],
[
"game/data_src/images/ingame_assets",
"data/images"
],
[
"game/data_src/images/themes_android",
"data/images"
],
[
"game/data_src/images/320x240_android_partial",
"data/images"
],
[
"game/data_src/images/480x320_android_partial",
"data/images"
],
[
"game/data_src/images/480x320",
"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"
]
],
"copyExcludes": [],
"copyPatterns": [
[
"icons/android/res/**",
"res"
]
],
"copyTo": "p:/RovioMobile/AngryBirdsRio/Software/Android/2012-12-12_1.5.0_(8484)_androidmarket",
"customLuaOptions": {
"gamelua.applyChinaRestictions": false,
"gamelua.cheatsEnabled": false,
"gamelua.customerString": "'androidmarket'",
"gamelua.g_registrationEnabled": false,
"gamelua.g_updateCheckEnabled": false,
"gamelua.gameVersionNumber": "'1.5.0'",
"gamelua.hdProductIapIds": false,
"gamelua.iap_available": true,
"gamelua.isABStarWarsAvailable": true,
"gamelua.isHDVersion": false,
"gamelua.isKorea": false,
"gamelua.isPremium": false,
"gamelua.loadMightyEagle": true,
"gamelua.premiumProductIapIds": false,
"gamelua.releaseBuild": true,
"gamelua.showEditor": false,
"gamelua.svnRevisionNumber": "'8484'",
"gamelua.useDynamicAssets": false,
"gamelua.useMockAchievementLimits": "not True"
},
"customScripts": {
"assetFilter": "update_level_filenames.py"
},
"customer": "androidmarket",
"debug": false,
"defines": [
"USE_IN_APP_PURCHASE",
"USE_FLURRY",
"CRYPTED_LUA_FILES",
"ZIPPED_LUA_FILES",
"USE_ADS"
],
"dirSuffix": "",
"encryptLua": true,
"encryptionKey": "",
"externalModules": [],
"failOnConfigurationWarnings": false,
"includeDirs": [
"../../include",
"../../external/Fusion/include",
"../../external/box2d-2.1/Box2D"
],
"jobs": 8,
"keyAlias": "",
"keyAliasPassword": "",
"keyStore": "",
"keyStorePassword": "",
"luaOptionsFile": "data/scripts/options.lua",
"minSdkVersion": "8",
"modules": [
"googleiap",
"framework",
"grgles1",
"grgles2",
"game",
"flurry",
"gr",
"hgr",
"img",
"net",
"io",
"lua",
"pf",
"util",
"audio",
"math",
"lang",
"ads"
],
"obfuscate": true,
"outputName": "AngryBirdsRio_1.5.0_ADS_androidmarket_DISTRIBUTION",
"packageName": "angrybirdsrio",
"platform": "android",
"projectName": "AngryBirdsRio",
"releasePackage": true,
"sourceExcludes": [
"../../source/*IPHONE*.cpp",
"../../source/*iOS*.cpp",
"../../source/AppUpWrapper.cpp",
"../../source/GameFlurr*.cpp"
],
"sourceFiles": [
"../../source/**.cpp"
],
"subDir": "gen",
"svnRevision": "8484",
"targetPrefix": "android-",
"targetSdkVersion": "13",
"verbosity": 1,
"versionCode": "1500",
"versionString": "1.5.0"
}
Configuration Script#
A configuration script (config.lua) from the developer end made it's way into version 1.5.0. It's not too special but it provides a little insight on the data_src directory. An uncompiled version of the file exists in the iOS releases.
product = "Angry Birds Rio"
publisher = "Rovio"
width = 1024
height = 600
orientation = 0
datapath = "data_src"
imagePath = "images"
fontPath = "fonts"
audioPath = "audio"
localizationPath = "localization"
levelPath = "levels"
scriptPath = "scripts"
deviceModel = "windows"
fullscreen = false
showCursor = false
singleton = true
name = "AngryBirdsRio"
fullscreen = false
renderer = { "gles2" }
autoOrientations = { 90, 270 }
Variant Directory#
|
|
To do: |
While the directory is used, there are two scripts in it referencing Rovio's internal build tool directory and also has the schema file.
import json
import sys
import os
sys.path.append("../../../external/Fusion/buildtool/external/")
import jsonschema
sys.path.pop()
def main():
configFileNames = ["variantconfig.json"]
if len(sys.argv) > 1:
configFileNames = sys.argv[1:]
for configFileName in configFileNames:
with open(configFileName) as configFile:
config = json.load(configFile)
with open("schema.json") as schemaFile:
schema = json.load(schemaFile)
try:
jsonschema.validate(config, schema)
print(configFileName + " successfully validated")
except jsonschema.ValidationError, e:
print("Failed to validate " + configFileName)
print(e)
if __name__ == '__main__':
main()
@set pypath=..\..\..\external\Fusion\buildtool\tools\python-2.6.6-win-x86\
@if not exist %pypath% (set pypath=)
@%pypath%python.exe validate.py %*
@pause
{
"name": "Variant config schema",
"additionalProperties": false, "required": true,
"properties": {
"params": {
"title": "Parameters used by the game",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"mainmenu": {
"title": "Main menu",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"particles": {"title": "Enable particles", "type": "boolean", "required": true}
}
},
"powerupPopup": {
"title": "Power-up recommendation pop-up",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"startLimit": {"title": "Start limit", "type": "integer", "required": true},
"maxLimit": {"title": "Max limit", "type": "integer", "required": true},
"usePowerupFromPopup": {"title": "Limit change when power-up is used from the pop-up", "type": "integer", "required": true},
"closePowerupPopup": {"title": "Limit change when the pop-up is closed", "type": "integer", "required": true},
"restartLevel": {"title": "Counter change when level restarted with 0-5 birds", "type": "array", "required": true, "minItems": 6, "maxItems": 6, "items": {"type": "integer"}},
"usePowerupFromMenu": {"title": "Counter multiplier when power-up used from menu", "type": "number", "required": true}
}
}
}
},
"meta": {
"title": "Information about the config file",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"minVersion": {"title": "Min client version", "type": "string", "required": true, "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
"experiment": {
"title": "Experiment info (only used for experiment configs)",
"type": "object", "required": false, "additionalProperties": false,
"properties": {
"name": {"title": "Name of the experiment", "type": "string", "required": true},
"group": {"title": "Condition or user group name", "type": "string", "required": true}
}
}
}
}
}
}
{
"name": "Variant config schema",
"additionalProperties": false, "required": true,
"properties": {
"params": {
"title": "Parameters used by the game",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"mainmenu": {
"title": "Main menu",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"particles": {"title": "Enable particles", "type": "boolean", "required": true}
}
},
"iap": {
"title": "IAP Products",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"gameBundleSize": {"title": "In-game bundle size", "type": "string", "required": true},
"shopBundleSizes": {"title": "Shop bundle sizes, not yet used (", "type": "array", "required": false, "minItems": 4, "maxItems": 4, "items": {"type": "string"}},
"pupuBundleSize": {"title": "Power-up recommendation pop-up bundle size, not yet used", "type": "string", "required": false}
}
},
"powerupPopup": {
"title": "Power-up recommendation pop-up",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"startLimit": {"title": "Start limit", "type": "integer", "required": true},
"maxLimit": {"title": "Max limit", "type": "integer", "required": true},
"usePowerupFromPopup": {"title": "Limit change when power-up is used from the pop-up", "type": "integer", "required": true},
"closePowerupPopup": {"title": "Limit change when the pop-up is closed", "type": "integer", "required": true},
"restartLevel": {"title": "Counter change when level restarted with 0-5 birds", "type": "array", "required": true, "minItems": 6, "maxItems": 6, "items": {"type": "integer"}},
"usePowerupFromMenu": {"title": "Counter multiplier when power-up used from menu", "type": "number", "required": true}
}
}
}
},
"meta": {
"title": "Information about the config file",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"minVersion": {"title": "Min client version", "type": "string", "required": true, "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
"experiment": {
"title": "Experiment info (only used for experiment configs)",
"type": "object", "required": false, "additionalProperties": false,
"properties": {
"name": {"title": "Name of the experiment", "type": "string", "required": true},
"group": {"title": "Condition or user group name", "type": "string", "required": true}
}
}
}
}
}
}
{
"name": "Variant config schema",
"additionalProperties": false, "required": true,
"properties": {
"params": {
"title": "Parameters used by the game",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"mainmenu": {
"title": "Main menu",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"particles": {"title": "Enable particles", "type": "boolean", "required": true}
}
},
"iap": {
"title": "IAP Products",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"gameBundleSize": {"title": "In-game bundle size", "type": "string", "required": true},
"shopBundleSizes": {"title": "Shop bundle sizes, not yet used (", "type": "array", "required": false, "minItems": 4, "maxItems": 4, "items": {"type": "string"}},
"pupuBundleSize": {"title": "Power-up recommendation pop-up bundle size, not yet used", "type": "string", "required": false},
"superpowerupBundleSize": {"title": "In-game superpowerup bundle size", "type": "string", "required": true}
}
},
"powerupPopup": {
"title": "Power-up recommendation pop-up",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"startLimit": {"title": "Start limit", "type": "integer", "required": true},
"maxLimit": {"title": "Max limit", "type": "integer", "required": true},
"usePowerupFromPopup": {"title": "Limit change when power-up is used from the pop-up", "type": "integer", "required": true},
"closePowerupPopup": {"title": "Limit change when the pop-up is closed", "type": "integer", "required": true},
"restartLevel": {"title": "Counter change when level restarted with 0-5 birds", "type": "array", "required": true, "minItems": 6, "maxItems": 6, "items": {"type": "integer"}},
"usePowerupFromMenu": {"title": "Counter multiplier when power-up used from menu", "type": "number", "required": true}
}
},
"levelHint": {
"title": "Level hint toast",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"restartLimit": {"title": "Number of restarts needed to trigger level hint", "type": "integer", "required": true},
"powerupCost": {"title": "Number of powerups it costs to get the level hint", "type": "integer", "required": true},
"directPurchaseBundleSize": {"title": "Size of the bundle of level hint direct purchase", "type": "string", "required": true}
}
},
"promoConfig": {
"title": "Configuration for cross promotion",
"type": "array", "required": true, "additionalProperties": false,
"items": {
"title": "List of promoted products",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"productName": {"title": "Name of the product being promoted", "type": "string", "required": true},
"screen": {"title": "Screen in which the promo appears", "type": "string", "required": true},
"image": {"title": "Promo art clip name", "type": "string", "required": true},
"button": {"title": "Promo art button clip name", "type": "string", "required": true},
"link": {"title": "Link to open when promo is clicked", "type": "string", "required": true},
"buttonPosition": {
"title": "Relative position of the button on the promo art",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"x": {"title": "Relative x position", "type": "number", "required": true},
"y": {"title": "Relative y position", "type": "number", "required": true}
}
}
}
}
}
}
},
"meta": {
"title": "Information about the config file",
"type": "object", "required": true, "additionalProperties": false,
"properties": {
"minVersion": {"title": "Min client version", "type": "string", "required": true, "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
"experiment": {
"title": "Experiment info (only used for experiment configs)",
"type": "object", "required": false, "additionalProperties": false,
"properties": {
"name": {"title": "Name of the experiment", "type": "string", "required": true},
"group": {"title": "Condition or user group name", "type": "string", "required": true}
}
}
}
}
}
}
Anti-Hacking String#
The native function GameLua::unlockRequestChecksum uses the below string, possibly to flame reverse engineers looking at the function. Interestingly it remained in all future builds of the game, regardless of the platform and even had a sequel.
ShameOnYouHacker
Internal Project Name#
The game is internally referred to as Rio2 with or without AngryBirds and/or Rovio before it. Notably it also dropped Linnut from this and future games.
References#
- https://www.amazon.com/Rovio-Entertainment-Ltd-Angry-Birds/dp/B00ZF5N46C Amazon↩︎
- BB10 SVN leftovers↩︎
|
The Angry Birds series | |
|---|---|
|
iOS |
Angry Birds (Prototypes) • Seasons • Rio • Friends (Fusion, Unity) • Island • Space (Prototypes) • Bad Piggies (Prototypes) • Star Wars (Prototypes) • Star Wars II • Go! • Epic (Prototype) • Stella • Transformers • POP! • Fight! • Angry Birds 2 • Reloaded • Rovio Classics: Angry Birds • Bad Piggies 2 |
|
Android |
Angry Birds • Epic • Seasons • Space • Rio • Star Wars • Star Wars II • Stella • Transformers • Fight! • Angry Birds 2 • Go! • Friends (Fusion, Unity) • Football! • Bad Piggies • Rovio Classics: Angry Birds • POP! • Racing • Block Quest |
|
Windows |
Angry Birds • Seasons • Space • Rio • Star Wars • Star Wars II • Angry Birds 2 • Bad Piggies • Friends |
|
HTML5 |
Chrome • Pistachios • Friends |
|
Mac OS X |
Angry Birds • Seasons • Space • Rio • Star Wars • Bad Piggies • Reloaded |
|
Adobe Flash |
Breakfast • Ultrabook Adventure • Friends • Vuela Tazos • Heikki • Lotus F1 Team • McDonald's • Social (Earlier Prototype) |
|
Xbox 360, PlayStation 3 |
|
|
Arcade |
|
|
tvOS, visionOS |
|
|
The Rio series | |
|---|---|
|
Wii, Xbox 360, PlayStation 3 |
|
|
Nintendo DS |
|
|
Windows, Mac OS X, iOS, Android, Windows Phone |
|