


FractalFusion did some great work in regards to gen 3 TAS, and I stumbled upon some of his Lua scripts and wanted to improve upon them for RNG abuse.
The following scripts work for R/S, you have to change the memory offset in the script if you are on FRLG/E
Party PKM #1 PID/IV Display
Spoiler
vvvvvvvvvvvvvvvvvvv
Last edited by Kaphotics; Aug 5th, 2011 at 11:55 PM.






http://pastebin.com/ZHxPYDsN
http://tasvideos.org/forum/viewtopic...=asc&start=200
considering these scripts are 99.9% fractalfusion's, there's no reason not to link to his stuff.



64 between each pkm in RAMCode:-- 64 -- 4360 43C4 4428 448C 44F0 4554 -- 45C0 4624
RS Party Pokemon Offsets
RS Enemy Pokemon offsets (single / double)
Last edited by Kaphotics; Aug 5th, 2011 at 11:56 PM.
the script only run on R/S?, 'cuz i try on LG & E and it doesn't work



You have to change the offsets to the memory locations for the version you want.
the offsets:
ruby/sapphire 0x03004360
emerald 0x02024190 J 0x020244EC U
firered 0x02024284
leafgreen 0x020241e4
are the same for Wild Pokemon?



No those are for party Pokemon, not for the wild Pokemon. Someone would have to find those locations for the other games.
=0x030045C0 is for R/S.
see below, I found the offsets and edited the lua to make each one work on all english games.
Last edited by Kaphotics; Aug 5th, 2011 at 11:56 PM.



I believe this works on Emerald (J):
The seed memory location is correct for sure but I'm not 100% sure on the enemy pokemon location. It seems to have worked so far though.Code:local natureorder={"Atk","Def","Spd","SpAtk","SpDef"} 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"} local typeorder={ "Fighting","Flying","Poison","Ground", "Rock","Bug","Ghost","Steel", "Fire","Water","Grass","Electric", "Psychic","Ice","Dragon","Dark"} local start=0x020243E8 local personality local trainerid local magicword local growthoffset local miscoffset local i local species local ivs local hpiv local atkiv local defiv local spdiv local spatkiv local spdefiv local nature local natinc local natdec local hidpowbase local hidpowtype while true do personality=memory.readdwordunsigned(start) trainerid=memory.readdwordunsigned(start+4) magicword=bit.bxor(personality, trainerid) seed=memory.readdwordunsigned(0x03005AE0) i=personality%24 if i<=5 then growthoffset=0 elseif i%6<=1 then growthoffset=12 elseif i%2==0 then growthoffset=24 else growthoffset=36 end if i>=18 then miscoffset=0 elseif i%6>=4 then miscoffset=12 elseif i%2==1 then miscoffset=24 else miscoffset=36 end species=bit.band(bit.bxor(memory.readdwordunsigned(start+32+growthoffset),magicword),0xFFF) ivs=bit.bxor(memory.readdwordunsigned(start+32+miscoffset+4),magicword) hpiv=bit.band(ivs,0x1F) atkiv=bit.band(ivs,0x1F*0x20)/0x20 defiv=bit.band(ivs,0x1F*0x400)/0x400 spdiv=bit.band(ivs,0x1F*0x8000)/0x8000 spatkiv=bit.band(ivs,0x1F*0x100000)/0x100000 spdefiv=bit.band(ivs,0x1F*0x2000000)/0x2000000 nature=personality%25 natinc=math.floor(nature/5) natdec=nature%5 hidpowtype=math.floor(((hpiv%2 + 2*(atkiv%2) + 4*(defiv%2) + 8*(spdiv%2) + 16*(spatkiv%2) + 32*(spdefiv%2))*15)/63) hidpowbase=math.floor(((bit.band(hpiv,2)/2 + bit.band(atkiv,2) + 2*bit.band(defiv,2) + 4*bit.band(spdiv,2) + 8*bit.band(spatkiv,2) + 16*bit.band(spdefiv,2))*40)/63 + 30) gui.text(0,0,"Stats") gui.text(30,0,"HP "..memory.readwordunsigned(start+86)) gui.text(65,0,"Atk "..memory.readwordunsigned(start+90)) gui.text(99,0,"Def "..memory.readwordunsigned(start+92)) gui.text(133,0,"SpA "..memory.readwordunsigned(start+96)) gui.text(167,0,"SpD "..memory.readwordunsigned(start+98)) gui.text(201,0,"Spe "..memory.readwordunsigned(start+94)) gui.text(0,8,"IVs") gui.text(30,8,"HP "..hpiv) gui.text(65,8,"Atk "..atkiv) gui.text(99,8,"Def "..defiv) gui.text(133,8,"SpA "..spatkiv) gui.text(167,8,"SpD "..spdefiv) gui.text(201,8,"Spe "..spdiv) gui.text(0,40,"PID: "..string.format("%08X", personality)) gui.text(60,40,"IVs: "..string.format("%08X", ivs)) gui.text(0,50,"Nature: "..naturename[nature+1]) gui.text(0,60,natureorder[natinc+1].."+ "..natureorder[natdec+1].."-") gui.text(167,15,"HP "..typeorder[hidpowtype+1].." "..hidpowbase) gui.text(0,95,vba.framecount()) gui.text(0,105,"Seed: "..string.format("%8X", seed)) print(""..string.format("%8X", seed)) emu.frameadvance() end
Edit: Too lazy to upload the file atm. Copy and paste it into a .txt file and change the extension to .lua.
The Seed is correct, but the start is wrong, although I used an other one..
Well the start memory location seems to be correct to me as it matched exactly when I looked at a pokemon in Enciclopedia Pokemon. If the address I have is wrong why don't you share yours?



