ROM Hacking Need a helping hand? You can get help on any ROM Hacking-related problems or questions you have here.

TrollandToad.com
Closed Thread
 
Thread Tools
  #14751    
Old May 28th, 2010 (12:37 PM).
Sawakita's Avatar
Sawakita Sawakita is offline
Not Invented Here
     
    Join Date: May 2010
    Gender: Male
    Posts: 180
    Quote:
    Originally Posted by Bigdog View Post
    How do i go about changing the Pokemon sprites in the GSC generation?
    If you mean compressed sprite, there's AGIXP. for overworld sprite (uncompressed sprites) you can use any tile editor (tilemolester, tile editor pro..)

    btw: How do i go about changing the Pokemon (compressed) sprites in the RBY generation?
    __________________



    | 1st Gen Hacking: Useful Links | A good example of REAL ROM Hacking |

    Relevant Advertising!

      #14752    
    Old May 28th, 2010 (1:07 PM).
    Bigdog Bigdog is offline
       
      Join Date: Oct 2008
      Gender:
      Posts: 275
      Quote:
      Originally Posted by Sawakita View Post
      If you mean compressed sprite, there's AGIXP. for overworld sprite (uncompressed sprites) you can use any tile editor (tilemolester, tile editor pro..)

      btw: How do i go about changing the Pokemon (compressed) sprites in the RBY generation?
      I mean the actual pokemon in the game as well as the trainers'.

      I know it's possible since a silver hack based on Ruby was beginning to have been developed.
        #14753    
      Old May 28th, 2010 (1:22 PM).
      Jacusiek's Avatar
      Jacusiek Jacusiek is offline
         
        Join Date: Apr 2009
        Location: Poland
        Age: 23
        Gender: Male
        Nature: Quiet
        Posts: 18
        Hi! I have a problem! When I try to hack HG or SS and try to use program (from Swampert Tools Schowcase) to edit pokemons, atacks, gyms, etc. it crashes. Every program I use to edit Heart Gold or Soul Silver crashes. What's the problem (The crash message: Unsupported room)? Please, help me.
          #14754    
        Old May 28th, 2010 (1:22 PM).
        Sawakita's Avatar
        Sawakita Sawakita is offline
        Not Invented Here
           
          Join Date: May 2010
          Gender: Male
          Posts: 180
          Agixp works well with pokemon in gsc. For trainers' I don' know any solution other than using ASM

          -------------------------------------------

          I repost my question for the new page

          [QUOTE=Sawakita;5825561]

          do you know how to turn an image (.gif or .jpg or .png) like this
          Attachment 54206
          into hexcode like this
          (hexcode of compressed image of "bulbasaur")
          Spoiler:
          557D 3C25 4CDF AAE5 3C0A 9A55 56CA
          5052 97FF 5385 B429 27EB 9622 157A 3093
          0BF5 AB74 6048 9092 7FE9 2962 6F48 51B2
          25B7 8204 8811 A2D6 A308 C2A8 12B0 B5E0
          8626 25B5 0530 9CB8 A6A2 671E 0812 D08B
          A496 3182 38E2 2088 8D11 4E55 F52A 3A5A
          314C 3B90 4861 4E48 88C2 74A6 D148 5918
          DD4A 8B7E 2D08 6306 A14C 1068 8A08 B52A
          21B5 A220 8148 759A 2152 174C 1252 EA16
          2621 FF25 A236 18B7 6962 7414 D60B 858C
          5614 D392 193B 7EA3 8204 8816 681C 9626
          308E 3541 D48E 50F2 5E0A 0495 8A4E 1C70
          E782 0B46 19A5 4652 2637 B696 41C6 2A25
          1504


          I found a program written in C that decompress front&back pics from pokemon red
          [SPOILER]
          [CODE]
          #include
          #include
          #include

          ///// Necessary Structures

          #define WIDTHBYTES(w,bpp) (((w*bpp+31)>>5)<<2)

          #ifdef BIGENDIAN
          #define SWAPWORD(a) \
          ((WORD) ((((a)>>8)&0x00FF))\
          |((((a)<<8)&0xFF00)))
          #define SWAPDWORD(a) \
          ((DWORD) ((((a)>>24)&0x000000FF))\
          |((((a)>>8) &0x0000FF00))\
          |((((a)<<8) &0x00FF0000))\
          |((((a)<<24)&0xFF000000)))
          #else
          #define SWAPWORD(a) a
          #define SWAPDWORD(a) a
          #endif

          typedef unsigned char BYTE;
          typedef unsigned short WORD;
          typedef unsigned long DWORD;
          typedef signed long LONG;
          typedef int BOOL;

          #define TRUE 1
          #define FALSE 0

          #pragma pack(1)
          typedef struct tagBITMAPINFOHEADER {
          DWORD biSize;
          LONG biWidth;
          LONG biHeight;
          WORD biPlanes;
          WORD biBitCount;
          DWORD biCompression;
          DWORD biSizeImage;
          LONG biXPelsPerMeter;
          LONG biYPelsPerMeter;
          DWORD biClrUsed;
          DWORD biClrImportant;
          } BITMAPINFOHEADER;


          typedef struct tagBITMAPFILEHEADER {
          WORD bfType;
          DWORD bfSize;
          WORD bfReserved1;
          WORD bfReserved2;
          DWORD bfOffBits;
          } BITMAPFILEHEADER;
          #pragma pack()

          ///// GB Graphics to Bitmap Files

          void GbSetTile(
          BYTE *tile,
          BYTE *data,
          DWORD stride,
          BYTE clrOrigin
          ){
          int y;
          BYTE k1,k2;
          BYTE * bits;
          for(y=0;y<8;y++){
          k1=tile[2*y];
          k2=tile[2*y+1];
          bits=data+y*stride;
          bits[0]=clrOrigin|((k1&0x80)>>7)|((k2&0x80)>>6);
          bits[1]=clrOrigin|((k1&0x40)>>6)|((k2&0x40)>>5);
          bits[2]=clrOrigin|((k1&0x20)>>5)|((k2&0x20)>>4);
          bits[3]=clrOrigin|((k1&0x10)>>4)|((k2&0x10)>>3);
          bits[4]=clrOrigin|((k1&0x08)>>3)|((k2&0x08)>>2);
          bits[5]=clrOrigin|((k1&0x04)>>2)|((k2&0x04)>>1);
          bits[6]=clrOrigin|((k1&0x02)>>1)|((k2&0x02) );
          bits[7]=clrOrigin|((k1&0x01) )|((k2&0x01)<<1);
          }
          }

          void SaveGbBitmapTiles(
          char *filename,
          BYTE *buffer,
          DWORD sz,
          DWORD cxTile,
          DWORD cyTile,
          BOOL orient // TRUE - ltr/utd; FALSE - utd/ltr
          ){
          int i;
          DWORD xx=0,yy=0;
          BITMAPINFOHEADER *ret;
          BITMAPFILEHEADER bfh;
          FILE *h;
          BYTE *bits;
          DWORD stride;
          DWORD neededsz;
          DWORD numtiles=cxTile*cyTile;
          LONG width=cxTile*8;
          LONG height=cyTile*8;
          DWORD bminfo;
          BYTE *ctbl;
          bminfo=sizeof(BITMAPINFOHEADER)+1024;//header and palette
          stride=WIDTHBYTES(width,8);
          neededsz=bminfo+stride*height; //add image size
          ret=malloc(neededsz);
          if(!ret)return;
          memset(ret,0,neededsz);
          ret->biSize=sizeof(BITMAPINFOHEADER);
          ret->biWidth=width;
          ret->biHeight=-height;
          ret->biPlanes=SWAPWORD(1);
          ret->biBitCount=SWAPWORD(8);
          ret->biSize=SWAPDWORD(ret->biSize);
          ret->biWidth=SWAPDWORD(ret->biWidth);
          ret->biHeight=SWAPDWORD(ret->biHeight);
          // Calculate color table
          ctbl=((BYTE*)ret)+sizeof(BITMAPINFOHEADER);
          ctbl[0]=ctbl[1]=ctbl[2] =0xFF;
          ctbl[4]=ctbl[5]=ctbl[6] =0xAA;
          ctbl[8]=ctbl[9]=ctbl[10] =0x55;
          ctbl[12]=ctbl[13]=ctbl[14]=0x00;
          // Calculate pointer to image
          bits=((BYTE*)ret)+bminfo;
          for(i=0;i>7) )

          #define RRC(a) \
          ( (((a)&0xFE)>>1)|(((a)&0x01)<<7) )

          #define SWAP(a) \
          ( (((a)&0xF0)>>4)|(((a)&0x0F)<<4) )


          #define SLA(a) \
          (((a)<<1)&0xFE)

          #define SLA16(a) \
          (((a)<<1)&0xFFFE)

          typedef struct{
          BYTE *ptr;
          BYTE cursize1;
          BYTE cursize2;
          BYTE size1;
          BYTE size2;
          BYTE curbyte;
          BYTE curbit;
          BYTE d084;
          BYTE d085;
          BYTE d086;
          BYTE d087;
          WORD o;
          WORD pos0;
          WORD pos1;
          WORD table1;
          WORD table2;
          WORD maxsize;
          WORD error;
          } GGCONTEXT;

          WORD BitMaskTable[]={
          0x0001,
          0x0003,
          0x0007,
          0x000F,
          0x001F,
          0x003F,
          0x007F,
          0x00FF,
          0x01FF,
          0x03FF,
          0x07FF,
          0x0FFF,
          0x1FFF,
          0x3FFF,
          0x7FFF,
          0xFFFF
          };
          BYTE BitTables[4][8]={
          {0x08,0xC4,0xE6,0x2A,0xF7,0x3B,0x19,0xD5},
          {0xF7,0x3B,0x19,0xD5,0x08,0xC4,0xE6,0x2A},
          {0x01,0x32,0x76,0x45,0xFE,0xCD,0x89,0xBA},
          {0xFE,0xCD,0x89,0xBA,0x01,0x32,0x76,0x45}
          };

          BYTE Tables2[16]={
          0x00,0x08,0x04,0x0C,0x02,0x0A,0x06,0x0E,
          0x01,0x09,0x05,0x0D,0x03,0x0B,0x07,0x0F
          };

          #define TESTPOS(ggc,x)\
          if(x>=(ggc)->maxsize){\
          (ggc)->error=1;\
          return 0;\
          }

          #define NEXTBIT(x) \
          do{\
          if(!(--ggc.curbit)){\
          ggc.curbyte=xgetc(f,offset+(ggc.o++));\
          ggc.curbit=8;\
          }\
          ggc.curbyte=RLC(ggc.curbyte);\
          x=ggc.curbyte&0x01;\
          }while(0)

          #define PUTTEMP(tmp) \
          do{\
          e=tmp;\
          switch(ggc.d084){\
          case 1:\
          e=SLA(e);e=SLA(e);break;\
          case 2:\
          e=SWAP(e);break;\
          case 3:\
          e=RRC(e);e=RRC(e);break;\
          }\
          TESTPOS(&ggc,ggc.pos0);\
          ggc.ptr[ggc.pos0]|=e;\
          }while(0)

          #define INCPTR \
          do{\
          ggc.cursize2++;\
          if(ggc.cursize2!=ggc.size2){\
          ggc.pos0++;\
          } else {\
          ggc.cursize2=0;\
          if(ggc.d084){\
          ggc.d084--;\
          ggc.pos0=ggc.pos1;\
          } else {\
          ggc.d084=3;\
          ggc.cursize1+=0x08;\
          if(ggc.cursize1!=ggc.size1){\
          ggc.pos0++;\
          ggc.pos1=ggc.pos0;\
          } else {\
          ggc.cursize1=0;\
          if(!(ggc.d085&0x02)){\
          ggc.d085^=0x01;\
          ggc.d085|=0x02;\
          goto label2574;\
          } else {\
          done=TRUE;\
          }\
          }\
          }\
          }\
          }while(0)

          int GetGraphicsRoutine1(GGCONTEXT *ggc, WORD hl){
          BYTE b;
          BYTE tmp,c,d;
          BOOL d087Old;
          WORD a;
          BYTE e;
          WORD i,j;
          ggc->cursize1=ggc->cursize2=0;
          ggc->pos0=ggc->pos1=hl;
          if(ggc->d087){
          ggc->table1=0;
          ggc->table2=1;
          } else {
          ggc->table1=2;
          ggc->table2=3;
          }
          e=0;
          do{
          do{
          BYTE bit;
          TESTPOS(ggc,ggc->pos0);
          a=b=ggc->ptr[ggc->pos0];
          a=SWAP(a)&0x0F;
          c=a&0x01;
          a>>=1;
          bit=(ggc->d087)?(e&0x04)e&0x01);
          if(bit){
          a=BitTables[ggc->table2][a];
          } else {
          a=BitTables[ggc->table1][a];
          }
          if(!(c&0x01))a=SWAP(a);
          a&=0x0F;
          e=a;
          d=SWAP(a);
          a=b&0x0F;
          c=a&0x01;
          a>>=1;
          bit=(ggc->d087)?(e&0x04)e&0x01);
          if(bit){
          a=BitTables[ggc->table2][a];
          } else {
          a=BitTables[ggc->table1][a];
          }
          if(!(c&0x01))a=SWAP(a);
          a&=0x0F;
          e=a;
          a|=d;
          TESTPOS(ggc,ggc->pos0);
          ggc->ptr[ggc->pos0]=a;
          ggc->pos0+=ggc->size1;
          ggc->cursize1+=0x08;
          }while(ggc->cursize1!=ggc->size1);
          e=0;
          ggc->cursize1=0;
          ggc->cursize2++;
          if(ggc->cursize2!=ggc->size2){
          ggc->pos1++;
          ggc->pos0=ggc->pos1;
          }
          }while(ggc->cursize2!=ggc->size2);
          ggc->cursize2=0;
          return !(ggc->error);
          }

          int GetGraphicsRoutine2(GGCONTEXT *ggc){
          BYTE b;
          BYTE tmp,c;
          BOOL d087Old;
          WORD a;
          WORD mask,de,hl;
          BYTE e;
          WORD i,j;
          ggc->cursize1=ggc->cursize2=0;
          ggc->pos0=(ggc->d085&0x01)?0:0x188;
          ggc->pos1=(ggc->d085&0x01)?0x188:0;
          GetGraphicsRoutine1(ggc,ggc->pos0);
          ggc->pos0=(ggc->d085&0x01)?0:0x188;
          ggc->pos1=(ggc->d085&0x01)?0x188:0;
          hl=ggc->pos0;
          de=ggc->pos1;
          do{
          do{
          if(ggc->d087){
          TESTPOS(ggc,de);
          a=ggc->ptr[de];
          b=a;
          a=SWAP(a)&0x0F;
          c=Tables2[a];
          c=SWAP(c);
          a=b&0x0F;
          a=Tables2[a];
          a|=c;
          ggc->ptr[de]=a;
          }
          TESTPOS(ggc,hl);
          TESTPOS(ggc,de);
          a=ggc->ptr[hl++]^ggc->ptr[de];
          ggc->ptr[de++]=a;
          ggc->cursize2++;
          }while(ggc->cursize2!=ggc->size2);
          ggc->cursize2=0;
          ggc->cursize1+=0x08;
          }while(ggc->cursize1!=ggc->size1);
          ggc->cursize1=0;
          return !(ggc->error);
          }

          int GetGraphics(
          FILE *f,
          DWORD offset,
          BYTE *ptr,
          DWORD sz
          ){
          GGCONTEXT ggc;
          BYTE b;
          BYTE tmp,c;
          BOOL d087Old;
          WORD a;
          WORD mask,de,hl;
          BYTE e;
          WORD i,j;
          BOOL done=FALSE;
          BYTE tmpbuf[0x310];
          ggc.size1=0;
          ggc.size2=0;
          ggc.cursize1=0;
          ggc.cursize2=0;
          ggc.curbit=1;
          ggc.d085=0;
          ggc.d086=1;
          ggc.d084=3;
          ggc.d087=0;
          ggc.pos0=0;
          ggc.pos1=0;
          ggc.ptr=tmpbuf;
          ggc.table1=0;
          ggc.table2=0;
          ggc.o=0;
          ggc.maxsize=0x310;
          ggc.error=0;
          ggc.curbyte=xgetc(f,offset+(ggc.o++));
          if(ggc.curbyte!=0x44
          &&ggc.curbyte!=0x55
          &&ggc.curbyte!=0x66
          &&ggc.curbyte!=0x77)return 0;
          b=ggc.curbyte;
          ggc.size1=(b&0x0F)*8;
          b=SWAP(b);
          ggc.size2=(b&0x0F)*8;
          memset(tmpbuf,0,0x310);
          NEXTBIT(tmp);
          ggc.d085=tmp;
          label2574:
          ggc.pos0=ggc.pos1=(ggc.d085&0x01)?0x188:0;
          if(ggc.d085&0x02){
          NEXTBIT(tmp);
          if(tmp){
          NEXTBIT(tmp);
          tmp++;
          }
          ggc.d086=tmp;
          }
          NEXTBIT(tmp);
          while(!done){
          if(tmp){
          while(1){
          NEXTBIT(tmp);
          c=tmp;
          NEXTBIT(tmp);
          tmp|=SLA(c);
          if(tmp){
          PUTTEMP(tmp);
          INCPTR;
          } else break;
          }
          }
          if(done)break;
          c=0;
          do{
          NEXTBIT(tmp);
          if(tmp)c++;
          }while(tmp);
          mask=BitMaskTable[c];
          de=0;
          c++;
          do{
          NEXTBIT(tmp);
          de=tmp|de;
          if(--c){
          de=SLA16(de);
          }
          }while(c);
          de+=mask;
          do{
          tmp=0;
          PUTTEMP(tmp);
          INCPTR;
          if(done)break;
          de--;
          if(de==0){
          tmp=1;//to continue upper loop
          break;
          }
          }while(1);
          }
          if(ggc.d086==0){
          GetGraphicsRoutine1(&ggc,0);
          GetGraphicsRoutine1(&ggc,0x188);
          } else if(ggc.d086==1){
          GetGraphicsRoutine2(&ggc);
          } else {
          ggc.pos0=(ggc.d085&0x01)?0:0x188;
          ggc.pos1=(ggc.d085&0x01)?0x188:0;
          d087Old=ggc.d087;
          ggc.d087=0;
          GetGraphicsRoutine1(&ggc,ggc.pos1);
          ggc.pos0=(ggc.d085&0x01)?0:0x188;
          ggc.pos1=(ggc.d085&0x01)?0x188:0;
          ggc.d087=d087Old;
          GetGraphicsRoutine2(&ggc);
          }
          for(i=0;i<0x188;i++){
          ptr[(i<<1)]=ggc.ptr[i];
          ptr[(i<<1)|1]=ggc.ptr[0x188+i];
          }
          return !(ggc.error);
          }

          int NumberToIndex(BYTE *ord,DWORD len,int n){
          int i;
          for(i=0;i
          __________________



          | 1st Gen Hacking: Useful Links | A good example of REAL ROM Hacking |
            #14755    
          Old May 28th, 2010 (2:49 PM).
          Chaos Rush's Avatar
          Chaos Rush Chaos Rush is offline
             
            Join Date: May 2007
            Gender: Male
            Posts: 1,303
            Is there any tutorial on how to edit map connections for Pokemon Gold? What I mean by map connections is, where they connect.

            EDIT: And please, don't just give me a link to GoldMap or something. I want to do it with a hex editor.
            __________________
              #14756    
            Old May 28th, 2010 (3:06 PM).
            Sawakita's Avatar
            Sawakita Sawakita is offline
            Not Invented Here
               
              Join Date: May 2010
              Gender: Male
              Posts: 180
              i haven't a real solution but here(http://www.datacrystal.org/wiki/Pokemon_Gold:ROM_map#Maps ) you should find something useful
              for connections i only know a doc for r/b/y version
              Spoiler:
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

              RGBY Map Headers & Stuff That Goes With It
              Version 1.3
              -Feel free to distribute this document and/or edit it.
              -Try and credit people you get info from and/or write how you updated.

              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

              Things that need adding:
              ------------------------
              More information about tilesets, and info about what sprites get loaded for
              which maps.

              Updates:
              --------
              v1.4 Complete object data info with details about picture id.
              v1.3 Edit by Cartmic to include almost completed tileset header information
              and Hat's further clarification on what the X/Y Movement of the Connection means.
              v1.2: By ubitux: Add some information about connections and distinction between entities (People/Trainers/Items)
              v1.11: Typo fixed by Hat: "01 = North" changed to "01 = East". Thanks to IIMarckus for pointing that out.
              v1.1: By Hat, minor improvements.
              v1.0: Original version typed up by Hat.

              Main Credits (Structure Information):
              -------------------------------------
              [Xeon]
              Wrote some stuff about Map Headers and Object Data.
              Which this document expands upon, a bit.

              [F-Zero] & [Tauwasser]
              Wrote a document (in German) explaining how GSC connection data is stored.
              RGBY connection data is stored almost the same way, it turns out, so
              that helped a great deal. All that is really different is the values you
              add the amount of blocks to.
              ...............................................................................

              Notes:
              R/B Pointers to Map Headers: 0x01AE
              R/B Map Header Banks: 0xC23D
              R/B Pointer to Tileset Headers: 0xC767

              Maximum tileset size in VRAM: 6 rows of 16 tiles (9000-95FF)

              ...............................................................................

              ===============================================================================

              Tileset Header Structure (Almost complete)

              ===============================================================================

              12 bytes per header...

              Format:
              ~~~~~~~
              [1 BYTE: Bank No. of Blocks/Tiles]
              [2 BYTES: Pointer to Blocks (-10 for some reason)]
              [2 BYTES: Pointer to Tiles]
              [7 BYTES:
              00 00 00 00 00 00 00
              || || || || || || ||
              || || || || || || __ Amount of animated tiles.
              || || || || || _____ x,y location on tileset of 'Grass' tile
              || || || || ________ X,Y Location of 'talking over tiles': East/West
              || || || ___________ X,Y Location of 'talking over tiles': North/South 1
              || || ______________ X,Y Location of 'talking over tiles': North/south 2
              || _________________ Colision Indication - Pointer?
              ____________________ Colision Indication - Pointer?]

              ===============================================================================

              Map Header Structure

              ===============================================================================

              Explanation:
              ~~~~~~~~~~~~
              This contains all the data (pointers count as data) to build the map.

              Format:
              ~~~~~~~
              #1: [Tileset Number]
              #2: [(Y Size) Map Height]
              #3: [(X Size) Map Width]
              #4-5: [*2 Bytes*: Pointer to Map]
              #6-7: [*2 Bytes*: Pointer to Maps Text Pointers]
              #8-9: [*2 Bytes*: Pointer to Maps "Script"]
              #10: [Connection Byte]
              ?: [*11 Bytes per Connection*, No connections? Straight to "Object Data"!]
              Last: [*2 Bytes*: Pointer to Object Data]

              ===============================================================================
              1) Tileset Numbers
              ===============================================================================

              The tileset descriptions are copied from a document compiled by Cartmic,
              called "Pokemon Red Documents", which may help you with other stuff too.

              Unchanged R/B Locations/Tileset No./Tileset Descriptions
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              C7BE; 00: "Outside"
              C7CA; 01: "Ash's House (#1)"
              C7D6; 02: "Pokemon Center (#1)"
              C7E2; 03: "Viridian Forest"
              C7EE; 04: "Ash's House (#2)"
              C7FA; 05: "Gym (#1)"
              C806; 06: "Pokemon Center (#2)"
              C812; 07: "Gym (#2)"
              C81E; 08: "House"
              C82A; 09: "Museum (#1)"
              C836; 0A: "Museum (#2)"
              C842; 0B: "Underground Path"
              C84E; 0C: "Museum (#3)"
              C85A; 0D: "S.S. Anne"
              C866; 0E: "Vermilion Port"
              C872; 0F: "Pokemon Cemetery"
              C87E; 10: "Silph Co."
              C88A; 11: "Cave"
              C896; 12: "Celadon Mart"
              C8A2; 13: "Game Freak HQ"
              C8AE; 14: "Lab"
              C8BA; 15: "Bike Shop/Cable Center"
              C8C6; 16: "Cinnabar Mansion/Power Plant etc"
              C8D2; 17: "Indigo Plateau"

              NOTE: As you can see there's multiple copies of some tileset headers. They are
              literally copies, you only need 1 copy, but you will need to make sure all maps
              using that tileset are set to using that tileset number, then you can use the
              free space for more tilesets.

              ===============================================================================
              2 & 3) Map Height (Y) & Width (X)
              ===============================================================================

              Exactly that, the amount of blocks high and wide the map data is.

              ===============================================================================
              4 & 5) Map Data Pointer
              ===============================================================================

              You can use the GoldMap engine for hacking map data quite easily.

              The map you walk around on and stuff is stored as block indexes.
              A single block consists of 4*4 tiles.

              ===============================================================================
              6 & 7) Pointer to Maps Text Pointers
              ===============================================================================

              2 byte pointers to text that is used on that map.

              ===============================================================================
              8 & 9) Pointer to Maps "Script"
              ===============================================================================

              ASM used on that map, chances are if there's something on a map you can't find
              elsewhere you might easily be able to find it here, using a hex search
              function. You can find things like XY positions of Poke Balls and 1-time
              only Pokemon.

              ===============================================================================
              10) Connection Byte
              ===============================================================================

              Note:
              ~~~~~
              If this value is 00h it is immediately followed by the Object Data
              Pointer, no gap. Repeated list:

              Connection Byte:
              00 = No Connections
              01 = East
              02 = West
              03 = West + East
              04 = South
              05 = South + East
              06 = South + West
              07 = South + West + East
              08 = North
              09 = North + East
              0A = North + West
              0B = North + West + East
              0C = North + South
              0D = North + South + East
              0E = North + South + West
              0F = North + South + West + East

              Connections can be obtained with binary masks:

              1. connect_byte & (1 << 3) -> North
              2. connect_byte & (1 << 2) -> South
              3. connect_byte & (1 << 1) -> West
              4. connect_byte & (1 << 0) -> East

              You have to respect this order to get the correct list.

              ===============================================================================
              ?) Connection Data (0-44 bytes, explained in more depth: further down)
              ===============================================================================

              ===============================================================================
              Last) Object Data Pointer
              ===============================================================================

              The last thing in the Map Header. It points to a bunch of certain stuff that
              is stored in similar structures.

              Object Data is discussed at the end of this document.
              ...............................................................................


              ===============================================================================

              *** Hacking Connections ***
              This will certainly require planning, with no background distractions.
              Unless a editor gets built that can hack the connections for RGBY.

              ===============================================================================

              Explanation:
              ~~~~~~~~~~~~
              The "Connection Byte" determines how many connections are in this space,
              including none at all.

              X/Y_Movement_Of_Connection
              ~~~~~~~~~~~~~~~~~~~~~~~~~~

              A X movement is how many map blocks there are to the left of one of your north/south connections.
              A Y movement is how many map blocks there are above your west/east connection.

              Structure:
              ~~~~~~~~~~
              #1: [Map Index of Connected Map]
              #2-3: [Pointer to "Connection Strip"s Upperleft Block (Connected Map)]
              #4-5: [Pointer to "Connection Strip"s Upperleft Block (Current Map)]
              #6: ["Bigness"]
              #7: [Map Width]
              #8: [Y alignment]
              #9: [X alignment]
              #10-11: [Window]

              PKMN Red Example -- Saffron City (Header: 0x509A4) Diagram:
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              Saffrons need-to-know stats:

              Block Height (Y): 12
              Block Width (X): 14
              Connection Byte: 0F (North + South + West + East)
              - - - -
              + = current maps border blocks

              ++++++++NNNNNNNNNN++++++++
              ++++++++NNNNNNNNNN++++++++
              ++++++++NNNNNNNNNN++++++++
              +++####################+++
              +++####################+++
              +++####### My #########+++
              +++####################+++
              WWW####### Name's #####EEE
              WWW####################EEE
              WWW###### Saffron #####EEE
              WWW####################EEE
              WWW###### City! #######EEE
              WWW####################EEE
              WWW####################EEE
              WWW####################EEE
              WWW####################EEE
              +++####################+++
              +++####################+++
              +++####################+++
              +++####################+++
              +++####################+++
              ++++++++SSSSSSSSSS++++++++
              ++++++++SSSSSSSSSS++++++++
              ++++++++SSSSSSSSSS++++++++

              Connection to Route 5 (to the North)
              *Y: 12
              *X: 0A
              *X_Movement_of_Connection Strip = 5
              Map Index: 10
              Connection Strip: 4668
              Where Connected: C6F0 (C6EB + 5)
              "Bigness": 0A
              Width: 0A
              Y alignment: 23 (12 * 2 - 1)
              X alignment: F6 (5 * -2)
              Window: C809 (C6E9 + (12 * (0A + 6)))

              Connection to Route 6 (to the South)
              *Y: 12
              *X: 0A
              *X_Movement_of_Connection Strip = 5
              Map Index: 11
              Connection Strip: 4079
              Where Connected: C912 (C6EB + ((12 + 3) * (14 + 6)) + 5)
              "Bigness": 0A
              Width: 0A
              Y alignment: 00
              X alignment: F6 (5 * -2)
              Window: C6F9 (C6EF + 0A)

              Connection to Route 7 (to the West)
              *Y: 09
              *X: 0A
              *Y_Movement_of_Connection Strip = 4
              Map Index: 12
              Connection Strip: 4058
              Where Connected: C79E (C6E8 + (14 + 6) * (4 + 3))
              "Bigness": 09
              Width: 0A
              Y alignment: F8 (4 * -2)
              X alignment: 13 ((0A * 2) - 1)
              Window: C702 (C6EE + (0A * 2))

              Connection to Route 8 (to the East)
              *Y: 09
              *X: 1E
              *Y_Movement_of_Connection Strip = 4
              Map Index: 13
              Connection Strip: 41C6
              Where Connected: C7B5 (C6E5 + (14 + 6) * (4 + 4))
              "Bigness": 09
              Width: 1E
              Y alignment: F8 (4 * -2)
              X alignment: 00
              Window: C70D (C6EF + 1E)

              ===============================================================================
              #1 : Map Indexes
              ===============================================================================

              Not included! Download UltraMap, the text file known as "RedEnglish.ini"
              contains all the Map Indexes in decimal for R/B, which you'll obviously need
              to convert to hex.

              ===============================================================================
              #2-#3 : "Connection Strip" Location
              ===============================================================================

              The "connection strip" pointer -- points to the area of the connected map that
              is visible when standing before you even enter it. Points to the upperleft
              block of the "connection strip".
              * connection strip is always 3 blocks wide (E/W connection)
              3 blocks high (N/S connection)

              ===============================================================================
              #4-#5 : Current Map Position
              ===============================================================================

              This points to the part of the current map (further up in RAM)
              that the connection strips upperleft block is placed on the current map.

              ____________________
              Connection |
              Direction | Formula
              ___________|_______

              North: C6EB + X_Movement_of_Connection Strip

              South: C6EB + (Height of Map + 3) * (Width of Map + 6) +
              X_Movement_of_Connection Strip

              West: C6E8 + (Width of Map + 6) * (Y_Movement_of_"Connection Strip" + 3)

              East: C6E5 + (Width of Map + 6) * (Y_Movement_of_"Connection Strip" + 4)

              ===============================================================================
              #6 : Map "Bigness"
              ===============================================================================

              North/South Connection = Connected Maps Width
              East/West Connection = Connected Maps Height

              ===============================================================================
              #7 : Map Width
              ===============================================================================

              The width of the connected map.

              ===============================================================================
              #8 : Y alignment
              ===============================================================================

              Relative Y-position of player after entering connected map.

              ____________________
              Connection |
              Direction | Formula
              ___________|_______
              North: (Height_of_connected_map * 2) - 1
              South: 0
              West/East: (Y_movement_of_connection_strip_in_blocks * -2)

              ===============================================================================
              #9 : X alignment
              ===============================================================================

              Relative X-Position of player after entering connected map.

              ____________________
              Connection |
              Direction | Formula
              ___________|_______
              North/South: (X_movement_of_connection_strip_in_blocks * -2)
              West: (Width_of_connected_map * 2) - 1
              East: 0

              ===============================================================================
              #10-#11 : Window
              ===============================================================================

              Position of the upper left block after entering the Map.

              ____________________
              Connection |
              Direction | Formula
              ___________|_______
              Above: C6E9h + Height_of_connected_map * (Width_of_connected_map + 6)
              South/East: C6EFh + Width_of_connected_map
              West: C6EEh + 2 * Width_of_connected_map
              ...............................................................................


              ===============================================================================

              Object Data: General Structure

              ===============================================================================

              Object Data
              ===========
              [Maps Border Tile]
              [Number of Warps][Warp Data]
              [Number of Signs][Sign Data]
              [Number of People/Trainers/Items]
              [People Data]
              [Trainer Data]
              [Item Data]
              [Warp-To Data]

              Warps:
              ------
              [Y position][X position][Warp-To Point][Warp-To Map]

              Signposts:
              ----------
              [Y position][X position][Text String Number]

              Normal People:
              --------------
              [Picture Number][Y position + 4][X position + 4]
              [Movement 1][Movement 2][Text String Number]

              Trainers:
              ---------
              [Picture Number][Y position + 4][X position + 4]
              [Movement 1][Movement 2][Text String Number]
              [Trainer Type][Pokemon Set]

              Items:
              ---------------------
              [Picture Number][Y position + 4][X position + 4]
              [Movement 1][Movement 2][Text String Number]
              [Item Number]

              Warp-To Points
              --------------
              [*2 Bytes*: Event Displacement][Y position][X position]

              In order to distinguish People, Trainers and Items, you must use the Text String Number:

              text_str_n & (1 << 6) -> Trainer (2 more byte to read, the trainer type and the pokémon set)
              text_str_n & (1 << 7) -> Item (just one more byte to read, the item id)

              Picture Numbers
              ~~~~~~~~~~~~~~~

              In order to get the ROM address of the tile relative to an entity
              (people/trainers/items), here is the formula to focus on the entity information:

              5 * 0x4000 + (0x7b27 + 4 * (picture_id - 1)) % 0x4000

              Then the entity information is stored according to this:

              [*2 Bytes*: Tile address][Unknown][Bank id]

              So then, address = bank_id * 0x4000 + tile_addr % 0x4000

              Event Displacement Formula:
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
              C6E3 + ((Map width + 8) * (rows above + 1)) + (X movement + 4)

              ###############################################################################
              __________________



              | 1st Gen Hacking: Useful Links | A good example of REAL ROM Hacking |
                #14757    
              Old May 29th, 2010 (10:44 AM).
              Chaos Rush's Avatar
              Chaos Rush Chaos Rush is offline
                 
                Join Date: May 2007
                Gender: Male
                Posts: 1,303
                Quote:
                Originally Posted by Sawakita View Post
                i haven't a real solution but here(http://www.datacrystal.org/wiki/Pokemon_Gold:ROM_map#Maps ) you should find something useful
                for connections i only know a doc for r/b/y version
                Spoiler:
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                RGBY Map Headers & Stuff That Goes With It
                Version 1.3
                -Feel free to distribute this document and/or edit it.
                -Try and credit people you get info from and/or write how you updated.

                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                Things that need adding:
                ------------------------
                More information about tilesets, and info about what sprites get loaded for
                which maps.

                Updates:
                --------
                v1.4 Complete object data info with details about picture id.
                v1.3 Edit by Cartmic to include almost completed tileset header information
                and Hat's further clarification on what the X/Y Movement of the Connection means.
                v1.2: By ubitux: Add some information about connections and distinction between entities (People/Trainers/Items)
                v1.11: Typo fixed by Hat: "01 = North" changed to "01 = East". Thanks to IIMarckus for pointing that out.
                v1.1: By Hat, minor improvements.
                v1.0: Original version typed up by Hat.

                Main Credits (Structure Information):
                -------------------------------------
                [Xeon]
                Wrote some stuff about Map Headers and Object Data.
                Which this document expands upon, a bit.

                [F-Zero] & [Tauwasser]
                Wrote a document (in German) explaining how GSC connection data is stored.
                RGBY connection data is stored almost the same way, it turns out, so
                that helped a great deal. All that is really different is the values you
                add the amount of blocks to.
                ...............................................................................

                Notes:
                R/B Pointers to Map Headers: 0x01AE
                R/B Map Header Banks: 0xC23D
                R/B Pointer to Tileset Headers: 0xC767

                Maximum tileset size in VRAM: 6 rows of 16 tiles (9000-95FF)

                ...............................................................................

                ===============================================================================

                Tileset Header Structure (Almost complete)

                ===============================================================================

                12 bytes per header...

                Format:
                ~~~~~~~
                [1 BYTE: Bank No. of Blocks/Tiles]
                [2 BYTES: Pointer to Blocks (-10 for some reason)]
                [2 BYTES: Pointer to Tiles]
                [7 BYTES:
                00 00 00 00 00 00 00
                || || || || || || ||
                || || || || || || __ Amount of animated tiles.
                || || || || || _____ x,y location on tileset of 'Grass' tile
                || || || || ________ X,Y Location of 'talking over tiles': East/West
                || || || ___________ X,Y Location of 'talking over tiles': North/South 1
                || || ______________ X,Y Location of 'talking over tiles': North/south 2
                || _________________ Colision Indication - Pointer?
                ____________________ Colision Indication - Pointer?]

                ===============================================================================

                Map Header Structure

                ===============================================================================

                Explanation:
                ~~~~~~~~~~~~
                This contains all the data (pointers count as data) to build the map.

                Format:
                ~~~~~~~
                #1: [Tileset Number]
                #2: [(Y Size) Map Height]
                #3: [(X Size) Map Width]
                #4-5: [*2 Bytes*: Pointer to Map]
                #6-7: [*2 Bytes*: Pointer to Maps Text Pointers]
                #8-9: [*2 Bytes*: Pointer to Maps "Script"]
                #10: [Connection Byte]
                ?: [*11 Bytes per Connection*, No connections? Straight to "Object Data"!]
                Last: [*2 Bytes*: Pointer to Object Data]

                ===============================================================================
                1) Tileset Numbers
                ===============================================================================

                The tileset descriptions are copied from a document compiled by Cartmic,
                called "Pokemon Red Documents", which may help you with other stuff too.

                Unchanged R/B Locations/Tileset No./Tileset Descriptions
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                C7BE; 00: "Outside"
                C7CA; 01: "Ash's House (#1)"
                C7D6; 02: "Pokemon Center (#1)"
                C7E2; 03: "Viridian Forest"
                C7EE; 04: "Ash's House (#2)"
                C7FA; 05: "Gym (#1)"
                C806; 06: "Pokemon Center (#2)"
                C812; 07: "Gym (#2)"
                C81E; 08: "House"
                C82A; 09: "Museum (#1)"
                C836; 0A: "Museum (#2)"
                C842; 0B: "Underground Path"
                C84E; 0C: "Museum (#3)"
                C85A; 0D: "S.S. Anne"
                C866; 0E: "Vermilion Port"
                C872; 0F: "Pokemon Cemetery"
                C87E; 10: "Silph Co."
                C88A; 11: "Cave"
                C896; 12: "Celadon Mart"
                C8A2; 13: "Game Freak HQ"
                C8AE; 14: "Lab"
                C8BA; 15: "Bike Shop/Cable Center"
                C8C6; 16: "Cinnabar Mansion/Power Plant etc"
                C8D2; 17: "Indigo Plateau"

                NOTE: As you can see there's multiple copies of some tileset headers. They are
                literally copies, you only need 1 copy, but you will need to make sure all maps
                using that tileset are set to using that tileset number, then you can use the
                free space for more tilesets.

                ===============================================================================
                2 & 3) Map Height (Y) & Width (X)
                ===============================================================================

                Exactly that, the amount of blocks high and wide the map data is.

                ===============================================================================
                4 & 5) Map Data Pointer
                ===============================================================================

                You can use the GoldMap engine for hacking map data quite easily.

                The map you walk around on and stuff is stored as block indexes.
                A single block consists of 4*4 tiles.

                ===============================================================================
                6 & 7) Pointer to Maps Text Pointers
                ===============================================================================

                2 byte pointers to text that is used on that map.

                ===============================================================================
                8 & 9) Pointer to Maps "Script"
                ===============================================================================

                ASM used on that map, chances are if there's something on a map you can't find
                elsewhere you might easily be able to find it here, using a hex search
                function. You can find things like XY positions of Poke Balls and 1-time
                only Pokemon.

                ===============================================================================
                10) Connection Byte
                ===============================================================================

                Note:
                ~~~~~
                If this value is 00h it is immediately followed by the Object Data
                Pointer, no gap. Repeated list:

                Connection Byte:
                00 = No Connections
                01 = East
                02 = West
                03 = West + East
                04 = South
                05 = South + East
                06 = South + West
                07 = South + West + East
                08 = North
                09 = North + East
                0A = North + West
                0B = North + West + East
                0C = North + South
                0D = North + South + East
                0E = North + South + West
                0F = North + South + West + East

                Connections can be obtained with binary masks:

                1. connect_byte & (1 << 3) -> North
                2. connect_byte & (1 << 2) -> South
                3. connect_byte & (1 << 1) -> West
                4. connect_byte & (1 << 0) -> East

                You have to respect this order to get the correct list.

                ===============================================================================
                ?) Connection Data (0-44 bytes, explained in more depth: further down)
                ===============================================================================

                ===============================================================================
                Last) Object Data Pointer
                ===============================================================================

                The last thing in the Map Header. It points to a bunch of certain stuff that
                is stored in similar structures.

                Object Data is discussed at the end of this document.
                ...............................................................................


                ===============================================================================

                *** Hacking Connections ***
                This will certainly require planning, with no background distractions.
                Unless a editor gets built that can hack the connections for RGBY.

                ===============================================================================

                Explanation:
                ~~~~~~~~~~~~
                The "Connection Byte" determines how many connections are in this space,
                including none at all.

                X/Y_Movement_Of_Connection
                ~~~~~~~~~~~~~~~~~~~~~~~~~~

                A X movement is how many map blocks there are to the left of one of your north/south connections.
                A Y movement is how many map blocks there are above your west/east connection.

                Structure:
                ~~~~~~~~~~
                #1: [Map Index of Connected Map]
                #2-3: [Pointer to "Connection Strip"s Upperleft Block (Connected Map)]
                #4-5: [Pointer to "Connection Strip"s Upperleft Block (Current Map)]
                #6: ["Bigness"]
                #7: [Map Width]
                #8: [Y alignment]
                #9: [X alignment]
                #10-11: [Window]

                PKMN Red Example -- Saffron City (Header: 0x509A4) Diagram:
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                Saffrons need-to-know stats:

                Block Height (Y): 12
                Block Width (X): 14
                Connection Byte: 0F (North + South + West + East)
                - - - -
                + = current maps border blocks

                ++++++++NNNNNNNNNN++++++++
                ++++++++NNNNNNNNNN++++++++
                ++++++++NNNNNNNNNN++++++++
                +++####################+++
                +++####################+++
                +++####### My #########+++
                +++####################+++
                WWW####### Name's #####EEE
                WWW####################EEE
                WWW###### Saffron #####EEE
                WWW####################EEE
                WWW###### City! #######EEE
                WWW####################EEE
                WWW####################EEE
                WWW####################EEE
                WWW####################EEE
                +++####################+++
                +++####################+++
                +++####################+++
                +++####################+++
                +++####################+++
                ++++++++SSSSSSSSSS++++++++
                ++++++++SSSSSSSSSS++++++++
                ++++++++SSSSSSSSSS++++++++

                Connection to Route 5 (to the North)
                *Y: 12
                *X: 0A
                *X_Movement_of_Connection Strip = 5
                Map Index: 10
                Connection Strip: 4668
                Where Connected: C6F0 (C6EB + 5)
                "Bigness": 0A
                Width: 0A
                Y alignment: 23 (12 * 2 - 1)
                X alignment: F6 (5 * -2)
                Window: C809 (C6E9 + (12 * (0A + 6)))

                Connection to Route 6 (to the South)
                *Y: 12
                *X: 0A
                *X_Movement_of_Connection Strip = 5
                Map Index: 11
                Connection Strip: 4079
                Where Connected: C912 (C6EB + ((12 + 3) * (14 + 6)) + 5)
                "Bigness": 0A
                Width: 0A
                Y alignment: 00
                X alignment: F6 (5 * -2)
                Window: C6F9 (C6EF + 0A)

                Connection to Route 7 (to the West)
                *Y: 09
                *X: 0A
                *Y_Movement_of_Connection Strip = 4
                Map Index: 12
                Connection Strip: 4058
                Where Connected: C79E (C6E8 + (14 + 6) * (4 + 3))
                "Bigness": 09
                Width: 0A
                Y alignment: F8 (4 * -2)
                X alignment: 13 ((0A * 2) - 1)
                Window: C702 (C6EE + (0A * 2))

                Connection to Route 8 (to the East)
                *Y: 09
                *X: 1E
                *Y_Movement_of_Connection Strip = 4
                Map Index: 13
                Connection Strip: 41C6
                Where Connected: C7B5 (C6E5 + (14 + 6) * (4 + 4))
                "Bigness": 09
                Width: 1E
                Y alignment: F8 (4 * -2)
                X alignment: 00
                Window: C70D (C6EF + 1E)

                ===============================================================================
                #1 : Map Indexes
                ===============================================================================

                Not included! Download UltraMap, the text file known as "RedEnglish.ini"
                contains all the Map Indexes in decimal for R/B, which you'll obviously need
                to convert to hex.

                ===============================================================================
                #2-#3 : "Connection Strip" Location
                ===============================================================================

                The "connection strip" pointer -- points to the area of the connected map that
                is visible when standing before you even enter it. Points to the upperleft
                block of the "connection strip".
                * connection strip is always 3 blocks wide (E/W connection)
                3 blocks high (N/S connection)

                ===============================================================================
                #4-#5 : Current Map Position
                ===============================================================================

                This points to the part of the current map (further up in RAM)
                that the connection strips upperleft block is placed on the current map.

                ____________________
                Connection |
                Direction | Formula
                ___________|_______

                North: C6EB + X_Movement_of_Connection Strip

                South: C6EB + (Height of Map + 3) * (Width of Map + 6) +
                X_Movement_of_Connection Strip

                West: C6E8 + (Width of Map + 6) * (Y_Movement_of_"Connection Strip" + 3)

                East: C6E5 + (Width of Map + 6) * (Y_Movement_of_"Connection Strip" + 4)

                ===============================================================================
                #6 : Map "Bigness"
                ===============================================================================

                North/South Connection = Connected Maps Width
                East/West Connection = Connected Maps Height

                ===============================================================================
                #7 : Map Width
                ===============================================================================

                The width of the connected map.

                ===============================================================================
                #8 : Y alignment
                ===============================================================================

                Relative Y-position of player after entering connected map.

                ____________________
                Connection |
                Direction | Formula
                ___________|_______
                North: (Height_of_connected_map * 2) - 1
                South: 0
                West/East: (Y_movement_of_connection_strip_in_blocks * -2)

                ===============================================================================
                #9 : X alignment
                ===============================================================================

                Relative X-Position of player after entering connected map.

                ____________________
                Connection |
                Direction | Formula
                ___________|_______
                North/South: (X_movement_of_connection_strip_in_blocks * -2)
                West: (Width_of_connected_map * 2) - 1
                East: 0

                ===============================================================================
                #10-#11 : Window
                ===============================================================================

                Position of the upper left block after entering the Map.

                ____________________
                Connection |
                Direction | Formula
                ___________|_______
                Above: C6E9h + Height_of_connected_map * (Width_of_connected_map + 6)
                South/East: C6EFh + Width_of_connected_map
                West: C6EEh + 2 * Width_of_connected_map
                ...............................................................................


                ===============================================================================

                Object Data: General Structure

                ===============================================================================

                Object Data
                ===========
                [Maps Border Tile]
                [Number of Warps][Warp Data]
                [Number of Signs][Sign Data]
                [Number of People/Trainers/Items]
                [People Data]
                [Trainer Data]
                [Item Data]
                [Warp-To Data]

                Warps:
                ------
                [Y position][X position][Warp-To Point][Warp-To Map]

                Signposts:
                ----------
                [Y position][X position][Text String Number]

                Normal People:
                --------------
                [Picture Number][Y position + 4][X position + 4]
                [Movement 1][Movement 2][Text String Number]

                Trainers:
                ---------
                [Picture Number][Y position + 4][X position + 4]
                [Movement 1][Movement 2][Text String Number]
                [Trainer Type][Pokemon Set]

                Items:
                ---------------------
                [Picture Number][Y position + 4][X position + 4]
                [Movement 1][Movement 2][Text String Number]
                [Item Number]

                Warp-To Points
                --------------
                [*2 Bytes*: Event Displacement][Y position][X position]

                In order to distinguish People, Trainers and Items, you must use the Text String Number:

                text_str_n & (1 << 6) -> Trainer (2 more byte to read, the trainer type and the pokémon set)
                text_str_n & (1 << 7) -> Item (just one more byte to read, the item id)

                Picture Numbers
                ~~~~~~~~~~~~~~~

                In order to get the ROM address of the tile relative to an entity
                (people/trainers/items), here is the formula to focus on the entity information:

                5 * 0x4000 + (0x7b27 + 4 * (picture_id - 1)) % 0x4000

                Then the entity information is stored according to this:

                [*2 Bytes*: Tile address][Unknown][Bank id]

                So then, address = bank_id * 0x4000 + tile_addr % 0x4000

                Event Displacement Formula:
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                C6E3 + ((Map width + 8) * (rows above + 1)) + (X movement + 4)

                ###############################################################################
                Thanks for the document.

                Also, I have another question. How do I view level G/S/C level scripts in PKSV? Also how do I find out the offsets?
                __________________
                  #14758    
                Old May 29th, 2010 (11:09 AM).
                Darksun's Avatar
                Darksun Darksun is offline
                triple rainbow, yo
                   
                  Join Date: Jul 2008
                  Location: 22nd floor of the Carrot Tower in Setagaya, Tokyo, Japan
                  Gender: Male
                  Nature: Relaxed
                  Posts: 123
                  Why is my menu like this? :'(

                  Spoiler:
                  __________________

                    #14759    
                  Old May 29th, 2010 (11:27 AM).
                  Chaos Rush's Avatar
                  Chaos Rush Chaos Rush is offline
                     
                    Join Date: May 2007
                    Gender: Male
                    Posts: 1,303
                    Quote:
                    Originally Posted by Darksun View Post
                    Why is my menu like this? :'(

                    Spoiler:
                    AdvanceMap probably repointed something to where the data of that blue background box-thingy graphic is located. Since it's a solid color, AdvanceMap probably thought it was free space and repointed data there. What I would do is just find where the graphics are located, then fix it manually with a hex editor.
                    __________________
                      #14760    
                    Old May 29th, 2010 (12:42 PM).
                    Darksun's Avatar
                    Darksun Darksun is offline
                    triple rainbow, yo
                       
                      Join Date: Jul 2008
                      Location: 22nd floor of the Carrot Tower in Setagaya, Tokyo, Japan
                      Gender: Male
                      Nature: Relaxed
                      Posts: 123
                      Quote:
                      Originally Posted by Chaos Rush View Post
                      AdvanceMap probably repointed something to where the data of that blue background box-thingy graphic is located. Since it's a solid color, AdvanceMap probably thought it was free space and repointed data there. What I would do is just find where the graphics are located, then fix it manually with a hex editor.
                      Thanks! And damn. I've tried searching the forum for a while now, but I can't seem to find out where the graphics are located, and how to fix it with a hex editor.
                      __________________

                        #14761    
                      Old May 29th, 2010 (1:34 PM).
                      Loaf's Avatar
                      Loaf Loaf is offline
                      Just loafing around...
                         
                        Join Date: May 2010
                        Location: New Zealand
                        Gender: Male
                        Nature: Calm
                        Posts: 13
                        Hello,
                        I have two questions. The first is, how can I delete a map in the ROM? I tried a method in Advance Map by editing the bank and setting it to -1, but its not working!

                        Also, everyone appears to distribute their hack as an IPS. Considering all tools are for ROM, how do you create these? Is there a conversion tool or what?
                          #14762    
                        Old May 29th, 2010 (1:42 PM).
                        SonicBlazePlatinum's Avatar
                        SonicBlazePlatinum SonicBlazePlatinum is offline
                        /)^3^(\
                        • Silver Tier
                         
                        Join Date: Oct 2007
                        Location: Cloudsdale, Equestria
                        Age: 22
                        Gender: Male
                        Nature: Relaxed
                        Posts: 1,041
                        How do I use XSE with AdvanceMap? I edit text on a sign in Littleroot and it still says what it originally said.
                        __________________
                        Also known as SentryBronyPlatinum or Shadowbolt Pegasus.
                          #14763    
                        Old May 29th, 2010 (1:55 PM). Edited May 29th, 2010 by Loaf.
                        Loaf's Avatar
                        Loaf Loaf is offline
                        Just loafing around...
                           
                          Join Date: May 2010
                          Location: New Zealand
                          Gender: Male
                          Nature: Calm
                          Posts: 13
                          Try here, it helped me:

                          pokecommunity.com/showthread.php?t=128125

                          Oh, another question. Is there an easier way to test out changes you make to the game? I don't want to have to keep going through the Professor Oak intro. If I save, change the game, then load, certain things don't appear (like events) which is to be expected.
                            #14764    
                          Old May 29th, 2010 (3:19 PM).
                          Buizark's Avatar
                          Buizark Buizark is offline
                          Always looking for an OU match
                             
                            Join Date: Dec 2009
                            Gender: Male
                            Nature: Calm
                            Posts: 72
                            Leave and re-enter the map.The new events will load.
                            __________________
                              #14765    
                            Old May 29th, 2010 (3:21 PM).
                            SonicBlazePlatinum's Avatar
                            SonicBlazePlatinum SonicBlazePlatinum is offline
                            /)^3^(\
                            • Silver Tier
                             
                            Join Date: Oct 2007
                            Location: Cloudsdale, Equestria
                            Age: 22
                            Gender: Male
                            Nature: Relaxed
                            Posts: 1,041
                            The thing is after I edit the text and save it, then look at it again it's unedited. What do I do?
                            __________________
                            Also known as SentryBronyPlatinum or Shadowbolt Pegasus.
                              #14766    
                            Old May 29th, 2010 (3:27 PM).
                            Chaos Rush's Avatar
                            Chaos Rush Chaos Rush is offline
                               
                              Join Date: May 2007
                              Gender: Male
                              Posts: 1,303
                              Quote:
                              Originally Posted by Darksun View Post
                              Thanks! And damn. I've tried searching the forum for a while now, but I can't seem to find out where the graphics are located, and how to fix it with a hex editor.
                              I don't know if the graphics are compressed or uncompressed, but if they're uncompressed, you could use the same method as what this tutorial does.
                              __________________
                                #14767    
                              Old May 29th, 2010 (3:46 PM).
                              Shiny Quagsire's Avatar
                              Shiny Quagsire Shiny Quagsire is offline
                              I'm Still Alive, Elsewhere
                                 
                                Join Date: May 2009
                                Location: Hoenn Safari Zone
                                Age: 19
                                Gender: Male
                                Nature: Jolly
                                Posts: 700
                                Quote:
                                Originally Posted by SonicBlazePlatinum View Post
                                How do I use XSE with AdvanceMap? I edit text on a sign in Littleroot and it still says what it originally said.
                                Go to settings>Choose script editor. Click Yes on the dialog box that pops up. Now when you double click on a person or sign, XSE should pop up and show the script.
                                __________________



                                  #14768    
                                Old May 29th, 2010 (4:01 PM).
                                altariaking's Avatar
                                altariaking altariaking is offline
                                Needs NO VMs...
                                   
                                  Join Date: Dec 2009
                                  Location: Scotland, Lesmahagow
                                  Age: 43
                                  Gender: Male
                                  Nature: Naive
                                  Posts: 1,098
                                  does anyone know the offset that tells the game your bag is too full? i'm trying to give the bag unlimited space.
                                  it's for firered by the way.
                                  __________________
                                  http://www.pokecommunity.com/member.php?u=253113
                                    #14769    
                                  Old May 29th, 2010 (4:46 PM).
                                  mattattack's Avatar
                                  mattattack mattattack is offline
                                  Huh, Son?
                                     
                                    Join Date: Apr 2008
                                    Location: Why would you care?
                                    Nature: Jolly
                                    Posts: 184
                                    Are there any good ASM tuts out there? I want to recreate a rom not 'edit' it. (Also, I'm doing this because I wish to hack the second gen games.)
                                    __________________
                                    Sometimes...it's hell before you get to heaven...

                                    My Trainer Card


                                    Help me raise my pokemon!

                                    Cre....Creselia!!?!?!?!?!?!
                                      #14770    
                                    Old May 29th, 2010 (5:03 PM).
                                    Loaf's Avatar
                                    Loaf Loaf is offline
                                    Just loafing around...
                                       
                                      Join Date: May 2010
                                      Location: New Zealand
                                      Gender: Male
                                      Nature: Calm
                                      Posts: 13
                                      @the guy who can't get XSE to work

                                      The way I get it working is to go Open > pokemon.rom
                                      Add the script there (you'll need to know how to script, follow the link I gave) then compile it. Go back into Advance Map, and add the byte number into the script offset textbox in each event (for example: $8005BE).
                                      Its all there in that tutorial.
                                        #14771    
                                      Old May 29th, 2010 (5:48 PM).
                                      Chaos Rush's Avatar
                                      Chaos Rush Chaos Rush is offline
                                         
                                        Join Date: May 2007
                                        Gender: Male
                                        Posts: 1,303
                                        How do you add level scripts in G/S/C?
                                        __________________
                                          #14772    
                                        Old May 29th, 2010 (6:16 PM).
                                        Binary's Avatar
                                        Binary Binary is offline
                                        え?
                                           
                                          Join Date: Aug 2007
                                          Age: 23
                                          Posts: 3,994
                                          Quote:
                                          Originally Posted by mattattack View Post
                                          Are there any good ASM tuts out there? I want to recreate a rom not 'edit' it. (Also, I'm doing this because I wish to hack the second gen games.)
                                          Google is your friend. You can also view Hackmew's tutorial if you're starting out.
                                          __________________
                                            #14773    
                                          Old May 29th, 2010 (6:25 PM).
                                          melosfox melosfox is offline
                                             
                                            Join Date: May 2010
                                            Gender: Male
                                            Posts: 23
                                            What are possible reasons for white screen EXCLUDING having the Wrong ROM version, or Overwriting of important code? I've created a standard battle encounter in Emerald, but it causes a white screen upon compiling.
                                              #14774    
                                            Old May 29th, 2010 (6:48 PM).
                                            sonlen sonlen is offline
                                            Hacking Noob
                                               
                                              Join Date: Nov 2009
                                              Gender: Male
                                              Posts: 66
                                              Ok, I have been looking around the internet all day, and apparently I have missed something so obvious or I am making things harder then they should be, I want to make a title screen for a hack im making using a ruby rom, and I can't find a good tutorial at all, does anyone know of a great detailed tutorial. All help is appreciated.
                                              __________________
                                              Currently working on: Pokemon Moonlight
                                                #14775    
                                              Old May 29th, 2010 (7:39 PM).
                                              colcolstyles's Avatar
                                              colcolstyles colcolstyles is offline
                                              Yours truly
                                              • Crystal Tier
                                               
                                              Join Date: May 2008
                                              Location: The Bay Area
                                              Gender: Male
                                              Nature: Lonely
                                              Posts: 1,590
                                              Quote:
                                              Originally Posted by melosfox View Post
                                              What are possible reasons for white screen EXCLUDING having the Wrong ROM version, or Overwriting of important code? I've created a standard battle encounter in Emerald, but it causes a white screen upon compiling.
                                              If you have your emulator set to the incorrect Save Type, then you'll experience problems. Go to "Options > Emulator > Save Type" and select "Flash 128k".
                                              __________________

                                              Brother of Vrai
                                              Closed Thread

                                              Quick Reply

                                              Join the conversation!

                                              Create an account to post a reply in this thread, participate in other discussions, and more!

                                              Create a PokéCommunity Account

                                              Sponsored Links
                                              Thread Tools

                                              Posting Rules
                                              You may not post new threads
                                              You may not post replies
                                              You may not post attachments
                                              You may not edit your posts

                                              BB code is On
                                              Smilies are On
                                              [IMG] code is On
                                              HTML code is Off

                                              Forum Jump


                                              All times are GMT -8. The time now is 8:07 AM.