Extracting game resources

28 posts / 0 new
Last post
Offline
Joined: 11/16/2012 - 16:05
Extracting game resources

Has anyone figured out how to extract the resources (images etc) from the game yet? I can unpack it a bit with 7-zip, but I still end up with large 172MB blob.

-davidc

Albino Pokey's picture
Offline
Joined: 11/18/2012 - 17:02

I haven't found a way either. And my hex editor didn't find much.

puggsoy's picture
Offline
Joined: 11/20/2012 - 04:25

Didn't someone say Tomorrow Corporation would make the game more moddable? If that's the case, maybe we should wait until they do so before trying to mod the game.

RedTheGreen's picture
Offline
Joined: 11/20/2012 - 03:52

Perhaps, but if we can do it sooner, knowing us, we probably will. <img src="/sites/all/modules/smiley/packs/kolobok/wink.gif" alt="smiley"/>

momo1526's picture
Offline
Joined: 11/19/2012 - 16:43

Same, just a bunch of .something unreadable files, well except through a hex editor for some of them, but that one just gives the names to variables I think.

movildima's picture
Offline
Joined: 11/19/2012 - 01:13

Maybe Resource tuner may help. Let's see...

EDIT: Nothing. only a bunch of strings and exe's icons... Well, I think the moddable update will come soon.

Offline
Joined: 11/21/2012 - 04:44

To decompile the game, for the moment I have tried (without success) :
7zip, Game Extractor (a java app), Dragon UnPacker, Universal Extractor, GConvSet.

I continue to investigate.

Blinkin's picture
Offline
Joined: 11/22/2012 - 14:51

