The PokéCommunity Forums  

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

Notices

Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!
Research & Development programs in this forum are subject to moderator approval before they are displayed.


Advertise here

Reply
Click here to go to the first staff post in this thread.  
Thread Tools
  #376    
Old August 10th, 2013, 05:19 PM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552

Advertise here
Quote:
Originally Posted by galooloo View Post
I think he asked if he could repoint that table.

If I am not wrong, you can repoint a table.
Anything with a pointer can be repointed.
__________________

Paired with Simba
Reply With Quote
  #377    
Old August 20th, 2013, 05:44 AM
SBird
 
Join Date: Aug 2009
Gender: Male
Has anyone ever researched the ability of using moves outside of battle? Like is that just a thumb routine to be executed and how does one find it? I wondered if I was able to extend this, i mean it is easy to use attacks in scripts etc. but i'm looking for the attacks you can choose from the pokemon menu. (Like the HMs, dig, etc.)
I am thinking of it just being a basic thumb routine.
I don't care for the game version btw. at the moment, I would be happy if someone would have any data I would research myself for german rom versions anyways and I don't think there is any big difference between FR/LG and RSS.

~SBird
Reply With Quote
  #378    
Old August 21st, 2013, 05:30 PM
kearnseyboy6's Avatar
kearnseyboy6
Aussie's Toughest Mudder
 
Join Date: Dec 2008
Your reflection palette is stored at 35E968
__________________
HOLIDAYING CURRENTLY!!
Reply With Quote
  #379    
Old August 21st, 2013, 06:30 PM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by SBird View Post
Has anyone ever researched the ability of using moves outside of battle? Like is that just a thumb routine to be executed and how does one find it? I wondered if I was able to extend this, i mean it is easy to use attacks in scripts etc. but i'm looking for the attacks you can choose from the pokemon menu. (Like the HMs, dig, etc.)
I am thinking of it just being a basic thumb routine.
I don't care for the game version btw. at the moment, I would be happy if someone would have any data I would research myself for german rom versions anyways and I don't think there is any big difference between FR/LG and RSS.

~SBird
This will be a feature of Jambo51's 649 patch once it is released. Until then, who knows.:p
__________________

Paired with Simba
Reply With Quote
  #380    
Old August 23rd, 2013, 10:24 AM
GoGoJJTech's Avatar
GoGoJJTech
アルファ近く
 
