The PokéCommunity Forums Fan Games ROM Hacking
[ARCHIVE] Simple Questions (SEARCH BEFORE ASKING A QUESTION)

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

Closed Thread
 
Thread Tools
  #14701    
Old May 21st, 2010 (4:33 PM).
PokeMan22's Avatar
PokeMan22 PokeMan22 is offline
     
    Join Date: May 2010
    Gender: Male
    Posts: 6
    Send a message via Windows Live Messenger to PokeMan22
    I'm using advance map and i wont to add in extra towns and extra buildings. It doesn't matter if the extra towns dont go on the map, but i want to know how to add in warp pads so i can get it so i can get in the building and how to put in extra towns. Please reply asap
    __________________
    AceTrainer

    Relevant Advertising!

      #14702    
    Old May 22nd, 2010 (6:56 AM).
    PeregrineFig's Avatar
    PeregrineFig PeregrineFig is offline
    Starting Pokémon Obsidian
       
      Join Date: Feb 2010
      Location: Michigan, USA
      Age: 22
      Gender: Male
      Nature: Hardy
      Posts: 202
      I want to use all 25 empty Pokemon slots to add in new Pokemon in my hack, but I won't settle for anything less than the whole level of polish, meaning I want them all to have their proper cries. What I've found is that all 25 are linked to the same pointer, so if I change the cry of one of them, all 25 use it. How can I change this so they each have their own cry pointer?
      __________________
      Current Projects:
      POKéMON AQUA SAPPHIRE
      POKéMON OBSIDIAN

        #14703    
      Old May 23rd, 2010 (6:57 AM).
      Metroid Die Metroid Die is offline
         
        Join Date: Mar 2009
        Posts: 54
        Hey guys, I have a question about map warp problems.

        I have a command in my script that send the player to Oak's lab. It worked perfectly, and everything was fine, till I saved it and closed Advance Map. I opened it back up, and Oak's lab was glitched. It had the error message that the bytes are unreadable. Some of the events are off the map. After I delete each event, the error no longer occurs, but of course, I want events in his lab. I edited the lab to change a few tiles, I didn't resize. Can anyone help me with this?

        I'm using Advance Map 1.91 if that makes any difference.

        Thanks
          #14704    
        Old May 23rd, 2010 (7:19 AM).
        Tropical Sunlight's Avatar
        Tropical Sunlight Tropical Sunlight is offline
        The Faltine
           
          Join Date: Mar 2008
          Location: Slovenia
          Age: 21
          Gender: Male
          Posts: 3,572
          Send a message via Windows Live Messenger to Tropical Sunlight
          Quote:
          Originally Posted by Metroid Die View Post
          Hey guys, I have a question about map warp problems.

          I have a command in my script that send the player to Oak's lab. It worked perfectly, and everything was fine, till I saved it and closed Advance Map. I opened it back up, and Oak's lab was glitched. It had the error message that the bytes are unreadable. Some of the events are off the map. After I delete each event, the error no longer occurs, but of course, I want events in his lab. I edited the lab to change a few tiles, I didn't resize. Can anyone help me with this?

          I'm using Advance Map 1.91 if that makes any difference.

          Thanks
          Try putting all the events back in and see if the problem persists.
          __________________
            #14705    
          Old May 23rd, 2010 (7:21 AM).
          Metroid Die Metroid Die is offline
             
            Join Date: Mar 2009
            Posts: 54
            Quote:
            Originally Posted by Tropical Sunlight View Post
            Try putting all the events back in and see if the problem persists.
            Tried that twice. Also of the events are inaccessible because they're off the map, so I have to delete them and create new ones.
              #14706    
            Old May 23rd, 2010 (8:00 AM).
            lbirrueta's Avatar
            lbirrueta lbirrueta is offline
            HAXXING'
               
              Join Date: Aug 2009
              Location: san jo'
              Gender: Male
              Nature: Relaxed
              Posts: 31
              I have 2 questions: How can i make it so that place Mt. Ember is on the Kanto mainland instead of having to go to One Island??? How do i fiddle around with the AM_world-map-editor because i tried to put it on Route 1 but it still goes to kindle road(in-game world map)??? please help, ASAP :[
                #14707    
              Old May 23rd, 2010 (8:02 AM). Edited May 23rd, 2010 by Eatmoretoast47.
              Eatmoretoast47's Avatar
              Eatmoretoast47 Eatmoretoast47 is offline
              Person hacking 2 games at once
                 
                Join Date: May 2010
                Gender: Male
                Nature: Relaxed
                Posts: 1
                I'm trying to rename Pallet Town in FireRed, to "Thunder Town" but when I tried it Advance Map gave me a blank error message. What do I do?

                EDIT: I named it "q" just to see if renaming it worked at all, it did, but now I can't rename it to anything longer than one letter.

                EDIT:Nevermind. I figured it out. It was just some glitch thing that happened in Advance Map. Resetting it fixed the problem.
                __________________
                Spoiler:
                Snape kills Dumbledore
                  #14708    
                Old May 23rd, 2010 (10:51 AM).
                phosphate5's Avatar
                phosphate5 phosphate5 is offline
                Random little kid
                   
                  Join Date: Apr 2009
                  Location: Somewhere in the world
                  Age: 21
                  Nature: Careful
                  Posts: 117
                  Is there any way to reverse the effects of running a deep scan in unlz?

                  Also, what are the offsets for the backsprites of the heroes, steven, and Wally in emerald? Knowing their pallete offsets would help too, along with Prof. Birch's palette offset at the beginning of the game.
                    #14709    
                  Old May 23rd, 2010 (6:02 PM).
                  Neox-Storm Neox-Storm is offline
                     
                    Join Date: May 2008
                    Gender:
                    Posts: 6
                    I was trying to insert some water tiles in pokemon firered.

                    Every time I tried to insert them, it would come out almost completely monotone.
                    I triple check the pallete to make sure it was right, and it was.

                    I included a picture so you get the just of what I'm saying. Please help me out.
                    Attached Images
                    File Type: png Meh.png‎ (15.8 KB, 15 views) (Save to Dropbox)
                      #14710    
                    Old May 23rd, 2010 (7:31 PM).
                    Jerme's Avatar
                    Jerme Jerme is offline
                    stupid
                       
                      Join Date: Jan 2010
                      Posts: 525
                      since my question got buried and cant find the answer, i will have to ask again

                      i need help with pokemon platinum

                      -when i use PDEDS to make wild pokemon hold items on encounter, it never has them when i fill both slots. does it matter if both slots are full, or does RNG come into play?

                      -how can i change the main player sprite into someone else?

                      -how do i change trainer pokemon?
                        #14711    
                      Old May 24th, 2010 (2:37 AM).
                      Ninja Caterpie's Avatar
                      Ninja Caterpie Ninja Caterpie is offline
                      Sitting by the back window
                         
                        Join Date: Mar 2008
                        Location: Best City OCE
                        Age: 21
                        Gender: Male
                        Nature: Bold
                        Posts: 5,945
                        Apart from a god-awful waste of space, is there any other bad side-effect of inserting maps and scripts into a fresh ROM?
                        __________________
                        Brony represent.
                          #14712    
                        Old May 24th, 2010 (2:42 AM).
                        Darthatron's Avatar
                        Darthatron Darthatron is offline
                        巨大なトロール。
                        • Silver Tier
                         
                        Join Date: Jan 2006
                        Location: Melbourne, Australia
                        Age: 25
                        Gender: Male
                        Nature: Modest
                        Posts: 1,152
                        Quote:
                        Originally Posted by Ninja Caterpie View Post
                        Apart from a god-awful waste of space, is there any other bad side-effect of inserting maps and scripts into a fresh ROM?
                        Nope. Unless, for some reason the program you are using doesn't repoint something correctly (which is highly unlikely).
                        __________________
                        あなた は しきしゃ です
                        わたし は ばか です
                          #14713    
                        Old May 24th, 2010 (6:26 AM).
                        metapod23's Avatar
                        metapod23 metapod23 is offline
                        Hardened Trainer
                           
                          Join Date: Mar 2009
                          Gender: Male
                          Nature: Timid
                          Posts: 673
                          Quote:
                          Originally Posted by Neox-Storm View Post
                          I was trying to insert some water tiles in pokemon firered.

                          Every time I tried to insert them, it would come out almost completely monotone.
                          I triple check the pallete to make sure it was right, and it was.

                          I included a picture so you get the just of what I'm saying. Please help me out.
                          You probably aren't using the correct pallet. When the pallet colors of the tiles you insert don't match the pallet colors of any of the pallet sets for that tileset in the game, it looks like what you posted. So try changing the colors of the tiles you're inserting to exactly match the colors in the pallet you're using in the game, or change the colors of the game's pallet to match the tiles you're inserting ...
                          __________________
                            #14714    
                          Old May 24th, 2010 (7:51 AM).
                          Neox-Storm Neox-Storm is offline
                             
                            Join Date: May 2008
                            Gender:
                            Posts: 6
                            Like I said, I triple checked to make sure the pallete matched.

                            I changed Pallete 6, the one used for most of the water tiles in the game. When it didn't
                            work, I tried using the otherwise unused pallete 7 which still didn't work.
                            Attached Images
                            File Type: png Meh.png‎ (15.8 KB, 8 views) (Save to Dropbox)
                              #14715    
                            Old May 24th, 2010 (11:20 AM).
                            rayquazamaster776 rayquazamaster776 is offline
                               
                              Join Date: Jun 2009
                              Gender: Male
                              Posts: 2
                              I'm a new hacker trying to edit Emerald, and I've got a few questions:

                              1. What is the easiest way to edit IN-BATTLE trainer sprites?
                              2. When adding a trainer with AdvanceMap, what do you put to tell it what trainer data to use? (I added trainers with A-Trainer, if it matters)?
                              3. How do you add trainer dialogue with AdvanceText?
                                #14716    
                              Old May 24th, 2010 (11:54 AM). Edited May 24th, 2010 by Sawakita.
                              Sawakita's Avatar
                              Sawakita Sawakita is offline
                              Not Invented Here
                                 
                                Join Date: May 2010
                                Gender: Male
                                Posts: 180
                                Hi, I want to learn ASM for gameboy (should be similar to z80). Which way should I start? Can you suggest any guide or manual or tutorial for beginners? And do you think i should start from language C#/C++?

                                EDIT:
                                I also have another question:
                                do you know the way to turn an image (.gif or .jpg or .png) like this
                                Poke001(Rosso-Blu-Blue(J)).gif
                                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 <stdio.h>
                                #include <stdlib.h>
                                #include <string.h>
                                
                                ///// 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<numtiles;i++){
                                  BYTE *d=bits+(yy<<3)*stride+(xx<<3);
                                  GbSetTile(buffer,d,stride,0);
                                  buffer+=16;
                                  if(orient){
                                   xx++;if(xx==cxTile){xx=0;yy++;}
                                  } else {
                                   yy++;if(yy==cyTile){yy=0;xx++;}
                                  }
                                 }
                                 bfh.bfType='B'|('M'<<8);
                                 bfh.bfSize=sizeof(BITMAPFILEHEADER)+neededsz;
                                 bfh.bfReserved1=0;
                                 bfh.bfReserved2=0;
                                 bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+bminfo;
                                 bfh.bfType=SWAPWORD(bfh.bfType);
                                 bfh.bfSize=SWAPDWORD(bfh.bfSize);
                                 bfh.bfOffBits=SWAPDWORD(bfh.bfOffBits);
                                 h=fopen(filename,"wb");
                                 if(!h)return;
                                 fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,h);
                                 fwrite(ret,neededsz,1,h);
                                 fclose(h);
                                 free(ret);
                                }
                                
                                /////  Helper function
                                
                                int xgetc(FILE *f, DWORD o){
                                 DWORD sav=ftell(f);
                                 int c;
                                 fseek(f,o,SEEK_SET);
                                 c=getc(f);
                                 fseek(f,sav,SEEK_SET);
                                 return c;
                                }
                                
                                /////  Graphics compression
                                
                                #define RLC(a) \
                                  ( (((a)&0x7F)<<1)|(((a)&0x80)>>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<len;i++){
                                  if(ord[i]==n)return i;
                                 }
                                 return -1;
                                }
                                
                                void RedBlueGraphics(FILE *f){
                                 int i;
                                 BYTE rbpkdx[28];
                                 BYTE buffer[1024];
                                 BYTE bmp[256];
                                 BYTE pb[256];
                                 WORD pal[4];
                                 BYTE palno;
                                 fseek(f,0x41024,SEEK_SET);
                                 fread(pb,256,1,f); // read internal order
                                 for(i=1;i<=151;i++){
                                  DWORD wBack,wFront;
                                  WORD bSize;
                                  DWORD o1=0x24000;
                                  BOOL have=TRUE;
                                  DWORD bank;
                                  int j=NumberToIndex(pb,0xBE,i)+1;
                                  if(i==151){
                                   fseek(f,0x425b,SEEK_SET);
                                  } else {
                                   DWORD o=0x383de;
                                   fseek(f,o+((i-1)*28),SEEK_SET);
                                  }
                                  if(j==0x15){
                                   bank=1;
                                  } else if(j==0xB6){
                                   bank=0x0B;
                                  } else if(j<0x1F){
                                   bank=0x09;
                                  } else if(j<0x4A){
                                   bank=0x0A;
                                  } else if(j<0x74){
                                   bank=0x0B;
                                  } else if(j<0x99){
                                   bank=0x0C;
                                  } else {
                                   bank=0x0D;
                                  }
                                  o1=(bank-1)<<14;
                                  fread(rbpkdx,28,1,f);
                                  bSize=rbpkdx[10]&0x0F;
                                  wFront=rbpkdx[11]|(rbpkdx[12]<<8);
                                  wBack=rbpkdx[13]|(rbpkdx[14]<<8);
                                  memset(buffer,0,1024);
                                  // Get front graphic
                                  have=GetGraphics(f,o1+wFront,buffer,1024);
                                  if(!have)continue;
                                  sprintf(bmp,"%03d.bmp",i);
                                  SaveGbBitmapTiles(bmp,buffer,bSize*bSize*16,bSize,bSize,FALSE);
                                  // Get back graphic
                                  have=GetGraphics(f,o1+wBack,buffer,1024);
                                  sprintf(bmp,"%03db.bmp",i);
                                  SaveGbBitmapTiles(bmp,buffer,16*16,4,4,FALSE);
                                 }
                                }
                                
                                int main(int argc,char **argv){
                                 FILE *f=fopen("red.gb","rb");
                                 if(!f){
                                  printf("Can't open Pokemon Red English ROM.  Please name the ROM red.gb and try again.\r\n");
                                  return 1;
                                 }
                                 RedBlueGraphics(f);
                                 fclose(f);
                                 return 0;
                                }

                                but i need to know the reverse process (i.e. compressing).
                                __________________



                                | 1st Gen Hacking: Useful Links | A good example of REAL ROM Hacking |
                                  #14717    
                                Old May 24th, 2010 (12:46 PM).
                                Neox-Storm Neox-Storm is offline
                                   
                                  Join Date: May 2008
                                  Gender:
                                  Posts: 6
                                  Quote:
                                  Originally Posted by Neox-Storm View Post
                                  I was trying to insert some water tiles in pokemon firered.

                                  Every time I tried to insert them, it would come out almost completely monotone.
                                  I triple check the pallete to make sure it was right, and it was.

                                  I included a picture so you get the just of what I'm saying. Please help me out.
                                  I'm just reposting it for the new page.
                                  Attached Images
                                  File Type: png Meh.png‎ (15.8 KB, 12 views) (Save to Dropbox)
                                    #14718    
                                  Old May 24th, 2010 (2:02 PM).
                                  Incineroar's Avatar
                                  Incineroar Incineroar is offline
                                  the spirit of the fighter
                                  • Moderator
                                  • Platinum Tier
                                  • Developer
                                   
                                  Join Date: May 2009
                                  Location: Iki Town
                                  Age: 22
                                  Gender: Male
                                  Nature: Brave
                                  Posts: 13,339
                                  Quote:
                                  Originally Posted by Team Fail View Post
                                  I'm running Sappy 2005 and when I try to assemble my .s file, I get this:

                                  Run Time Error '53':
                                  File not found

                                  ________
                                  | OK |
                                  -----------

                                  Then....

                                  Sappy 2005 has quit working...
                                  Windows is looking for a solution...



                                  What can I do?
                                  Moving this to the new page. This is confusing, but I think it has to do with the .ocx files I installed.

                                  Quote:
                                  Originally Posted by rayquazamaster776 View Post
                                  I'm a new hacker trying to edit Emerald, and I've got a few questions:

                                  1. What is the easiest way to edit IN-BATTLE trainer sprites?
                                  2. When adding a trainer with AdvanceMap, what do you put to tell it what trainer data to use? (I added trainers with A-Trainer, if it matters)?
                                  3. How do you add trainer dialogue with AdvanceText?
                                  1. Extract with UnLzGBA, I think, edit, index, and reinsert.
                                  2. There should be an offset that you put in for the trainer data.
                                  3. No idea, I've never used A-text.
                                  __________________
                                    #14719    
                                  Old May 24th, 2010 (3:09 PM).
                                  Metroid Die Metroid Die is offline
                                     
                                    Join Date: Mar 2009
                                    Posts: 54
                                    Hey, a quick question. Is it possible to get the Pokemon from Pokemon Pearl, Diamond and Platinum onto a Fire Red ROM hack? Is it also possible to expand the national Pokedex to include them?

                                    If so, help would be great.

                                    Thanks
                                      #14720    
                                    Old May 24th, 2010 (3:45 PM).
                                    PeregrineFig's Avatar
                                    PeregrineFig PeregrineFig is offline
                                    Starting Pokémon Obsidian
                                       
                                      Join Date: Feb 2010
                                      Location: Michigan, USA
                                      Age: 22
                                      Gender: Male
                                      Nature: Hardy
                                      Posts: 202
                                      Quote:
                                      Originally Posted by Metroid Die View Post
                                      Hey, a quick question. Is it possible to get the Pokemon from Pokemon Pearl, Diamond and Platinum onto a Fire Red ROM hack? Is it also possible to expand the national Pokedex to include them?

                                      If so, help would be great.

                                      Thanks
                                      You can import information, sprites, and icons into the 25 empty slots (it's really easy with a combination of YAPE and Wichu's advanced series), and you could give one of them its proper cry with the wav file and a repoint. (I'm hoping to figure out how to modify the pointers so I can give all 25 extra Pokemon their own cries) As for the second question, there's no way to put those Pokemon in the Pokedex. If you're extremely worried about polish, you could always have unobtainable extra Pokemon, that you can only see but never obtain.
                                      __________________
                                      Current Projects:
                                      POKéMON AQUA SAPPHIRE
                                      POKéMON OBSIDIAN

                                        #14721    
                                      Old May 24th, 2010 (3:56 PM).
                                      altariaking's Avatar
                                      altariaking altariaking is offline
                                      Needs NO VMs...
                                         
                                        Join Date: Dec 2009
                                        Location: Scotland, Lesmahagow
                                        Age: 42
                                        Gender: Male
                                        Nature: Naive
                                        Posts: 1,098
                                        Send a message via Windows Live Messenger to altariaking
                                        ^yes, there is.^
                                        gamer2020 did it in next generation.
                                        __________________
                                        http://www.pokecommunity.com/member.php?u=253113
                                          #14722    
                                        Old May 24th, 2010 (4:08 PM).
                                        PeregrineFig's Avatar
                                        PeregrineFig PeregrineFig is offline
                                        Starting Pokémon Obsidian
                                           
                                          Join Date: Feb 2010
                                          Location: Michigan, USA
                                          Age: 22
                                          Gender: Male
                                          Nature: Hardy
                                          Posts: 202
                                          Quote:
                                          Originally Posted by altariaking View Post
                                          ^yes, there is.^
                                          gamer2020 did it in next generation.
                                          But was he actually using the 25 empty slots, or just replacing some of the other 386 Pokemon? If it's the former, I'm really curious about how, as that would be great to use.
                                          __________________
                                          Current Projects:
                                          POKéMON AQUA SAPPHIRE
                                          POKéMON OBSIDIAN

                                            #14723    
                                          Old May 24th, 2010 (4:10 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,584
                                          Quote:
                                          Originally Posted by Ninja Caterpie View Post
                                          Apart from a god-awful waste of space, is there any other bad side-effect of inserting maps and scripts into a fresh ROM?
                                          Well, if you insert the scripts/maps at an address where there is data that the game normally uses then obviously there could be some side effects. Now usually this isn't a problem with scripts because you have to declare at which offset you want the script to be compiled to. However, in the case of maps and their collective data, AdvanceMap will automatically choose its own addresses without telling you where your data is being put. Unless, however, you tell it not to, which will make it prompt you every time data needs to be repointed or inserted.
                                          __________________

                                          Brother of Vrai
                                            #14724    
                                          Old May 24th, 2010 (10:49 PM).
                                          altariaking's Avatar
                                          altariaking altariaking is offline
                                          Needs NO VMs...
                                             
                                            Join Date: Dec 2009
                                            Location: Scotland, Lesmahagow
                                            Age: 42
                                            Gender: Male
                                            Nature: Naive
                                            Posts: 1,098
                                            Send a message via Windows Live Messenger to altariaking
                                            Quote:
                                            Originally Posted by PeregrineFig View Post
                                            But was he actually using the 25 empty slots, or just replacing some of the other 386 Pokemon? If it's the former, I'm really curious about how, as that would be great to use.
                                            all 493, but i'm pretty sure it requires asm.
                                            __________________
                                            http://www.pokecommunity.com/member.php?u=253113
                                              #14725    
                                            Old May 24th, 2010 (11:26 PM). Edited May 24th, 2010 by giradialkia.
                                            giradialkia's Avatar
                                            giradialkia giradialkia is offline
                                            • Crystal Tier
                                             
                                            Join Date: Apr 2009
                                            Location: Ireland
                                            Age: 23
                                            Gender: Male
                                            Nature: Timid
                                            Posts: 1,561
                                            Quote:
                                            Originally Posted by Chikane View Post
                                            Never mind question 2.
                                            But I really do wanna know the first one however.
                                            1. Of course you can- but, you can't change the first 5 palettes, because they're used in every single map in the game (it's the first 6 in RSE, Pals 0-5, but I'm assuming you're hacking FireRed, which I'm not totally familiar with). However, you can edit one of the palettes from around Pal 6 onwards, to whatever you want.
                                            __________________

                                            I'm working on an album of Pokémon-inspired music. Check out the Soundcloud link if you're interested!


                                            This is my Soundcloud | | This is my bandcamp
                                            Closed Thread
                                            Quick Reply

                                            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 11:43 AM.