Same here, I end up with a 189MB folder tough.
World of goo was awesome, the mods were pretty good (they still are).
Can't wait to see what this game can do.
Anyone knows OEcake? Fun times. <img src="/sites/all/modules/smiley/packs/kolobok/smile.gif" alt="smiley"/>

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Instead of extracting resources from the game, why not extract resources from the memory while the game is running? I think it would be much easier!
I think making the game moddable is pretty possible because I saw these:
data\animations\arena\arena.anim.xml
data\animations\arenaFace\arenaFace.anim.xml
data\animations\arenaFrost\arenaFrost.anim.xml
data\animations\arenaGear\arenaGear.anim.xml
data\animations\arenaSoot\arenaSoot.anim.xml
data\animations\backButtonUI\backButtonUI.anim.xml
data\animations\badgeIcon\badgeIcon.anim.xml
data\animations\blackScreen\blackScreen.anim.xml
data\animations\Catalog\Catalog.anim.xml
data\animations\catalogBackground\catalogBackground.anim.xml
data\animations\catalogBackPaper\catalogBackPaper.anim.xml
data\animations\catalogBuyBox\catalogBuyBox.anim.xml
data\animations\catalogBuyBoxValue\catalogBuyBoxValue.anim.xml
data\animations\catalogBuyBtnController\catalogBuyBtnController.anim.xml
data\animations\catalogItemTrayStatus\catalogItemTrayStatus.anim.xml
data\animations\catalogThumb\catalogThumb.anim.xml
data\animations\CatalogUI\CatalogUI.anim.xml
data\animations\coinType\coinType.anim.xml
data\animations\ComboBox\ComboBox.anim.xml
data\animations\ComboCheckBox\ComboCheckBox.anim.xml
data\animations\ComboItem\ComboItem.anim.xml
data\animations\ComboLine\ComboLine.anim.xml
data\animations\ComboLineText\ComboLineText.anim.xml
data\animations\ComboLineUI\ComboLineUI.anim.xml
data\animations\ComboList\ComboList.anim.xml
data\animations\ComboListBtnUI\ComboListBtnUI.anim.xml
data\animations\ComboListUI\ComboListUI.anim.xml
data\animations\ComboSlider\ComboSlider.anim.xml
data\animations\ComboStarBox\ComboStarBox.anim.xml
data\animations\ComboUI\ComboUI.anim.xml
data\animations\ComboVFX\ComboVFX.anim.xml
data\animations\ConnectFacebookBtnUI\ConnectFacebookBtnUI.anim.xml
data\animations\ControllerScreen\ControllerScreen.anim.xml
data\animations\Cursor\Cursor.anim.xml
data\animations\decal_fadeToBlack\decal_fadeToBlack.anim.xml
data\animations\decal_ink\decal_ink.anim.xml
data\animations\decal_juice\decal_juice.anim.xml
data\animations\decal_screenFlash\decal_screenFlash.anim.xml
data\animations\deleteBtnUI\deleteBtnUI.anim.xml
data\animations\dialogArrow\dialogArrow.anim.xml
data\animations\DragMeText\DragMeText.anim.xml
data\animations\EventController\EventController.anim.xml
data\animations\FacebookBtnUI\FacebookBtnUI.anim.xml
data\animations\FireplaceTransition\FireplaceTransition.anim.xml
data\animations\FireplaceTransitionSwoosh\FireplaceTransitionSwoosh.anim.xml
data\animations\Intro\Intro.anim.xml
data\animations\IntroEdges\IntroEdges.anim.xml
data\animations\IntroHand\IntroHand.anim.xml
data\animations\IntroHandFire\IntroHandFire.anim.xml
data\animations\IntroProfileStar\IntroProfileStar.anim.xml
data\animations\IntroProfileText\IntroProfileText.anim.xml
data\animations\IntroTitle\IntroTitle.anim.xml
data\animations\itemBoxAnimation\itemBoxAnimation.anim.xml
data\animations\itemBtnBorder\ItemBtnBorder.anim.xml
data\animations\itemBtnImage\itemBtnImage.anim.xml
data\animations\itemBtnStar\itemBtnStar.anim.xml
data\animations\itemPriceBox\itemPriceBox.anim.xml
data\animations\itemPriceBoxUI\itemPriceBoxUI.anim.xml
data\animations\itemTray\itemTray.anim.xml
data\animations\itemTrayBox\itemTrayBox.anim.xml
data\animations\itemTrayBoxAttract\itemTrayBoxAttract.anim.xml
data\animations\itemTrayCatalogs\itemTrayCatalogs.anim.xml
data\animations\itemTrayDragMe\itemTrayDragMe.anim.xml
data\animations\itemTrayExpressShip\itemTrayExpressShip.anim.xml
data\animations\itemTrayItem\itemTrayItem.anim.xml
data\animations\itemTrayItemController\itemTrayItemController.anim.xml
data\animations\itemTrayLetter\itemTrayLetter.anim.xml
data\animations\itemTrayObject\itemTrayObject.anim.xml
data\animations\itemTrayOpenedLetter\itemTrayOpenedLetter.anim.xml
data\animations\itemTrayShadow\itemTrayShadow.anim.xml
data\animations\itemTrayUI\itemTrayUI.anim.xml
data\animations\letter\letter.anim.xml
data\animations\letterBackdrop\letterBackdrop.anim.xml
data\animations\letterItemBox\letterItemBox.anim.xml
data\animations\letterReward\letterReward.anim.xml
data\animations\letterRewardBox\letterRewardBox.anim.xml
data\animations\letterSendBtn\letterSendBtn.anim.xml
data\animations\letterSender\letterSender.anim.xml
data\animations\letterUI\letterUI.anim.xml
data\animations\Menu\Menu.anim.xml
data\animations\moneyCounter\moneyCounter.anim.xml
data\animations\moneyCounterNumbers\moneyCounterNumbers.anim.xml
data\animations\moneyCounterUI\moneyCounterUI.anim.xml
data\animations\Photo\Photo.anim.xml
data\animations\PhotoSelector\PhotoSelector.anim.xml
data\animations\PhotoSelectorHeaderBar\PhotoSelectorHeaderBar.anim.xml
data\animations\PhotoSelectorReticule\PhotoSelectorReticule.anim.xml
data\animations\PhotoSelectorUI\PhotoSelectorUI.anim.xml
data\animations\pieChart\pieChart.anim.xml
data\animations\playBtn\playBtn.anim.xml
data\animations\popUp\popUp.anim.xml
data\animations\popUpUI\popUpUI.anim.xml
data\animations\rewardText\rewardText.anim.xml
data\animations\Scene_HouseRowHouse\Scene_HouseRowHouse.anim.xml
data\animations\Scene_HRFire\Scene_HRFire.anim.xml
data\animations\Scene_HRFluidSim\Scene_HRFluidSim.anim.xml
data\animations\Scene_HRGroundEffects\Scene_HRGroundEffects.anim.xml
data\animations\Scene_LensFlare\Scene_LensFlare.anim.xml
data\animations\Scene_MsNancyRocket\Scene_MsNancyRocket.anim.xml
data\animations\Scene_ScreenFlash\Scene_ScreenFlash.anim.xml
data\animations\Scene_TCH_Elevator\Scene_TCH_Elevator.anim.xml
data\animations\Scene_TCH_EMeter\Scene_TCH_EMeter.anim.xml
data\animations\Scene_TCL_Elevator\Scene_TCL_Elevator.anim.xml
data\animations\Scene_TCL_EMeter\Scene_TCL_EMeter.anim.xml
data\animations\Scene_TCOfficeEffects\Scene_TCOfficeEffects.anim.xml
data\animations\Scene_TCOfficeShadow\Scene_TCOfficeShadow.anim.xml
data\animations\ScreenBG\ScreenBG.anim.xml
data\animations\sootboyBody\sootboyBody.anim.xml
data\animations\sootboyHead\sootboyHead.anim.xml
data\animations\textBtnText\textBtnText.anim.xml
data\animations\UIBackdrop\UIBackdrop.anim.xml
data\animations\UpgradeMailboxBtnUI\UpgradeMailboxBtnUI.anim.xml
data\animations\Warning\Warning.anim.xml
data\buttons\backButton\backButton.anim.xml
data\buttons\buyButton\buyButton.anim.xml
data\buttons\catalogButton\catalogButton.anim.xml
data\buttons\catalogCloseButton\catalogCloseButton.anim.xml
data\buttons\ComboHelpButton\ComboHelpButton.anim.xml
data\buttons\ComboListButton\ComboListButton.anim.xml
data\buttons\deleteButton\deleteButton.anim.xml
data\buttons\expressShipButton\expressShipButton.anim.xml
data\buttons\FacebookButton\FacebookButton.anim.xml
data\buttons\IntroProfileButton\IntroProfileButton.anim.xml
data\buttons\itemButton\itemButton.anim.xml
data\buttons\itemTrayCatalogButton\itemTrayCatalogButton.anim.xml
data\buttons\MenuExitGameButton\MenuExitGameButton.anim.xml
data\buttons\MenuExitTitleButton\MenuExitTitleButton.anim.xml
data\buttons\MenuReturnGameButton\MenuReturnGameButton.anim.xml
data\buttons\noButton\noButton.anim.xml
data\buttons\okButton\okButton.anim.xml
data\buttons\playButton\playButton.anim.xml
data\buttons\PSBackButton\PSBackButton.anim.xml
data\buttons\PSButton\PSButton.anim.xml
data\buttons\readAgainButton\readAgainButton.anim.xml
data\buttons\sendButton\sendButton.anim.xml
data\buttons\textButton\textButton.anim.xml
data\buttons\upgradeMailboxButton\upgradeMailboxButton.anim.xml
data\buttons\yesButton\yesButton.anim.xml
data\characters\carolers\carolers.anim.xml
data\characters\gatekeeper\gatekeeper.anim.xml
data\characters\mailman\mailman.anim.xml
data\characters\msNancy\msNancy.anim.xml
data\characters\receptionist\receptionist.anim.xml
data\characters\sootboy_normal\sootboy_normal.anim.xml
data\characters\weatherman\weatherman.anim.xml
data\characters\weathermanMovement\weathermanMovement.anim.xml
data\cutscenes\Credits\Credits.anim.xml
data\cutscenes\Jingle\Jingle.anim.xml
data\cutscenes\MsNancyHug\MsNancyHug.anim.xml
data\cutscenes\OpenTheGatesDramatic\OpenTheGatesDramatic.anim.xml
data\cutscenes\OpenTheGatesNormal\OpenTheGatesNormal.anim.xml
data\items\AbsoluteSpawner\AbsoluteSpawner.anim.xml
data\items\AlarmClock\AlarmClock.anim.xml
data\items\Balloons\Balloons.anim.xml
data\items\Bank\Bank.anim.xml
data\items\Battery\Battery.anim.xml
data\items\BearTrapSitting\BearTrapSitting.anim.xml
data\items\Beetle\Beetle.anim.xml
data\items\BFPills\BFPills.anim.xml
data\items\BFReplacementPills\BFReplacementPills.anim.xml
data\items\Bicycle\Bicycle.anim.xml
data\items\BlankBoy\BlankBoy.anim.xml
data\items\BlankGirl\BlankGirl.anim.xml
data\items\Blowfish\Blowfish.anim.xml
data\items\Bomb\Bomb.anim.xml
data\items\BombshellBetty\BombshellBetty.anim.xml
data\items\Brick\Brick.anim.xml
data\items\Bubble\Bubble.anim.xml
data\items\BuildingBlocks\BuildingBlocks.anim.xml
data\items\Camera\Camera.anim.xml
data\items\CanOfSnakes\CanOfSnakes.anim.xml
data\items\CardboardSword\CardboardSword.anim.xml
data\items\CasualGame\CasualGame.anim.xml
data\items\CelebrationBus\CelebrationBus.anim.xml
data\items\Cello\Cello.anim.xml
data\items\CellPhone\CellPhone.anim.xml
data\items\CerealBox\CerealBox.anim.xml
data\items\Cigarettes\Cigarettes.anim.xml
data\items\Cloud\Cloud.anim.xml
data\items\Cocoon\Cocoon.anim.xml
data\items\CocoonButterfly\CocoonButterfly.anim.xml
data\items\Coffee\Coffee.anim.xml
data\items\Coin\Coin.anim.xml
data\items\Coin1\Coin1.anim.xml
data\items\Coin2\Coin2.anim.xml
data\items\CornOnTheCob\CornOnTheCob.anim.xml
data\items\Creationism\Creationism.anim.xml
data\items\CreditCard\CreditCard.anim.xml
data\items\CreditCardCash\CreditCardCash.anim.xml
data\items\Debris\Debris.anim.xml
data\items\DecadeShrooms\DecadeShrooms.anim.xml
data\items\decalSpawner\decalSpawner.anim.xml
data\items\DeleteButton\DeleteButton.anim.xml
data\items\DollZombie\DollZombie.anim.xml
data\items\DrillChainThrower\DrillChainThrower.anim.xml
data\items\Egg\Egg.anim.xml
data\items\Email\Email.anim.xml
data\items\EmailSpam\EmailSpam.anim.xml
data\items\Exterminator\Exterminator.anim.xml
data\items\Extinction\Extinction.anim.xml
data\items\Factory\Factory.anim.xml
data\items\FakeCoin\FakeCoin.anim.xml
data\items\FakeCombo\FakeCombo.anim.xml
data\items\FakeComboTouch\FakeComboTouch.anim.xml
data\items\FakeMoneyCounter\FakeMoneyCounter.anim.xml
data\items\FakeStamp\FakeStamp.anim.xml
data\items\FamilyPortrait\FamilyPortrait.anim.xml
data\items\FeelieBear\FeelieBear.anim.xml
data\items\FireExtinguisher\FireExtinguisher.anim.xml
data\items\Flower\flower.anim.xml
data\items\Fly\Fly.anim.xml
data\items\FragileChina\FragileChina.anim.xml
data\items\FreezeBomb\FreezeBomb.anim.xml
data\items\GalaxyCollection\GalaxyCollection.anim.xml
data\items\GameBush\GameBush.anim.xml
data\items\GameBushDuck\GameBushDuck.anim.xml
data\items\Gems\Gems.anim.xml
data\items\GentlemanExplorer\GentlemanExplorer.anim.xml
data\items\GlassBulb\GlassBulb.anim.xml
data\items\GlassPlayingCard\GlassPlayingCard.anim.xml
data\items\GlobalWarming\GlobalWarming.anim.xml
data\items\GooBallPack\GooBallPack.anim.xml
data\items\GravityBoy\GravityBoy.anim.xml
data\items\GravityBoyRose\GravityBoyRose.anim.xml
data\items\HandheldFire\HandheldFire.anim.xml
data\items\HowlingCoyote\HowlingCoyote.anim.xml
data\items\HugCoupon\HugCoupon.anim.xml
data\items\IceCube\IceCube.anim.xml
data\items\ImitationMeatBoy\ImitationMeatBoy.anim.xml
data\items\InternetCloud\InternetCloud.anim.xml
data\items\InternetCloudNumbers\InternetCloudNumbers.anim.xml
data\items\JarofFireflies\JarofFireflies.anim.xml
data\items\KittyKittyPooPoo\KittyKittyPooPoo.anim.xml
data\items\KittyPoo\KittyPoo.anim.xml
data\items\KnockoffGamingDevice\KnockoffGamingDevice.anim.xml
data\items\LadyBug\LadyBug.anim.xml
data\items\Laser\laser.anim.xml
data\items\LawsuitLarry\LawsuitLarry.anim.xml
data\items\Leperchaun\Leperchaun.anim.xml
data\items\LetterBlocks\LetterBlocks.anim.xml
data\items\LittleInfernoBeta\LittleInfernoBeta.anim.xml
data\items\LocustEggLocust\LocustEggLocust.anim.xml
data\items\LocustEggs\LocustEggs.anim.xml
data\items\LowSelfEsteemGirl\LowSelfEsteemGirl.anim.xml
data\items\Magnet\Magnet.anim.xml
data\items\ManlyOdorSpray\ManlyOdorSpray.anim.xml
data\items\ManlyTrophy\ManlyTrophy.anim.xml
data\items\Marshmallow\Marshmallow.anim.xml
data\items\MechanicalHeart\MechanicalHeart.anim.xml
data\items\MedMommyBottle\MedMommyBottle.anim.xml
data\items\MiniatureSun\MiniatureSun.anim.xml
data\items\MiniMoon\MiniMoon.anim.xml
data\items\MiniMoonDebris\MiniMoonDebris.anim.xml
data\items\MiniNuke\MiniNuke.anim.xml
data\items\MiniPluto\MiniPluto.anim.xml
data\items\MissHexopus\MissHexopus.anim.xml
data\items\ModernLamp\ModernLamp.anim.xml
data\items\MomAndDadBots\MomAndDadBots.anim.xml
data\items\MousePad\mousePad.anim.xml
data\items\Mushroom\Mushroom.anim.xml
data\items\MusicTones\MusicTones.anim.xml
data\items\MustachePack\MustachePack.anim.xml
data\items\MustacheRider\MustacheRider.anim.xml
data\items\MyFriends\MyFriends.anim.xml
data\items\MysterySeasoning\MysterySeasoning.anim.xml
data\items\NestingDoll\NestingDoll.anim.xml
data\items\NestingDollParts\NestingDollParts.anim.xml
data\items\Ninja\Ninja.anim.xml
data\items\OilBarge\OilBarge.anim.xml
data\items\OldLady\OldLady.anim.xml
data\items\OpenLetter\OpenLetter.anim.xml
data\items\Painting\Painting.anim.xml
data\items\PaperHeart\PaperHeart.anim.xml
data\items\Phoenix\Phoenix.anim.xml
data\items\PhoenixEgg\PhoenixEgg.anim.xml
data\items\Pirate\Pirate.anim.xml
data\items\Pixel\Pixel.anim.xml
data\items\PlagueBook\PlagueBook.anim.xml
data\items\Politician\Politician.anim.xml
data\items\Popcorn\Popcorn.anim.xml
data\items\PotpourriBomb\PotpourriBomb.anim.xml
data\items\PowderBarrel\PowderBarrel.anim.xml
data\items\ProteinPowder\ProteinPowder.anim.xml
data\items\QuadBunnyRazor\QuadBunnyRazor.anim.xml
data\items\Raccoon\Raccoon.anim.xml
data\items\Radio\radio.anim.xml
data\items\RailroadXing\RailroadXing.anim.xml
data\items\Razer\Razer.anim.xml
data\items\RocketShipOfLearning\RocketShipOfLearning.anim.xml
data\items\RottenMeat\RottenMeat.anim.xml
data\items\SausageLinks\SausageLinks.anim.xml
data\items\Scarecrow\Scarecrow.anim.xml
data\items\SCKatie\SCKatie.anim.xml
data\items\SeedPacket\SeedPacket.anim.xml
data\items\SmokeDetector\SmokeDetector.anim.xml
data\items\SnowGlobe\SnowGlobe.anim.xml
data\items\SoapBox\SoapBox.anim.xml
data\items\Soda\Soda.anim.xml
data\items\SonicBoomBox\SonicBoomBox.anim.xml
data\items\SootBugBuzz\SootBugBuzz.anim.xml
data\items\SootBugScamper\SootBugScamper.anim.xml
data\items\SouthPole\SouthPole.anim.xml
data\items\SpaceHeater\SpaceHeater.anim.xml
data\items\Spider\Spider.anim.xml
data\items\SpiderEgg\SpiderEgg.anim.xml
data\items\SpiderEggSpider\SpiderEggSpider.anim.xml
data\items\SportingBall\SportingBall.anim.xml
data\items\SquirrelWhistle\SquirrelWhistle.anim.xml
data\items\Stamp\stamp.anim.xml
data\items\SugarPlumpsPortrait\SugarPlumpsPortrait.anim.xml
data\items\Sunglasses\Sunglasses.anim.xml
data\items\SuperJuicer4000\SuperJuicer4000.anim.xml
data\items\Sushi\Sushi.anim.xml
data\items\Syringe\Syringe.anim.xml
data\items\TermsAndConditions\TermsAndConditions.anim.xml
data\items\Tetrominos\Tetrominos.anim.xml
data\items\Thermometer\Thermometer.anim.xml
data\items\TheTerribleSecret\TheTerribleSecret.anim.xml
data\items\ThisWayUpSign\ThisWayUpSign.anim.xml
data\items\TikiTorch\TikiTorch.anim.xml
data\items\Toaster\Toaster.anim.xml
data\items\Transhumanist\Transhumanist.anim.xml
data\items\TranshumanistGhost\TranshumanistGhost.anim.xml
data\items\TRex\TRex.anim.xml
data\items\TV\TV.anim.xml
data\items\UncleSamBamBam\UncleSamBamBam.anim.xml
data\items\UnhappyElf\UnhappyElf.anim.xml
data\items\UnstableOrdinance\UnstableOrdinance.anim.xml
data\items\UnstableOrdinanceBomb\UnstableOrdinanceBomb.anim.xml
data\items\Valkyrie\Valkyrie.anim.xml
data\items\Warranty\Warranty.anim.xml
data\items\WelcomeCoal\WelcomeCoal.anim.xml
data\items\WelcomeNote\WelcomeNote.anim.xml
data\items\WindupBot\WindupBot.anim.xml
data\items\WineBottle\WineBottle.anim.xml
data\items\WoodenIdol1\WoodenIdol1.anim.xml
data\items\WoodenIdol2\WoodenIdol2.anim.xml
data\items\WoodenIdol3\WoodenIdol3.anim.xml
data\items\WoodenSpoon\WoodenSpoon.anim.xml
data\items\WoodHand\WoodHand.anim.xml
data\items\WordPack\WordPack.anim.xml
data\items\Worm\Worm.anim.xml
data\scenes\Alley\Alley.anim.xml
data\scenes\EndOfDemo\EndOfDemo.anim.xml
data\scenes\HouseRow\HouseRow.anim.xml
data\scenes\MainStreet\MainStreet.anim.xml
data\scenes\SkylineTerraceA\SkylineTerraceA.anim.xml
data\scenes\SkylineTerraceB\SkylineTerraceB.anim.xml
data\scenes\SubwayCorner\SubwayCorner.anim.xml
data\scenes\TomorrowCorpGates\TomorrowCorpGates.anim.xml
data\scenes\TomorrowCorpHallway\TomorrowCorpHallway.anim.xml
data\scenes\TomorrowCorpLobby\TomorrowCorpLobby.anim.xml
data\scenes\TomorrowCorpOffice\TomorrowCorpOffice.anim.xml

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Find a piece of Javascript:
(function()
{
var XHTML = "http://www.w3.org/1999/xhtml";

// Time slicing constants
var LIMIT = 10; // Maximum number of nodes to process before checking time
var DURATION = 200; // Maximum amount of time (ms) to process before unblocking UI
var DELAY = 15; // Amount of time (ms) to unblock UI

// Tree building state
var iterator;
var nextNode;
var root;
var rootFirstChild;
var time;

// Template References
var attrTemplate, attrName, attrValue;
var elmStartTemplate, elmStartName;
var elmEndTemplate, elmEndName;
var cdataTemplate, cdataValue;
var commentTemplate, commentValue;
var style;

// Only invoke this script if it was injected by our parser. Test for a condition that is
// impossible for a markup to create - two direct children of the document.
var secondRootElement = document.documentElement.nextElementSibling;
if (secondRootElement == null)
{
// We've been included externally, bail
return;
}

// Remove the script element from the document so that it doesn't show up in the XML tree view
document.removeChild(secondRootElement);

// Main entry point. Build the tree view.
function buildTree()
{
time = (new Date()).getTime();

// Cache references to the root element and its first child for later use
root = document.documentElement;
rootFirstChild = root.firstChild;

// Initialize templates
buildAttributeTemplate();
buildCDATASectionTemplate();
buildCommentTemplate();
buildElementTemplate();
buildStyles();

// Start processing the document
buildXMLDeclaration();
iterator = document.createNodeIterator(document, NodeFilter.SHOW_ALL, null, false);
nextNode = iterator.nextNode();
buildNode();
}

// Resume tree building after pausing to unblock UI
function resumeBuilder()
{
time = (new Date()).getTime();
buildNode();
}

// Build the tree incrementally and delegate to appropriate node function
function buildNode()
{
var node, i = 0;
while(nextNode)
{
if(i++ <= LIMIT)
{
node = nextNode;
nextNode = iterator.nextNode();
switch(node.nodeType)
{
case Node.CDATA_SECTION_NODE : buildCDATASection (node); break;
case Node.COMMENT_NODE : buildComment (node); break;
case Node.DOCUMENT_TYPE_NODE : buildDocumentType (node); break;
case Node.ELEMENT_NODE : buildElement (node); break;
case Node.PROCESSING_INSTRUCTION_NODE : buildProcessingInstruction(node); break;
// No additional handling is needed for text nodes
}
}
else if((new Date()).getTime() - time >= DURATION)
{
setTimeout(resumeBuilder, DELAY);
break;
}
else
{
i = 0;
}
}
}

// Attr
function buildAttribute(attr, treeNode)
{
attrName.textContent = attr.nodeName;
attrValue.textContent = attr.nodeValue;

// Custom Styling for xmlns or xml
if(attr.namespaceURI && (attr.namespaceURI == "http://www.w3.org/2000/xmlns/" || attr.namespaceURI == "http://www.w3.org/XML/1998/namespace"))
{
attrName.style.color = "red";
attrValue.style.color = "red";
}
else
{
attrName.style.color = "#900";
attrValue.style.color = "black";
}

treeNode.appendChild(attrTemplate.cloneNode(true));
}

// Attr Template
function buildAttributeTemplate()
{
// Template root
attrTemplate = document.createDocumentFragment();
attrTemplate.appendChild(document.createTextNode(" "));

// Attribute name
attrName = document.createElementNS(XHTML, "span");
attrTemplate.appendChild(attrName);

attrTemplate.appendChild(document.createTextNode('="'));

// Attribute value
attrValue = document.createElementNS(XHTML, "span");
attrValue.style.fontWeight = "bold";
attrTemplate.appendChild(attrValue);

attrTemplate.appendChild(document.createTextNode('"'));
}

// CDATASection
function buildCDATASection(cdata)
{
cdataValue.textContent = cdata.nodeValue;
cdata.parentNode.insertBefore(cdataTemplate.cloneNode(true), cdata);
cdata.parentNode.removeChild(cdata);
}

// CDATASection Template
function buildCDATASectionTemplate()
{
cdataTemplate = document.createElementNS(XHTML, "div");
cdataTemplate.style.color = "blue";
cdataTemplate.style.fontWeight = "normal";
cdataTemplate.style.marginLeft = "-2em";

var start = document.createTextNode("");
cdataTemplate.appendChild(end);
}

// Comment
function buildComment(comment)
{
commentValue.textContent = comment.nodeValue;
insertBefore(commentTemplate.cloneNode(true), comment);
}

// Comment Template
function buildCommentTemplate()
{
commentTemplate = document.createElementNS(XHTML, "div");
commentTemplate.style.color = "blue";
commentTemplate.style.fontWeight = "normal";

var start = document.createTextNode("");
commentTemplate.appendChild(end);
}

// DocumentType
function buildDocumentType(doctype)
{
var treeNode = document.createElementNS(XHTML, "div");
treeNode.style.fontWeight = "normal";
treeNode.style.color = "blue";
treeNode.textContent = "";
insertBefore(treeNode, doctype);
}

// Element
function buildElement(elm)
{
// Skip HTML elements since they are part of the tree view, not the original XML
if(elm instanceof HTMLElement) return;

// Retrieve information about this element's content model (has children, needs to be collapsable)
var firstChild = (elm == root) ? rootFirstChild : elm.firstChild;
var hasChildren = (null != firstChild);
var isCollapsable = (hasChildren && (null != firstChild.nextSibling || firstChild.nodeType != Node.TEXT_NODE));

// Build the start tag from the element start template
elmStartName.textContent = elm.nodeName;
var treeNode = elmStartTemplate.cloneNode(true);

// Check if this needs to be a collapsable element
if(isCollapsable)
{
// Set the appropriate state for expand/collapse behavior
treeNode.href = "#";
treeNode.className = "collapse";
treeNode.style.position = "relative";
treeNode.onclick = toggle;
}

// Insert the generated start tag into the tree
if(elm == root)
{
// Ensure the start tag for the root element appears after
// the display for preceeding comments, processing instructions, etc.
elm.insertBefore(treeNode, rootFirstChild);
}
else
{
// For other elements, simply place make the start tag the first child
elm.insertBefore(treeNode, elm.firstChild);
}

// Generate representation of attributes
for(var i = 0; i < elm.attributes.length; i++)
{
buildAttribute(elm.attributes[i], treeNode);
}

// Close the start tag appropriately
treeNode.appendChild(document.createTextNode((hasChildren) ? ">" : "/>"));

// Create an end tag (if needed)
if(hasChildren)
{
elmEndName.textContent = elm.nodeName;
treeNode = elmEndTemplate.cloneNode(true);
if(isCollapsable)
{
treeNode.className = "block";
treeNode.style.marginLeft = "-2em";
}
elm.appendChild(treeNode);
}
}

// Element Template
function buildElementTemplate()
{
// Start tag
elmStartTemplate = document.createElementNS(XHTML, "a");
elmStartTemplate.style.color = "blue";
elmStartTemplate.style.marginLeft = "-2em";
elmStartTemplate.appendChild(document.createTextNode("<"));
elmStartName = document.createElementNS(XHTML, "span");
elmStartName.style.color = "#900";
elmStartTemplate.appendChild(elmStartName);

// End tag
elmEndTemplate = document.createElementNS(XHTML, "span");
elmEndTemplate.style.color = "blue";
elmEndTemplate.appendChild(document.createTextNode(""));
}

// ProcessingInstruction
function buildProcessingInstruction(pi)
{
var treeNode = document.createElementNS(XHTML, "div");
treeNode.style.color = "blue";
treeNode.style.fontWeight = "normal";
treeNode.textContent = "<?" + pi.nodeName + " " + pi.nodeValue + "?>";
insertBefore(treeNode, pi);
}

// Create a stylesheet to apply general styles to the tree view
function buildStyles()
{
// Style definitions
var styles = "@namespace html url(" + XHTML + ");"

// Setup styles on the root element
+ " :root { "
+ " font:small Verdana; "
+ " font-weight: bold; "
+ " padding: 2em; "
+ " padding-left:4em; "
+ " } "

// Default all elements to block styling
// This allows generic elements to provide structure
+ " * { "
+ " display: block; "
+ " padding-left: 2em; "
+ " } "

// Ensure the style element stays hidden
+ " html|style { "
+ " display: none; "
+ " } "

// Default styling for tag-like spans/anchors
+ " html|span, html|a { "
+ " display: inline; "
+ " padding: 0; "
+ " font-weight: normal; "
+ " text-decoration: none; "
+ " } "

+ " html|span.block { "
+ " display: block; "
+ " } "

// Hide content under a collapsed element
+ " *[html|hidden], "
+ " span.block[html|hidden] { "
+ " display: none; "
+ " } "

// Show "+" for elements that can be expanded
+ " .expand { "
+ " display: block; "
+ " } "
+ " .expand:before { "
+ " content: '+'; "
+ " color: red; "
+ " position: absolute; "
+ " left: -1em; "
+ " } "

// Show "-" for elements that can be collapsed
+ " .collapse { "
+ " display: block; "
+ " } "
+ " .collapse:before { "
+ " content: '-'; "
+ " color: red; "
+ " position: absolute; "
+ " left:-1em; "
+ " } ";

// Build a element to commit the styles to the current page
style = document.createElementNS(XHTML, "style");
root.insertBefore(style, root.firstChild);
style.textContent = styles;
}

// XML Declaration
function buildXMLDeclaration()
{
// Display an <?xml?> declaration based on DOM data
var xmlDecl = document.createElementNS(XHTML, "div");
xmlDecl.style.color = "blue";
xmlDecl.style.fontWeight = "normal";
xmlDecl.style.marginLeft = "-4em";
xmlDecl.textContent = '<?xml'
+ ' version="' + document.xmlVersion + '"'
+ ((document.xmlEncoding) ? ' encoding="' + document.xmlEncoding + '"' : "")
+ ((document.xmlStandalone) ? ' standalone="' + document.xmlStandalone + '"' : "")
+ '?>';
root.insertBefore(xmlDecl, root.firstChild);
}

// Helper function to wrap text nodes with a container element
// This allows them to be displayed/hidden as subtree visibility is toggled
function wrapText(txt)
{
var treeNode = document.createElementNS(XHTML, "span");
treeNode.style.fontWeight = "bold";
txt.parentNode.insertBefore(treeNode, txt);
treeNode.appendChild(txt);
return treeNode;
}

// Helper function to insert a tree view node before a reference node
// This moves the rendering for top-level nodes inside the root element
function insertBefore(node, refNode)
{
if(refNode.parentNode == document)
{
// Move rendering inside the root element and adjust positioning accordingly
node.style.marginLeft = "-4em";
root.insertBefore(node, rootFirstChild);
}
else
{
refNode.parentNode.insertBefore(node, refNode);
}
}

// Helper function for toggling the visibility of a subtree
function toggle(e)
{
// Grab target element, determine current state, and update toggle
var node = e.currentTarget;
var hide = (node.className == "collapse");
node.className = (hide) ? "expand" : "collapse";

// Update visibility of all following elements / text nodes
while(node = node.nextSibling)
{
if(node.nodeType == Node.TEXT_NODE)
{
// Wrap raw text nodes so we can toggle their visibility
node = wrapText(node);
}
if(node.nodeType == Node.ELEMENT_NODE)
{
if(hide)
{
node.setAttributeNS(XHTML, "hidden", "true");
}
else
{
node.removeAttributeNS(XHTML, "hidden");
}
}
}

return false;
}

buildTree();
})()