Join Date: Nov 2012
Location: Earth
Age: 15
Gender: Male
Nature: Quiet
Used flags:
Fire Red
Spoiler:
0x1
0x2
0x3
0x4
0x5
0x6
0x2B
0x2C
0x2E
0x2F
0x30
0x31
0x32
0x33
0x34
0x35
0x36
0x37
0x39
0x3D
0x3E
0x3F
0x40
0x41
0x42
0x43
0x44
0x45
0x46
0x47
0x48
0x49
0x4A
0x4B
0x4C
0x4D
0x50
0x52
0x54
0x58
0x59
0x5C
0x5D
0x5F
0x62
0x63
0x64
0x65
0x66
0x67
0x68
0x69
0x6A
0x6B
0x72
0x75
0x7A
0x7B
0x7C
0x7D
0x7E
0x80
0x81
0x82
0x84
0x85
0x86
0x88
0x8B
0x8C
0x8D
0x8E
0x91
0x92
0x93
0x94
0x95
0x96
0x97
0x98
0x99
0x9A
0x9B
0x9C
0x9E
0x9F
0xA0
0xA1
0xA2
0xAA
0xAD
0xAE
0xB1
0xB2
0xB3
0xB4
0xD5
0xD6
0xD7
0xDC
0xEA
0x109
0x10A
0x10B
0x118
0x119
0x11A
0x11B
0x120
0x121
0x124
0x125
0x126
0x127
0x128
0x129
0x142
0x143
0x144
0x163
0x16A
0x16E
0x16F
0x188
0x189
0x190
0x191
0x192
0x1A7
0x1A8
0x1B6
0x1B7
0x1B8
0x1CE
0x1CF
0x1D0
0x219
0x21A
0x21F
0x230
0x231
0x232
0x233
0x234
0x235
0x236
0x237
0x238
0x239
0x23A
0x23B
0x23C
0x23D
0x23F
0x240
0x241
0x243
0x244
0x245
0x246
0x247
0x248
0x249
0x24A
0x24B
0x24D
0x24E
0x24F
0x250
0x251
0x252
0x253
0x254
0x255
0x256
0x257
0x258
0x259
0x25B
0x25E
0x263
0x264
0x265
0x266
0x267
0x268
0x269
0x26A
0x26B
0x26C
0x26D
0x26E
0x26F
0x270
0x271
0x272
0x273
0x274
0x275
0x276
0x278
0x27A
0x27B
0x27C
0x27D
0x27E
0x27F
0x280
0x281
0x282
0x283
0x284
0x285
0x286
0x287
0x288
0x289
0x28A
0x28B
0x28C
0x28D
0x290
0x291
0x292
0x293
0x294
0x295
0x296
0x297
0x298
0x29A
0x29B
0x29C
0x29D
0x29E
0x29F
0x2A0
0x2A1
0x2A2
0x2A3
0x2A5
0x2A6
0x2BB
0x2BC
0x2BD
0x2BE
0x2BF
0x2C0
0x2C1
0x2C2
0x2C3
0x2C4
0x2C5
0x2C6
0x2C7
0x2C8
0x2C9
0x2CA
0x2CB
0x2CC
0x2CD
0x2CE
0x2CF
0x2D0
0x2D1
0x2D2
0x2D3
0x2D4
0x2D5
0x2D6
0x2D7
0x2D8
0x2D9
0x2DA
0x2DB
0x2DC
0x2DD
0x2E1
0x2E2
0x2E3
0x2E4
0x2E5
0x2EC
0x2ED
0x2EE
0x2EF
0x2F0
0x2F1
0x2F2
0x2F3
0x2F4
0x2F5
0x2F6
0x2F7
0x2F8
0x2F9
0x2FA
0x2FB
0x2FC
0x2FD
0x2FE
0x2FF
0x4B0
0x4B1
0x4B2
0x4B3
0x4B4
0x4B5
0x4B6
0x4B7
0x4B8
0x4B9
0x4BA
0x4BB
0x4BC
0x805
0x807
0x820
0x821
0x822
0x823
0x824
0x825
0x826
0x827
0x828
0x829
0x82C
0x82D
0x82F
0x830
0x834
0x83E
0x841
0x842
0x844
0x845
0x846
0x847
0x848
0x849
0x84A
0x84B
0x890
0x891
0x892
0x893
0x894
0x895
0x896
0x897
0x898
0x899
0x89A
0x89B
0x89C
0x89D
0x89E
0x89F
0x8A0
0x8A1
0x8A2
0x8A3
0x8A4
0x8A5
0x8A6
0x8A7
0x8A8
0x8A9
0x8AA
0x8AB
0x8AC
0x8AD
0x8AE
0x8AF
0x8B0
0x8B1
0x8B2
0x8B3
0x8B4
0x8B5
0x8B6
0x8B7
0x8B8
0x8B9
0x8BA
0x8BB
0x8BC
0x8BD
0x8BE
0x8BF
0x8C0
0x8C1
0x8C2


