Bond697 made this fix a while ago for the Emerald script but it wasn't posted here so... This uses the game's RNG advancement counter rather than the video frame for Emerald (NA version) for consistency.
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=0x02024744 local personality local trainerid local magicword local growthoffset local miscoffset local i local rngframe=0x020249C0 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(0x03005D80) 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,"Frame "..memory.readdwordunsigned(rngframe)) gui.text(0,105,"Seed: "..string.format("%8X", seed)) --print("Seed: "..string.format("%8X", seed)) emu.frameadvance() end
Have such scripts been made for the JP versions of FRLG? The seed address perhaps?






3005040



Pokemon Emerald (U)
Emerald Egg Tracking RNG Suite
fixed shiny check, fixed walking outside preservationCode: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
Last edited by Kaphotics; May 21st, 2012 at 01:00 AM.
Does anyong here have the memory address of the ID/SID in PKMN FR English version? I was able to use the Emerald script's part on Sapphire but with the Sapphire address for the ID/SID to display those attributes, now I would like to do the same for Fire Red. Or if possible coud one upload a script with the ability to see the ID/SID in Fire Red please?



Pretty sure it's DMA shifted every time, but after 3 times I found it at 02024288.
Anyways you can just use a save editor to find your ID/SID.
Thanks Kaphotics. I just needed this because I had been RNG'ing ID/SID in Fire Red and it was frustrating having to save state and collect a starter each time to identfy if it had worked.
Bookmarks