Daxar's picture
Offline
Joined: 11/18/2012 - 14:09

Sweet! How'd you find all this, MyGod?

23boy's picture
Offline
Joined: 11/23/2012 - 18:22

its pretty complicated...

momo1526's picture
Offline
Joined: 11/19/2012 - 16:43

So can we mod from this? Could you write the program who allowed you to take these files from the memory? My question is, will we be able to run the game in this form? And to find the encryption, could we not diff the files found in the memory with the files found in the exe so we could have a program that just unencrypts.

23boy's picture
Offline
Joined: 11/23/2012 - 18:22

well... its all we got

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Using WinHex. Maybe the js is from one of the dlls. And I cannot find any ogg files, all png files I found are some icons in Windows... I cannot find any pictures useful.

RedTheGreen's picture
Offline
Joined: 11/20/2012 - 03:52

Quadruple post! Wow!

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Sorry, I was just using my mom's crappy mobile to post this. Moderator please delete.
(by the way, another suggestion is to make a site for mobile users)

puggsoy's picture
Offline
Joined: 11/20/2012 - 04:25

Maybe you can extract these files like this, but how would you put them back in after you've modified them?

momo1526's picture
Offline
Joined: 11/19/2012 - 16:43

I think we should diff the files in the exe against the ones pulled out of the memory.

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Okay I forgot to say: I only know the file names, but I have no idea about what is inside. I searched <?xml in the memory but got nothing useful. (for example, the javascript above)

