The PokéCommunity Forums  

Go Back   The PokéCommunity Forums > ROM Hacking > ROM Hacking Hub
Sign Up Rules/FAQ Live Battle Blogs Mark Forums Read

Notices

ROM Hacking Hub General discussions about ROM Hacking and Emulation. Not sure where to start? This is the place for you.
Posting links to ROMs is illegal and is not tolerated anywhere on the forum.
New threads in this forum are to be approved by a moderator before they are displayed.

Closed Thread
Click here to go to the first staff post in this thread.  
Thread Tools
  #14701    
Old May 21st, 2010 (04:33 PM).
PokeMan22's Avatar
PokeMan22
Beginning Trainer
 
Join Date: May 2010
Gender: Male
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
  #14702    
Old May 22nd, 2010 (06:56 AM).
PeregrineFig's Avatar
PeregrineFig
Starting Pokémon Obsidian
 
Join Date: Feb 2010
Location: Michigan, USA
Age: 20
Gender: Male
Nature: Hardy
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 (06:57 AM).
Metroid Die
Beginning Trainer
 
Join Date: Mar 2009
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 (07:19 AM).
Tropical Sunlight's Avatar
Tropical Sunlight
The Faltine
 
Join Date: Mar 2008
Location: Slovenia
Age: 18
Gender: Male
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 (07:21 AM).
Metroid Die
Beginning Trainer
 
Join Date: Mar 2009
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 (08:00 AM).
lbirrueta's Avatar
lbirrueta
HAXXING'
 
Join Date: Aug 2009
Location: san jo'
Gender: Male
Nature: Relaxed
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 (08:02 AM). Edited May 23rd, 2010 by Eatmoretoast47.
Eatmoretoast47's Avatar
Eatmoretoast47
Person hacking 2 games at once
 
Join Date: May 2010
Gender: Male
Nature: Relaxed
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
Random little kid
 
Join Date: Apr 2009
Location: Somewhere in the world
Age: 18
Nature: Careful
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 (06:02 PM).
Neox-Storm
Beginning Trainer
 
Join Date: May 2008
Gender:
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 (07:31 PM).
Jerme's Avatar
Jerme
stupid
 
Join Date: Jan 2010
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 (02:37 AM).
Ninja Caterpie's Avatar
Ninja Caterpie
Sitting by the back window
 
Join Date: Mar 2008
Location: Best City OCE
Age: 18
Gender: Male
Nature: Bold
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 (02:42 AM).
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
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 (06:26 AM).
metapod23's Avatar
metapod23
Hardened Trainer
 
Join Date: Mar 2009
Gender: Male
Nature: Timid
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 (07:51 AM).
Neox-Storm
Beginning Trainer
 
Join Date: May 2008
Gender:
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
Beginning Trainer
 
Join Date: Jun 2009
Gender: Male
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
Not Invented Here
 
Join Date: May 2010
Gender: Male
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
Beginning Trainer
 
Join Date: May 2008
Gender:
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 (02:02 PM).
Team Fail's Avatar
Team Fail
See that, Aster?
Community Supporter
 
Join Date: May 2009
Age: 19
Gender: Male
Nature: Brave
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.
__________________

You are challenged by Lorekeeper Zinnia!
Pairs | Twitter | Alt | Alt II | PHO
  #14719    
Old May 24th, 2010 (03:09 PM).
Metroid Die
Beginning Trainer
 
Join Date: Mar 2009
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 (03:45 PM).
PeregrineFig's Avatar
PeregrineFig
Starting Pokémon Obsidian
 
Join Date: Feb 2010
Location: Michigan, USA
Age: 20
Gender: Male
Nature: Hardy
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 (03:56 PM).
altariaking's Avatar
altariaking
Needs NO VMs...
 
Join Date: Dec 2009
Location: Scotland, Lesmahagow
Age: 40
Gender: Male
Nature: Naive
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 (04:08 PM).
PeregrineFig's Avatar
PeregrineFig
Starting Pokémon Obsidian
 
Join Date: Feb 2010
Location: Michigan, USA
Age: 20
Gender: Male
Nature: Hardy
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 (04:10 PM).
colcolstyles's Avatar
colcolstyles
Yours truly
 
Join Date: May 2008
Location: The Bay Area
Gender: Male
Nature: Lonely
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
Needs NO VMs...
 
Join Date: Dec 2009
Location: Scotland, Lesmahagow
Age: 40
Gender: Male
Nature: Naive
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
Community Supporter
 
Join Date: Apr 2009
Location: Ireland
Age: 21
Gender: Male
Nature: Timid
Send a message via Windows Live Messenger to giradialkia
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.
__________________

This one's called 'Red', and it's actually kinda Pokémon themed, so have a listen! Check out the links below for more stuff, if you like this!



This is the Doctor
This is my Soundcloud
This is my bandcamp

My Pokémon Y character is the same as my username. If you see me as a Passerby let me know! I tend to get a lot of Passerby requests and I often wonder if it's people from this site.
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
Minimum Characters Per Post: 25



All times are UTC -8. The time now is 08:00 AM.


Style by Nymphadora, artwork by Sa-Dui.
Like our Facebook Page Follow us on Twitter © 2002 - 2014 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2014 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.