Emerald
Spoiler:
0x1
0x2
0x3
0x4
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x38
0x41
0x47
0x48
0x49
0x4A
0x50
0x51
0x52
0x53
0x58
0x59
0x5A
0x5B
0x5C
0x5D
0x5E
0x5F
0x60
0x61
0x62
0x63
0x64
0x65
0x66
0x67
0x69
0x6A
0x6B
0x6C
0x6D
0x6E
0x6F
0x70
0x71
0x73
0x74
0x75
0x76
0x77
0x78
0x79
0x7A
0x7B
0x7C
0x7D
0x7E
0x7F
0x80
0x81
0x82
0x83
0x84
0x85
0x86
0x87
0x88
0x89
0x8A
0x8B
0x8C
0x8D
0x8E
0x8F
0x90
0x91
0x92
0x93
0x94
0x95
0x97
0x98
0x99
0x9A
0x9B
0x9C
0x9D
0x9E
0x9F
0xA0
0xA1
0xA2
0xA3
0xA4
0xA5
0xA6
0xA7
0xA8
0xA9
0xAA
0xAB
0xAC
0xAE
0xAF
0xB0
0xB1
0xB2
0xB3
0xB4
0xB5
0xB6
0xB7
0xB8
0xB9
0xBA
0xBB
0xBC
0xBD
0xBE
0xBF
0xC0
0xC1
0xC2
0xC3
0xC4
0xC5
0xC6
0xC7
0xC8
0xC9
0xCA
0xCB
0xCC
0xCD
0xCE
0xCF
0xD0
0xD1
0xD2
0xD3
0xD4
0xD5
0xD7
0xD8
0xD9
0xDA
0xDB
0xDD
0xDE
0xDF
0xE0
0xE1
0xE2
0xE3
0xE4
0xE5
0xE6
0xE7
0xE8
0xE9
0xEA
0xEB
0xEC
0xED
0xEE
0xEF
0xF0
0xF1
0xF2
0xF3
0xF4
0xF5
0xF6
0xF7
0xF8
0xF9
0xFA
0xFB
0xFC
0xFD
0xFE
0xFF
0x100
0x101
0x102
0x103
0x104
0x105
0x106
0x107
0x108
0x109
0x10A
0x10B
0x10D
0x10E
0x10F
0x110
0x111
0x112
0x113
0x114
0x115
0x116
0x117
0x118
0x119
0x11A
0x11B
0x11C
0x11D
0x11E
0x11F
0x120
0x121
0x122
0x124
0x125
0x126
0x127
0x128
0x129
0x12A
0x12B
0x12C
0x12D
0x12E
0x12F
0x130
0x131
0x132
0x133
0x134
0x135
0x136
0x137
0x138
0x139
0x140
0x141
0x143
0x14E
0x14F
0x150
0x151
0x152
0x153
0x154
0x155
0x156
0x157
0x159
0x15A
0x15B
0x191
0x192
0x194
0x1A9
0x1AA
0x1AC
0x1AD
0x1AE
0x1AF
0x1B0
0x1B1
0x1B2
0x1B3
0x1B4
0x1B5
0x1B6
0x1B7
0x1B8
0x1B9
0x1BA
0x1BB
0x1BC
0x1BD
0x1BE
0x1BF
0x1C0
0x1C1
0x1C2
0x1C3
0x1C4
0x1C5
0x1C6
0x1C7
0x1C8
0x1C9
0x1CA
0x1CB
0x1CC
0x1CD
0x1CE
0x1CF
0x1D0
0x1D1
0x1D2
0x1D4
0x1D5
0x1D6
0x1D7
0x1D8
0x1D9
0x1DB
0x1DC
0x1DD
0x1ED
0x1EE
0x1EF
0x1F5
0x1F6
0x23B
0x23C
0x23D
0x23E
0x23F
0x246
0x247
0x248
0x249
0x24F
0x25E
0x265
0x266
0x281
0x287
0x288
0x289
0x28A
0x28E
0x28F
0x2BC
0x2BD
0x2BF
0x2C0
0x2C1
0x2C2
0x2C3
0x2C4
0x2C5
0x2C6
0x2C7
0x2C8
0x2C9
0x2CA
0x2CB
0x2CC
0x2CE
0x2CF
0x2D0
0x2D1
0x2D2
0x2D6
0x2D8
0x2DA
0x2DC
0x2DF
0x2E0
0x2E1
0x2E2
0x2E3
0x2E4
0x2E5
0x2E6
0x2E7
0x2E8
0x2E9
0x2EA
0x2F1
0x2F2
0x2F3
0x2F4
0x2F6
0x2F7
0x2F8
0x2F9
0x2FA
0x2FB
0x2FC
0x2FE
0x2FF
0x300
0x301
0x302
0x303
0x307
0x308
0x309
0x30A
0x30B
0x30C
0x30D
0x30E
0x30F
0x310
0x311
0x313
0x314
0x319
0x31C
0x31D
0x31E
0x31F
0x320
0x321
0x322
0x323
0x326
0x327
0x328
0x329
0x32E
0x32F
0x330
0x331
0x332
0x333
0x335
0x336
0x337
0x33A
0x33B
0x33C
0x33D
0x33E
0x33F
0x340
0x343
0x347
0x348
0x349
0x34A
0x34B
0x34C
0x34D
0x34E
0x34F
0x350
0x351
0x354
0x356
0x357
0x358
0x359
0x35A
0x35B
0x35C
0x35E
0x35F
0x360
0x361
0x362
0x365
0x366
0x369
0x36A
0x36D
0x36E
0x370
0x371
0x372
0x373
0x379
0x37A
0x37B
0x37C
0x37D
0x37E
0x380
0x381
0x382
0x384
0x385
0x386
0x387
0x388
0x389
0x38A
0x390
0x391
0x393
0x394
0x395
0x396
0x39C
0x39E
0x39F
0x3A0
0x3A1
0x3A5
0x3A6
0x3A7
0x3A8
0x3A9
0x3AC
0x3AD
0x3AE
0x3B0
0x3B1
0x3B2
0x3B3
0x3B4
0x3B5
0x3B7
0x3B8
0x3B9
0x3BA
0x3BB
0x3BC
0x3BD
0x3BE
0x3BF
0x3C1
0x3C2
0x3C3
0x3C4
0x3C5
0x3C7
0x3C8
0x3CD
0x3CE
0x3CF
0x3D0
0x3D1
0x3D2
0x3D3
0x3D4
0x3D7
0x3D8
0x3DF
0x3E0
0x3E1
0x3E2
0x3E5
0x3E6
0x3E7
0x436
0x4F0
0x4F1
0x4F2
0x4F3
0x4F4
0x4F5
0x4F6
0x4F7
0x4F8
0x4FB
0x4FC
0x4FD
0x4FE
0x860
0x861
0x862
0x864
0x865
0x866
0x867
0x868
0x869
0x86A
0x86B
0x86C
0x86D
0x86E
0x870
0x871
0x872
0x873
0x874
0x875
0x876
0x877
0x878
0x879
0x87A
0x87B
0x87C
0x87E
0x880
0x889
0x88A
0x88B
0x892
0x89A
0x89B
0x89C
0x89D
0x89E
0x89F
0x8A0
0x8A1
0x8A3
0x8A4
0x8A5
0x8A6
0x8A7
0x8A8
0x8A9
0x8AA
0x8AB
0x8AF
0x8B0
0x8B1
0x8B2
0x8B3
0x8B4
0x8B5
0x8B6
0x8B7
0x8B8
0x8B9
0x8BA
0x8BB
0x8BC
0x8BE
0x8BF
0x8C0
0x8C1
0x8C3
0x8C4
0x8C5
0x8C6
0x8C7
0x8C8
0x8C9
0x8CA
0x8CB
0x8CC
0x8CD
0x8CE
0x8CF
0x8D0
0x8D1
0x8D2
0x8D3
0x8D4
0x8D5
0x8D6
0x8D8
0x8D9
0x8DA
0x8DC
0x8DD
0x8DE
0x8DF
0x8E0
0x8E1
0x8E2
0x921
0x92A
0x92B
0x92C
0x92D
0x92E
0x92F
0x930
0x931
0x932
0x934
__________________
Reply With Quote
  #381    
