So someone requested this to me, and I feel it is somewhat important to know.
It's a fairly simple concept and with proper analysis anyone can figure this out, without any real advanced ASM knowledge.
So when we look at the wall script we have this section here.
Code:
Wall:
lea ecx,ss:[esp+0000008C]
cmp [eax+00000402],5f626577 //web_image.mac //(compare if map is equal to 'web_')
je ReturnWall
mov [eax+00000402],5f626577
mov [eax+00000406],67616d69
mov [eax+0000040a],616d2e65
mov [eax+0000040e],00000063
jmp ReturnWall
CMP is a compare operation, at the line where it says
Code:
cmp [eax+00000402],5f626577
This is basically comparing the value at [eax+00000402] (which is where the map is currently being stored), with the bytes 5F 62 65 77 (which translate from Hex to String as "_bew".
I am not sure the exact reason but the memory is written in backwards when writing the script, this is absolutely necessary for it to work correctly.
Moving on, what is happening in the script next:
After comparing the two values, there is a JE operation (jump if equal).
This essentially moves our execution to a different portion of the code provided that the two values that were CMP'ed or compared are equal. If they are not equal it will skip the JE and execute the next line in code.
In our case, it will compare the value to be equal to "bew_" or as we recognize it as "web_". This is the begging of "web_image.mac".
We only need the first four string values of each map. If it is equal it will skip this value and jump the execution to "ReturnWall",which, in this script, is returning us back to where the original code should have left off if unmodified. This compare value makes it so that if it see the map is already set to "web_image.mac". It will then skip that since there is no need to replace something that is already there.
If the values are not equal it will then MOV (copy) "web_image.mac" into the register [eax+00000402].
Code:
mov [eax+00000402],5f626577 // "_bew"
mov [eax+00000406],67616d69 // "gami"
mov [eax+0000040a],616d2e65 // "am.e"
mov [eax+0000040e],00000063 // "c"
^ spells "web_image.mac" when all together ^
Each value must be 4 bytes long. This is why the offset changes in 4 byte increments. (+402, +406, +40A, +40E).
Also note that each new MOV line displays the values backwards as well.
-----
So, if you want to add your own maps to exclude from the wall list, this is very simple, we will do it the same way that we skip the modification of maps that are already named "web_image.mac".
Here are all the internal map names: (if any are wrong or missing let me know)
Braiken Castle ---------> braiken.mac
Denebe ---------> deneb.mac
Heihaff ---------> haihaff.mac
Parca Temple ---------> parca.mac
Loa Castle ---------> loa.mac
Castor Cave ---------> castor.mac
Frozen Valley of Vengeance ---------> crevasse.mac
Crespo ---------> crespo.mac
Draco Desert ---------> draco.mac
Norak Cave ---------> norak_2.mac
Castor Cave 2nd Fl. ---------> castor_2.mac
Braiken Castle Underground Prison ---------> prison.mac
Requies Beach ---------> requies.mac
Avalon Island ---------> Avalon.mac
Python Castle ---------> Python.mac
Tomb of the Black Dragon ---------> python_below.mac
Doomed Maze ---------> python_below_2.mac
Undo Stadion ---------> Arena_OX.mac
Zenoa Castle ---------> warfare.mac
Magic Field of Crack C ---------> indun_01.mac
Crespo's Treasure C ---------> indun_02.mac
Aquarius ---------> Undersea.mac
Cave of Abyss ---------> indun_warfare.mac
Magic Field of Crack B ---------> indun_01.mac
Magic Field of Crack A ---------> indun_01.mac
Crespo's Treasure B ---------> indun_02.mac
Crespo's Treasure A ---------> indun_02.mac
Magic Field of Crack: Depth ---------> indun_01-s.mac
Dead Front [Rabble] ---------> dead_front_rabble.mac
Dead Front [Fear] ---------> dead_front_peer.mac
Dead Front [Baron] ---------> dead_front_baron.mac
Dead Front [Earl] ---------> dead_front_earl.mac
Dead Front [Duke] ---------> dead_front_duke.mac
Dead Front [Arc] ---------> dead_front_arch.mac
Chain of Fire ---------> Chain_of_fire.mac
Acquirai Ruins ---------> highland.mac
Space of Pilgrimage ---------> plane_of_pilgrimage.mac
Quilue Liana ---------> plane_of_pilgrimage_Q.mac
Nest of Cherubim ---------> cherubim.mac
Morse Yawalai ---------> cherubim_base.mac
The Qualines ---------> transportshipbase.mac
Karon's Transport Ship C ---------> Transportship.mac
Karon's Transport Ship B ---------> Transportship.mac
Karon's Transport Ship A ---------> Transportship.mac
Karon's Transport Ship S ---------> Transportship.mac
Undo Stadion ---------> Arena.mac
Oasis Cartell ---------> Arena-draco.mac
Secret Arena in Norak ---------> Arena-prison.mac
Helicita Colosseum ---------> Arena-norak.mac
Dead Front [Doom] ---------> dead_front_doom.mac
Braiken Agency ---------> Braiken-agency.mac
Loa Agency ---------> loa-agency.mac
The Deadlands ---------> Death_land-renew.mac
Umbar's Hangout ---------> Death_land_boss.mac
Space of Pilgrimage ---------> plane_of_pilgrimage_indun.mac
Mordo Lumbule ---------> Death_land_indun.mac
Egutt Desert ---------> Egutt.mac
Egutt Desert Base ---------> Egutt_base.mac
Egutt Desert Base 2 ---------> Egutt_base_B.mac
Avalon Islands ---------> avalon_A.mac
An Abyss of Crespo ---------> crespo_base.mac
An Abyss of Crespo -I ---------> under_crespo_1.mac
An Abyss of Crespo -II ---------> under_crespo_2.mac
An Abyss of Crespo -III ---------> under_crespo_3.mac
An Abyss of Crespo -IV ---------> under_crespo_4.mac
Karon's Remnants ---------> under_crespo_indun.mac
DK_Dead Front [Rabble] ---------> dead_front_rabble.mac
DK_Dead Front [Fear] ---------> dead_front_peer.mac
DK_Dead Front [Baron] ---------> dead_front_baron.mac
DK_Dead Front [Earl] ---------> dead_front_earl.mac
DK_Dead Front [Duke] ---------> dead_front_duke.mac
DK_Dead Front [Arc] ---------> dead_front_arch.mac
DK_Dead Front [Doom] ---------> dead_front_doom.mac
DK_Chain of Fire ---------> DK_chain_of_fire.mac
Karon's Remnants ---------> under_crespo_indun.mac
Karon's Remnants ---------> under_crespo_indun.mac
Karon's Remnants ---------> under_crespo_indun.mac
Worshipper's Shelter ---------> mt_tower.mac
Tower of Spell 1F ---------> Tower_indun_01.mac
Tower of Spell 2F ---------> Tower_indun_02.mac
Tower of Spell 3F ---------> Tower_indun_03.mac
Tower of Spell 4F ---------> Tower_indun_04.mac
Tower of Spell 5F ---------> Tower_indun_05.mac
Shadow Shield ---------> python_below_indun.mac
Tower of Spell 1F ---------> Tower_indun_01.mac
Tower of Spell 2F ---------> Tower_indun_02.mac
Tower of Spell 3F ---------> Tower_indun_03.mac
Tower of Spell 4F ---------> Tower_indun_04.mac
Tower of Spell 5F ---------> Tower_indun_05.mac
Karon's Remnants_S ---------> under_crespo_indun.mac
Karon's Remnants_S ---------> under_crespo_indun.mac
Karon's Remnants_S ---------> under_crespo_indun.mac
Karon's Remnants_S ---------> under_crespo_indun.mac
Helion's Sactuary_Solo ---------> plane_of_pilgrimage_soloing.mac
Helion's Sactuary_Party ---------> plane_of_pilgrimage_soloing.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Chamber of Confinement ---------> castor_01_room.mac
Ardeca ---------> Ardeca_global.mac
Ruins of Baz ---------> highland_indun_1.mac
Ruins of Rudene ---------> highland_indun_2.mac
Secret Arena [Infinite Battle] ---------> Arena-prison.mac
Cartel [Infinite Battle] ---------> Arena-draco.mac
Colosseum [Infinite Battle] ---------> Arena-norak.mac
Valley Rift ---------> Ark_arcana.mac
Phantom Land ---------> Fantasy.mac
Ellonom Sanctum ---------> Fantasy_2.mac
Ellonom ---------> Fantasy_indun.mac
Dead Front [Hell] ---------> dead_front_hell.mac
DK_Dead Front [Hell] ---------> dead_front_hell.mac
Colosseum Lobby ---------> Colosseum_01.mac
Battle Royale ---------> Colosseum_02.mac
Party PvP ---------> Colosseum_03.mac
Guild Tournament ---------> Colosseum_04.mac
Hoarfrost Vale ---------> dead_front_2_base.mac
Ice Castle [Rabble] ---------> dead_front_2.mac
Ice Castle [Fear] ---------> dead_front_2.mac
Ice Castle [Baron] ---------> dead_front_2.mac
Ice Castle [Earl] ---------> dead_front_2.mac
Ice Castle [Duke] ---------> dead_front_2.mac
Ice Castle [Arc] ---------> dead_front_2.mac
Ice Castle [Doom] ---------> dead_front_2.mac
Ice Castle [Hell] ---------> dead_front_2.mac
Agacion ---------> Fantasy.mac
Favnil's Nest ---------> Fafnir.mac
Python Donjon ---------> Python_castle_inside.mac
Oread ---------> Fantasy.mac
Tritone ---------> Fantasy.mac
Elleghos ---------> plane_of_pilgrimage_soloing.mac
Dravice Secret Passageway ---------> dravis_under.mac
Dravice Village ---------> dravis_village.mac
Dravice Field ---------> dravis_field.mac
Sacred Claw ---------> dravis_indun.mac
Umbar's Counterattack ---------> Death_land-umbar_solo.mac
Hunting Challenge ---------> Colosseum_03.mac
Honeymoon Island ---------> Sura.mac
Wings Quest ---------> Fantasy.mac
Trans Up Quest ---------> Fantasy.mac
Fishing Quest ---------> Fantasy.mac
Battlefield [Infinite Battle 2] ---------> Infinite_2.mac
Fight [Infinite Fight 2] ---------> Infinite_2.mac
Mitera ---------> mitera.mac
[Meister]Desacato ---------> cc_indun.mac
Karon's Fire Pot ---------> karon_brazier.mac
Lost Horizon ---------> Last_Horizon.mac
the heat escape Dungeon ---------> Death_land_indun.mac
Honeymoon in Trieste ---------> Honeymoon.mac
MAP NAMES ARE CASE SENSITIVE! (This is important when getting the hexadecimal value for each letter. "A" is a different value from "a".)
So to exclude ardeca from our wall hack list. we should find the correct name for ardeca. Which is "Ardeca_global.mac"
Since we only need the first four characters, we only need "Arde", remember its CASE SENSITIVE.
Using this website you can easily translate between string to hex and vice versa.
Simply add a compare command before the MOVs for each map you want to exclude, and don't forget to make sure each CMP will JE to your return address.
Code:
cmp [eax+00000402],65647241 //Ardeca_global.mac //('Arde')
je ReturnWall
------
Here is the Wall hack script without ardeca and deneb. (auto update)
[ENABLE]
alloc(Wall,64)
label(ReturnWall)
label(wlbl)
registersymbol(wlbl)
aobscan(wallz,8D 8C 24 8C 00 00 00 51 * * * * * 0F B7 BC 24 90 00 00 00)
wallz: //8D 8C 24 8C 00 00 00 51 * * * * * 0F B7 BC 24 90 00 00 00
wlbl:
jmp Wall
nop
nop
ReturnWall:
Wall:
lea ecx,ss:[esp+0000008C]
cmp [eax+00000402],5f626577 //web_image.mac //(compare if map is equal to 'web_')
je ReturnWall
cmp [eax+00000402],656E6564 //denebe.mac //(compare if map is equal to 'dene')
je ReturnWall
cmp [eax+00000402],65647241 //Ardeca_global.mac //('Arde')
je ReturnWall
mov [eax+00000402],5f626577
mov [eax+00000406],67616d69
mov [eax+0000040a],616d2e65
mov [eax+0000040e],00000063
jmp ReturnWall
[DISABLE]
dealloc(Wall)
wlbl:
lea ecx,[esp+0000008C]