Home › Forums › General Discussions Forum › Modding
-
Replies
-
DEAD_ACCOUNT@dante-mele
Fix your decompiled LUA or edit all over again, luac does not like if one irregularity is detected in the process of compiling.
You Gotta be Joshing me@beakymcfeatherGreat news! I was able to get Mesa working for Angry Birds 1.0.0, so I can resume work on Angry Birds: The Lost Levels!
UPDATE: The good news is that the level loaded, the bad news is that for some reason whenever the game loads the slingshot it just crashes, along with the fact that for some reason it spawned a stone brick in the middle of the supporting ground and the pig on top of the ice:
Here’s what it’s supposed to look like:
UPDATE:
Well, I tried fixing it and now whenever the level loads I get this error message:
It may be because I’m running AB in compatibility mode for Windows XP SP2, I’m gonna try using SP3 and see what happens.
ANOTHER STINKING UPDATE BECAUSE I DON’T SEE THE PURPOSE IN MAKING ANOTHER REPLY AFTER MY OWN: That sure wasn’t the problem since the same error message appears when I try using compatibility mode for Windows XP SP3 as well.
RizDub@rizdubI think I know what the issue is regarding the pig spawning out of the glass block; you need to create a joint combining the two objects (type 2 specifically).
I’m not sure why that extra stone block is appearing. Maybe there’s an extra one “under” the ground?
¿Ostrich?@ostrich101Hello there AB modders.
I downloaded the 1.0.0 version of Angry Birds from the link provided, as well as the level editor, and when i opened the level editor it got stuck on “Loading Images, Please wait..”, i don’t know what to do, so could anyone tell me what i’m doing wrong?
PS: It would be nice to have a proper video tutorial on how to mod the game.
You Gotta be Joshing me@beakymcfeather@ostrich101 I had that same issue, then I read through that old thread some more and found out that version is dead, if you go to this thread there’ll be a version that still works, and since not a whole lot of people have tried modding Angry Birds and we’re still learning about AB’s inner workings. Also, keep in mind that the level editor was made a long time ago. (sometime around 2011 I believe)
AN UPDATE REGARDING MY LEVEL DESIGNING STRUGGLES: It turns out the “joint” connecting the pig to the ice block was indeed the issue, I solved this with a makeshift version:
However, it still crashes when it tries to load the slingshot, any ideas on what’s going on?
And while I’m here, I think we should elaborate on how we’ll distribute mods:
Since according to Rovio’s Terms of Service, we should not just give people the game with modified files, instead I think it’d be better if we’d give people the game folders (like images, audio, levels, etc.) that have modified content along with what’s not changed in said folders, and if it’s just the new stuff/changed stuff at least explain where to put it or have a README file detailing where to put the files.
¿Ostrich?@ostrich101I actually found the version of the level editor that worked after i posted, but i don’t know how to load levels into the game. Could somebody explain this?
Oh, and here’s a question: Would it be possible to port stuff from the latest PC version of Angry Birds into the version that is moddable? Is it also possible to port stuff from other Angry Birds games too?
You Gotta be Joshing me@beakymcfeather@ostrich101 You press “save changes” and you’ll notice that the Lua code in the text window has changed, go to wherever you installed AB 1.0.0 and then go to data>levels, then you’ll see the level packs, just go to any folder (I’m gonna use data>levels>pack1 as an example here) then open the desired level in notepad and copy and paste the code into that, keep in mind that the level editor was discontinued a long time ago and there are some issues I’ve had. And as for porting stuff across different versions of the game, you might wanna ask @thepeckybird as he’s trying to port the current version on mobile to PC or @dante-mele as he’s trying to make more recent versions of the game as well as other AB games moddable.
¿Ostrich?@ostrich101So i made the level (which is a remake of the level from the AB Chrome trailer), copied it into notepad, and….
…it still the same level i pasted the code onto, so what am i doing wrong?
(UPDATE: It turns out you have to paste the code into a level you haven’t unlocked, but when i loaded it i had the same problem as @beakymcfeather, where the level would load the slingshot in the ground and the level completes, then when trying to open the level again, the game crashes.)
Here’s the code by the way:
physicsToWorld = 20
theme = “theme1”
joints = {
}
birdCameraData = {
ipad = {
bottom = 122.18199920654,
left = -655.24298095703,
px = 48.054100036621,
py = -369.68798828125,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -897.16101074219
},
iphone = {
bottom = 58.935001373291,
left = -627.74499511719,
px = 40.922298431396,
py = -355.47198486328,
right = 1921.3100585938,
screenHeight = 968,
screenWidth = 1280,
sx = 0.95712798833847,
sy = 0.95712798833847,
top = -861.15100097656
},
version = “0.02”
}
castleCameraData = {
ipad = {
bottom = 122.18199920654,
left = 547.12298583984,
px = 1250.4200439453,
py = -405.29098510742,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -932.76397705078
},
iphone = {
bottom = 47.576000213623,
left = 583.97302246094,
px = 1245.1300048828,
py = -452.42401123047,
right = 1906.2900390625,
screenHeight = 968,
screenWidth = 1280,
sx = 0.96799999475479,
sy = 0.96799999475479,
top = -952.42401123047
},
version = “0.02”
}
counts = {
RedBird = 1,
YellowBird = 1,
KingPiglette = 1,
ExtraBlueBird = 2,
BlackBird = 1,
BasicBird2 = 1,
BoomerangBird = 1,
StoneBlock11 = 2,
WoodBlock10 = 3,
StoneBlock10 = 2,
WoodBlock12 = 1,
StoneBlock6 = 2,
GrandpaPiglette = 1,
LightBlock2 = 2,
LightBlock3 = 2,
LightBlock1 = 6,
WoodBlock1 = 4,
WoodBlock4 = 4,
MediumPiglette = 1,
SmallPiglette = 2,
LightBlock6 = 1,
StoneBlock4 = 2,
HelmetPiglette = 1,
StoneBlock7 = 1,
StoneBlock8 = 2
}
world = {
ground = {
angle = 0,
definition = “Ground”,
name = “ground”,
x = 55.188701629639,
y = 5
},
RedBird_1 = {
x = -29.944444444444443,
y = -1.2500000000000022,
name = “RedBird_1”,
definition = “RedBird”,
angle = 0
},
YellowBird_1 = {
x = -32.66666666666667,
y = -1.4444444444444429,
name = “YellowBird_1”,
definition = “YellowBird”,
angle = 0
},
KingPiglette_1 = {
x = 62.72222222222222,
y = -3.9166666666666643,
name = “KingPiglette_1”,
definition = “KingPiglette”,
angle = 0
},
ExtraBlueBird_1 = {
x = -35.24999999999999,
y = -0.9999999999999964,
name = “ExtraBlueBird_1”,
definition = “ExtraBlueBird”,
angle = 0
},
BlackBird_1 = {
x = -37.58333333333333,
y = -2.166666666666668,
name = “BlackBird_1”,
definition = “BlackBird”,
angle = 0
},
ExtraBlueBird_2 = {
x = -40,
y = -0.9166666666666643,
name = “ExtraBlueBird_2”,
definition = “ExtraBlueBird”,
angle = 0
},
BasicBird2_1 = {
x = -43.083333333333336,
y = -2.333333333333332,
name = “BasicBird2_1”,
definition = “BasicBird2”,
angle = 0
},
BoomerangBird_1 = {
x = -47.66666666666667,
y = -1.9166666666666679,
name = “BoomerangBird_1”,
definition = “BoomerangBird”,
angle = 0
},
StoneBlock11_1 = {
x = 70.98333333333348,
y = -1.9833333333333294,
name = “StoneBlock11_1”,
definition = “StoneBlock11”,
angle = 0
},
WoodBlock10_1 = {
x = 57.05000000000001,
y = -4.9999999999999964,
name = “WoodBlock10_1”,
definition = “WoodBlock10”,
angle = 1.5700000000000003
},
StoneBlock10_1 = {
x = 59.05000000000001,
y = -4.9999999999999964,
name = “StoneBlock10_1”,
definition = “StoneBlock10”,
angle = 1.5700000000000003
},
StoneBlock11_2 = {
x = 54.650000000000006,
y = -1.9833333333333294,
name = “StoneBlock11_2”,
definition = “StoneBlock11”,
angle = -1.5766666666666846
},
WoodBlock10_2 = {
x = 68.58333333333346,
y = -4.9999999999999964,
name = “WoodBlock10_2”,
definition = “WoodBlock10”,
angle = 1.5700000000000003
},
StoneBlock10_2 = {
x = 66.35000000000012,
y = -5.016666666666663,
name = “StoneBlock10_2”,
definition = “StoneBlock10”,
angle = 1.5700000000000003
},
WoodBlock12_1 = {
x = 62.93333333333334,
y = -9.666666666666664,
name = “WoodBlock12_1”,
definition = “WoodBlock12”,
angle = 3.13666666666666
},
StoneBlock6_1 = {
x = 68.68333333333328,
y = -10.416666666666668,
name = “StoneBlock6_1”,
definition = “StoneBlock6”,
angle = 0
},
StoneBlock6_2 = {
x = 57.13333333333334,
y = -10.416666666666666,
name = “StoneBlock6_2”,
definition = “StoneBlock6”,
angle = 0
},
GrandpaPiglette_1 = {
x = 62.91666666666667,
y = -13.916666666666666,
name = “GrandpaPiglette_1”,
definition = “GrandpaPiglette”,
angle = 0
},
LightBlock2_1 = {
x = 68.25,
y = -11.916666666666664,
name = “LightBlock2_1”,
definition = “LightBlock2”,
angle = 1.5500000000000012
},
LightBlock3_1 = {
x = 66.66666666666666,
y = -11.916666666666666,
name = “LightBlock3_1”,
definition = “LightBlock3”,
angle = 0
},
LightBlock1_1 = {
x = 66.16666666666667,
y = -14.416666666666668,
name = “LightBlock1_1”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_1 = {
x = 66.16666666666667,
y = -13.4,
name = “WoodBlock1_1”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock2_2 = {
x = 59.83333333333333,
y = -11.916666666666664,
name = “LightBlock2_2”,
definition = “LightBlock2”,
angle = 1.5500000000000012
},
LightBlock3_2 = {
x = 58.249999999999986,
y = -11.916666666666664,
name = “LightBlock3_2”,
definition = “LightBlock3”,
angle = 0
},
LightBlock1_2 = {
x = 57.75,
y = -14.416666666666668,
name = “LightBlock1_2”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_2 = {
x = 57.75,
y = -13.399999999999999,
name = “WoodBlock1_2”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock1_3 = {
x = 59.75,
y = -14.416666666666668,
name = “LightBlock1_3”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_3 = {
x = 59.75,
y = -13.399999999999999,
name = “WoodBlock1_3”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock1_4 = {
x = 68.23333333333335,
y = -14.41666666666667,
name = “LightBlock1_4”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_4 = {
x = 68.23333333333335,
y = -13.4,
name = “WoodBlock1_4”,
definition = “WoodBlock1”,
angle = 0
},
WoodBlock4_1 = {
x = 58.26666666666667,
y = -15.416666666666666,
name = “WoodBlock4_1”,
definition = “WoodBlock4”,
angle = 0
},
WoodBlock4_2 = {
x = 67.6,
y = -15.33333333333333,
name = “WoodBlock4_2”,
definition = “WoodBlock4”,
angle = 0
},
MediumPiglette_1 = {
x = 55.16666666666667,
y = -12.666666666666663,
name = “MediumPiglette_1”,
definition = “MediumPiglette”,
angle = 0
},
SmallPiglette_1 = {
x = 70.08333333333333,
y = -12,
name = “SmallPiglette_1”,
definition = “SmallPiglette”,
angle = 0
},
SmallPiglette_2 = {
x = 57.333333333333336,
y = -17,
name = “SmallPiglette_2”,
definition = “SmallPiglette”,
angle = 0
},
LightBlock6_1 = {
x = 63.00000000000001,
y = -17.2,
name = “LightBlock6_1”,
definition = “LightBlock6”,
angle = 0
},
LightBlock1_5 = {
x = 59.75,
y = -16.250000000000004,
name = “LightBlock1_5”,
definition = “LightBlock1”,
angle = 0
},
LightBlock1_6 = {
x = 66.23333333333335,
y = -16.250000000000007,
name = “LightBlock1_6”,
definition = “LightBlock1”,
angle = 0
},
StoneBlock4_1 = {
x = 60.416666666666664,
y = -19.649999999999995,
name = “StoneBlock4_1”,
definition = “StoneBlock4”,
angle = 1.5700000000000012
},
WoodBlock4_3 = {
x = 59.43333333333334,
y = -19.683333333333337,
name = “WoodBlock4_3”,
definition = “WoodBlock4”,
angle = 1.5700000000000012
},
StoneBlock4_2 = {
x = 66.76666666666665,
y = -19.649999999999995,
name = “StoneBlock4_2”,
definition = “StoneBlock4”,
angle = 1.5700000000000012
},
WoodBlock4_4 = {
x = 65.78333333333333,
y = -19.683333333333337,
name = “WoodBlock4_4”,
definition = “WoodBlock4”,
angle = 1.5700000000000012
},
HelmetPiglette_1 = {
x = 63.083333333333336,
y = -19.583333333333332,
name = “HelmetPiglette_1”,
definition = “HelmetPiglette”,
angle = 0
},
WoodBlock10_3 = {
x = 63.166666666666664,
y = -22.15,
name = “WoodBlock10_3”,
definition = “WoodBlock10”,
angle = 0
},
StoneBlock7_1 = {
x = 63.25,
y = -24.333333333333332,
name = “StoneBlock7_1”,
definition = “StoneBlock7”,
angle = 0
},
StoneBlock8_1 = {
x = 60.583333333333336,
y = -23.499999999999996,
name = “StoneBlock8_1”,
definition = “StoneBlock8”,
angle = 0
},
StoneBlock8_2 = {
x = 66,
y = -23.416666666666668,
name = “StoneBlock8_2”,
definition = “StoneBlock8”,
angle = 0
}
}Thepeckybird@thepeckybirdNot currently doing the Conversion mod right now. By the way, is there a way to add high quality audio for old versions of angry birds on android?
¿Ostrich?@ostrich101By the way, is there a way to add high quality audio for old versions of angry birds on android?
My guess is to get the audio, export to either .ogg, .wav, or mp3 and name it to something already used.
EXAMPLE: Export the Angry Birds Rio theme, name it “title-theme”, and delete the original title theme file and replace it with your own file, which here is the AB Rio “title-theme”.
You Gotta be Joshing me@beakymcfeatherI’m gonna be taking a break from modding, gives me chance to do other things, but if anyone wants to know the code to my level here it is:
theme = “theme1”
joints = {
}
birdCameraData = {
ipad = {
bottom = 122.18199920654,
left = -655.24298095703,
px = 48.054100036621,
py = -369.68798828125,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -897.16101074219
},
iphone = {
bottom = 58.935001373291,
left = -627.74499511719,
px = 40.922298431396,
py = -355.47198486328,
right = 1921.3100585938,
screenHeight = 968,
screenWidth = 1280,
sx = 0.95712798833847,
sy = 0.95712798833847,
top = -861.15100097656
},
version = “0.02”
}
castleCameraData = {
ipad = {
bottom = 122.18199920654,
left = 547.12298583984,
px = 1250.4200439453,
py = -405.29098510742,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -932.76397705078
},
iphone = {
bottom = 47.576000213623,
left = 583.97302246094,
px = 1245.1300048828,
py = -452.42401123047,
right = 1906.2900390625,
screenHeight = 968,
screenWidth = 1280,
sx = 0.96799999475479,
sy = 0.96799999475479,
top = -952.42401123047
},
version = “0.02”
}
counts = {
RedBird = 3,
StaticBlockTheme05_02 = 1,
StaticBlockTheme06_01 = 2,
StaticBlockTheme07_01 = 1,
ExtraBlockTNT = 5,
StoneBlock5 = 2,
ExtraBlockFlag02 = 1,
LightBlock6 = 2,
LightBlock5 = 2,
MediumPiglette = 1
}
world = {
ground = {
angle = 0,
definition = “Ground”,
name = “ground”,
x = 55.188701629639,
y = 5
},
RedBird_1 = {
x = -35.94444444444444,
y = -1.0833333333333357,
name = “RedBird_1”,
definition = “RedBird”,
angle = 0
},
RedBird_2 = {
x = -33.19444444444444,
y = -1.0833333333333355,
name = “RedBird_2”,
definition = “RedBird”,
angle = 0
},
RedBird_3 = {
x = -38.36111111111111,
y = -1.1666666666666696,
name = “RedBird_3”,
definition = “RedBird”,
angle = 0
},
StaticBlockTheme05_02_1 = {
x = 46.699999999999996,
y = -4.499999999999994,
name = “StaticBlockTheme05_02_1”,
definition = “StaticBlockTheme05_02”,
angle = 1.5700000000000012
},
StaticBlockTheme06_01_1 = {
x = 45.96666666666667,
y = -10.833333333333332,
name = “StaticBlockTheme06_01_1”,
definition = “StaticBlockTheme06_01”,
angle = 1.1800000000000008
},
StaticBlockTheme06_01_2 = {
x = 47.5,
y = -10.93333333333333,
name = “StaticBlockTheme06_01_2”,
definition = “StaticBlockTheme06_01”,
angle = 2.06
},
StaticBlockTheme07_01_1 = {
x = 46.833333333333336,
y = -13.499999999999998,
name = “StaticBlockTheme07_01_1”,
definition = “StaticBlockTheme07_01”,
angle = 0
},
ExtraBlockTNT_1 = {
x = 44.36666666666667,
y = -1.699999999999996,
name = “ExtraBlockTNT_1”,
definition = “ExtraBlockTNT”,
angle = 0
},
ExtraBlockTNT_2 = {
x = 41.03333333333334,
y = -1.5666666666666624,
name = “ExtraBlockTNT_2”,
definition = “ExtraBlockTNT”,
angle = 0
},
ExtraBlockTNT_3 = {
x = 49.1,
y = -1.666666666666662,
name = “ExtraBlockTNT_3”,
definition = “ExtraBlockTNT”,
angle = 0
},
ExtraBlockTNT_4 = {
x = 49.16666666666667,
y = -4.933333333333328,
name = “ExtraBlockTNT_4”,
definition = “ExtraBlockTNT”,
angle = 0
},
ExtraBlockTNT_5 = {
x = 52.43333333333334,
y = -1.7999999999999963,
name = “ExtraBlockTNT_5”,
definition = “ExtraBlockTNT”,
angle = 0
},
StoneBlock5_1 = {
x = 46.86666666666666,
y = -16.200000000000003,
name = “StoneBlock5_1”,
definition = “StoneBlock5”,
angle = 1.5700000000000012
},
StoneBlock5_2 = {
x = 46.96666666666666,
y = -25.816666666666663,
name = “StoneBlock5_2”,
definition = “StoneBlock5”,
angle = 1.5700000000000012
},
ExtraBlockFlag02_1 = {
x = 47.016666666666666,
y = -30.683333333333337,
name = “ExtraBlockFlag02_1”,
definition = “ExtraBlockFlag02”,
angle = 0
},
LightBlock6_1 = {
x = 46.77777777777778,
y = -18.583333333333336,
name = “LightBlock6_1”,
definition = “LightBlock6”,
angle = 0
},
LightBlock5_1 = {
x = 43.833333333333336,
y = -21.083333333333332,
name = “LightBlock5_1”,
definition = “LightBlock5”,
angle = 1.5600000000000012
},
LightBlock5_2 = {
x = 49.66666666666667,
y = -21.083333333333332,
name = “LightBlock5_2”,
definition = “LightBlock5”,
angle = 1.5600000000000012
},
LightBlock6_2 = {
x = 46.75,
y = -23.416666666666668,
name = “LightBlock6_2”,
definition = “LightBlock6”,
angle = 0
},
MediumPiglette_1 = {
x = 46.75,
y = -20.833333333333332,
name = “MediumPiglette_1”,
definition = “MediumPiglette”,
angle = 0
}
}NOTE: if you change the “theme” value to something else like theme2 for example it will change the setting of the level.
UPDATE: Well, I found out that the game was crashing because I had the 32-bit version of Mesa. *cue Roblox death sound*
RizDub@rizdubThere’s something that I noticed both @ostrich101 and @beakymcfeather are missing – the birds need a startNumber variable that indicates what order they are used in. This could be why the levels won’t load properly.
Also @ostrich101 – the ExtraBlueBird is not a playable bird, but an inert blue bird “block” used in a few Golden Eggs, like classic Golden Egg #1 or the Seasons Cherry Blossom golden egg (listed as Seasons golden egg #33 on the Nest). If you want a playable Blue Bird, use the SmallBlueBird element instead.
RizDub@rizdub@ostrich101 You shouldn’t have to create the level all over again; just open the code in a text editor, replace every ExtraBlueBird with SmallBlueBird, and you’re good.
(Side note: there is a similar inert Boomerang Bird, but you’ve got this one right; the playable one is BoomerangBird, the inert non-playable one is ExtraBoomerangBird.)Regarding the startNumber variable, I’m going to assume that the order the birds stand in is the order you want them to be launched. The slingshot will automatically be placed based on wherever the first bird is (make sure you test it so that the birds can reach the structure, of course). For the first bird (the red bird), add “startNumber = 1” to its code so it says something like:
RedBird_1 = { x = -29.944444444444443, y = -1.2500000000000022, name = "RedBird_1", definition = "RedBird", startNumber = 1, angle = 0 }
The order the variables are listed doesn’t matter, just as long as they’re all there; startNumber can be listed first, in the middle, or last, and it shouldn’t affect anything. Then for the second bird, add “startNumber = 2” somewhere so it says something like:
YellowBird_1 = { x = -32.66666666666667, y = -1.4444444444444429, name = "YellowBird_1", definition = "YellowBird", startNumber = 2, angle = 0 }
…and so on, up until the final bird (seventh in your lineup)…
BoomerangBird_1 = { x = -47.66666666666667, y = -1.9166666666666679, name = "BoomerangBird_1", definition = "BoomerangBird", startNumber = 7, angle = 0 }
It actually doesn’t matter what order the different blocks and birds are listed. You could have the Boomerang Bird defined before the Red Bird, but as long as their startNumbers reflect the order they’re shot (and as long as no numbers are skipped), it should work.
You Gotta be Joshing me@beakymcfeather@rizdub I did that and it still crashes when it tries to load the slingshot.
DEAD_ACCOUNT@dante-meleI know its possible to rip ZSTREAM images, but is there any way (easy if possible) to make my own ZSTREAM file with my own images or import my own images to an existing ZSTREAM file? I plan to modify sprites… My modding server can launch faster if so or if I manage to get debug menus for Bad Piggies (MODERN) and Angry Birds 2 it could launch…
RizDub@rizdub@dante-mele Were you ever able to figure out decryption codes for the Flash version of AB Friends? There are several .pak files I can’t figure out how to open…
Thepeckybird@thepeckybirdThose can be opened if you google “how to extract .pak files.”
DEAD_ACCOUNT@dante-meleNo really, some are encrypted, otherwise, they open like ZIPs, same for SWFs… No key yet, taking a break on ABFriends and trying to debug Bad Piggies (PC), code would likely be similar so I can figure out how to encrypt/decrypt a save/contraption.
You Gotta be Joshing me@beakymcfeatherSWFs? If you have flash you can open those and then you can play the game/watch a video.
RizDub@rizdubAngry Birds Go and Angry Birds Transformers both have .pak files in their data files, but these are noticeably different. If I open the AB Go and AB Transformers files in a text editor, I can see other filenames in the data, implying that I would only need to unzip it (which, by the way, I still can’t figure out how to do on a Mac). The ones used in AB Friends have no filenames in the data, which is why I’m sure they’re encrypted somehow. Another thing is that the AB Go and AB Transformers .pak files have consistent document headers, while the AB Friends ones do not.
DEAD_ACCOUNT@dante-mele@rizdub Yes, all the PAKs (AND THE OBBs for Android) from the Exient XGS engine based games use a custom KPX header, its not encrypted (EXCEPT ONE ABT FILE), and you can extract (MOST of) them with xpk2.bms, PAKs from the CDN (https://cloudassets-a.akamaihd.net/apdrive/PROJECTNAME/PLATFORM_live/DATE_PAKNAME.pak [repeats for multiple] OR https://cloud.rovio.com/apdrive/1/apps/PROJECTNAME/assets?name=PAKNAME.pak [requiring an access token]) use zlib compressed, PAKs (ONLY ABT/FURBY), this is a useful log to show how the asset CDNs and PAK loading works: https://pastebin.com/scEkhZth, and file hashes+dates are also kept on the server. Certain game files in the PAKs are obfuscated, you can read and edit them, but forcing the game to load them afterwards forces it to crash when I tried so many times…
I’m guessing ABFriends uses identical encryption keys for BOTH the Flash and Mobile versions of the games, think about it, tournament levels are from the SAME CDN so each game uses the SAME KEY to load the encrypted levels from it so that proves my point, also regards cross compatible savedata (I think).
Back to Bad Piggies PC, you can RIP unencrypted savedata (as XMLs) from the game’s memory while its running but how to encrypt it (to use ingame) and figure out what is the decryption key for them (THEY ARE DIFFERENT FOR EACH FILETYPE/NAME ASIDES FROM THE BAKs) as I cannot find it in the game assembly (its private), maybe its possible to modify the save in the memory and force it to write. I also enabled the Developer Cheat Menu and the debugging utilities (isn’t much).
Now Bad Piggies (Android), I got the debugging utilities and the Developer Cheat Screen, and BOY THERE’S A LOT.
QuickBMS is for Mac platforms here: https://aluigi.altervista.org/papers/quickbms_macosx.zip.
RizDub@rizdubSo I downloaded the Mac QuickBMS and, after some trial-and-error, managed to also figure out how to use the Angry Birds BMS script.
The script works when I use it on older lua files, but if I try to use it on newer .lua files, I just get “Bus error: 10” and I can’t figure out why.
DEAD_ACCOUNT@dante-meleNever got “bus error 10” anytime on QuickBMS, I think 7z (old compression) is more easy for QuickBMS to use but LZMA is harder… What file(s) are you trying to mess with? I’ll send you a link to them decrypted to save time if you want…
¿Ostrich?@ostrich101I attempted to mod a Golden Egg level (one which i haven’t unlocked) and it didn’t work. It was the same level.
Here’s the code:
physicsToWorld = 20
theme = “theme1”
joints = {
}
birdCameraData = {
ipad = {
bottom = 122.18199920654,
left = -655.24298095703,
px = 48.054100036621,
py = -369.68798828125,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -897.16101074219
},
iphone = {
bottom = 58.935001373291,
left = -627.74499511719,
px = 40.922298431396,
py = -355.47198486328,
right = 1921.3100585938,
screenHeight = 968,
screenWidth = 1280,
sx = 0.95712798833847,
sy = 0.95712798833847,
top = -861.15100097656
},
version = “0.02”
}
castleCameraData = {
ipad = {
bottom = 122.18199920654,
left = 547.12298583984,
px = 1250.4200439453,
py = -405.29098510742,
right = 1953.7199707031,
screenHeight = 768,
screenWidth = 1024,
sx = 0.72799998521805,
sy = 0.72799998521805,
top = -932.76397705078
},
iphone = {
bottom = 47.576000213623,
left = 583.97302246094,
px = 1245.1300048828,
py = -452.42401123047,
right = 1906.2900390625,
screenHeight = 968,
screenWidth = 1280,
sx = 0.96799999475479,
sy = 0.96799999475479,
top = -952.42401123047
},
version = “0.02”
}
counts = {
RedBird = 1,
YellowBird = 1,
KingPiglette = 1,
SmallBlueBird = 2,
BlackBird = 1,
BasicBird2 = 1,
BoomerangBird = 1,
StoneBlock11 = 2,
WoodBlock10 = 3,
StoneBlock10 = 2,
WoodBlock12 = 1,
StoneBlock6 = 2,
GrandpaPiglette = 1,
LightBlock2 = 2,
LightBlock3 = 2,
LightBlock1 = 6,
WoodBlock1 = 4,
WoodBlock4 = 4,
MediumPiglette = 1,
SmallPiglette = 2,
LightBlock6 = 1,
StoneBlock4 = 2,
HelmetPiglette = 1,
StoneBlock7 = 1,
StoneBlock8 = 2
}
world = {
ground = {
angle = 0,
definition = “Ground”,
name = “ground”,
x = 55.188701629639,
y = 5
},
RedBird_1 = {
x = -29.944444444444443,
y = -1.2500000000000022,
name = “RedBird_1”,
definition = “RedBird”,
startNumber = 1,
angle = 0
},
YellowBird_1 = {
x = -32.66666666666667,
y = -1.4444444444444429,
name = “YellowBird_1”,
definition = “YellowBird”,
startNumber = 2,
angle = 0
},
KingPiglette_1 = {
x = 62.72222222222222,
y = -3.9166666666666643,
name = “KingPiglette_1”,
definition = “KingPiglette”,
angle = 0
},
SmallBlueBird_1 = {
x = -35.24999999999999,
y = -0.9999999999999964,
name = “ExtraBlueBird_1”,
definition = “SmallBlueBird”,
startNumber = 3,
angle = 0
},
BlackBird_1 = {
x = -37.58333333333333,
y = -2.166666666666668,
name = “BlackBird_1”,
definition = “BlackBird”,
startNumber = 4,
angle = 0
},
SmallBlueBird_2 = {
x = -40,
y = -0.9166666666666643,
name = “ExtraBlueBird_2”,
definition = “SmallBlueBird”,
startNumber = 5,
angle = 0
},
BasicBird2_1 = {
x = -43.083333333333336,
y = -2.333333333333332,
name = “BasicBird2_1”,
definition = “BasicBird2”,
startNumber = 6,
angle = 0
},
BoomerangBird_1 = {
x = -47.66666666666667,
y = -1.9166666666666679,
name = “BoomerangBird_1”,
definition = “BoomerangBird”,
startNumber = 7,
angle = 0
},
StoneBlock11_1 = {
x = 70.98333333333348,
y = -1.9833333333333294,
name = “StoneBlock11_1”,
definition = “StoneBlock11”,
angle = 0
},
WoodBlock10_1 = {
x = 57.05000000000001,
y = -4.9999999999999964,
name = “WoodBlock10_1”,
definition = “WoodBlock10”,
angle = 1.5700000000000003
},
StoneBlock10_1 = {
x = 59.05000000000001,
y = -4.9999999999999964,
name = “StoneBlock10_1”,
definition = “StoneBlock10”,
angle = 1.5700000000000003
},
StoneBlock11_2 = {
x = 54.650000000000006,
y = -1.9833333333333294,
name = “StoneBlock11_2”,
definition = “StoneBlock11”,
angle = -1.5766666666666846
},
WoodBlock10_2 = {
x = 68.58333333333346,
y = -4.9999999999999964,
name = “WoodBlock10_2”,
definition = “WoodBlock10”,
angle = 1.5700000000000003
},
StoneBlock10_2 = {
x = 66.35000000000012,
y = -5.016666666666663,
name = “StoneBlock10_2”,
definition = “StoneBlock10”,
angle = 1.5700000000000003
},
WoodBlock12_1 = {
x = 62.93333333333334,
y = -9.666666666666664,
name = “WoodBlock12_1”,
definition = “WoodBlock12”,
angle = 3.13666666666666
},
StoneBlock6_1 = {
x = 68.68333333333328,
y = -10.416666666666668,
name = “StoneBlock6_1”,
definition = “StoneBlock6”,
angle = 0
},
StoneBlock6_2 = {
x = 57.13333333333334,
y = -10.416666666666666,
name = “StoneBlock6_2”,
definition = “StoneBlock6”,
angle = 0
},
GrandpaPiglette_1 = {
x = 62.91666666666667,
y = -13.916666666666666,
name = “GrandpaPiglette_1”,
definition = “GrandpaPiglette”,
angle = 0
},
LightBlock2_1 = {
x = 68.25,
y = -11.916666666666664,
name = “LightBlock2_1”,
definition = “LightBlock2”,
angle = 1.5500000000000012
},
LightBlock3_1 = {
x = 66.66666666666666,
y = -11.916666666666666,
name = “LightBlock3_1”,
definition = “LightBlock3”,
angle = 0
},
LightBlock1_1 = {
x = 66.16666666666667,
y = -14.416666666666668,
name = “LightBlock1_1”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_1 = {
x = 66.16666666666667,
y = -13.4,
name = “WoodBlock1_1”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock2_2 = {
x = 59.83333333333333,
y = -11.916666666666664,
name = “LightBlock2_2”,
definition = “LightBlock2”,
angle = 1.5500000000000012
},
LightBlock3_2 = {
x = 58.249999999999986,
y = -11.916666666666664,
name = “LightBlock3_2”,
definition = “LightBlock3”,
angle = 0
},
LightBlock1_2 = {
x = 57.75,
y = -14.416666666666668,
name = “LightBlock1_2”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_2 = {
x = 57.75,
y = -13.399999999999999,
name = “WoodBlock1_2”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock1_3 = {
x = 59.75,
y = -14.416666666666668,
name = “LightBlock1_3”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_3 = {
x = 59.75,
y = -13.399999999999999,
name = “WoodBlock1_3”,
definition = “WoodBlock1”,
angle = 0
},
LightBlock1_4 = {
x = 68.23333333333335,
y = -14.41666666666667,
name = “LightBlock1_4”,
definition = “LightBlock1”,
angle = 0
},
WoodBlock1_4 = {
x = 68.23333333333335,
y = -13.4,
name = “WoodBlock1_4”,
definition = “WoodBlock1”,
angle = 0
},
WoodBlock4_1 = {
x = 58.26666666666667,
y = -15.416666666666666,
name = “WoodBlock4_1”,
definition = “WoodBlock4”,
angle = 0
},
WoodBlock4_2 = {
x = 67.6,
y = -15.33333333333333,
name = “WoodBlock4_2”,
definition = “WoodBlock4”,
angle = 0
},
MediumPiglette_1 = {
x = 55.16666666666667,
y = -12.666666666666663,
name = “MediumPiglette_1”,
definition = “MediumPiglette”,
angle = 0
},
SmallPiglette_1 = {
x = 70.08333333333333,
y = -12,
name = “SmallPiglette_1”,
definition = “SmallPiglette”,
angle = 0
},
SmallPiglette_2 = {
x = 57.333333333333336,
y = -17,
name = “SmallPiglette_2”,
definition = “SmallPiglette”,
angle = 0
},
LightBlock6_1 = {
x = 63.00000000000001,
y = -17.2,
name = “LightBlock6_1”,
definition = “LightBlock6”,
angle = 0
},
LightBlock1_5 = {
x = 59.75,
y = -16.250000000000004,
name = “LightBlock1_5”,
definition = “LightBlock1”,
angle = 0
},
LightBlock1_6 = {
x = 66.23333333333335,
y = -16.250000000000007,
name = “LightBlock1_6”,
definition = “LightBlock1”,
angle = 0
},
StoneBlock4_1 = {
x = 60.416666666666664,
y = -19.649999999999995,
name = “StoneBlock4_1”,
definition = “StoneBlock4”,
angle = 1.5700000000000012
},
WoodBlock4_3 = {
x = 59.43333333333334,
y = -19.683333333333337,
name = “WoodBlock4_3”,
definition = “WoodBlock4”,
angle = 1.5700000000000012
},
StoneBlock4_2 = {
x = 66.76666666666665,
y = -19.649999999999995,
name = “StoneBlock4_2”,
definition = “StoneBlock4”,
angle = 1.5700000000000012
},
WoodBlock4_4 = {
x = 65.78333333333333,
y = -19.683333333333337,
name = “WoodBlock4_4”,
definition = “WoodBlock4”,
angle = 1.5700000000000012
},
HelmetPiglette_1 = {
x = 63.083333333333336,
y = -19.583333333333332,
name = “HelmetPiglette_1”,
definition = “HelmetPiglette”,
angle = 0
},
WoodBlock10_3 = {
x = 63.166666666666664,
y = -22.15,
name = “WoodBlock10_3”,
definition = “WoodBlock10”,
angle = 0
},
StoneBlock7_1 = {
x = 63.25,
y = -24.333333333333332,
name = “StoneBlock7_1”,
definition = “StoneBlock7”,
angle = 0
},
StoneBlock8_1 = {
x = 60.583333333333336,
y = -23.499999999999996,
name = “StoneBlock8_1”,
definition = “StoneBlock8”,
angle = 0
},
StoneBlock8_2 = {
x = 66,
y = -23.416666666666668,
name = “StoneBlock8_2”,
definition = “StoneBlock8”,
angle = 0
}
} -
Author
Home › Forums › General Discussions Forum › Modding
- You must be logged in to reply to this topic.