Old August 24th, 2013, 11:36 AM
slawter666
 
Join Date: Sep 2008
Now this has probably posted before but I couldn't find it and it seems like a fun feature: Riding pokémon like in the upcoming games.

I'm not too well versed with programming but my idea is as follows:

My idea would be to have a bit for each pokémon that determines whether it is "ridable" or not. On the menu where you can view the pokémon's stats, held item etc there would be a check for this bit and if it is the value that means its ridable a ride option would appear, if not it wouldn't. Once selected the appropriate overworld would be loaded determined by something unique to each pokemon (id number?) and all would be great. Obviously going through this step everytime you want to ride a pokémon would be tedious so this feature could replace the bike. The last pokemon you rode could be stored somehow so when you press select the game would look to see if that pokémon was in your party and if not it would just load the regular bike sprite.

There would need to be a lot of custom overworlds made but the HGSS pokemon overworlds could be used for now.

As I said previously I'm not familiar with coding so various details could be wrong/far more complicated than I made out.

Something similar could be done with surf I guess.

Has anyone considered/attempted this before? I do think it would make a very interesting feature.
__________________
Reply With Quote
  #382    
Old August 24th, 2013, 11:55 AM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by slawter666 View Post
Now this has probably posted before but I couldn't find it and it seems like a fun feature: Riding pokémon like in the upcoming games.

I'm not too well versed with programming but my idea is as follows:

My idea would be to have a bit for each pokémon that determines whether it is "ridable" or not. On the menu where you can view the pokémon's stats, held item etc there would be a check for this bit and if it is the value that means its ridable a ride option would appear, if not it wouldn't. Once selected the appropriate overworld would be loaded determined by something unique to each pokemon (id number?) and all would be great. Obviously going through this step everytime you want to ride a pokémon would be tedious so this feature could replace the bike. The last pokemon you rode could be stored somehow so when you press select the game would look to see if that pokémon was in your party and if not it would just load the regular bike sprite.

There would need to be a lot of custom overworlds made but the HGSS pokemon overworlds could be used for now.

As I said previously I'm not familiar with coding so various details could be wrong/far more complicated than I made out.

Something similar could be done with surf I guess.

Has anyone considered/attempted this before? I do think it would make a very interesting feature.
This would be interesting. I'm imagining more of a hack of the surf routine for this.... Just run that whole routine the same, but make the image change.
__________________

Paired with Simba
Reply With Quote
  #383    
Old August 24th, 2013, 04:36 PM
SBird
 
Join Date: Aug 2009
Gender: Male
I acutally thought about this when I was asking the new cut like moves thingy. My current idea is to hijack the overworld routine(which basically takes the Overworld ID as input and then loads the sprite) so that the bike overworld is replaced by a dynamic ID. This way you don't have to concern about graphics anymore. I actually already wrote such a routine, but replaced the normal hero OW, it would not be a problem to extend this for the bike OW though. I also thought about making an item to do this job, one could basically hack the bike routine to do this and just check for any ridable pokémon in the current party. If there is no such pokémon it would basically not work and display a message. It would be way cooler though to have the ability on the pokémon itself(Like on the menu or as a dedicated move)

