Jump to content

Bond697

Former Staff
  • Posts

    1358
  • Joined

  • Last visited

Everything posted by Bond697

  1. that's me. yeah, ct2 doesn't do a great job of decompression. blz is the way to go. i even posted a program earlier in the thread to decompress all the overlays at once.
  2. FYI: this is still happening, but work is moving slowly. I had a very successful test last night of a very simple way of using builtin code from the game in user-made functions. It works great.
  3. changing the pokemon not required for dex completion: unova dex: 208F838 (8B838) national dex: 208F870 (8B870) they're tiny arrays, so expect to repoint the data if you're gonna be adding to the pokes that don't count.
  4. their reverse decompressor will just do nothing with an already-decompressed arm9.
  5. you can use this to decompress all the overlays at once. just change the paths to the ones on your machine. http://pastebin.com/K5zUYt3M
  6. 021D7540 Type-effectiveness chart(0- no effect, 2- .5x dmg, 4- 1x dmg, 8- 2x dmg) Bond697 021BD1A0 Determine type effectiveness for the current attack Bond697 it is in overlay 167 and it is 17x17. ovl167 starts at 2199900, so do some subtraction. 21d7540 - 2199900 = 3DC40 into the overlay. subtract 0x40 for black 2. e: the values to use for each type: typedef enum { TYPE_NORMAL = 0x0, TYPE_FIGHT = 0x1, TYPE_FLY = 0x2, TYPE_POIS = 0x3, TYPE_GROUND = 0x4, TYPE_ROCK = 0x5, TYPE_BUG = 0x6, TYPE_GHOST = 0x7, TYPE_STEEL = 0x8, TYPE_FIRE = 0x9, TYPE_WATER = 0xA, TYPE_GRASS = 0xB, TYPE_ELEC = 0xC, TYPE_PSY = 0xD, TYPE_ICE = 0xE, TYPE_DRAGON = 0xF, TYPE_DARK = 0x10, } PokeType; e2: quick example of how to edit. say i'm using a normal type attack on a rock type. refer to the chart and see that normal is 0x0 and rock is 0x5. even though the array is 17x17 (u8 type_chart[17][17]), they will be 1 long line in the assembled code. so you do this to get the right value to go to: attacking_type * 17 + defending type + 1 = value to seek to *the +1 is because the array starts from index 0, not 1. and it's *17 because there's 17 types. so 17*attacking type skips to that type's "row". so since i have normal attacking and rock defending, i would do 0*17 + 5 + 1 which means to count to the 6th element in the array. so i would count from the top: OVL_167:021D7540 04 unk_21D7540 DCB 4 -1 OVL_167:021D7541 04 DCB 4 -2 OVL_167:021D7542 04 DCB 4 -3 OVL_167:021D7543 04 DCB 4 -4 OVL_167:021D7544 04 DCB 4 -5 OVL_167:021D7545 02 DCB 2 -6** normal is .5 dmg against rock OVL_167:021D7546 04 DCB 4 OVL_167:021D7547 00 DCB 0 let's do one more. i have electric attacking bug, so 12*17 + 6 + 1 is 211. so would start at 21D7540 and count to 211 byte by byte. or start @ 3DC40 and add the result to skip to the right value in your hex editor. ** the type chart in white 1 is @ 21F049C. 3A37C in overlay 93 in white 1.
  7. that's completely meaningless with regard to type effectiveness.
  8. i'd guess that it might be in overlay 167. i don't recall seeing a 17x17 array in the arm9.
  9. i started dumping more stuff today. refer here for new stuff: http://projectpokemon.org/wiki/Pok%C3%A9mon_B2W2_Save_File_Structure http://projectpokemon.org/wiki/Notable_Breakpoints also, editing awarded medals: say you wanted to edit the light walker medal to be 50000 steps. go to a235 and open file #7(255 medal counted 0-254). the first 2(possibly 4) bytes are for the value, no matter the medal category. note that it's 88 13 or 0x1388(5000d). change it to what you want. this works for all medals that are looking for a total count aside from the caught em all of a certain type medals. also, each specific type of medal has a different arrangement of the last 4 bytes. adjust them to make different kinds of medals. use other medals as templates. adjust that and then the medal text from the text narc and you have brand new medals. i'll know what the exact values are for once i find the medal data parser. i've already found the data parser for pkm data, personal data, item data, item sprites, trainer data, zone info, and a fair amount of others, so i'm sure t won't be very difficult to find. they all look/work like this: http://projectpokemon.org/wiki/PKM_File_Fields
  10. of course it does. you might need to update the ards/i, but it does work.
  11. yeah, i'm pretty sure it's just for a few specific items that have hardcoded effect numbers, not just like 1 stage or something. if you look at items that affect stages(x accuracy, x defense, etc etc) it's a bit different. the stages thing is actually done via truncated division using a table in overlay 167.
  12. really? because this is wide lens in a/0/2/4: 14 00 5d 0a 00 00 0a 00 1f 00 00 00 00 01 00 91 00000000000000000000000000000000 00000000 byte 0x3 is 0xA for wide lens(10d) and is 0x14 for zoom lens(20d) and wide lens boosts by 10% and zoom lens boosts by 20%. it seems kind of crazy for those percentages to be in an overlay.
  13. of course it's possible. changing pretty much anything about the game is possible. try poking around in a/0/2/4 for the item data.
  14. OVL_36:021D21B0 2A 01 00 00 incenseLUT DCD 0x12A - azurill ; DATA XREF: incenseHandler+4o OVL_36:021D21B4 FE 00 00 00 DCD 0xFE - sea incense OVL_36:021D21B8 B7 00 00 00 DCD 0xB7 - marrill OVL_36:021D21BC 68 01 00 00 DCD 0x168 - wynaut OVL_36:021D21C0 FF 00 00 00 DCD 0xFF - lax incense OVL_36:021D21C4 CA 00 00 00 DCD 0xCA - wobbuffett OVL_36:021D21C8 B7 01 00 00 DCD 0x1B7 - mime jr OVL_36:021D21CC 3A 01 00 00 DCD 0x13A - odd incense OVL_36:021D21D0 7A 00 00 00 DCD 0x7A - mr mime OVL_36:021D21D4 B6 01 00 00 DCD 0x1B6 OVL_36:021D21D8 3B 01 00 00 DCD 0x13B OVL_36:021D21DC B9 00 00 00 DCD 0xB9 OVL_36:021D21E0 BE 01 00 00 DCD 0x1BE OVL_36:021D21E4 3C 01 00 00 DCD 0x13C OVL_36:021D21E8 8F 00 00 00 DCD 0x8F OVL_36:021D21EC CA 01 00 00 DCD 0x1CA OVL_36:021D21F0 3D 01 00 00 DCD 0x13D OVL_36:021D21F4 E2 00 00 00 DCD 0xE2 OVL_36:021D21F8 96 01 00 00 DCD 0x196 OVL_36:021D21FC 3E 01 00 00 DCD 0x13E OVL_36:021D2200 3B 01 00 00 DCD 0x13B OVL_36:021D2204 B8 01 00 00 DCD 0x1B8 OVL_36:021D2208 3F 01 00 00 DCD 0x13F OVL_36:021D220C 71 00 00 00 DCD 0x71 OVL_36:021D2210 B1 01 00 00 DCD 0x1B1 OVL_36:021D2214 40 01 00 00 DCD 0x140 OVL_36:021D2218 66 01 00 00 DCD 0x166 you get the idea.
  15. egg data: e: also, i've been adding more info to this too: http://projectpokemon.org/wiki/Pok%C3%A9mon_B2W2_Save_File_Structure
  16. pokemon fields: personal fields:
  17. i wish i had known what some of you were looking for. i could've saved you guys a lot of time. i started dumping some of my stuff here: http://projectpokemon.org/wiki/Notable_Breakpoints#Pok.C3.A9mon_B2W2_.28U.29 i'll start adding stuff in here and there as i go through it. i've got like 3200 functions named and (mostly)given arguments in my database, so i've got a lot of lookup tables and arrays and such labelled, aside from other general important info.
  18. don't listen to any event fanatics pm-ing you behind the scenes trying to shut you up. the more info you can provide on this thing the better! that said, you have an amazing buy here and i'd love to hear all about it, see videos, etc.
  19. you can actually do that in the settings, just fyi:
  20. don't de/compress the arm9 and overlays with anything but blz. http://gbatemp.net/threads/nintendo-ds-gba-compressors.313278/ it's the only thing that does it right both ways. that, or change the overlay table for what you decompress so it won't see them as encrypted anymore. e: like i said, they changed the trainer music system from bw1. there's extra functions and it's very different. this is the one from bw1: http://projectpokemon.org/forums/showthread.php?22308-Pok%E9mon-Black-and-White-Assigning-different-Trainer-Music&p=146770&viewfull=1#post146770 this applies to both kinda of music.
  21. ok, good. and that's a good point above about people learning for the sake of using this. i'll work through the end of the year on the database(right now i have more then 3000 functions labelled, mostly with arguments, across the arm9, the scripting overlay, the big overworld overlay, and a couple of minor overlays) to get as much ready as possible then get started after the new year.
  22. of course it's possible. you wouldn't need extra zonedata. create an extra overlay and add the encounter slots you want for the areas you want to the bss portion of the overlay. now create a 2xX array(ex. playerpos_xy[2][x]) with coordinates for the map with the playerpos coordinates(relative to viewport) of the grass areas you want multiple encounter sets. figure every other square the encounter set changes between 2 sets of slots. write a bit of code to do playerpos_x & 1 and playerpos_y & 1 while saving the previous result. if either of those changes, do a simple memcpy of the slots to a buffer and copy the new slots(the correct set if you have multiple) into place(cpucopy8 is what the game would use). do this back and forth and it will only work while you're in the grass and you'll have multiple sets of possible encounters. there are better, more robust ways of doing it(including fixing the zonedata code to support multiples based on encounter subsets), but this works for now. and you would load the extra overlay by adding a hook in the route loader that looks up the extra overlay number for that routine in a table. really simple. even better, add "setMultipleEncounterTables" to a script command that you create. it's all possible. e: actually, this isn't a bad idea and would make a great demo project...
  23. so i have this idea that i've been kicking around in my head probably since right after b2w2 came out in japan. i think this will be a set of games that is hacked for a good long time to come. this is quite likely the last set of main series releases on the ds. anyway, what if we could actually program for the games? i don't mean in assembly, but in C or C++. i know what i would have to do and exactly what i would have to write to create a nice, robust library for low-level manipulation of the game. for example, say you wanted to decrypt a party pokemon do something with one of its fields: (let's say the level for pkm party slot 3) u32 slot3_lv = getPkmStat(getPartyPkmAddress(&PkmBlk, 3), PKM_LV, NULL); you could do that instead of writing some assembler and compiling it with the gcc assembler from devkitarm, arm-none-eabi-as, and hoping you got the syntax right, all the pointers right, etc etc. some of the things you could do: -create your own set of overlays and load them like gamefreak using their overlay handler -not just write your own scripts, but write your own code and create your own script commands to use in your scripts -create your own data files and load them into memory to manipulate them with your own code -add your own code to the engine -add new fields and data to pkm files -add new data to the save game -add your own events and save them, add new swarms and other events -add new stuff to happen at midnight -tweak damage calculations, stat calculations, a lot of stuff without needing an AR -hell, rewrite the graphics renderer if you're feeling really enterprising my list of script commands is very nicely filled out and quite thorough- all from analyzed code, all completely correct. i've done everything on this list(barring a lame attempt at the last one). what i'm offering is a way to do it more easily through a library and higher-level code instead of assembly. something like this would be much more accessible. i have an IDA database absolutely packed with info that would be so useful to this along with quite a few pages in a notepad of stuff and even more kind of bouncing around in my head that i've never mentioned to anyone. i have a script compiler partially done, a script decompiler partially done, and the source files for libPKM prepped, but not started. this has the potential to be a full devkit for bw2. the reason i'm doing this and not just starting work directly is that i'm wondering how many people would actually use it. i can think of less than a half dozen people that even could use it. so.. would anyone out there use this? it would take hacking this game to a whole other level, but it's not worth doing if i'm going to spend a ton of time on it and no one is going to use it. i'd love it if people could get behind this a little bit because it has huge potential, but like i said i don't really know how many people can use it. thoughts?
  24. if i was doing it, i would probably hook the encounter code off to my own code that uses actual rand calls to build the random poke encounter table. seems like that would probably be the best way. rand(649(0x289) + 1 for each of the 10 pokes to encounter.
×
×
  • Create New...