DC Forums

We have moved our forums:
http://www.dcforums.co.cc/forum/

Please re-register there, thank you.
GKS
There are many new features available. Some of them include: the advanced profile, reputation system, and the point system. Thank you for waiting patiently, enjoy the update. Plus we are still working on fixing a lot of bugs and stuff that are wrong with the theme.

    Hockeypanda32's in-depth Rom hacking basics.

    Share

    TehTehTehTeh
    New Member
    New Member

    Number of posts : 9
    Status : Normal
    Warning :
    0 / 1000 / 100

    Reputation : 0
    Points : 0
    Registration date : 2009-01-17

    default Hockeypanda32's in-depth Rom hacking basics.

    Post by TehTehTehTeh on Sun Jan 25, 2009 6:39 pm

    Hockeypanda32's knowledge in Pokemon Hacking


    Learn how to hack Pokemon Ruby, Sapphire, Emerald, Leafgreen, and Firered

    First of all, yes you need roms to do this, giving out links is illegal so none of that!

    Table of Contents


    1. Text Hacking
    2. Mapping, and some other things in Advance Map
    3. Scripting in XSE

    Chapter 1 Text Hacking


    What we need

    * Advanced text

    In this pic a loaded rom of Pokemon firered is in there, all basic speeches are in there now from the game, so look around and find a piece of text you want to change. Click on it and in the textbox to the right its words will appear. Edit these to your liking and be sure to keep the text in the the text border, now click save text, if you need to repoint it press yes, repoint! There you go, your first changed text, play your rom and look at it, all changed!

    Advanced text changing, is it not there, time to get in depth!

    For in depth text hacking you are going to need an emulator to find exact bits of text, you must have exact punctuation for it to work. Here is a step by step way to do this.

    1. Press search, now go into your emulator and find the text you want to change, lets say a pokemon name, look up Bulbasaur.
    2. Once you find the text the just says Bulbasaur change it to something like Mostop, if there are any other entries on just Bulbasaur change it.
    3. Open up your emulator and go to where you get your first pokemon, choose Bulbasaur, the standard you choose Bulbasaur will still be there.
    4. Once you got him, look in your pokemon inventory, no Bulbasaur, you gotta Mostop!
    5. Now to change the other text with Bulbasaur in it go back to the search and change everything with Bulbasaur in it to Mostop or w/e you named Bulbasaur!

    You can use this for anything, Item's, badges, Pokemon, Attacks, Message's, pokedex descriptions, ETC.

    Chapter 2, Mapping, and more in Advance Map


    What we need

    * Advance Map

    Mapping is made easier by Lu-ho's advance Map included above, open up your rom once you have opened A-Map, now on the left there will be three tabs, use the header one, on R/S/E 0 will be the outsides towns, routes, etc. and looking through the rest for others, insides, caves, etc. Choose your map you want to edit and you will see it now on your screen!

    After you get the map you want start editing with the tiles you see at the right until you get a fully edited map to your liking, once you play it in game though you will see that the movement permissions are the same as the map before you edited it! In your Advance Map go to the movement permissions tab. In the right now you will see that there are numbers and letters, a lot of them really do not matter though. Here is a list for each of them and what they mean!

    1=not passable
    C=passable
    4=not passable unless you use surf
    D=signpost
    0=climbing ladders to new levels etc. (read some document on more perm.'s

    There are still others but we will not go through those now, those are basically all you need, lets say you have a tree, you would put a 1 on every part of it besides the tips tiles, finish putting in your permissions, wala, you got it...

    Palette Editing your tiles in the game

    In A-Map on the top of the app there should be a puzzle-like icon called the block editor open it up, now in here there should be a pallete tab, click on it and press "Show Palette Editor". Behind it the block editor will still be there, now go through palettes and see which tiles abide to which palette and change them according to what you want your game to look like, be sure to backup your rom before this incase you edit it bad. Once done press apply after you finish each palette. When you have applied all this go back into the palette editor window and press the tab palletes and click "Apply palette changes"

    Edit your Tiles



    Once again in A-Map go to the block editor. Now you must go to the palette corresponding to the tile you want to edit! Once you find it go to the pictures tab, click save tileset 1 (tileset 2 is the other tileset), open up the file you saved in Paint now, it should have dib as its extension, you must save it as a dib also! After you are done editing just press save so it and the palette are not mistaken. Back in Advance Map go into the block editor and the pictures tab, press load tileset 0. Once you have loaded it than go back in the pictures tab and press load new blocks, wala, you got it!

    Advance Map Main Tabs, Map Editor, Movement Permissions etc.

    In the main part of Advance Map there are specific tabs for different jobs.

    * Map Editor
    Already explained above

    * Movement Permissions
    Already explained Movement permissions

    * Events
    Where events are stored, all your scripts will be entered here once you make a new person or replace another events script, people events are of course the people that walk around, signposts, warps, and scripts. For signposts, scripts and person events you must enter your scripts compiled offset, for warps put it over a door of some kind and enter your map bank and no. (explained in connection part) you want it to warp to and the warp event in the map you want it to warp to.

    * Wild Pokemon
    Self explanatory, change the wild pokemon in the level, change what pokemon they are and change there levels.

    * Header Tab
    Change the towns name, route whatever. In here you can also chnage the tilesets, I wouldn't ever change the first one and the second one differs, I recommend mixing kind of matching tilesets. you can change dimensions and look at level scripts also.


    Connection Manager


    Basically you just change where your maps connect to, Offset is probably the hardest part of understanding this...the value entered here means how many tiles the map connecting to this one is delayed. If your connection goes up or down it means how many tiles it is delayed to the left of the map! A negative would make it right. Map bank and Map no. can be found simpily with this method, if your looking at your maps by sorting by header, go to the slected map, lets say it is "Lavender Town (3.5)" You want connected than the map bank would be 3 and the map no. would be 5, same with every map. Making neew connection or deleting them can be done simpily because the app pretty much guides you it self!

    Chapter 3, XSE Scripting

    What we need


      XSE Scripting Tool


    Table of Contents

    Part 1, Dynamic's
    Part 2, Basic Message
    Part 3, a yes/no basic script

    More to come

    Part 4, Flags
    Part 5, givepokemon
    Part 6, specials
    Part 7, movement


    To start us off we need to open up XSE and have a blank script tab. Now we may start scripting

    Part 1, dynamic's

    At the start of any script you must place your dynamic offset to start your script.

    A dynamic offset is the hexidecimal your whole script is going to rely on,
    Here is how you should place it at the top of your script.

    Code:

    #dynamic 0x800000

    800000 = Your offset, it must be an open offset. Use a free space finder to find your offsets. Advance Map has a built in one.

    Part 2, A Basic Message

    Now before we start remember to include your dynamic.
    After this here we place a line of code that states you are making a new script.

    Code:
    #ORG @start

    Explanations of these 2 words.

    #org = the beggining of a new offset.
    @start = the name of your offset, replace start with anything you want to call it.

    Now if we want this event to work properly as a message from a person we must include these two lines

    Code:
    lock
    faceplayer

    Explanations of these 2 words.

    lock = you cannot move while script is going
    faceplayer = the person faces you

    Our next step will be the actual pointer to the message. All we have to type is this...

    Code:
    Message @tutorial

    Explanations of these 2 words.

    Message = pointer to a message offset
    @tutorial = once again the name of the offset, replace it with whatever your message's offsets are.

    ^This line of code is neccesary or your script wont ever do anything.

    Next we type this to signify wht kind of message it is.

    Code:
    boxset 6

    No need to explain this, now to close of the end of this offset.

    Code:

    release
    end

    Here is what we should have so far!

    Code:

    #dynamic 0x800000 'or any offset there you want it to be thats open

    #org @start
    lock
    faceplayer
    Message @tutorial
    boxset 6
    release
    end

    Don't get all happy at your first XSE script yet, we still have to make your message say something.

    Code:

    #org @tutorial
    = This is my first script!

    Tada, here is the "final" script!

    Code:

    #dynamic 0x800000 'or any offset there you want it to be thats open

    #org @start
    lock
    faceplayer
    Message @tutorial
    boxset 6
    release
    end

    #org @tutorial
    = This is my first script!

    No load your rom in XSE, and press compile. On the pop-up windo press copy, now in Adv-Map make a new person and put the offset you copied in the new person's offset box.

    Tada, now we can test it out.

    Part 3, is it just me or does it smell like yes/no box time?

    Starting us off for a yes/no script we must still place our dynamic offset, our #org @start, and our lock and faceplayer.

    You should have this to start off then.

    Code:

    #dynamic 0x800000

    #org @start
    lock
    faceplayer

    Now put in a new message offset pointer, and copy the rest, I will explain everything next.

    Code:

    message @tutorial
    boxset 5
    compare LASTRESULT 1
    if b_true goto @yes
    compare LASTRESULT 0
    if b_true goto @no

    We know the first line of code but what do the 5 other's mean?

    Definitions

    boxset 5 = yes/no box popup with message
    compare LASTRESULT 1 = basically means if you pressed yes
    if 1 goto @yes = they pressed yes and get reverted to a new offset, which is not a message, it cannot be yet
    compare LASTRESULT 0 = basically means if you pressed no
    if b_true goto @no = they pressed no and get reverted to a new offset, which is not a message, it cannot be yet


    Then place a release and an end and here is what we should have so far, the basis offset point

    Code:

    #dynamic 0x800000

    #org @start
    lock
    faceplayer
    message @tutorial
    boxset 5
    compare LASTRESULT 1
    if b_true goto @yes
    compare LASTRESULT 0
    if b_true goto @no
    release
    end

    Now to place our offsets from the pointer's, lets start out with the messages.

    Just like a basic message script and with the pointer provided.
    The Message should look like this.

    Code:

    #org @tutorial
    = Yes or no?

    Now for the offset pointer's yes and no, let's start with yes.

    Code:

    #org @yes
    message @pressyes
    boxset 6
    release
    end

    That looks familiar, well it is. you really just revert to another message or anything you want it to do! Now for no, if you think you can try it yourself dont look!

    Code:

    #org @no
    message @pressno
    boxset 6
    release
    end

    Now to make the message's pressyes and no, simple here is what you should get with them!

    Code:

    #org @pressyes
    = You pressed YES!

    #org @pressno
    = You pressed NO!


    here should be your final script!

    Code:

    #dynamic 0x800000

    #org @start
    lock
    faceplayer
    message @tutorial
    boxset 5
    compare LASTRESULT 1
    if b_true goto @yes
    compare LASTRESULT 0
    if b_true goto @no
    release
    end

    #org @tutorial
    = Yes or no?

    #org @yes
    message @pressyes
    boxset 6
    release
    end

    #org @no
    message @pressno
    boxset 6
    release
    end

    #org @pressyes
    = You pressed YES!

    #org @pressno
    = You pressed NO!

    More to Come, parts 4, 5, 6, and 7!

    TehTehTehTeh
    New Member
    New Member

    Number of posts : 9
    Status : Normal
    Warning :
    0 / 1000 / 100

    Reputation : 0
    Points : 0
    Registration date : 2009-01-17

    default Re: Hockeypanda32's in-depth Rom hacking basics.

    Post by TehTehTehTeh on Sun Jan 25, 2009 6:44 pm

    Chapter 4, Flags

    Finally the flags tut is here.

    Ok lets start off, flags are based off into 3 basics groups

    Code:
    setflag
    checkflag
    clearflag

    Most of the time you don't see clearflag come up... it is needed sometimes though. You will understand how to use the flags after this!

    Lets start with something way simple. Code the normal base to your script from the other parts of the tut.

    Code:
    #dynamic 0xOFFSET HERE

    #org @start
    lock
    faceplayer

    Now for the flags. add these lines of code

    Code:
    checkflag 0x200
    if b_true goto @flag

    This is to check if the flag 0x200 is set and if so going to @flag
    Now enter a simple message line in.. whatever the message may be just add it after this. After that we will add our setflag, before that here is how far we should be in the script...

    Code:
    #dynamic 0xOFFSET HERE

    #org @start
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @flag
    Message @hi
    boxset 6

    Now for the setflag... for flags do not use any number but the flags 200 and up and 900 and up.

    Add this line of code now!

    Code:

    setflag 0x200

    now we should have


    Code:
    #dynamic 0xOFFSET HERE

    #org @start
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @flag
    Message @hi
    boxset 6
    setflag 0x200

    Now end this part of the scrip and now add your message for hi.

    Time for the @flag part. before this here is what you should have...

    Code:
    #dynamic 0xOFFSET HERE

    #org @start
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @flag
    Message @hi
    boxset 6
    setflag 0x200
    release
    end

    #org @hi
    = Hello there.

    Now after that add the #org @flag part of this part of the script.

    Time for what we want the flag to go to.
    Lets make it a message

    Code:

    #org @flag
    message @woot
    boxset 6
    release
    end

    #org @woot
    = What you want????

    Now for the finished product!

    Code:
    #dynamic 0xOFFSET HERE

    #org @start
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @flag
    Message @hi
    boxset 6
    setflag 0x200
    release
    end

    #org @hi
    = Hello there.

    #org @flag
    message @woot
    boxset 6
    release
    end

    #org @woot
    = What you want????

    Chapter 5, GivePokemon

    The givepokemon script, a very simple one... i won't go in to as much detail as the other sections since you should now know how to add these commands.

    The command itself should be Very Very self explanatory. Of course if you did not get it, it gives a pokemon!

    Ok now to show you how it works.

    Code:

    givepokemon [Pokemon no.] [Pokemon lvl.] [item being held] 0 0 0

    So here is the code for a level 5 bulbasaur holding nothing.

    Code:

    givepokemon 1 5 0 0 0 0

    There you are, the givepokemon script. I would advise using flags if you use this script to avoid gaining infinite items

    POkemon no.'s Thanks TheTheTheThe
    Spoiler:

    BULBASAUR 1
    IVYSAUR 2
    VENUSAUR 3
    CHARMANDER 4
    CHARMELEON 5
    CHARIZARD 6
    SQUIRTLE 7
    WARTORTLE 8
    BLASTOISE 9
    CATERPIE 10
    METAPOD 11
    BUTTERFREE 12
    WEEDLE 13
    KAKUNA 14
    BEEDRILL 15
    PIDGEY 16
    PIDGEOTTO 17
    PIDGEOT 18
    RATTATA 19
    RATICATE 20
    SPEAROW 21
    FEAROW 22
    EKANS 23
    ARBOK 24
    PIKACHU 25
    RAICHU 26
    SANDSHREW 27
    SANDSLASH 28
    NIDORAN|w| 29
    NIDORINA 30
    NIDOQUEEN 31
    NIDORAN|m| 32
    NIDORINO 33
    NIDOKING 34
    CLEFAIRY 35
    CLEFABLE 36
    VULPIX 37
    NINETALES 38
    JIGGLYPUFF 39
    WIGGLYTUFF 40
    ZUBAT 41
    GOLBAT 42
    ODDISH 43
    GLOOM 44
    VILEPLUME 45
    PARAS 46
    PARASECT 47
    VENONAT 48
    VENOMOTH 49
    DIGLETT 50
    DUGTRIO 51
    MEOWTH 52
    PERSIAN 53
    PSYDUCK 54
    GOLDUCK 55
    MANKEY 56
    PRIMEAPE 57
    GROWLITHE 58
    ARCANINE 59
    POLIWAG 60
    POLIWHIRL 61
    POLIWRATH 62
    ABRA 63
    KADABRA 64
    ALAKAZAM 65
    MACHOP 66
    MACHOKE 67
    MACHAMP 68
    BELLSPROUT 69
    WEEPINBELL 70
    VICTREEBEL 71
    TENTACOOL 72
    TENTACRUEL 73
    GEODUDE 74
    GRAVELER 75
    GOLEM 76
    PONYTA 77
    RAPIDASH 78
    SLOWPOKE 79
    SLOWBRO 80
    MAGNEMITE 81
    MAGNETON 82
    FARFETCH'D 83
    DODUO 84
    DODRIO 85
    SEEL 86
    DEWGONG 87
    GRIMER 88
    MUK 89
    SHELLDER 90
    CLOYSTER 91
    GASTLY 92
    HAUNTER 93
    GENGAR 94
    ONIX 95
    DROWZEE 96
    HYPNO 97
    KRABBY 98
    KINGLER 99
    VOLTORB 100
    ELECTRODE 101
    EXEGGCUTE 102
    EXEGGUTOR 103
    CUBONE 104
    MAROWAK 105
    HITMONLEE 106
    HITMONCHAN 107
    LICKITUNG 108
    KOFFING 109
    WEEZING 110
    RHYHORN 111
    RHYDON 112
    CHANSEY 113
    TANGELA 114
    KANGASKHAN 115
    HORSEA 116
    SEADRA 117
    GOLDEEN 118
    SEAKING 119
    STARYU 120
    STARMIE 121
    MR. MIME 122
    SCYTHER 123
    JYNX 124
    ELECTABUZZ 125
    MAGMAR 126
    PINSIR 127
    TAUROS 128
    MAGIKARP 129
    GYARADOS 130
    LAPRAS 131
    DITTO 132
    EEVEE 133
    VAPOREON 134
    JOLTEON 135
    FLAREON 136
    PORYGON 137
    OMANYTE 138
    OMASTAR 139
    KABUTO 140
    KABUTOPS 141
    AERODACTYL 142
    SNORLAX 143
    ARTICUNO 144
    ZAPDOS 145
    MOLTRES 146

    DRATINI 147
    DRAGONAIR 148
    DRAGONITE 149
    MEWTWO 150
    MEW 151
    CHIKORITA 152
    BAYLEEF 153
    MEGANIUM 154
    CYNDAQUIL 155
    QUILAVA 156
    TYPHLOSION 157
    TOTODILE 158
    CROCONAW 159
    FERALIGATR 160
    SENTRET 161
    FURRET 162
    HOOTHOOT 163
    NOCTOWL 164
    LEDYBA 165
    LEDIAN 166
    SPINARAK 167
    ARIADOS 168
    CROBAT 169
    CHINCHOU 170
    LANTURN 171
    PICHU 172
    CLEFFA 173
    IGGLYBUFF 174
    TOGEPI 175
    TOGETIC 176
    NATU 177
    XATU 178
    MAREEP 179
    FLAAFFY 180
    AMPHAROS 181
    BELLOSSOM 182
    MARILL 183
    AZUMARILL 184
    SUDOWOODO 185
    POLITOED 186
    HOPPIP 187
    SKIPLOOM 188
    JUMPLUFF 189
    AIPOM 190
    SUNKERN 191
    SUNFLORA 192
    YANMA 193
    WOOPER 194
    QUAGSIRE 195
    ESPEON 196
    UMBREON 197
    MURKROW 198
    SLOWKING 199
    MISDREAVUS 200
    UNOWN 201
    WOBBUFFET 202
    GIRAFARIG 203
    PINECO 204
    FORRETRESS 205
    DUNSPARCE 206
    GLIGAR 207
    STEELIX 208
    SNUBBULL 209
    GRANBULL 210
    QWILFISH 211
    SCIZOR 212
    SHUCKLE 213
    HERACROSS 214
    SNEASEL 215
    TEDDIURSA 216
    URSARING 217
    SLUGMA 218
    MAGCARGO 219
    SWINUB 220
    PILOSWINE 221
    CORSOLA 222
    REMORAID 223
    OCTILLERY 224
    DELIBIRD 225
    MANTINE 226
    SKARMORY 227
    HOUNDOUR 228
    HOUNDOOM 229
    KINGDRA 230
    PHANPY 231
    DONPHAN 232
    PORYGON2 233
    STANTLER 234
    SMEARGLE 235
    TYROGUE 236
    HITMONTOP 237
    SMOOCHUM 238
    ELEKID 239
    MAGBY 240
    MILTANK 241
    BLISSEY 242
    RAIKOU 243
    ENTEI 244
    SUICUNE 245
    LARVITAR 246
    PUPITAR 247
    TYRANITAR 248
    LUGIA 249
    HO-OH 250
    CELEBI 251
    TREECKO 277
    GROVYLE 278
    SCEPTILE 279
    TORCHIC 280
    COMBUSKEN 281
    BLAZIKEN 282
    MUDKIP 283
    MARSHTOMP 284
    SWAMPERT 285
    POOCHYENA 286
    MIGHTYENA 287
    ZIGZAGOON 288
    LINOONE 289
    WURMPLE 290
    SILCOON 291
    BEAUTIFLY 292
    CASCOON 293
    DUSTOX 294
    LOTAD 295
    LOMBRE 296
    LUDICOLO 297
    SEEDOT 298
    NUZLEAF 299
    SHIFTRY 300
    NINCADA 301
    NINJASK 302
    SHEDINJA 303
    TAILLOW 304
    SWELLOW 305
    SHROOMISH 306
    BRELOOM 307
    SPINDA 308
    WINGULL 309
    PELIPPER 310
    SURSKIT 311
    MASQUERAIN 312
    WAILMER 313
    WAILORD 314
    SKITTY 315
    DELCATTY 316
    KECLEON 317
    BALTOY 318
    CLAYDOL 319
    NOSEPASS 320
    TORKOAL 321
    SABLEYE 322
    BARBOACH 323
    WHISCASH 324
    LUVDISC 325
    CORPHISH 326
    CRAWDAUNT 327
    FEEBAS 328
    MILOTIC 329
    CARVANHA 330
    SHARPEDO 331
    TRAPINCH 332
    VIBRAVA 333
    FLYGON 334
    MAKUHITA 335
    HARIYAMA 336
    ELECTRIKE 337
    MANECTRIC 338
    NUMEL 339
    CAMERUPT 340
    SPHEAL 341
    SEALEO 342
    WALREIN 343
    CACNEA 344
    CACTURNE 345
    SNORUNT 346
    GLALIE 347
    LUNATONE 348
    SOLROCK 349
    AZURILL 350
    SPOINK 351
    GRUMPIG 352
    PLUSLE 353
    MINUN 354
    MAWILE 355
    MEDITITE 356
    MEDICHAM 357
    SWABLU 358
    ALTARIA 359
    WYNAUT 360
    DUSKULL 361
    DUSCLOPS 362
    ROSELIA 363
    SLAKOTH 364
    VIGOROTH 365
    SLAKING 366
    GULPIN 367
    SWALOT 368
    TROPIUS 369
    WHISMUR 370
    LOUDRED 371
    EXPLOUD 372
    CLAMPERL 373
    HUNTAIL 374
    GOREBYSS 375
    ABSOL 376
    SHUPPET 377
    BANETTE 378
    SEVIPER 379
    ZANGOOSE 380
    RELICANTH 381
    ARON 382
    LAIRON 383
    AGGRON 384
    CASTFORM 385
    VOLBEAT 386
    ILLUMISE 387
    LILEEP 388
    CRADILY 389
    ANORITH 390
    ARMALDO 391
    RALTS 392
    KIRLIA 393
    GARDEVOIR 394
    BAGON 395
    SHELGON 396
    SALAMENCE 397
    BELDUM 398
    METANG 399
    METAGROSS 400
    REGIROCK 401
    REGICE 402
    REGISTEEL 403
    KYOGRE 404
    GROUDON 405
    RAYQUAZA 406
    LATIAS 407
    LATIOS 408
    JIRACHI 409
    DEOXYS 410
    CHIMECHO 411

    More to Come, parts 6, and 7!


    Last edited by TehTehTehTeh on Tue Jan 27, 2009 3:55 am; edited 1 time in total

    Hiche
    Super Moderator
    Super Moderator

    Number of posts : 277
    Status : Normal
    Warning :
    0 / 1000 / 100

    Reputation : 0
    Points : 0
    Registration date : 2008-11-15

    default Re: Hockeypanda32's in-depth Rom hacking basics.

    Post by Hiche on Mon Jan 26, 2009 5:43 pm

    This sure is helpfull. Nice one.

    Sponsored content

    default Re: Hockeypanda32's in-depth Rom hacking basics.

    Post by Sponsored content


      Current date/time is Mon Jun 26, 2017 12:02 pm