Everything else can be done very easily(You can see the outcome of this in the pokémon sovereign of the skies thread or on the youtube video: https://www.youtube.com/watch?v=IcYepxEgAHA

I may also give you the code sample for this if you want just ask me via PM it's for the german emerald version though (BPED) and you need to figure out the needed branches and routines yourself for your version(also the dedicated offsets)

What would be still really nice would be a way to implement this in a user friendly way. An item would be fine but how would it look like? Like a whip? Guess that would be rather harsh. Also the user can't decide which pokémon to ride this way. Not the best option I suppose...

~SBird
Reply With Quote
  #384    
Old August 24th, 2013, 07:34 PM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by SBird View Post
I acutally thought about this when I was asking the new cut like moves thingy. My current idea is to hijack the overworld routine(which basically takes the Overworld ID as input and then loads the sprite) so that the bike overworld is replaced by a dynamic ID. This way you don't have to concern about graphics anymore. I actually already wrote such a routine, but replaced the normal hero OW, it would not be a problem to extend this for the bike OW though. I also thought about making an item to do this job, one could basically hack the bike routine to do this and just check for any ridable pokémon in the current party. If there is no such pokémon it would basically not work and display a message. It would be way cooler though to have the ability on the pokémon itself(Like on the menu or as a dedicated move)

Everything else can be done very easily(You can see the outcome of this in the pokémon sovereign of the skies thread or on the youtube video: https://www.youtube.com/watch?v=IcYepxEgAHA

I may also give you the code sample for this if you want just ask me via PM it's for the german emerald version though (BPED) and you need to figure out the needed branches and routines yourself for your version(also the dedicated offsets)

What would be still really nice would be a way to implement this in a user friendly way. An item would be fine but how would it look like? Like a whip? Guess that would be rather harsh. Also the user can't decide which pokémon to ride this way. Not the best option I suppose...

~SBird
I think a saddle would work. However, your method is much more difficult than mine. The structure of OWs involves 4 different tables, and each sprite, just for headers and pointers, nevermind the images themselves, would need at least 30 bytes, per image. For my idea, we would just read directly from an image table with 12 bytes max (pokemon number (2bytes), img pointer (4 bytes), palette pointer (4 bytes)). And we wouldn't have to deal with all of the extra data that OWs have.

Also, I'm sad to say, that on Emerald, there is no hack to allow more than 256 OWs. Right now, emerald is already at 240. This would limit you to an extreme amount unless you port over JPAN's massive OW hack.

On another note, we could also just hack the OW loader, so that when it is loading the bike, we simply push it to a different table, but using all of the same parameters as the bike. Then we wouldn't need to worry about expanding OWs.

If Jambo is interested, he could code it into a move himself, since he knows how to, but I don't know if this would be his thing.

If you do want to continue with the bike OW thing, go to RHO. I just finished code to force an immediate OW switch that doesn't require a reload of the screen or warping.
__________________

Paired with Simba
Reply With Quote
  #385    
Old August 24th, 2013, 08:26 PM
SBird
 
Join Date: Aug 2009
Gender: Male
Quote:
Originally Posted by karatekid552 View Post
I think a saddle would work. However, your method is much more difficult than mine. The structure of OWs involves 4 different tables, and each sprite, just for headers and pointers, nevermind the images themselves, would need at least 30 bytes, per image. For my idea, we would just read directly from an image table with 12 bytes max (pokemon number (2bytes), img pointer (4 bytes), palette pointer (4 bytes)). And we wouldn't have to deal with all of the extra data that OWs have.

Also, I'm sad to say, that on Emerald, there is no hack to allow more than 256 OWs. Right now, emerald is already at 240. This would limit you to an extreme amount unless you port over JPAN's massive OW hack.

On another note, we could also just hack the OW loader, so that when it is loading the bike, we simply push it to a different table, but using all of the same parameters as the bike. Then we wouldn't need to worry about expanding OWs.

If Jambo is interested, he could code it into a move himself, since he knows how to, but I don't know if this would be his thing.

If you do want to continue with the bike OW thing, go to RHO. I just finished code to force an immediate OW switch that doesn't require a reload of the screen or warping.
I don't think it would be a problem to expand the OW table or at least use some sort of switch to use an alternate table if needed. I did not try it though. I already have my code to change the OW. Actually as said i'm only hijacking the loader routine and switching out the parameter(which is passed by r0 or r1, not quite sure at the moment) to make the game load a different OW. It does not actually effect how the sprite is handled by the game, so if you load a sprite without running animation you won't have one, the game will just accept it as being the new hero OW. If you do load a sprite with a few extra frames it will be no problem eighter, they are just not used. Also if you replace the bike and use the bike routine one will be able to "ride" a pokémon. If it is needed you would also have to expand the OW table. In fact this is (i guess) regulated by a simple cmp opcode to check if the passed argument is greater than the fixed value, if it is, it handles it differently and I guess OWs over 255(1byte) will be killed by the standardized lsl lsr structures that classifies the argument as a byte value, leaving only the last 8 bit of the parsed value. If someone wants to increase the amount of OWs in the table he would have to a) repoint the table to somewhere in the rom, b) increase the parsed value to at least half-word size and c) bypass the compare that is used by the game to check wether the OW is one of the "special treated" ones. Maybe you could arrange it so that those won't get lost and you just load your real OWs above the byte border again. I don't know exactly what those few OWs are for, but I guess if you are able to keep them you always should because it's part of the main game.

I did once write a routine to at least use more than one OW table therefore I know that it's working, but I did not test to expand the current table at all. I just don't see any obstacles(I did not look at JPANs routines eighter, since they are all for Firered and I guess at least in the part of how the game handles overworlds those two have some differences, at least in FR OWs are also captable of executing scripts if the right sort of behavior byte is set, this is not the case in Emerald)

Well I guess i will try to use some sort of item first, for the moment I just can't come up with another solution probably it is also possible to implement some sort of "professional tamer" who allows you to "set" your saddle to a specific pokémon which of course can be "ridden" so you have an actual explanation for the player. Still using a ride move would be the best solution(in my opinion) but who knows what the future brings...

~SBird

Edit: I guess if one expands the OW table he is also not able to use the new OW regularly on a map, at least advance map does not allow half word sized values. I don't know if this is also stored in byte form but it should'nt bother the game if it loads it from a dynamic ram adress like a in-game variable or something, you can basically store the "new bike" OWs and everything you do not need to use like regurarly on a map beyond the byte limit and your regular ows befor that. I don't know how JPAN worked himself arround this problem, I'm pretty sure advance map and other mapping tools won't support entrys beyond one byte if the map structure does not allow it. JPAN would have to hack the whole map structure which would make all the normal maps unuseable and the tools had to adapt themselves which is also unknown to me(Maybe i'm just uninformed)

Last edited by SBird; August 24th, 2013 at 08:36 PM.
Reply With Quote
  #386    
Old August 25th, 2013, 09:31 AM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by SBird View Post
I don't think it would be a problem to expand the OW table or at least use some sort of switch to use an alternate table if needed. I did not try it though. I already have my code to change the OW. Actually as said i'm only hijacking the loader routine and switching out the parameter(which is passed by r0 or r1, not quite sure at the moment) to make the game load a different OW. It does not actually effect how the sprite is handled by the game, so if you load a sprite without running animation you won't have one, the game will just accept it as being the new hero OW. If you do load a sprite with a few extra frames it will be no problem eighter, they are just not used. Also if you replace the bike and use the bike routine one will be able to "ride" a pokémon. If it is needed you would also have to expand the OW table. In fact this is (i guess) regulated by a simple cmp opcode to check if the passed argument is greater than the fixed value, if it is, it handles it differently and I guess OWs over 255(1byte) will be killed by the standardized lsl lsr structures that classifies the argument as a byte value, leaving only the last 8 bit of the parsed value. If someone wants to increase the amount of OWs in the table he would have to a) repoint the table to somewhere in the rom, b) increase the parsed value to at least half-word size and c) bypass the compare that is used by the game to check wether the OW is one of the "special treated" ones. Maybe you could arrange it so that those won't get lost and you just load your real OWs above the byte border again. I don't know exactly what those few OWs are for, but I guess if you are able to keep them you always should because it's part of the main game.

I did once write a routine to at least use more than one OW table therefore I know that it's working, but I did not test to expand the current table at all. I just don't see any obstacles(I did not look at JPANs routines eighter, since they are all for Firered and I guess at least in the part of how the game handles overworlds those two have some differences, at least in FR OWs are also captable of executing scripts if the right sort of behavior byte is set, this is not the case in Emerald)

Well I guess i will try to use some sort of item first, for the moment I just can't come up with another solution probably it is also possible to implement some sort of "professional tamer" who allows you to "set" your saddle to a specific pokémon which of course can be "ridden" so you have an actual explanation for the player. Still using a ride move would be the best solution(in my opinion) but who knows what the future brings...

~SBird

Edit: I guess if one expands the OW table he is also not able to use the new OW regularly on a map, at least advance map does not allow half word sized values. I don't know if this is also stored in byte form but it should'nt bother the game if it loads it from a dynamic ram adress like a in-game variable or something, you can basically store the "new bike" OWs and everything you do not need to use like regurarly on a map beyond the byte limit and your regular ows befor that. I don't know how JPAN worked himself arround this problem, I'm pretty sure advance map and other mapping tools won't support entrys beyond one byte if the map structure does not allow it. JPAN would have to hack the whole map structure which would make all the normal maps unuseable and the tools had to adapt themselves which is also unknown to me(Maybe i'm just uninformed)
JPAN's hack, in its entirety, enables up to 65000 and most of the routines taken exist in all Advance Gen games, especially the main loader, which is exactly the same. However, I have a better idea.

