Kaphotics Posted March 29, 2013 Author Share Posted March 29, 2013 It's just a bitfield which distributes 510 EVs to the enabled stats. If you have 1 enabled, that stat gets 255 (0xFF, the max) 510/1=510 (exceeds max) If you have 2 enabled, each stat gets 255 (0xFF, the max) 510/2=255 If you have 3 enabled, each stat gets 170; 510/3=170 4 -> 510/4 = 127.5 (floor it, 127) 5 -> 510/5 = 102 6 -> 510/6 = 85 EV byte to binary -> 76543210 bit 0 flagged = HP flagged bit 1 flagged = Atk flagged bit 2 flagged = Def flagged bit 3 flagged = Spe flagged bit 4 flagged = SpA flagged bit 5 flagged = SpD flagged anything greater than 0x40 has bits 7 and 6 flagged, which are unused. The game only considers bits 0-5 For rosters, certain groups are allotted certain PKM choices. Pretty sure andibad has an editor for subway PKM's as the format is the same as PWT's. Link to comment Share on other sites More sharing options...
Andibad Posted March 30, 2013 Share Posted March 30, 2013 (edited) It's only a viewer Andibad has up. He hasn't released the version where you can edit the trainers/PKMN yet. you really need this? just waiting until i have freetime (maybe after April) ... i will rewrite them from start since i used new structure ... i was think to make them able edit single file, read from folder, narc file, linked narc file... for rom , the problem is from unpack content into a place, since pokemon BW2 is huge, is not effective for your hard disk life. Pretty sure andibad has an editor for subway PKM's as the format is the same as PWT's. is same as battle frointer and tower from HGSS and DPPt, but is have extra useless byte, is safe to delete them. Someone already figure out encrypted text on a/0/0/2 ? yeah that encrypt method only apply on ascii character only ... , i was already done with this on january, but i not share them since i need test on eroupe ROM. is just shift binary only. Bianca , why is not encrypted? Bianca, this text have 6 char, Encrypted text is only accept if that odd number of character and not more than 6, if is more than that it will splited into two. Since "bianca" have 6 char, last char "a", split that. so you will get "bianc" a, and now bianc is now odd? but on encrypted text we need 00F1 and last key, so is need 3 byte more, "bianc" is 5, total 8? o this part must odd number of character so last char of "bianc" must split again become "bian" c a, since "bian is odd actually we need not odd, so "bia" "nc" "a", is not possible to do with that text since "nc" is not same char. if is same char like Jho nn y ("nn" will used a script \xabcd), is possible to encrypt that. If you already basic of that so now how to de-crypt that encrypt char?, copy that encrypted text on hex editor (on unicode code), 00F1 always on first 2 byte, and last byte is a key, after 00F1 is key too also is first char of text. For odd number of character, is always have \xabcde, a = is double or not, bcde is charset or other attribute. before that script is always a key for char set 1, after tat script is last char (encrypted) with own key. example : 00 F1 47 E4 D4 71 43 E7 (燔) let's substring into 3 part : part 1 : 00F1 part 2 : 47 E4 D4 71 43 part 3 : E7 part 3 convert into bit : E7 --> 1110 0111 every byte >>n+1 (n = 0) 47| +|0100 0111|- E4| 0+| 111 0010|-0 D4| 01+| 11 0101|-00 71| 011+| 0 1110|-001 43|0111+| 0100|-0011 E7 (1110 0111) is Grunt (4772756E74) well is no need to give a tutorial to de-crypt or en-crypt back that text completely since someone was already done to make all list (5 part is encrypted on a/0/0/2 is 53, 180, 368, 382, 409) Edited March 30, 2013 by Andibad Link to comment Share on other sites More sharing options...
Bond697 Posted April 1, 2013 Share Posted April 1, 2013 i put up the hack to adjust trainer pokemon natures and a long explanation of how it works here: http://projectpokemon.org/forums/showthread.php?28709-Trainer-Pokemon-Nature-Adjustor Link to comment Share on other sites More sharing options...
Bowlingwater Posted April 2, 2013 Share Posted April 2, 2013 Nice stuff for Battle Subway/PWT, very useful. But still there is a lot of stuff that really bothers me and i personally never found out, these are: - The 'banned list' e.g. most of the legendaries are not allowed(YES, I WANT TO USE SOME OF THEM!) - Player & AI's Maximum Pokemon Slots(Currently are 3v3 only in singles and 4v4 doubles i believe) - Level Cap of 50. WHY NOT 100? DANG IT! - Something is missing... Anyone has an idea of where i can start searching the files/narcs or even in the hex editor? Link to comment Share on other sites More sharing options...
Andibad Posted April 2, 2013 Share Posted April 2, 2013 Nice stuff for Battle Subway/PWT, very useful.But still there is a lot of stuff that really bothers me and i personally never found out, these are: - The 'banned list' e.g. most of the legendaries are not allowed(YES, I WANT TO USE SOME OF THEM!) - Player & AI's Maximum Pokemon Slots(Currently are 3v3 only in singles and 4v4 doubles i believe) - Level Cap of 50. WHY NOT 100? DANG IT! - Something is missing... Anyone has an idea of where i can start searching the files/narcs or even in the hex editor? search on overllay or arm9, better check on pp.org wiki, and to trace that on ram, and assembly that using lua script from kaphotics to trace ram more easy (since it will read a specific offset, so is readable for you) Link to comment Share on other sites More sharing options...
Bond697 Posted April 2, 2013 Share Posted April 2, 2013 you might want to try these: non_dex_complete_unova DCW 0x287 ; DATA XREF: RAM_ARM9:0208F838 ; these pokes don't count toward dex completion(unova) RAM_ARM9:0208F83A 88 02 DCW 0x288 RAM_ARM9:0208F83C 89 02 DCW 0x289 RAM_ARM9:0208F83E EE 01 DCW 0x1EE RAM_ARM9:0208F840 27 00 word_208F840 DCW 0x27 ; DATA XREF: sub_200DBDC+66o RAM_ARM9:0208F840 ; sub_200DBDC+AAo ... RAM_ARM9:0208F842 1F 05 DCW 0x51F RAM_ARM9:0208F844 63 00 DCW 0x63 RAM_ARM9:0208F846 20 05 DCW 0x520 RAM_ARM9:0208F848 9F 00 DCW 0x9F RAM_ARM9:0208F84A 21 05 DCW 0x521 RAM_ARM9:0208F84C E5 00 DCW 0xE5 RAM_ARM9:0208F84E 22 05 DCW 0x522 RAM_ARM9:0208F850 28 01 DCW 0x128 RAM_ARM9:0208F852 23 05 DCW 0x523 RAM_ARM9:0208F854 00 00 DCW 0 RAM_ARM9:0208F856 24 05 DCW 0x524 RAM_ARM9:0208F858 9F 00 word_208F858 DCW 0x9F ; DATA XREF: sub_200DBDC+EAo RAM_ARM9:0208F858 ; RAM_ARM9:off_200DCE8o RAM_ARM9:0208F85A 1F 05 DCW 0x51F RAM_ARM9:0208F85C 5D 01 DCW 0x15D RAM_ARM9:0208F85E 20 05 DCW 0x520 RAM_ARM9:0208F860 C1 01 DCW 0x1C1 RAM_ARM9:0208F862 21 05 DCW 0x521 RAM_ARM9:0208F864 25 02 DCW 0x225 RAM_ARM9:0208F866 22 05 DCW 0x522 RAM_ARM9:0208F868 7B 02 DCW 0x27B RAM_ARM9:0208F86A 23 05 DCW 0x523 RAM_ARM9:0208F86C 00 00 DCW 0 RAM_ARM9:0208F86E 24 05 DCW 0x524 RAM_ARM9:0208F870 97 00 non_dex_complete DCW 0x97 RAM_ARM9:0208F870 ; these pokes don't count toward dex completion(all) RAM_ARM9:0208F872 FB 00 DCW 0xFB RAM_ARM9:0208F874 81 01 DCW 0x181 RAM_ARM9:0208F876 82 01 DCW 0x182 RAM_ARM9:0208F878 E9 01 DCW 0x1E9 RAM_ARM9:0208F87A EA 01 DCW 0x1EA RAM_ARM9:0208F87C EB 01 DCW 0x1EB RAM_ARM9:0208F87E EC 01 DCW 0x1EC RAM_ARM9:0208F880 ED 01 DCW 0x1ED RAM_ARM9:0208F882 87 02 DCW 0x287 RAM_ARM9:0208F884 88 02 DCW 0x288 RAM_ARM9:0208F886 89 02 DCW 0x289 RAM_ARM9:0208F888 EE 01 DCW 0x1EE idk exactly what makes up the list, but if it matches the legendary list, you might have some luck. other than that, that stuff would need to be changed twice, once for the battle subway overlay set and once for the pwt overlay set. Link to comment Share on other sites More sharing options...
PKMNTrainerNick144 Posted April 4, 2013 Share Posted April 4, 2013 For a/2/1/2 (Trainer list) : Example : 307 – 314 are Masters Ingo (58) & Emmet (66) Structure : Single battle 21 win streak Ingo Single battle 21 win streak Emmet Single battle 48 win streak Ingo Single battle 48 win streak Emmet Double battle 21 win streak Ingo Double battle 21 win streak Emmet Double battle 48 win streak Ingo Double battle 48 win streak Emmet Double battle 48 win streak Emmet : Trainer classes How many pokemon on this trainer Pokemon list id (from a/2/1/1) You can see on http://serebii.net/blackwhite/battlesubway.shtml fact pokemon list id is can handle 65535 pokemon since used 16 bit. I managed to add 2 more slots to Emmett's list... but how I fix the Pokemon list ID? edit: nevermind... i figured out how... thanks to your pwt/subway viewer once again. Link to comment Share on other sites More sharing options...
Andibad Posted April 4, 2013 Share Posted April 4, 2013 (edited) I managed to add 2 more slots to Emmett's list... but how I fix the Pokemon list ID? 6600 0200 6C01 8503 ... 6600 0400 6C01 8503 aaaa aaaa ... remember is add new byte, you need unpack narc content. 016C (364) --> aaaa id is from a/2/1/1 Edited April 4, 2013 by Andibad Link to comment Share on other sites More sharing options...
Andibad Posted May 3, 2013 Share Posted May 3, 2013 (edited) well today i try to documented my research on item BW and BW2. This Thread , it will moved in here, later .. Narc : a/0/2/4 - Item (BW/BW2) 1. Sell/Buy value 0x00 - 0x01 - Price of Item Sell = (a*10)/2 Buy = a*10 (bw/bw2) 0x02 -??? *is seems no effected on in-battle. maybe on outside..... 3. Gain percentage (depend on effect id) 0x03 - Rate/Gain value gain % value, or other calculation (depend on effect id - 0xF). Type 1 (on berries) 1 - 100 % 2 - 75 % 3 - 50 % 4 - 25 % 5 - 20 % 6 - 17.5 % 7 - 15 % 8 - 12.5 % Type 2 0~64 - 0 - 100 % is no have effect if effect id is no need this value whatever this value filled. like potion. Type 3 0 ~ FF 4. Berries Effect and other 0x04 *only on berry items. 0x07 - Nature Gift Power Damage range : 0 - 100, 101 - 252 0x05 *always same as 0x04 (on berry), on Razor Fang is 1A 0x06 *always 0A on berry, 1E : Razor Fang 5. Attribute and effect of items *i will fixed later ... 0x08 - Attribute of item (on bag and on battle) bit-1~5 : type (cannot selected multply) 0 0000 (00) - normal 0 0001 (01) - Fighting 0 0010 (02) - flying 0 0011 (03) - poison 0 0100 (04) - ground 0 0101 (05) - rock 0 0110 (06) - Bug 0 0111 (07) - ghost 0 1000 (08) - Steel 0 1001 (09) - Fire 0 1010 (0A) - water 0 1011 (0B) - grass 0 1100 (0C) - Electric 0 1101 (0D) - Psychic 0 1110 (0E) - ice 0 1111 (0F) - dragon 1 0000 (10) - dark 1 1111 (1F) - ignore the type/all type. *depend on effect id (0xE and 0xF), is not related to Plate or gems. bit 6~8 (multiply) : 100 - 010 - show checkbox (1) 001 - cannot give/trash (1) 0x09 - ??? 00 - 01 - 02 - 04 - 08 - 10 - 20 - 40 - 80 - 0x0A - ??? *is seems on evolution item (14), repel+escape item (13), potion+healer+Sweet Heart(1), Honey (E), TM/HM (6) mail (7), some berry (8), key item ? (4), wait is seems have multple effect ... 00 - "USE" button will not show on bag 01 - 02 - 04 - 08 - 10 - 0X0B - ??? 00 - other 01 - ... (Pokeballs (except park ball)) 02 - ... (some potion, healing item's, Sweet Heart) 03 - ... (Fluffy Tail) 0X0C - ??? 00 - no have any effect 01 - usable *is seems some specific on some item, i still need more data about this ... 0x0D - Grouping Item 00 None 01 - Battle/Equip Item 02 - Other Item 03 - X-item 04 - Pokeballs 05 - Mail * actually is can filled any value. * if item is have same Group, if you sort by Type, it will used 0x0F (? is seems like that) 0x0E - ??? *is seems set to 1 on almost berry item, gems and white herb. other is set to 0 ... , hm i sense is related to 0xF 0x0F - Effect id ? or for sorting purpose only? *i will give detail about this offset later~ 6. Recover/Remove bad status effect on pokemon (depend on effect id) 0x10 - Removing extra status effect 00 - none 01 - Cures Sleep 02 - Cures Poison 04 - Cures Burn 08 - Cures Freeze 10 - Cures Paralysis 20 - Cures Confusion 40 - Snaps a Pokémon out of infatuation. 80 - Prevents stat reduction by opponents 3F - Cures any status ailment it will accept multiply effect, like cures sleep + paralysis. 1 + 16 = 17 => 11 (HEX). pokeball is cures sleep and poison when battle end. Pokeballs : Master ball : not cure anything after battle end.Ultra ball : cure sleep Great ball : cure poison Poké Ball : Cure Sleep and Poison ^ actually i don't know pokeball is cure a status after battle since i not care about that , but on my test well i was see my pokemon was cured from poison and sleep if i using pokeball but when i use ultra ball is still poisoned. is seems only on BW2 but idk. the interesting part is on super rod, is cure poison. i was think if you catch pokemon using super rod and is get poisoned from your pokemon. it will healed after you catch that pokemon. 7. On battle effect (?) 0x11-0x14 is seems on battle... 0x11 10 : +1 stage of ATK 20 : +2 stage of ATK 30 : +3 stage of ATK 60 : +6 stage of ATK 01 : ??? (on Revival Herb)* 03 : ??? (on Sacred Ash)* 05 : ??? (on rare candy)* 08 : ??? (on evolution stone)* 0x12 10 : +1 stage of sp.ATK 20 : +2 stage of sp.ATK 30 : +3 stage of sp.ATK 60 : +6 stage of sp.ATK 01 : +1 stage of DEF 02 : +2 stage of DEF 03 : +3 stage of DEF 06 : +6 stage of DEF 0x13 10 : +1 stage of speed 20 : +2 stage of speed 30 : +3 stage of speed 60 : +6 stage of speed 01 : +1 stage of sp.DEF 02 : +2 stage of sp.DEF 03 : +3 stage of sp.DEF 06 : +6 stage of sp.DEF 0x14 01 : +1 stage of acc 02 : +2 stage of acc 03 : +3 stage of acc 06 : +6 stage of acc 10 : +1 stage of crit 20 : +2 stage of crit 30 : +3 stage of crit 40 : +1 PP permanently 80 : +5 PP permanently *still not sure is increase on something ... 0x15 Is related to EV, PP, and other, but is only on battle?* but not sure. 01 : one move - PP (Leppa Berry) 02 : all move - PP (Max Elixir) 04 : restore HP (RageCandyBar) 08 : ??? (HP EV item) 10 : ??? (ATK EV item) 20 : ??? (DEF EV item) 40 : ??? (Speed EV item) 80 : ??? (Sp.ATK EV item) 0x16 *is seems related to EV... btw since almost item is related on EV this byte always filled with #F. 8. EV Increase or Decrease on stat 0x 17 - EV for HP value 0x 18 - EV for ATK value 0x 19 - EV for DEF value 0x 1a - EV for speed value 0x 1b - EV for sp.ATK value 0x 1c - EV for sp.DEF value +1~0A (+ 1 ~ + 10 EV) - FF~E0 (-1 ~ -31) For common value is : - 1 ~ 0A- F7, F8, F9, FA, FB, FC, FD, FE (For decreasing) Decreasing :FF = - 1 E0 = - 31 9. HP, PP and happiness offset (if you change the id effect, some of them will ignore this part~) 0x1D - HP increased on battle or field *when 0xf is 00, it will active, if not is depend on effect active this. FF : 100 % maximum FE : 50 % maximum FD : 25 % maximum 0~FC : 0 ~ 251 0x1E - PP *when 0xf is 00, it will active, if not is depend on effect active this. 7F : maximum 0x1F - Happiness on battle ? 0X20 - Happiness on field ? 0X21 - Happiness ? *when 0xf is 00, it will active, if not is depend on effect active this. +1~0A (+ 1 ~ + 10) - FF~E0 (-1 ~ -31) Edited May 25, 2013 by Andibad fixed Link to comment Share on other sites More sharing options...
Bond697 Posted May 25, 2013 Share Posted May 25, 2013 info dump here: http://projectpokemon.org/forums/showthread.php?29665 Link to comment Share on other sites More sharing options...
Bond697 Posted June 5, 2013 Share Posted June 5, 2013 it's hypocritical of me to be posting in here, but someone asked me to add a minor feature to my nature adjustor, and i figured out something minorly useful. to change the max EV total, go to 0x201E980 and have a look. you'll see 0x000001FE in ram. that's 510. change it to whatever you want in the arm9.bin @ #(201E980 - 2004000) or use an AR code to change it in ram. Link to comment Share on other sites More sharing options...
Bond697 Posted July 11, 2013 Share Posted July 11, 2013 someone asked me a bunch of questions that i couldn't answer, so i started reading through code. anyway, one of the things i picked up is that a/1/7/2 is for route connectors. each of those 124-byte files defines all the relevant data for the connectors. the other thing i did was take apart save block 37: Member Offset Size Use RTC Offset 0x0 8 "RTC offset" is the change in seconds (positive or negative) of the time since the last boot- for tracking player clock changes Birthday Month 0xE 1 Save owner's birthday month Birthday Day 0xF 1 Save owner's birthday day Adv Time Blk Init 0x10 4 Indicates that the adventure time block is ready/initialized Year 0x14 4 Current year Month 0x18 4 Current month Day 0x1C 4 Current day Weekday 0x20 4 Current weekday Hour 0x24 4 Current hour Minute 0x28 4 Current minute Second 0x2C 4 Current second Datetime Days 0x30 4 Current datetime days(days since 1/1/2000) Newgame Datetime Seconds 0x34 8 Datetime seconds on new game boot(seconds since 1/1/2000 up to new game boot) Datetime Seconds 0x3C 8 Current datetime seconds (seconds since 1/1/2000) Minutes in Day 0x44 4 The total number of minutes that have passed in the given day: counts down from 1440 to 0 - this only works if you reset and load a save. savestates break this for obvious reasons. block 37(0x25) also fyi: don't use script flags 0-99 or const vars 4000-4031. they are reinitialized on each boot. Link to comment Share on other sites More sharing options...
Bond697 Posted July 20, 2013 Share Posted July 20, 2013 the reason the game loads immediately when you pick your save, but takes awhile to save when you're done, is that the savegame is read as a contiguous 0x26000 byte file into memory and written in blocks back to the save- 1 block at a time, 74 blocks total. e: other general save info: 0220528C is the list of blocks in the save.(74 total) struct SaveBlockInfo { u32 blkNum; //block count in hex(0-49) u32 blkSize; //size of block in the save u32 blkOffset; //offset into the save file }; the game reads these numbers by doing block_address = blkNum * 12 + blk_base(220528C) to get the block to seek to then using block_address + 4 and block_address + 8 to get the desired info. then they add either the offset into the save file to the address of the save file in ram to decide where to read data from. also, the block size doesn't always correspond with subtracting the offset of the next save block with the current one. that means there's extra unused space between some blocks. it would be trivial to use this for implementing new features. when the game boots, a function runs that pulls from the save data info table @ 0x208F18C. the table is 73 entries and each is a struct like so: typedef void (*SaveFn)(void); struct SaveBlockInit { int blkID; SaveFn blkSize; SaveFn callback; }; basically, one function goes through and builds the table @ 0x220528C using the blkSize function pointers and some simple math. a second function iterates through all 73, running the callbacks one after the other to prepare the blocks for play. the 74th block is checksums. this is actually really good news because it means that extending the size of a save block is as easy as changing that block size value to something bigger and then writing to the rest of the space. the only issue is that the pieces of unused block in each save block aren't very big. the reason that the padding exists in the first place is that each block is padded to the nearest 0x100 bytes. they have a bit of math to account for this when building the save data block table. e: an example: 18E00 19333 19336 Party Pokemon the party pkm block runs from 18E00 to 19337, but the padding extends to 193FF. that means that 19338-193FF is padded with FFs and unused. so if you change the block size in the config table, you can have read/write access to 0xC8(200d) bytes for managing your own save data. and you wouldn't have to do anything but read and write to it in memory because after adjusting the table, gamefreak's code would do all the management. to find the right block in the table to change, you do this: block_num * 0xC + 0x208F18C + 0x4 then you go to that address and follow the pointer at that address. somewhere very close by that address, you'll see 00000534 in ram/in the arm9. add up to 0xC8 more bytes to that and you have your own private save data. Link to comment Share on other sites More sharing options...
Bond697 Posted July 20, 2013 Share Posted July 20, 2013 the SaveBlockInit table for the small block with the pwt, vsplayer, musical narc, etc is @ 0x208EED4. Link to comment Share on other sites More sharing options...
Bond697 Posted July 20, 2013 Share Posted July 20, 2013 (edited) i posted this awhile ago somewhere else, but i found it again in some code i was working on tonight and figured i might as well throw it up here. typedef u32 OvlID; typedef void (*OvlStartupFunc) (void); typedef void (*OvlEndFunc) (void); struct OvlTblInfo { OvlID id; u8 *ram_address; u32 ram_size; u32 bss_size; OvlStartupFunc *constructor; OvlEndFunc *destructor; u32 file_id; u32 sz_compressed:24; u32 ovl_flags:8; }; struct OvlWork { int ovl_num; bool is_loaded; }; struct OvlInfo { OvlTblInfo head; Proc cpu_target; RomRegion file_pos; } OvlTblInfo is the overlay table data entry in y9 and y7.bin, though there are never any arm7 overlays, so y7.bin is always empty. the constructor and destructor don't necessarily have to run. only if you need to initialize and end things when loading/unloading the overlay. sizeof(OvlTblInfo) is 32. e: i wrote a quick program to dump the relevant info from overlay tables and provided a folder of all the necessary overlay info tables as text files here: http://projectpokemon.org/forums/showthread.php?29665-I-m-Done Edited July 20, 2013 by Bond697 Link to comment Share on other sites More sharing options...
Bond697 Posted July 23, 2013 Share Posted July 23, 2013 at 0x209DA98 in white 2 is a very important set of data. it's 24 bytes, 6 members: typedef void (*VBlankIntrFn)(void*); struct SystemVframe { VBlankIntrFn* callback; void* heap_1; u32 unused; u32 vram_transfer; void* vbl_intr_fn_arg; void* gfl_std_use; }; Address Offset Use 0x209DA98 0x209DA98 0x0 vblank callback function- changes based on what player is doing 0x209DA9C 0x4 ptr to first object in memory(objects being heaps) 0x209DAA0 0x8 unused- set to 0 while initializing 0x209DAA4 0xC u32 counter- successful vram transfers 0x209DAA8 0x10 vblank callback argument 0x209DAAC 0x14 ptr to gfl_use system blocks it's basically the vblank manager. one very interesting thing to note: all ds and gba games handle graphics the same way- they draw to the screen while the screen is empty(i.e. during vblank) to avoid casuing tearing, artifacting, etc on the screen while the game is running. the system and sdk graphics systems are obviously designed around this, etc. gamefreak does handle their graphics during vblank, but not in the conventional way. when the system boots, they enable the vblank interrupt callback in the interrupt table: ARM9:02005124 ; void __fastcall TwlMain() ARM9:02005124 TwlMain ARM9:02005124 F8 B5 PUSH {R3-R7,LR} ARM9:02005126 00 F0 1D F9 BL SystemInit ARM9:0200512A 00 F0 C5 F9 BL setupSystem ARM9:0200512E 25 49 LDR R1, =(_HBlankIntr+1) ; function ARM9:02005130 02 20 MOVS R0, #2 ; intrBit ARM9:02005132 74 F0 0B FE BL OS_SetIrqFunction ARM9:02005136 24 49 LDR R1, =(VBlankIntr+1) ; function ARM9:02005138 01 20 MOVS R0, #1 ; intrBit ARM9:0200513A 01 24 MOVS R4, #1 ARM9:0200513C 74 F0 06 FE BL OS_SetIrqFunction ARM9:02005140 03 20 MOVS R0, #3 ; intr ARM9:02005142 74 F0 AB FE BL OS_EnableIrqMask (note VBlankIntr) it looks something like this in normal code: void TwlMain() { SystemInit(); setupSystem(); OS_SetIrqFunction(OS_IE_H_BLANK, HBlankIntr); OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); OS_EnableIrqMask(HBlankIntr | VBlankIntr); anyway, what's weird is that they do the vblank thing and they do do graphics-related stuff in the vblank callback, but the only time the callback does anything of note is when you enter a building. a function runs that does a bunch of floating point math and a few other things. the actual graphics are updated during vblank, but outside of the vblank callback. the code (called updateGfx) runs as soon as the vblank callback finishes, which is fine. there's nothing wrong with doing it the way they do, it's just different. Link to comment Share on other sites More sharing options...
Bond697 Posted August 12, 2013 Share Posted August 12, 2013 you can adjust the volume of the main snd player @ 2149384 - 0x7F is max volume and 00 is min volume. if you want to adjust the sub-players, it's 0x2149384 + (i * 36) where i is the player number. there are 16 total possible players, but gen 5 uses 4. so use 0-3. Link to comment Share on other sites More sharing options...
Bond697 Posted August 27, 2013 Share Posted August 27, 2013 random note: it looks like pwt has its own type effectiveness chart, overlay 55 @ 0x1BD4. Link to comment Share on other sites More sharing options...
Bond697 Posted September 18, 2013 Share Posted September 18, 2013 here's something someone might want to look into: in personal.narc for bw2, there's a 16-bit value(bytes 11 and 12) that's used for how many of each ev a pokemon gives out when defeated. the first 12 bits are used for that because it's 2 bits per stat, 6 stats. however, the 13th bit is also used for something. it might be worth figuring out what that's for. Link to comment Share on other sites More sharing options...
LEGOanimal22 Posted September 18, 2013 Share Posted September 18, 2013 struct { u16 effort_hp:2 //lsb u16 effort_atk:2 u16 effort_def:2 u16 effort_spd:2 u16 effort_spatk:2 u16 effort_spdef:2 //msb } ... Link to comment Share on other sites More sharing options...
Bond697 Posted September 18, 2013 Share Posted September 18, 2013 reread what i said. Link to comment Share on other sites More sharing options...
LEGOanimal22 Posted September 18, 2013 Share Posted September 18, 2013 Which pokemon have the 13th bit flagged? I've never seen it flagged with my findings. Link to comment Share on other sites More sharing options...
Bond697 Posted September 19, 2013 Share Posted September 19, 2013 that's why i mentioned it... Link to comment Share on other sites More sharing options...
Bond697 Posted September 27, 2013 Share Posted September 27, 2013 i just threw together a quick program to find which personal files have that 13th bit set out of all 709 files. the only 2 out of everything are diglett and dugtrio. why that could possibly be, i have no god damn idea. source: http://pastebin.com/VD4P3u9n Link to comment Share on other sites More sharing options...
Bond697 Posted September 29, 2013 Share Posted September 29, 2013 i figured out what the 13th bit does. it indicates that diglett/dugtrio use a special animation for popping out of their pokeball. all other pokes jump out of their pokeball when the trainer throws the ball out, but diglett/dugtrio rise out of the ground when the ball is thrown out. if you set it for other pokes, they will rise up out of the ground when their ball is thrown out. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now