Albino Pokey's picture
Offline
Joined: 11/18/2012 - 17:02

That's probably to read from the Steam web site, update news is in XHTML. Or maybe from Facebook, I don't have an accound so I don't know how the photo chooser works.

Anyway, exciting news! I wish more files had appeared in the Little Inferno Beta folder with the new update.

Offline
Joined: 11/25/2012 - 15:00

Images easy to extract from memory... but how we can extract all resources from file and paste back into a game?

Screenshot: img543.imageshack.us/img543/9886/screenshotjqs.jpg

Daxar's picture
Offline
Joined: 11/18/2012 - 14:09

@DS-DNA: Brilliant! That's as good of a way as any to get the images. As you said though, too bad you can't replace them ingame...

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

The format is DDS? Well that's why I can't find any useful PNG images in the memory. Anyway what software are you using and what format is the game using for sounds?

Daxar's picture
Offline
Joined: 11/18/2012 - 14:09

The format likely isn't DDS; that's just the format that DirectX is using in graphics memory. I would think they would be stored as PNGs or some other such format on disk. Though they could be stored as DDS too.

Pavke's picture
Offline
Joined: 11/26/2012 - 08:37

Hey, sorry for hijacking the post, just came to say Hi

momo1526's picture
Offline
Joined: 11/19/2012 - 16:43

Hey Pavke, long time no see!

Mygod's picture
Offline
Joined: 11/17/2012 - 08:00

Hi Pavke!

EDIT: Tried to search DDS header in the memory but found nothing. DS-DNA HOW DID YOU DO THAT?!

And could you post what you have found here? I want them.