What I am seeing, if we continue with the bike, is a hack near the end of the routine which branches if the hero's bike is being loaded. At that point, we send it to check a var which will then read from a table and load the correct sprite. This, combined with my OW hack (simply for instaloading of palettes) would work well and wouldn't require an expansion of OWs.
__________________

Paired with Simba
Reply With Quote
  #387    
Old August 25th, 2013, 12:12 PM
SBird
 
Join Date: Aug 2009
Gender: Male
Quote:
Originally Posted by karatekid552 View Post
JPAN's hack, in its entirety, enables up to 65000 and most of the routines taken exist in all Advance Gen games, especially the main loader, which is exactly the same. However, I have a better idea.

What I am seeing, if we continue with the bike, is a hack near the end of the routine which branches if the hero's bike is being loaded. At that point, we send it to check a var which will then read from a table and load the correct sprite. This, combined with my OW hack (simply for instaloading of palettes) would work well and wouldn't require an expansion of OWs.
That could probably work as well, guess I'm going to consider implementing some of that after I finished implementing all the gen4/5 stuff...
There is still no solution for the "how", I'm still not converned by the idea of implementing an item for the sole purpose of riding a pokémon which you can't even choose.

~SBird
Reply With Quote
  #388    
Old August 25th, 2013, 01:47 PM
Shiny Quagsire's Avatar
Shiny Quagsire
どないやねん, ヤドン
 
