Pages

Unlock Camera Movement Cabal Online

How to unlock camera movement on custom maps.
This is a little tutorial on how to edit your cabalmain to allow free camera movement, just like in the normal maps like Bloody Ice up until Pontus Ferrum, on new maps you would add f.e. Porta Inferno and/or Arcane Trace. It's been over a year since I've modified this so there might be a mistake somewhere.

Required:
OllyDbg
Knowledge about the basics on using OllyDbg
Preferably previous codecave experience

Section & More info
Open OllyDbg and go to address 0x489CEE and you'll see this (without the comments of course).
Now what happens here is just a couple of comparing of values and jumps to the correct code section that will take care of the rest of the work. Before that the WorldID has been moved into the EAX register.
CMP EAX, 0A
JLE 00489DAA
Here the WorldID is compared to 0Ah(10) which is the last WorldID in the EP2 client, Pontus Ferrum. Now if the WorldID is below or equal to 0Ah(10) then a jump (JLE = Jump if Less or Equal) will be made to 00489DAA where the rest of the code takes care of setting up the camera. These two lines will enable Free camera movement on the following maps.
Bloody Ice
Desert Scream
Green Despair
Port Lux
Fort Ruina
Undead Ground
Forgotten Ruin
LakeSide
Mutant Forrest
Pontus Ferrum

If the WorldID would happen to be higher like when you're in a dungeon it would not jump and just continue on to the next CMP.
CMP EAX, 0F
JE 00489DAA
This checks if the WorldID is 0Fh(15) which is normally the waiting area for Tierra Gloriosa. If EAX is 0Fh(15) then a jump will be made to 00489DAA.(Jump if Equal)
CMP EAX, 0A
JE SHORT 00489D79
If the WorldID is 10h(16) which is Tierra Gloriosa it will jump to 00489D79.(You get the point ...)
CMD EAX, 14h
JE 00489DAA
And the last check for WorldID = 14h(20) which should be Chaos Arena.

Now how to add a check for your new maps.
The easiest way would be to increase the first check, CMP EAX, 0A. If you put Porta Inferno on WorldID 11 and Arcane Trace on 12 then you can set CMP EAX, 0A to 0C and you shoud be finished.

But for those who put them on different WorldID's you can replace the last CMP EAX, 14 with a JMP to an address where you have some room to add some extra comparisons. (The address I jumped to is not ideal, it's best you search for a bigger area.)
At the new section you then first add CMP EAX, 14 and JE 00489DAA. Then you can add a new CMP EAX, [your WorldID] and JE 00489DAA. At the end of the new comparisons you're making you need to make sure you also jump back correctly if the WorldID fits none of those checks so add JMP 00489D12 as the last line in your little codecave.

Here's a little example of what it could look like:
**JUST AN EXAMPLE**
CMP EAX, 0A
JE 00489DAA
CMP EAX, 15   WorldID 21 = Porta Inferno
JE 00489DAA
CMP EAX, 18   WorldID 24 = Arcane Trace
JE 00489DAA
JMP 00489D12
**JUST AN EXAMPLE**
The Addresses
0x489D12 -> Restricted Dungeon camera
0x489D79 -> Tierra Gloriosa camera
0x489DAA -> All camera types allowed, Free camera

I haven't messed around with the different values you can see in OllyDbg (f.e. FLOAT 150.00 at 0x489D12). Maybe if you fiddle a bit with the values at those addresses you might change different aspects like how far you can zoom out.

SpeedDevil
Ragezone