Crazy Cabbie
-migrated-
Crazy Cabbie Posted on: 01/04/2011 1:05am
Quote Post
Hey guys, I am very new but incredibly excited because I just hacked Data Worm, with the help of tutorials on this site and the thread about Data Worm. This weekend I am going to start looking for ways to hack Crazy Cabbie (http://apps.facebook.com/mj-crazy-cabbi ... sp?count=0) and figured I would post this now to get other peoples ideas on where to start.

As an analysis thus far, the game is scored based on the time it takes to get to the next flag and has a 30 second timer that adds seconds at each flag you pass. Also, there is powerups that the greedy bastards make you pay for and looking at the swf I can see the folder for their management.

So I am going to try to A. Increase the score you get for each flag you pass. B. Hack the timer and extend the time we have to clear levels. and C. Access powerups somehow. (I'm thinking B is going to be the easiest route)

Again, I am very new to this and this hack may be very easy to do. So I will try to complete this hack by the weekend and keep you posted. Any pointers or guidance on where to get started would be greatly appreciated.
Re: Crazy Cabbie Posted on: 01/04/2011 2:35am
Quote Post
I haven't looked at the game but if you can see the sourcecode ( decompiled, decrypted, etc.), you could look for things like:

totalMoney = totalMoney - itemCost; (change minus to a plus sign to earn money when buying)
timer = timer - 1; (change 1 to 0 to freeze timer)
starterPowerups = 1; (change 1 to 100 to start with more)

And so on, it all depends on how the game is coded.
Re: Crazy Cabbie Posted on: 01/04/2011 3:31am
Quote Post
Before Your Time
Crazy Taxi, Crazy Score.(To lose, stop moving.)
60 a1 04 d1 a2 a0
=>
60 a1 04 d1 a3 a0

Code: [Select]
private function offsetYs(param1:Number) : void
        {
            var _loc_2:* = undefined;
            _loc_2 = 0;
            while (_loc_2 < cars.length)
            {
               
                cars[_loc_2].setPosition(cars[_loc_2].realX, cars[_loc_2].realY + param1, 0);
                _loc_2 = _loc_2 + 1;
            }
            marks.setY(marks.realY + param1);
            things.moveOffset(param1);
            checkPointY = checkPointY + param1;
            return;
        }// end function

        private function startLevel(param1:Number) : void
        {
            this.level = param1;
            maxGroupSize = Config.LEVEL_INITIALGROUPSIZE + (param1 - 1) * Config.LEVEL_GROUPSIZEINCREASE;
            checkPointY = taxi.realY - Config.LEVEL_LENGTH;
            levelTime = Config.LEVEL_INITIALTIME - (param1 - 1) * Config.LEVEL_TIMEDECREASE;
            if (levelTime < Config.LEVEL_MINTIME)
            {
                levelTime = Config.LEVEL_MINTIME;
            }
            levelStartTime = NewTimer.getTimer();
            distance = Config.LEVEL_LENGTH;
            time = levelTime;
            message.showLevel(param1, levelTime);
            return;
        }// end function

        private function updateCheckPoint(param1:Number) : void
        {
            checkPointY = checkPointY + taxiSpeed * param1;
            distance = Math.floor(taxi.realY - checkPointY);
            if (checkPointY > taxi.realY)
            {
                if (level % 2 == 1)
                {
                    trace(stage.frameRate);
                }
                score = score + (Config.SCORE_LEVEL + Math.floor((levelTime * 1000 - (NewTimer.getTimer() - levelStartTime)) * Config.SCORE_TIME));
                startLevel((level + 1));
                soundCheckPoint.play();
            }
            return;
        }// end function

        private function updateTime() : void
        {
            time = levelTime - Math.floor((NewTimer.getTimer() - levelStartTime) / 1000);
            if (time <= 0)
            {
                gameOver();
            }
            return;
        }// end function

Code: [Select]
_as3_findproperty checkPointY
//60 a7 04
_as3_getlex checkPointY
//d1
_as3_getlocal <1>
//a0
_as3_add
//68 a7 04
_as3_initproperty checkPointY
//47
_as3_returnvoid
        }// end function

        private function startLevel(param1:Number) : void
        {
//d0
_as3_getlocal <0>
//30
_as3_pushscope
//d0
_as3_getlocal <0>
//d1
_as3_getlocal <1>
//61 a8 04
_as3_setproperty level
//5e a5 04
_as3_findproperty maxGroupSize
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f5 05
_as3_getproperty LEVEL_INITIALGROUPSIZE
//d1
_as3_getlocal <1>
//93
_as3_decrement
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f6 05
_as3_getproperty LEVEL_GROUPSIZEINCREASE
//a2
_as3_multiply
//a0
_as3_add
//68 a5 04
_as3_initproperty maxGroupSize
//5e a7 04
_as3_findproperty checkPointY
//60 a2 04
_as3_getlex taxi
//66 c1 02
_as3_getproperty realY
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f1 05
_as3_getproperty LEVEL_LENGTH
//a1
_as3_subtract
//68 a7 04
_as3_initproperty checkPointY
//5e a9 04
_as3_findproperty levelTime
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f2 05
_as3_getproperty LEVEL_INITIALTIME
//d1
_as3_getlocal <1>
//93
_as3_decrement
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f4 05
_as3_getproperty LEVEL_TIMEDECREASE
//a2
_as3_multiply
//a1
_as3_subtract
//68 a9 04
_as3_initproperty levelTime
//60 a9 04
_as3_getlex levelTime
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f3 05
_as3_getproperty LEVEL_MINTIME
//0c 0b 00 00
_as3_ifnlt offset: 11
//5e a9 04
_as3_findproperty levelTime
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f3 05
_as3_getproperty LEVEL_MINTIME
//68 a9 04
_as3_initproperty levelTime
//5e aa 04
_as3_findproperty levelStartTime
//60 b3 01
_as3_getlex com.novelgames.flashgames.common::NewTimer
//46 98 06 00
_as3_callproperty getTimer(param count:0)
//68 aa 04
_as3_initproperty levelStartTime
//5e c3 04
_as3_findproperty distance
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f1 05
_as3_getproperty LEVEL_LENGTH
//68 c3 04
_as3_initproperty distance
//5e c2 04
_as3_findproperty time
//60 a9 04
_as3_getlex levelTime
//68 c2 04
_as3_initproperty time
//60 9b 04
_as3_getlex message
//d1
_as3_getlocal <1>
//60 a9 04
_as3_getlex levelTime
//4f cc 02 02
_as3_callpropvoid showLevel(param count:2)
//47
_as3_returnvoid
        }// end function

        private function updateCheckPoint(param1:Number) : void
        {
//d0
_as3_getlocal <0>
//30
_as3_pushscope
//5e a7 04
_as3_findproperty checkPointY
//60 a7 04
_as3_getlex checkPointY
//60 a1 04
_as3_getlex taxiSpeed
//d1
_as3_getlocal <1>
//a2
_as3_multiply
//a0
_as3_add
//68 a7 04
_as3_initproperty checkPointY
//5e c3 04
_as3_findproperty distance
//60 ad 06
_as3_getlex Math
//60 a2 04
_as3_getlex taxi
//66 c1 02
_as3_getproperty realY
//60 a7 04
_as3_getlex checkPointY
//a1
_as3_subtract
//46 ef 06 01
_as3_callproperty floor(param count:1)
//68 c3 04
_as3_initproperty distance
//60 a7 04
_as3_getlex checkPointY
//60 a2 04
_as3_getlex taxi
//66 c1 02
_as3_getproperty realY
//0e 5d 00 00
_as3_ifngt offset: 93
//60 a8 04
_as3_getlex level
//24 02
_as3_pushbyte 2
//a4
_as3_modulo
//24 01
_as3_pushbyte 1
//14 0d 00 00
_as3_ifne offset: 13
//5d d7 06
_as3_findpropstrict trace
//60 8f 07
_as3_getlex stage
//66 c5 09
_as3_getproperty frameRate
//4f d7 06 01
_as3_callpropvoid trace(param count:1)
//5e c1 04
_as3_findproperty score
//60 c1 04
_as3_getlex score
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f8 05
_as3_getproperty SCORE_LEVEL
//60 ad 06
_as3_getlex Math
//60 a9 04
_as3_getlex levelTime
//25 e8 07
_as3_pushshort 1000
//a2
_as3_multiply
//60 b3 01
_as3_getlex com.novelgames.flashgames.common::NewTimer
//46 98 06 00
_as3_callproperty getTimer(param count:0)
//60 aa 04
_as3_getlex levelStartTime
//a1
_as3_subtract
//a1
_as3_subtract
//60 54
_as3_getlex com.novelgames.flashgames.taxi::Config
//66 f7 05
_as3_getproperty SCORE_TIME
//a2
_as3_multiply
//46 ef 06 01
_as3_callproperty floor(param count:1)
//a0
_as3_add
//a0
_as3_add
//68 c1 04
_as3_initproperty score
//5d cf 04
_as3_findpropstrict startLevel
//60 a8 04
_as3_getlex level
//24 01
_as3_pushbyte 1
//a0
_as3_add
//4f cf 04 01
_as3_callpropvoid startLevel(param count:1)
//60 b3 04
_as3_getlex soundCheckPoint
//4f f1 08 00
_as3_callpropvoid play(param count:0)
//47
_as3_returnvoid
        }// end function

        private function updateTime() : void
        {
//d0
_as3_getlocal <0>
//30
_as3_pushscope
//5e c2 04
_as3_findproperty time
//60 a9 04
_as3_getlex levelTime
//60 ad 06
_as3_getlex Math
//60 b3 01
_as3_getlex com.novelgames.flashgames.common::NewTimer
//46 98 06 00
_as3_callproperty getTimer(param count:0)
//60 aa 04
_as3_getlex levelStartTime
//a1
_as3_subtract
//25 e8 07
_as3_pushshort 1000
//a3
_as3_divide
//46 ef 06 01
_as3_callproperty floor(param count:1)
//a1
_as3_subtract
//68 c2 04
_as3_initproperty time
//60 c2 04
_as3_getlex time
//24 00
_as3_pushbyte 0
//0d 07 00 00
_as3_ifnle offset: 7
//5d d8 04
_as3_findpropstrict gameOver
//4f d8 04 00
_as3_callpropvoid gameOver(param count:0)
//47
_as3_returnvoid
        }// end function



I'm basically the shit...Â