Join Date: May 2009
Location: Hoenn Safari Zone
Age: 16
Gender: Male
Nature: Jolly
If you ever feel the urge to stone a Pokemon to death, setting the byte at 080169D4 from 0x6 to 0x0 will make it so Pokemon don't flee after throwing 20 rocks at them in the safari zone in Fire Red. Not sure if anyone will ever actually use this but whatever.
__________________



Reply With Quote
  #389    
Old August 25th, 2013, 03:58 PM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by SBird View Post
That could probably work as well, guess I'm going to consider implementing some of that after I finished implementing all the gen4/5 stuff...
There is still no solution for the "how", I'm still not converned by the idea of implementing an item for the sole purpose of riding a pokémon which you can't even choose.

~SBird
How is REALLY easy. We just make an item that checks species vs a table. If the species number appears on the table, said pokemon can be ridden. Now, it is only what that item is.
__________________

Paired with Simba
Reply With Quote
  #390    
Old August 26th, 2013, 06:28 PM
Shiny Quagsire's Avatar
Shiny Quagsire
どないやねん, ヤドン
 
Join Date: May 2009
Location: Hoenn Safari Zone
Age: 16
Gender: Male
Nature: Jolly
Found the offset to disable Safari Zone pokemon from running in Pokemon Ruby. It's exactly the same procedure as my post above, but at offset 08014D3C.
__________________



Reply With Quote
  #391    
Old August 27th, 2013, 09:53 AM
GoGoJJTech's Avatar
GoGoJJTech
アルファ近く
 
Join Date: Nov 2012
Location: Earth
Age: 15
Gender: Male
Nature: Quiet
The behavior bytes in Advance Map are stored in a really weird format. The later ones such as 80s-90s usually display messages. Each script is 9 bytes long, and is stored in a table. So I decided to find the start of said table by going 9 bytes left until I hit 0. The problem is, The area where I ended contains scripts like adding an item from "MSG_OBTAIN". So this is a stumble...
__________________
Reply With Quote
  #392    
Old August 28th, 2013, 09:30 AM
trafalgar's Avatar
trafalgar
Hasgana
 
Join Date: Aug 2010
Gender: Female
Is there any way to swap the values ​​of two registers?
r1 -> r2
r1 <- r2

Excuse my English but I use google translator: \
Reply With Quote
  #393    
Old August 28th, 2013, 09:32 AM
GoGoJJTech's Avatar
GoGoJJTech
アルファ近く
 
Join Date: Nov 2012
Location: Earth
Age: 15
Gender: Male
Nature: Quiet
Quote:
Originally Posted by trafalgar View Post
Is there any way to swap the values ​​of two registers?
r1 -> r2
r1 <- r2

