Jump to content

Kaphotics

Helpful Member
  • Posts

    6897
  • Joined

  • Last visited

  • Days Won

    323

Everything posted by Kaphotics

  1. 1) emulators have their own range. expand range drastically 2) time is the second the game boots. use the Movie function of desmume to specify start time rather than changing your computer time 3) no, RAM watch is used. you have to make one yourself from known addresses 4) we don't support gen 5 emu RNG on the grounds that it is pathetically easy on a DS -- no reason to emulate 5) before the nintendo logo appears right after the boot see 4)
  2. Pokemon Emerald (U) Emerald Egg Tracking RNG Suite local rng local timer local offset local pidpointer=0x0203BC78 local pidoffset local pid local iter=0 local base=0 local a local timerseed=0 local stepcounter local nature local ids local tid local sid local lpid local hpid local shiny local naturename={ "Hardy","Lonely","Brave","Adamant","Naughty", "Bold","Docile","Relaxed","Impish","Lax", "Timid","Hasty","Serious","Jolly","Naive", "Modest","Mild","Quiet","Bashful","Rash", "Calm","Gentle","Sassy","Careful","Quirky"} while true do a=memory.readdwordunsigned(0x03005D84) rng = memory.readwordunsigned(0x020249C0) timer = memory.readwordunsigned(0x030022E4) offset = math.floor(rng - timer) pidoffset = math.floor(memory.readdwordunsigned(pidpointer) + 0x988) pid = memory.readdwordunsigned(pidoffset) nature = math.floor(pid % 0x19) stepcounter = memory.readbyteunsigned(math.floor(pidoffset - 0x4,2)) ids = memory.readdwordunsigned(0x020244F0) sid = math.floor(ids / 65536) tid = ids % 0x10000 hpid = math.floor(pid / 65536) lpid = pid % 0x10000 shiny = bit.bxor(bit.bxor(sid,tid),bit.bxor(lpid,hpid)) gui.text(199,140, string.format("TID: %d", tid)) gui.text(199,150,string.format("SID: %d", sid)) gui.text(1,1, string.format("RNG Information:")) gui.text(1, 10, string.format("RNG Frame - %d", memory.readword(0x020249C0))) gui.text(1, 19, string.format("Timer Value - %d", memory.readword(0x030022E4))) gui.text(1, 28, string.format("Difference - %d", offset)) gui.text(1, 46, string.format("tRNG %08X", memory.readdwordunsigned(0x03005D84))) gui.text(1, 55, string.format("pRNG %08X", memory.readdwordunsigned(0x03005D80))) if a == 0 then base = offset iter = 0 elseif a > 0 then if base == base and iter < 1 then iter = math.floor(offset - base - 5) else base = offset end end if a == 0 then if pid == 0 then gui.text(1, 73, string.format("No Egg.")) else gui.text(1, 73, string.format("PID %08X", pid)) gui.text(1, 82,"Nature: "..naturename[nature+1]) end elseif a < 65536 then gui.text(1, 73, string.format("Egg Generating... please advance another frame!")) gui.text(1, 82, string.format("tRNG seeded, no temporary PID testing yet...")) elseif math.floor(memory.readdwordunsigned(0x03007D98)/65536) == math.floor(a/65536) then gui.text(1, 73, string.format("Egg Generating... please advance another frame!")) gui.text(1, 82, string.format("TempPID %08X", memory.readdwordunsigned(0x03007D98))) else gui.text(1, 73, string.format("PID %08X", pid)) -- gui.text(1, 91, string.format("loc %08X", pidoffset)) gui.text(1, 82,"Nature: "..naturename[nature+1]) if shiny < 8 then gui.text(1, 64, string.format("SHINY!!!")) end if iter > 1 then gui.text(1, 110, string.format("stone worked!")) gui.text(1, 100, string.format("approx iter: %d", iter)) else gui.text(1, 110, string.format("stone failed?")) gui.text(1, 100, string.format("first egg PID result")) end end gui.text(1,130,string.format("Step Counter: %02X", stepcounter)) if pid > 0 then gui.text(1,140,string.format("Egg Generated, go get it!")) elseif stepcounter == 254 then gui.text(1,140,string.format("Next Step might generate an egg!")) elseif stepcounter == 255 then gui.text(1,140,string.format("255th Step Taken.")) else gui.text(1,140,string.format("Keep on steppin'")) end emu.frameadvance() end fixed shiny check, fixed walking outside preservation
  3. generated (unrestricted) PIDIVs aren't being caught if the pokemon is from a gen 4 wondercard. chance of this happening ~ 0 http://www.pokecheck.org/?p=detail&uid=315711 example of something passing that shouldn't http://www.pokecheck.org/?p=detail&uid=804147 this is what the PIDIV should be recognized as -- this thing doesn't have the right PID type anyways
  4. looks like your issue is similar to this: http://answers.yahoo.com/question/index?qid=20110416114529AAxWtNS get a new rom/emulator, because it should be saving after you beat her
  5. other crap not particularly related to savs/structure: For the C-Gear skin appearing in the memory, at delay 0x94 when booting the ROM the C-Gear skin's .psk is loaded at location 0x0224A444 in my English White version; but only has the tile building region. The final tile of the .psk appears at 0x02150760 as well. That's all of the psk I can find on that delay. It's probably then encrypted away as it's already loaded by the game. so, possible to AR a skin in? possible, but not probable. The sheer amount of lines needed to overwrite 9.5KB.. lol edit: looks like it processes each tile and then stores it away
  6. .psk Structure: Tile Building Region: 0x0-0x1FDFF 0x20 per tile, referencing a 16 bit color for each pixel. Each tile makes up a 8x8 block of pixels (64 total). 0xFF (255) tiles total. 0x000 - First Tile 0x020 - Second Tile ... 0x1FB0 - 256th tile 0-F to reference 0-F'th color in the color table, build the 8x8 tile (color pixel by color pixel) left to right, top to bottom. Set up the tiles in a 16x16 array, left to right, top down. Color Table: 0x1FE0-0x1FFF Only 16 different colors allowed, 16 bits (1 word) per color. Tile Arrangement: 0x2000-0x25FF Choose tile for 8x8 pixel arrangement. Move Left to Right, at the end of each line go to the next. 16 bits to choose a tile from the array via (x,y) coordinates, when reading as bytes you would read as big endian (y x) sets. still not completely sure on the coordinate thing... viewing as 64 bits per line is the way to see it visually under a hex viewer
  7. Intro Since there isn't any information posted about how the C-Gear is planted within the save file, I might as well just explain how one would edit it. PokeStock is capable of editing the skin, but it's a pretty weird standalone program -- people may want to have their own program (in english) that can edit it. Plus it's good to know how it works! Background Information The C-Gear Skin is stored inside the save file as a .psk file ("poké-skin") after it is downloaded or edited. It's a pretty big portion of the save file, coming in at 9.50 KB of data -- that's around 2% of the entire save file's size. Visualizing it as an actual image is different, the .psk file format is not a .bmp or .jpg, and this is beyond me... PokeStock is able to visualize it and save it as a view-able image, however. Documentation of Save Structure for C-Gear Skins: 0x52000-0x545FF Contains the .psk data. Calculate Checksum of this region, call it checksum(1). 0x54603-0x54604 Contains the checksum of the .psk data. Overwrite the current value with checksum(1). 0x1C024-0x1C025 This is a Checksum Reference to the .psk checksum. Overwrite the current value with checksum(1). 0x1C02E-0x1C02F This is a Region Checksum of the reference checksums, which must be recalculated. Calculate the checksum of the region 0x1C000-0x1C02B, call it checksum(2). Overwrite the current value with checksum(2). 0x23F40-0x23F41 This is a Checksum Reference to the previous reference checksum checksum. Overwrite the current value with checksum(2). 0x23F9A-0x23F9B This is a Region Checksum of the nearby reference checksums. Calculate the checksum of the region 0x23F00-0x23F8B, call it checksum(3). Overwrite the current value with checksum(3). 0x54700-0x54702 This is a Checksum Reference to the previous reference checksum checksum. Overwrite the current value with checksum(3). 0x54712-0x54713 This is a Region Checksum of a dword which comprises of checksum(3) and zeroes. Calculate the checksum of the region 0x54700-0x54703, call it checksum(4). Overwrite the current value with checksum(4).
  8. Hacked / Event only (19) It also says it's an event move; which it is. The only reason certain events are recognized is because we have the wondercards to check against. If it is not normally obtainable in the handheld DS/GBA/GC series then it is not accounted for and is up to the user to check themselves. Creating an event moveset table is extremely time consuming, this time is much better spent elsewhere.
  9. thanks, old rod encounter table error or sync&oldrod most likely (here's another one that is presumably legal) edit: it was a problem with RNG reporter old rod method K, it's fixed now!
  10. please read the first post; provide links on things you think are false positives. you can't remove every single move on a pokemon ingame, so a blank moveset can't happen (thus red)
  11. desmume = lol. different versions supposedly cause different trash bytes.
  12. If you're still interested, KazoWAR has given the source for his B/W Roulette program, which edits the save file (particularly the battle box). http://projectpokemon.org/forums/showthread.php?21672 for other general stuff Mat/Bond697 has given the source for the now defunct PIDRNG tool - http://projectpokemon.org/forums/showthread.php?13076
  13. The emerald eggpid check doesn't aim to get every PID obtainable; it simply lists the lowest frame seed/option. The one that is listed on the page (9383) is much lower than the (A930) seed you hit. It's simply an earlier seed. Pokecheck is saying "It's possible for this PID to exist, so here's an example seed that would have you get this PID"
  14. being blunt here; we've figured absolutely everything out in terms to legality of gen 4/5 caught PKM.
  15. sigh you honestly have no idea what you are doing just use ram watch and get experience with RNG on an actual DS. then read how PIDs are generated, because pid is not always = high32 of the seed. Researcher just forecasts what seeds will appear, whereas Reporter forecasts what Pokemon you will get (given a starting point) at a given moment. just plug in the current seed value from ram watch and you will be fine.
  16. check out Enciclopedia Pokemon and PokeBoxGBA there's also psavfix http://pastebin.com/UTeQNjsx read also http://projectpokemon.org/forums/archive/index.php/t-15666.html
  17. Let this serve as an example for others: It doesn't help when you delete a Pokemon. This is not a thread to ask why your hacks come out as hacks, or why certain aspects of your hacks are getting flagged -> how to fix them.
  18. there's no such thing as "frame" the seed in gen 5 is 64 bits (2 memory addresses long), UPPER_LOWER. when the game needs a random value, it advances it and places a new magic number in its location. that new magic number is used for the next, and another new magic number will then be the next seed. it repeats. seriously just look at RNG Reporter's researcher. also, freezing and editing memory locations is not called RNG abuse, it's hacking. you may be using RNG mechanics but you're hacking stuff to be the way you want it.
  19. http://eggmove.com/encounterwhite.html http://eggmove.com/encounterblack.html http://www.smogon.com/forums/showpost.php?p=3331199&postcount=668 http://www.smogon.com/forums/showpost.php?p=3343310&postcount=673 encounter rates come in 2 distinctions: 12 slots for everything except fishing, which is 5 slots.
  20. there is no such thing as a frame, when a seed is used it replaces the previous one by being advanced once by the PRNG formula. researcher is your friend.
  21. http://projectpokemon.org/wiki/Notable_Breakpoints#Pok.C3.A9mon_BW_.28U.29
×
×
  • Create New...