There's multiple places it can be.
If you don't find the right location you will probably find one that is DMA shifted.
And here's JP Sapphire (and presumably JP Ruby)
Edit: I apologize for being short with you. It's just that a lot of people have been secretive about 3rd gen things for who knows how long while they only know what they know because of other people's work (ie. the guys who figured out the RNG mechanics in the first place).Code:local natureorder={"Atk","Def","Spd","SpAtk","SpDef"} 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"} local typeorder={ "Fighting","Flying","Poison","Ground", "Rock","Bug","Ghost","Steel", "Fire","Water","Grass","Electric", "Psychic","Ice","Dragon","Dark"} local start=0x030044F0 local personality local trainerid local magicword local growthoffset local miscoffset local i local species local ivs local hpiv local atkiv local defiv local spdiv local spatkiv local spdefiv local nature local natinc local natdec local hidpowbase local hidpowtype while true do personality=memory.readdwordunsigned(start) trainerid=memory.readdwordunsigned(start+4) magicword=bit.bxor(personality, trainerid) seed=memory.readdwordunsigned(0x03004748) i=personality%24 if i<=5 then growthoffset=0 elseif i%6<=1 then growthoffset=12 elseif i%2==0 then growthoffset=24 else growthoffset=36 end if i>=18 then miscoffset=0 elseif i%6>=4 then miscoffset=12 elseif i%2==1 then miscoffset=24 else miscoffset=36 end species=bit.band(bit.bxor(memory.readdwordunsigned(start+32+growthoffset),magicword),0xFFF) ivs=bit.bxor(memory.readdwordunsigned(start+32+miscoffset+4),magicword) hpiv=bit.band(ivs,0x1F) atkiv=bit.band(ivs,0x1F*0x20)/0x20 defiv=bit.band(ivs,0x1F*0x400)/0x400 spdiv=bit.band(ivs,0x1F*0x8000)/0x8000 spatkiv=bit.band(ivs,0x1F*0x100000)/0x100000 spdefiv=bit.band(ivs,0x1F*0x2000000)/0x2000000 nature=personality%25 natinc=math.floor(nature/5) natdec=nature%5 hidpowtype=math.floor(((hpiv%2 + 2*(atkiv%2) + 4*(defiv%2) + 8*(spdiv%2) + 16*(spatkiv%2) + 32*(spdefiv%2))*15)/63) hidpowbase=math.floor(((bit.band(hpiv,2)/2 + bit.band(atkiv,2) + 2*bit.band(defiv,2) + 4*bit.band(spdiv,2) + 8*bit.band(spatkiv,2) + 16*bit.band(spdefiv,2))*40)/63 + 30) gui.text(0,0,"Stats") gui.text(30,0,"HP "..memory.readwordunsigned(start+86)) gui.text(65,0,"Atk "..memory.readwordunsigned(start+90)) gui.text(99,0,"Def "..memory.readwordunsigned(start+92)) gui.text(133,0,"SpA "..memory.readwordunsigned(start+96)) gui.text(167,0,"SpD "..memory.readwordunsigned(start+98)) gui.text(201,0,"Spe "..memory.readwordunsigned(start+94)) gui.text(0,8,"IVs") gui.text(30,8,"HP "..hpiv) gui.text(65,8,"Atk "..atkiv) gui.text(99,8,"Def "..defiv) gui.text(133,8,"SpA "..spatkiv) gui.text(167,8,"SpD "..spdefiv) gui.text(201,8,"Spe "..spdiv) gui.text(0,40,"PID: "..string.format("%08X", personality)) gui.text(60,40,"IVs: "..string.format("%08X", ivs)) gui.text(0,50,"Nature: "..naturename[nature+1]) gui.text(0,60,natureorder[natinc+1].."+ "..natureorder[natdec+1].."-") gui.text(167,15,"HP "..typeorder[hidpowtype+1].." "..hidpowbase) gui.text(0,95,vba.framecount()) gui.text(0,105,"Seed: "..string.format("%8X", seed)) print("Seed: "..string.format("%8X", seed)) emu.frameadvance() end
Last edited by Hozu; Sep 1st, 2011 at 03:26 PM.


This is pretty cool.
I was thinking about something like this for 4th gen along time ago but never got around to doing it and then ended up forgetting about it completely.![]()
Bookmarks