Excuse my English but I use google translator: \
This question goes here http://www.pokecommunity.com/showthr...84#post7807384
But anyway you could store r1 in r3, then put r2 in r1, then r3 in r2
Like this:
r1 -> r3
r2 -> r1
r3 -> r2

But clear r3 afterwards. The command you should use is mov.
__________________
Reply With Quote
  #394    
Old August 28th, 2013, 01:41 PM
karatekid552's Avatar
karatekid552
What happens if I push it?....
 
Join Date: Nov 2012
Location: Do you really want to know? Really?
Gender: Male
Nature: Bold
Send a message via AIM to karatekid552 Send a message via Windows Live Messenger to karatekid552 Send a message via Skype™ to karatekid552
Quote:
Originally Posted by gogojjtech View Post
This question goes here http://www.pokecommunity.com/showthr...84#post7807384
But anyway you could store r1 in r3, then put r2 in r1, then r3 in r2
Like this:
r1 -> r3
r2 -> r1
r3 -> r2

But clear r3 afterwards. The command you should use is mov.
Don't clear it, push it. So:

Push {r3}
Mov r3, r1
Mov r1, r2
Mov r2, r3
Pop {r3}
__________________

Paired with Simba
Reply With Quote
  #395    
Old September 5th, 2013, 04:11 AM
xGal's Avatar
xGal
du bist n00b
 
Join Date: Nov 2011
Location: A tree
Gender: Male
Nature: Bold
In Jambo's DirectSound voices per moment extention he said that the maximum for FR/LG/E is 12 DirectSound voices per moment and 7 in R/S. If you will choose a higher number, the game will probably freeze, crash, slow down etc.

So is it possible to extend the limit using an ASM code?
__________________
Hey guys, I made a soundcloud account not long ago, and I would be very happy if you guys will check it out: https://soundcloud.com/dewombat. Thanks .

Also, if you ever wanted to make a ROM hacking tool, click here: http://www.pokecommunity.com/showthread.php?t=334348
Reply With Quote
  #396    
Old September 5th, 2013, 02:02 PM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
Quote:
Originally Posted by galooloo View Post
In Jambo's DirectSound voices per moment extention he said that the maximum for FR/LG/E is 12 DirectSound voices per moment and 7 in R/S. If you will choose a higher number, the game will probably freeze, crash, slow down etc.

So is it possible to extend the limit using an ASM code?
It's tied to the way that the IWRAM is used, so not without a huge overhaul of the engine, and even if you did, you could only gain 4 extra channels (not tracks).

In all the GBA games, the max number of tracks is 10. The max number of channels is what you're changing.
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!
Reply With Quote
  #397    
Old September 5th, 2013, 04:15 PM
GoGoJJTech's Avatar
GoGoJJTech
アルファ近く
 
Join Date: Nov 2012
Location: Earth
Age: 15
Gender: Male
Nature: Quiet
Quote:
Originally Posted by Jambo51 View Post
It's tied to the way that the IWRAM is used, so not without a huge overhaul of the engine, and even if you did, you could only gain 4 extra channels (not tracks).

In all the GBA games, the max number of tracks is 10. The max number of channels is what you're changing.
The max is NOT 10 as ipatix and I were able to make it 16. http://www.pokecommunity.com/showpos...63&postcount=1
__________________
Reply With Quote
  #398    
Old September 6th, 2013, 12:47 PM
slawter666
 
Join Date: Sep 2008
Quote:
Originally Posted by karatekid552 View Post
I just finished code to force an immediate OW switch that doesn't require a reload of the screen or warping.
Could your code in theory be adapted for an item. I could think of a load of uses for various costumes within the game, especially if the game is able to check the players OW id number. And if the bag had its own "costume" pocket it could had a whole new level of customisation.

Oh and I think a saddle would be the most appropriate item in order to ride pokemon.
__________________
Reply With Quote
  #399    
Old September 6th, 2013, 01:51 PM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
Quote:
Originally Posted by gogojjtech View Post
The max is NOT 10 as ipatix and I were able to make it 16. http://www.pokecommunity.com/showpos...63&postcount=1
OK, let me rephrase. The max without hacking is 10. Snarky comments like this are why I quit ROM Hacking. Happy now?
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!
Reply With Quote
  #400    
Old September 6th, 2013, 01:52 PM
GoGoJJTech's Avatar
GoGoJJTech
アルファ近く
 
Join Date: Nov 2012
Location: Earth
Age: 15
Gender: Male
Nature: Quiet
Quote:
Originally Posted by Jambo51 View Post
OK, let me rephrase. The max without hacking is 10. Snarky comments like this are why I quit ROM Hacking. Happy now?
Sorry if it came out that way
__________________
Reply With Quote
Reply
Quick Reply

Sponsored Links


Advertise here
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:47 PM.


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.