Advertisement
Kirkq

Quest 64 Lua Script 2/26/2017

Feb 26th, 2017
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.02 KB | None | 0 0
  1. function round(num, numDecimalPlaces)
  2.   local mult = 10^(numDecimalPlaces or 0)
  3.   return math.floor(num * mult + 0.5) / mult
  4. end
  5.  
  6. function printMemoryDomains(x,y)
  7.     local list = {}
  8.     list = memory.getmemorydomainlist()
  9.     local curr = memory.getcurrentmemorydomain()
  10.     local num = table.getn(list)
  11.     local i
  12.     gui.text(x,y,"Current: " .. curr)
  13.     for i=0,num do
  14.     gui.text(x,y + 15*(i+1),list[i])
  15.     end
  16. end
  17.  
  18. function printLocation(x,y)
  19.     --0x7BABC related to movement startup
  20.     XSpeed = memory.readfloat(0x7BAE4, true, "RDRAM")
  21.     YSpeed = memory.readfloat(0x7BAEC, true, "RDRAM")
  22.     Speed = math.sqrt(XSpeed * XSpeed + YSpeed * YSpeed)
  23.     gui.text(x,y + 0,"X: " .. round(memory.readfloat(0x7BACC, true, "RDRAM"),4))
  24.     gui.text(x,y+15,"Y: " .. round(memory.readfloat(0x7BAD4, true, "RDRAM"),4))
  25.     gui.text(x,y+30,"XSpeed: " .. round(XSpeed,4))
  26.     gui.text(x,y+45,"YSpeed: " .. round(YSpeed,4))
  27.     gui.text(x,y+60,"Speed: " .. round(Speed,4))
  28. end
  29. --84EE6 and 84EEE strongly related to "area/zone or maybe music"
  30. --memory.write_u16_be(0x084EE6, 2, "RDRAM")
  31. --memory.write_u16_be(0x084EEE, 2, "RDRAM")
  32. --memory.write_u16_be(0x08536A, 2, "RDRAM")
  33.  
  34. function printItems(x,y)
  35.     for i=1,30 do
  36.     Item = memory.readbyte(0x8CF78 + (i -1), "RDRAM")
  37.     if Item ~= 255 and Item <= 25 then
  38.         gui.text(x,y + 15*(i-1), "Item:" .. globalItemList[Item+1])
  39.     end
  40.     end
  41. end
  42.  
  43. function printAgility (x,y)
  44.     --gui.text(x,y + 15*0,"Agi(?): " .. round(memory.readfloat(0x7BC14, true, "RDRAM"),4))
  45.     --gui.text(x+200,y + 15*0,"/800")
  46.     gui.text(x,y + 15*1,"AgiField: " .. round(memory.readfloat(0x7BC18, true, "RDRAM"),4))
  47.     gui.text(x+200,y + 15*1,"/1000")
  48.     gui.text(x,y+15*2,"AgiTown:  " .. round(memory.readfloat(0x7BC1C, true, "RDRAM"),4))
  49.     gui.text(x+200,y + 15*2,"/2000")
  50.     gui.text(x,y+15*3,"AgiBattle:" .. round(memory.readfloat(0x7BCA0, true, "RDRAM"),4))
  51.     gui.text(x+200,y + 15*3,"/50")
  52.     gui.text(x,y+15*4,"MPRecharge: " .. round(memory.readfloat(0x7BC0C, true, "RDRAM"),4))
  53.     gui.text(x+200,y + 15*4,"/35")
  54.    
  55.     --gui.text(x,y+15*3,"Camera: " .. round(memory.readfloat(0x85D3C, true, "RDRAM"),4))
  56.     --gui.text(x,y+15*4,"Camera: " .. round(memory.readfloat(0x85DAC, true, "RDRAM"),4))
  57.     --gui.text(x,y+15*5,"Camera: " .. round(memory.readfloat(0x85DE4, true, "RDRAM"),4))
  58.     --gui.text(x,y+15*6,"Camera: " .. round(memory.readfloat(0x85E54, true, "RDRAM"),4))
  59.     gui.text(x,y+15*7,"BattleLastX: " .. round(memory.readfloat(0x86B18, true, "RDRAM"),4))
  60.     --gui.text(x,y+15*8,"BattleLastZ: " .. round(memory.readfloat(0x86B1C, true, "RDRAM"),4))
  61.     gui.text(x,y+15*8,"BattleLastY: " .. round(memory.readfloat(0x86B20, true, "RDRAM"),4))
  62.     gui.text(x,y+15*9,"CameraCenteredHereX: " .. round(memory.readfloat(0x86DD8, true, "RDRAM"),4))
  63.     --gui.text(x,y+15*9,"CameraCenteredHereZ: " .. round(memory.readfloat(0x86DDC, true, "RDRAM"),4))
  64.     gui.text(x,y+15*10,"CameraCenteredHereY: " .. round(memory.readfloat(0x86DE0, true, "RDRAM"),4))
  65.     --gui.text(x,y+15*9,"ArenaX: " .. round(memory.readfloat(0x88188, true, "RDRAM"),4))
  66.     --gui.text(x,y+15*10,"ArenaX: " .. round(memory.readfloat(0x881B8, true, "RDRAM"),4))
  67.     --gui.text(x,y+15*11,"ArenaX: " .. round(memory.readfloat(0x8C5A4, true, "RDRAM"),4))
  68. end
  69.  
  70. function printEncounterCounter(x,y)
  71.     gui.text(x,y,"EncCount: " .. memory.read_u16_be(0x8C578, "RDRAM"))
  72.     --You can cheese 1.9 pixels as it rolls over.
  73.     gui.text(x+190,y,"/2000")
  74.     gui.text(x,y + 15,"Increment: " .. round(memory.readfloat(0x8C574, true, "RDRAM"),4))
  75.     RNG_EC = memory.read_u32_be(0x4D748, "RDRAM")
  76.     gui.text(x,y + 30, "RNG: " .. RNG_EC .. " = " .. string.format("%08X ", RNG_EC))
  77.     gui.text(x,y + 45, "A: " .. memory.read_u16_be(0x22FE2, "RDRAM"))
  78.     gui.text(x,y + 60, "B: " .. memory.read_u16_be(0x22FE4, "RDRAM") - 1000)
  79.     gui.text(x,y + 75, "C: " .. memory.read_u16_be(0x22FE6, "RDRAM"))
  80. end
  81.  
  82. function freezeEncounterCounter()
  83.     memory.write_u16_be(0x8C578, 0, "RDRAM")
  84.     memory.writefloat(0x8C574, 0, true, "RDRAM")
  85. end
  86.  
  87. function highEncounterCounter()
  88.    memory.write_u16_be(0x8C578, 1800,"RDRAM")
  89. end
  90.  
  91. function printEnemyStats(x,y)
  92.   EnemiesLeft = memory.readbyte(0x07C993, "RDRAM")
  93.   TimeUntilYouAct = memory.read_u16_be(0x07C99A, "RDRAM")
  94.  
  95.   gui.text(x,y,"ToAct:" .. TimeUntilYouAct)
  96.  
  97.   NumEnemies = EnemiesLeft -- For Now, Not Ideal
  98.   if NumEnemies > 0 then
  99.   for i=1,NumEnemies do
  100.      Base = 0x07C99C  --next = 0x07CAC4
  101.      WalkDec1 = memory.read_u16_be(0x07C99C + 296*(i-1), "RDRAM")
  102.      RelatedToAttacking = memory.read_u16_be(0x07C99E + 296*(i-1), "RDRAM")
  103.      RelatedToAttacking2 = memory.read_u16_be(0x07C9A0 + 296*(i-1), "RDRAM")
  104.      FloatSomething = memory.readfloat(0x7C9A8 + 296*(i-1), true, "RDRAM")
  105.      CurrHP = memory.read_u16_be(0x07C9A2 + 296*(i-1), "RDRAM")   --9A2 and ACA and BF2  --7C993 = dead?  3 = alive, 2 = dead? (296 = 0x128)
  106.      MaxHP = memory.read_u16_be(0x07C9A4 + 296*(i-1), "RDRAM")
  107.      X = memory.readfloat(0x7C9BC + 296*(i-1), true, "RDRAM")
  108.      Z = memory.readfloat(0x7C9C0 + 296*(i-1), true, "RDRAM")
  109.      Y = memory.readfloat(0x7C9C4 + 296*(i-1), true, "RDRAM")
  110.      
  111.      RapidlyChanging1 = memory.read_u16_be(0x07C9C6 + 296*(i-1), "RDRAM")
  112.      RapidlyChanging2 = memory.read_u16_be(0x07C9D4 + 296*(i-1), "RDRAM")
  113.      RapidlyChanging3 = memory.read_u16_be(0x07C9D6 + 296*(i-1), "RDRAM")
  114.      RapidlyChanging4 = memory.read_u16_be(0x07C9DC + 296*(i-1), "RDRAM")
  115.      RapidlyChanging5 = memory.read_u16_be(0x07C9DE + 296*(i-1), "RDRAM")
  116.      
  117.      SizeModifier = memory.readfloat(0x7C9E0 + 296*(i-1), true, "RDRAM")
  118.      --memory.writefloat(0x7C9E0, 0.4, true, "RDRAM") -- Meme Address
  119.      TrueSize = memory.readfloat(0x7C9E4 + 296*(i-1), true, "RDRAM")
  120.      Float3 = memory.readfloat(0x7C9E8 + 296*(i-1), true, "RDRAM")
  121.      Float4 = memory.readfloat(0x7C9EC + 296*(i-1), true, "RDRAM")
  122.      Float5 = memory.readfloat(0x7C9F0 + 296*(i-1), true, "RDRAM")
  123.      
  124.      
  125. --Hell Hound: Anything below 20.9 distance from center to center."
  126. --Were Hare less than 15.6 hits.  Difference of 5.3    
  127.      
  128.      --Hell Hound sphere of influence is about 27.0
  129.      -- 0.084
  130.      -- 130
  131.      -- 130 * 0.084 = 10.92
  132.      -- -1.428
  133.      -- 1
  134.      -- 120
  135.      
  136.      -- 0.07
  137.      -- 80
  138.      -- 80 * 0.07 = 5.6
  139.      -- 0.2275
  140.      -- 1
  141.      -- 120
  142.      
  143.      
  144.      ID = memory.readbyte(0x07CA0D + 296*(i-1), "RDRAM") --A0D
  145.      
  146.      RapidlyChanging6 = memory.read_u16_be(0x07CA10 + 296*(i-1), "RDRAM")
  147.      RapidlyChanging7 = memory.read_u16_be(0x07CA12 + 296*(i-1), "RDRAM")
  148.      RelatedToAttacking3 = memory.readbyte(0x07CA19+ 296*(i-1), "RDRAM")
  149.      Dunno1 = memory.readbyte(0x07CA1B+ 296*(i-1), "RDRAM")
  150.      Atk = memory.read_u16_be(0x07CAAC + 296*(i-1), "RDRAM")
  151.      Agi = memory.read_u16_be(0x07CAAE + 296*(i-1), "RDRAM")
  152.      Def= memory.read_u16_be(0x07CAB0 + 296*(i-1), "RDRAM")
  153.      --Exp does not appear to be here.  Total Exp for battle maybe?
  154.      
  155.      gui.text(x+100*(i-1),y+15,"HP:" .. CurrHP .. "/" .. MaxHP)
  156.      gui.text(x+100*(i-1),y+30,"At:" .. Atk)
  157.      gui.text(x+100*(i-1),y+45,"De:" .. Def)
  158.      gui.text(x+100*(i-1),y+60,"Ag:" .. Agi)
  159.      gui.text(x+100*(i-1),y+75,"ID:" .. ID)
  160.      gui.text(x+100*(i-1),y+90,"WalkDec:" .. WalkDec1)
  161.      gui.text(x+100*(i-1),y+105,"Size:" .. round(SizeModifier*TrueSize,4))
  162.      --gui.text(x+100*(i-1),y+120,"3:" .. Dunno3)
  163.   end
  164.   end
  165. end
  166.  
  167.  
  168. --Solvaring
  169. --Zelse
  170. --Nepty
  171. --Shilf
  172. --Fargo
  173. --Guilty
  174. --Beigis Stats in ROM at D87944
  175. --Mammon in ROM at D8797C --Offset is 0x38
  176. --*
  177. --*
  178. --6 areas and bosses
  179. --
  180. --0x112664 07D0BF 07D0AF 07D0AE 07D0AD 07D0AA 07D0A9
  181. --1 96 68 9 39 8 39
  182. --0 116 112 90 41 89 41
  183. --255 136 184 144 38 144 38
  184. --0 156 164 32 40 31 40
  185. --0 176 192 140 39 140 39
  186.  
  187. --39 39 39 39 39 8 144 39 9 68 96 65 141
  188. --41 41 41 41 41 89 144 41 90 112 116 129 147
  189.  
  190. --Were Hare ADC094 80, 140, 0.07
  191. --Hell Hound 130, 170, 0.084
  192. --Man Eater 115, 135, 0.084
  193. --Big Mouth ADC13C 130, 70, 0.105
  194. --Parassault 90, 150, 0.077
  195. --Orc Jr 90, 150, 0.077
  196. --Gremlin 90, 140, 0.084
  197. --Skeleton 90, 135, 0.084
  198. --Ghost Hound 90, 238, 0.084
  199. --Merrow 130, 170, 0.084
  200. --Wolf Goat 80, 125, 0.084, 130, 170, 0.091
  201. --*
  202. --Goblin B6337C
  203. --Frog King
  204. --Apophis
  205. --Mad Doll
  206. --Death Hugger
  207. --Kobold
  208. --Man Trap
  209. --Bat
  210. --Frog Knight
  211. --Marionasty
  212. --Dark Goblin
  213. --Hot Lips
  214. --Ghost Stalker B6361C
  215. --Treant
  216. --Cockatrice
  217. --*
  218. --Multi-Optics BBDE9C
  219. --Mimic
  220. --Crawler
  221. --Scorpion
  222. --Scare Crow
  223. --Wyvern
  224. --Skelebat
  225. --Cryshell BBE024
  226. --Blood Jell
  227. --Caterpillar (9)  -- C7D935 is interesting, may be red herring
  228. --Fish Man
  229. --*
  230. --Sandman (ID 0) C317EC
  231. --Werecat
  232. --Nightmare
  233. --Blue Man
  234. --Winged Sunfish
  235. --Gloon Wing
  236. --Ogre (ID 6)  
  237. --Rocky (ID 7)
  238. --Red Wyvern
  239. --FlamedMane
  240. --Magma Fish
  241. --RedRose (ID 11)
  242. --WhiteRoseKnight: C31A8C
  243. --*
  244. --Orc C9BE54
  245. --Ghost C9BE8C
  246. --Will o Wisp
  247. --Sprite
  248. --JackoLantern
  249. --Arachnoid
  250. --Lamia
  251. --Temptress
  252. --Pixie
  253. --Grangach
  254. --Thunder Jell
  255. --Termant
  256. --*
  257. --Judgment HP: CC443C
  258. --Pin Head HP: CC44AC
  259. --Pale Rider: CC4474
  260. --Spriggan: CC44E4
  261.  
  262. --RNG ROM
  263. --023BE2 =16838 and 023BE6 = 20077
  264. --41C64E6Dh + 3039h
  265. --12345 or 13345  ??
  266. --023BE4
  267.  
  268. --RNG RAM
  269. --022FE0
  270. --memory.write_u16_be(0x22FE2, 0, "RDRAM")
  271. --memory.write_u16_be(0x22FE4, 300, "RDRAM")
  272. --memory.write_u16_be(0x22FE6, 0, "RDRAM")
  273.  
  274. --Avalanche Y starts at 0x86F2C
  275.  
  276. function printStats(x,y)
  277.     local Exp = memory.read_u32_be(0x07BA90, "RDRAM")
  278.     local HPLv = memory.readbyte(0x07BAB0, "RDRAM")
  279.     local MPLv = memory.readbyte(0x07BAB1, "RDRAM")
  280.     local AgiLv = memory.readbyte(0x07BAB2, "RDRAM")
  281.     local DefLv = memory.readbyte(0x07BAB3, "RDRAM")
  282.     local Lv = memory.readbyte(0x07BAB4, "RDRAM")
  283.     local CurrHP = memory.read_u16_be(0x7BA84, "RDRAM")
  284.     local MaxHP = memory.read_u16_be(0x7BA86, "RDRAM")
  285.     local HPSub = memory.readbyte(0x7BAA9, "RDRAM")
  286.     local CurrMP = memory.read_u16_be(0x7BA88, "RDRAM")
  287.     local MaxMP = memory.read_u16_be(0x7BA8A, "RDRAM")
  288.     local MPSub = memory.readbyte(0x7BAAB, "RDRAM")
  289.     local Def = memory.readbyte(0x7BA8F, "RDRAM")
  290.     local DefSub = memory.readbyte(0x7BAAF, "RDRAM")
  291.     local Agi = memory.readbyte(0x7BA8D, "RDRAM")
  292.     local AgiSub = memory.readbyte(0x7BAAD, "RDRAM")
  293.     gui.text(x,y+0,"HP: " .. CurrHP .. "/" .. MaxHP .. " (" .. HPSub .. "/" .. globalStatTable[HPLv+1] ..")")
  294.     gui.text(x,y+15,"MP: " .. CurrMP .. "/" .. MaxMP .. " (" .. MPSub .. "/" .. 4*globalStatTable[MPLv+1] ..")")
  295.     gui.text(x,y+30,"Def: " .. Def .. " (" .. DefSub .. "/" .. 2*globalStatTable[DefLv+1] ..")")
  296.     gui.text(x,y+45,"Agi: " .. Agi .. " (" .. AgiSub .. "/" .. globalStatTable[AgiLv+1] ..")")
  297.     gui.text(x,y+60,"Lv: " .. Lv .. " (" .. Exp .. "/" .. globalLvTable[Lv+1] .. ")")
  298. end
  299.  
  300. function HP50()
  301. memory.write_u16_be(0x7BA84, 50, "RDRAM")
  302. end
  303. function setSpirits(f,e,wa,wi)
  304. memory.writebyte(0x7BAA4, f, "RDRAM")
  305. memory.writebyte(0x7BAA5, e, "RDRAM")
  306. memory.writebyte(0x7BAA6, wa, "RDRAM")
  307. memory.writebyte(0x7BAA7, wi, "RDRAM")
  308. end
  309. function setStats(HP,MP,De,Ag)
  310. memory.write_u16_be(0x7BA86, HP, "RDRAM")
  311. memory.write_u16_be(0x7BA8A, MP, "RDRAM")
  312. memory.writebyte(0x7BA8F, De, "RDRAM")
  313. memory.writebyte(0x7BA8D, Ag, "RDRAM")
  314. end
  315. function stackOfJewelsAndWings()
  316. --Earth Orb opens Connor Fortress door.
  317. --Wind Jade opens door to access Blue Cave.
  318. --Water Jewel reopens ship.
  319. memory.writebyte(0x8CF78, 20, "RDRAM")
  320. memory.writebyte(0x8CF79, 21, "RDRAM")
  321. memory.writebyte(0x8CF7A, 22, "RDRAM")
  322. memory.writebyte(0x8CF7B, 14, "RDRAM")
  323. memory.writebyte(0x8CF7C, 15, "RDRAM")
  324. memory.writebyte(0x8CF7D, 16, "RDRAM")
  325. memory.writebyte(0x8CF7E, 17, "RDRAM")
  326. memory.writebyte(0x8CF7F, 18, "RDRAM")
  327. memory.writebyte(0x8CF80, 19, "RDRAM")
  328. end
  329.  
  330. function setupLvTable(tmpTable)
  331.    --This table is calculated off the current level.
  332.    local i
  333.    for i=1,99 do
  334.    tmpTable[i] = memory.read_u32_be(0x05493C+4*(i-1),"ROM")
  335.    end
  336.    return tmpTable
  337. end
  338. function printLvTable(x,y,tmpTable)
  339.    local i
  340.    for i=1,99 do
  341.     gui.text(x,y+i*15,tmpTable[i])
  342.    end
  343. end
  344. function setupStatTable(tmpTable1)
  345.    --This table is calculated off the concept of numStatLevels, not current level.
  346.    local i
  347.    for i=1,70 do
  348.    tmpTable1[i] = memory.read_u16_be(0x054ACC+2*(i-1),"ROM")
  349.    end
  350.    return tmpTable1
  351. end
  352. function printStatTable(x,y,tmpTable1)
  353. --ROM 0x054909 is starting stats I think?
  354.    local i
  355.    for i=1,70 do
  356.     gui.text(x,y+i*15,tmpTable1[i])
  357.    end
  358. end
  359.  
  360. function printObjectCoordinates(x,y)
  361. --memory.writefloat(0x86F2C, 1600, true, "RDRAM")
  362. BrianX = memory.readfloat(0x7BACC, true, "RDRAM")
  363. BrianY = memory.readfloat(0x7BAD4, true, "RDRAM")
  364.  
  365. i = 1 --Enemy number 1 (starting at 1)
  366. EnemyX = memory.readfloat(0x7C9BC + 296*(i-1), true, "RDRAM")
  367. EnemyY = memory.readfloat(0x7C9C4 + 296*(i-1), true, "RDRAM")
  368.  
  369. for i=1,10 do
  370. --memory.writefloat(0x86F24 + 60*(i-1), -20, true, "RDRAM") --X
  371. --memory.writefloat(0x86F2C + 60*(i-1), -350, true, "RDRAM") --Y
  372.  
  373. --RightSide -1367,930
  374. --LeftSide -1327, 930
  375. --BackSide -1347, 948
  376. --FrontSide -1347, 908
  377.  
  378. --Hell Hound: Anything below 20.9 distance from center to center."
  379. --Were Hare less than 15.6 hits.
  380. --
  381. --Solvaring 10 + 8.4  Note: Solvaring is moving about half a pixel during standing.
  382. --Zelse 10 + 5.6  (Investigate Zelse Mid-Range)  Zelse moves about 0.4 pixels during standing.  He recoils a couple pixels when hit.
  383. --Nepty 10 + 4.9  Nepty moves about 0.4 px during standing.
  384. --Shilf 10 + 4.9  Shilf moves about 0.05
  385. --Fargo 10 + 7 moves about 0.05
  386. --Guilty 10 + 9.52 No movement
  387. --Beigis 10 + 6.3 No movement
  388. --Mammon 10 + 94.5 Moves around 0.6 px.
  389.  
  390. Timer = memory.read_u16_be(0x86F1C + 60*(i-1), "RDRAM")
  391. X = memory.readfloat(0x86F24 + 60*(i-1), true, "RDRAM")
  392. Z = memory.readfloat(0x86F28 + 60*(i-1), true, "RDRAM")
  393. Y = memory.readfloat(0x86F2C + 60*(i-1), true, "RDRAM")
  394. XDiff= BrianX - X
  395. YDiff= BrianY - Y
  396. D = math.sqrt(XDiff*XDiff + YDiff*YDiff)
  397. A = math.atan2(XDiff,YDiff)*(180/(math.pi))
  398. EnemyXDiff = EnemyX - X
  399. EnemyYDiff = EnemyY - Y
  400. EnemyD = math.sqrt(EnemyXDiff*EnemyXDiff + EnemyYDiff*EnemyYDiff)
  401. EnemyA = math.atan2(EnemyXDiff,EnemyYDiff)*(180/(math.pi))
  402.  
  403.  
  404.  
  405. j=0
  406. if i > 5 then
  407. j=1
  408. end
  409.  
  410. if (Timer > 0) then
  411. gui.text(x+140*(i-j*5-1),y+0*15 + j*100,"Timer: " .. Timer)
  412. gui.text(x+140*(i-j*5-1),y+1*15 + j*100,"X: " .. round(X,3))
  413. gui.text(x+140*(i-j*5-1),y+2*15 + j*100,"Z: " .. round(Z,3))
  414. gui.text(x+140*(i-j*5-1),y+3*15 + j*100,"Y: " .. round(Y,3))
  415. gui.text(x+140*(i-j*5-1),y+4*15 + j*100,"D: " .. round(D,3))
  416. gui.text(x+140*(i-j*5-1),y+5*15 + j*100,"A: " .. round(A,3))  --16 angles
  417. --gui.text(x+140*(i-j*5-1),y+4*15 + j*100,"D: " .. round(EnemyD,3))
  418. --gui.text(x+140*(i-j*5-1),y+5*15 + j*100,"A: " .. round(EnemyA,3))
  419. end
  420. end
  421.  
  422.  
  423. --F1C Timer
  424. --F24 X
  425. --F28 Z
  426. --F2C Y
  427.  
  428. --F60 X
  429. --F64 Z
  430. --F68 Y
  431. end
  432.  
  433. function rocksBrianToEnemy(BrianX1,BrianY1,EnemyX1,EnemyY1,Size1)
  434.  
  435. numRocks1 = 0
  436.  
  437. --textfile = "BizDump2"
  438. --dumpfile = textfile..".txt"
  439. --io.output(dumpfile)
  440.  
  441.  
  442. for i=0,15 do --Angles
  443. for j=20,39 do --Distances
  444. thisRockX1= BrianX1 + j*math.cos(i*22.5*math.pi/180)
  445. thisRockY1= BrianY1 + j*math.sin(i*22.5*math.pi/180)
  446.  
  447. XDiff1= thisRockX1 - EnemyX1
  448. YDiff1= thisRockY1 - EnemyY1
  449. D1 = math.sqrt(XDiff1*XDiff1 + YDiff1*YDiff1)
  450. if D1 <= Size1 + 10 then
  451. numRocks1 = numRocks1 + 1
  452. --io.write(thisRockX1, " ", thisRockY1, " ", i, " ", j, "\n")
  453. end
  454.  
  455. end
  456. end
  457.  
  458. --io.output():close()
  459.  
  460. return numRocks1
  461. end
  462.  
  463. function howManyRocksCurrently(x,y)
  464. BrianX = memory.readfloat(0x7BACC, true, "RDRAM")
  465. BrianY = memory.readfloat(0x7BAD4, true, "RDRAM")
  466. i = 1 --Enemy number 1 (starting at 1)
  467. EnemyX = memory.readfloat(0x7C9BC + 296*(i-1), true, "RDRAM")
  468. EnemyY = memory.readfloat(0x7C9C4 + 296*(i-1), true, "RDRAM")
  469. SizeModifier = memory.readfloat(0x7C9E0 + 296*(i-1), true, "RDRAM")
  470. TrueSize = memory.readfloat(0x7C9E4 + 296*(i-1), true, "RDRAM")
  471. Size = SizeModifier*TrueSize
  472. XDiff= BrianX - EnemyX
  473. YDiff= BrianY - EnemyY
  474. D = math.sqrt(XDiff*XDiff + YDiff*YDiff)
  475. A = math.atan2(XDiff,YDiff)*(180/(math.pi))
  476.  
  477. R = rocksBrianToEnemy(BrianX,BrianY,EnemyX,EnemyY,Size)
  478.  
  479. gui.text(x,y+15*0,"D: " .. round(D,3))
  480. gui.text(x,y+15*1,"A: " .. round(A,3))
  481. gui.text(x,y+15*2,"EnemySize:" .. round(Size,3))
  482. gui.text(x,y+15*3,"NumRocks:" .. R .. " (0x" .. string.format("%02X", R) .. ") ")
  483. gui.text(x,y+15*4,"BrianX:" .. round(BrianX,4))
  484. gui.text(x,y+15*5,"BrianY:" .. round(BrianY,4))
  485. gui.text(x,y+15*6,"EnemyX:" .. round(EnemyX,4))
  486. gui.text(x,y+15*7,"EnemyY:" .. round(EnemyY,4))
  487.  
  488. end
  489.  
  490. function heatMapGenerator()
  491. MapSize = 120
  492. BrianX = math.floor(MapSize/2)
  493. BrianY = math.floor(MapSize/2)
  494. Size = 6.3
  495. --Solvaring 10 + 8.4  Note: Solvaring is moving about half a pixel during standing.
  496. --Zelse 10 + 5.6  (Investigate Zelse Mid-Range)  Zelse moves about 0.4 pixels during standing.  He recoils a couple pixels when hit.
  497. --Nepty 10 + 4.9  Nepty moves about 0.4 px during standing.
  498. --Shilf 10 + 4.9  Shilf moves about 0.05
  499. --Fargo 10 + 7 moves about 0.05
  500. --Guilty 10 + 9.52 No movement
  501. --Beigis 10 + 6.3 No movement
  502. --Mammon 10 + 94.5 Moves around 0.6 px.
  503. heatTextfile = "HeatMap"
  504. heatDumpfile = heatTextfile..".txt"
  505. io.output(heatDumpfile)
  506.  
  507. Max = 0
  508.  
  509. for EnemyX=0,MapSize do
  510. for EnemyY=MapSize,0,-1 do
  511. R = rocksBrianToEnemy(BrianX,BrianY,EnemyX,EnemyY,Size)
  512. if R > Max then
  513. Max = R
  514. end
  515. io.write(string.format("%02X ", R))
  516. end
  517. io.write("\n")
  518. end
  519.  
  520. io.write("\n")
  521. io.write("EnemySize: " .. Size)
  522. io.write("\n")
  523. io.write("Max: ", string.format("%02X", Max))
  524. io.write("\n")
  525. io.write("MapSize: " .. MapSize+1)
  526.  
  527. io.output():close()
  528.  
  529.  
  530. end
  531.  
  532. globalItemList = {
  533. "0. Spirit Light",
  534. "1. Fresh Bread",
  535. "2. Honey Bread",
  536. "3. Healing Potion",
  537. "4  Dragon's Potion",
  538. "5. Dew Drop",
  539. "6. Mint Leaves",
  540. "7. Heroes Drink",
  541. "8. Silent Flute",
  542. "9.Celine's Bell",
  543. "10.Replica",
  544. "11.Giant's Shoes",
  545. "12.Silver Amulet",
  546. "13.Golden Amulet",
  547. "14.White Wings",
  548. "15.Yellow Wings",
  549. "16.Blue Wings",
  550. "17.Green Wings",
  551. "18.Red Wings",
  552. "19.Black Wings",
  553. "20.Earth Orb",
  554. "21.Wind Jade",
  555. "22.Water Jewel",
  556. "23.Fire Ruby",
  557. "24.Eletale Book",
  558. "25.Dark Gaol Key",
  559. }
  560.  
  561. function CalcNextRNG(x,y)
  562. RNG1 = memory.read_u32_be(0x04D748, "RDRAM")
  563. Next1RNG = getNextRNG(RNG1)
  564. Next2RNG = getNextRNG(Next1RNG)
  565. Next3RNG = getNextRNG(Next2RNG)
  566.  
  567. --gui.text(x,y+0,"NextLo: " .. string.format("%08X ",R_LO2))
  568. --gui.text(x,y+15,"NextHi: " .. string.format("%08X ",R_HI2))
  569. gui.text(x,y+30,"NextRNG1: " .. string.format("%08X ", Next1RNG))
  570. gui.text(x,y+45,"NextRNG2: " .. string.format("%08X ", Next2RNG))
  571. gui.text(x,y+60,"NextRNG3: " .. string.format("%08X ", Next3RNG))
  572. gui.text(x,y+75,"BufRNG1: " .. string.format("%08X ", BufRNG))
  573. gui.text(x,y+90,"BufRNG2: " .. string.format("%08X ", BufRNG2))
  574. gui.text(x,y+105,"BufRNG3: " .. string.format("%08X ", BufRNG3))
  575.  
  576. if RNGTableGlobal[1]~= nil then
  577. for i=1,100 do -- Was 10000
  578. if RNG1 == RNGTableGlobal[i] then
  579. gui.text(x,y+120,"RNG Increment: " .. i)
  580. i = 1000000
  581. end
  582. end
  583. end
  584.  
  585. modifier = 1
  586. if memory.read_u16_be(0x7BD30, "RDRAM")==1 then
  587. modifier = -1
  588. end
  589. Counter1 = modifier * memory.read_u16_be(0x7BD32, "RDRAM")
  590. if Counter1 ~= 1 then
  591. Last1 = Counter1
  592. end
  593. gui.text(x,y+135,"Counter1: " .. Counter1 .. " " .. Last1)
  594.  
  595. modifier = 1
  596. if memory.read_u16_be(0x7BDB4, "RDRAM")==1 then
  597. modifier = -1
  598. end
  599. Counter2 = modifier * memory.read_u16_be(0x7BDB6, "RDRAM")
  600. if Counter2 ~= 1 then
  601. Last2 = Counter2
  602. end
  603. gui.text(x,y+150,"Counter2: " .. Counter2 .. " " .. Last2)
  604.  
  605. --[[
  606. modifier = 1
  607. if memory.read_u16_be(0x7C1B6, "RDRAM")==1 then
  608. modifier = -1
  609. end
  610. Counter6 = modifier * memory.read_u16_be(0x7C1B8, "RDRAM")
  611. if Counter6 ~= 1 then
  612. Last6 = Counter6
  613. end
  614. gui.text(x,y+165,"Counter6: " .. Counter6 .. " " .. Last6)
  615. --]]
  616.  
  617. modifier = 1
  618. if memory.read_u16_be(0x7C1D4, "RDRAM")==1 then
  619. modifier = -1
  620. end
  621. Counter3 = modifier * memory.read_u16_be(0x7C1D6, "RDRAM")
  622. if Counter3 ~= 1 then
  623. Last3 = Counter3
  624. end
  625. gui.text(x,y+180,"Counter3: " .. Counter3 .. " " .. Last3)
  626.  
  627. modifier = 1
  628. if memory.read_u16_be(0x7C258, "RDRAM")==1 then
  629. modifier = -1
  630. end
  631. Counter4 = modifier * memory.read_u16_be(0x7C25A, "RDRAM")
  632. if Counter4 ~= 1 then
  633. Last4 = Counter4
  634. end
  635. gui.text(x,y+195,"Counter4: " .. Counter4 .. " " .. Last4)
  636.  
  637. modifier = 1
  638. if memory.read_u16_be(0x7C23C, "RDRAM")==1 then
  639. modifier = -1
  640. end
  641. Counter5 = modifier * memory.read_u16_be(0x7C23E, "RDRAM")
  642. if Counter5 ~= 1 then
  643. Last5 = Counter5
  644. end
  645. gui.text(x,y+210,"Counter5: " .. Counter5 .. " " .. Last5)
  646.  
  647. Incrementer = memory.read_u16_be(0x86A1A, "RDRAM")
  648. if Incrementer > 32768 then
  649. Incrementer = Incrementer - 65536
  650. end
  651. Incrementer = Incrementer - 6
  652. gui.text(x,y+225,"Increment4: " .. Incrementer) -- see also 7C1D4.
  653. Incrementer = memory.read_u16_be(0x86A32, "RDRAM")
  654. if Incrementer > 32768 then
  655. Incrementer = Incrementer - 65536
  656. end
  657. Incrementer = Incrementer - 6
  658. gui.text(x,y+240,"Increment4: " .. Incrementer) -- see also 7C1D4.
  659.  
  660. --memory.write_u16_be(0x86A1A, 3, "RDRAM")
  661. --memory.write_u16_be(0x86A32, 3, "RDRAM")
  662.  
  663. --memory.write_u16_be(0x22FE2, 0, "RDRAM")  --41C6   --0 FREEZES RNG
  664. --memory.write_u16_be(0x22FE4, 2001, "RDRAM")
  665. --memory.write_u16_be(0x22FE6, 1, "RDRAM") --4E6D   --0 FREEZES RNG
  666.  
  667. --memory.write_u32_be(0x4D748, 0x00000001, "RDRAM")
  668.  
  669. --memory.write_u16_be(0x86A1A, 0, "RDRAM")
  670. --memory.write_u16_be(0x7BDB6, 10, "RDRAM")
  671. --memory.write_u16_be(0x7C1D6, 10, "RDRAM")
  672.  
  673. if PrevRNG ~= Next1RNG then
  674. BufRNG3 = PrevRNG3
  675. BufRNG2 = PrevRNG2
  676. BufRNG = PrevRNG
  677. PrevRNG3 = Next3RNG -- This is poorly buffered and doesn't quite work right, basically just a sanity check.
  678. PrevRNG2 = Next2RNG -- This is poorly buffered and doesn't quite work right, basically just a sanity check.
  679. PrevRNG = Next1RNG  --Lol double buffer
  680. end
  681. end
  682.  
  683. function getNextRNG(passedRNG)
  684. A1 = memory.read_u16_be(0x22FE2, "RDRAM")
  685. B1 = memory.read_u16_be(0x22FE4, "RDRAM") - 1000
  686. C1 = memory.read_u16_be(0x22FE6, "RDRAM")
  687.  
  688. R_HI1 = math.floor(passedRNG/0x10000)
  689. R_LO1 = passedRNG % 0x10000
  690.  
  691. R_HI2 = A1 * R_LO1 + (R_HI1 * C1)
  692. R_HI2 = R_HI2 % 65536
  693. R_LO2 = R_LO1 * C1  + B1  --16,16,16
  694. passedRNG = (65536*R_HI2+R_LO2) % 0x100000000
  695.  
  696. return passedRNG
  697. end
  698.  
  699. function generateRNGTable(makeDumpfile)
  700.  
  701. RNGTextfile = "RNGDump"
  702. RNGDumpfile = RNGTextfile..".txt"
  703. if makeDumpfile then
  704. io.output(RNGDumpfile)
  705. startRNGSeed = 2209236614
  706. ThisR = startRNGSeed
  707. io.write(ThisR)
  708. io.write("\n")
  709. for i=2,10000 do
  710. ThisR = getNextRNG(ThisR)
  711. io.write(ThisR)
  712. io.write("\n")
  713. end
  714. io.output():close()
  715. end
  716.  
  717. --Magic Barrier Test Section
  718. --[[
  719. NN = 39
  720. RNGTextfile2 = "RNGDumpNOrdered"
  721. RNGDumpfile2 = RNGTextfile2..".txt"
  722. if makeDumpfile then
  723. io.output(RNGDumpfile2)
  724. startRNGSeed = 1
  725. ThisR = startRNGSeed
  726. for j = 1,NN do
  727. ThisR = getNextRNG(ThisR)
  728. end
  729. AA = ThisR
  730. for j = 1,NN do
  731. ThisR = getNextRNG(ThisR)
  732. end
  733. BB = ThisR
  734.  
  735. if ((math.floor(AA)/65536) % 100) >= 90 and ((math.floor(BB)/65536) % 100) >= 90 then
  736. io.write("1")
  737. io.write("\n")
  738. elseif ((math.floor(AA)/65536) % 100) >= 90 then
  739. io.write("0")
  740. io.write("\n")
  741. end
  742.  
  743. --io.write(ThisR)
  744. --io.write("\n")
  745. for i=2,10000 do
  746. ThisR = i
  747. for j = 1,NN do
  748. ThisR = getNextRNG(ThisR)
  749. end
  750. AA = ThisR
  751. for j = 1,NN do
  752. ThisR = getNextRNG(ThisR)
  753. end
  754. BB = ThisR
  755.  
  756. if ((math.floor(AA)/65536) % 100) >= 90 and ((math.floor(BB)/65536) % 100) >= 90 then
  757. io.write("1")
  758. io.write("\n")
  759. elseif ((math.floor(AA)/65536) % 100) >= 90 then
  760. io.write("0")
  761. io.write("\n")
  762. end
  763.  
  764. --io.write(ThisR)
  765. --io.write("\n")
  766. end
  767. io.output():close()
  768. end
  769. ]]
  770. --End Magic Barrier Test Section
  771.  
  772.  
  773. --Make table
  774. startRNGSeed = 2209236614
  775. ThisR = startRNGSeed
  776. RNGTableGlobal[1] = ThisR
  777. for i=2,10000 do
  778. ThisR = getNextRNG(ThisR)
  779. RNGTableGlobal[i] = ThisR
  780. end
  781.  
  782. end
  783.  
  784. function avalancheBasher()
  785. -- Start with a file loaded ready to cast avalanche.
  786.  
  787. --=20*(W2/22.5)+(V2-20)+180
  788. savestate.saveslot(9)
  789. AvTextfile = "Avalanche Basher"
  790. AvDumpfile = AvTextfile..".txt"
  791. io.output(AvDumpfile)
  792. startRNGSeed = 2209236614
  793. ThisR = startRNGSeed
  794. D = 0
  795. A = 0
  796. for j=1,20000 do
  797. savestate.loadslot(9)
  798. memory.write_u32_be(0x04D748, j, "RDRAM")  -- RNG
  799. emu.frameadvance()
  800. joypad.set({["A"]=true},1)
  801. memory.write_u32_be(0x04D748, j, "RDRAM")  -- RNG
  802. emu.frameadvance()
  803. joypad.set({["A"]=true},1)
  804. for k=1,36 do
  805. emu.frameadvance()
  806. memory.write_u32_be(0x04D748, j, "RDRAM")  -- RNG
  807. gui.text(100,100,"D: " .. round(D,3))
  808. gui.text(100,115,"A: " .. round(A,3))  --16 angles
  809. gui.text(100,130,"Iteration: " .. j)  --16 angles
  810. end
  811.  
  812. BrianX = memory.readfloat(0x7BACC, true, "RDRAM")
  813. BrianY = memory.readfloat(0x7BAD4, true, "RDRAM")
  814.  
  815. i = 1 --Enemy number 1 (starting at 1)
  816. EnemyX = memory.readfloat(0x7C9BC + 296*(i-1), true, "RDRAM")
  817. EnemyY = memory.readfloat(0x7C9C4 + 296*(i-1), true, "RDRAM")
  818. Timer = memory.read_u16_be(0x86F1C + 60*(i-1), "RDRAM")
  819. X = memory.readfloat(0x86F24 + 60*(i-1), true, "RDRAM")
  820. Z = memory.readfloat(0x86F28 + 60*(i-1), true, "RDRAM")
  821. Y = memory.readfloat(0x86F2C + 60*(i-1), true, "RDRAM")
  822. XDiff= BrianX - X
  823. YDiff= BrianY - Y
  824. D = math.sqrt(XDiff*XDiff + YDiff*YDiff)
  825. D = round(D,3)
  826. A = math.atan2(XDiff,YDiff)*(180/(math.pi))
  827. A = round(A,3)
  828. EnemyXDiff = EnemyX - X
  829. EnemyYDiff = EnemyY - Y
  830. EnemyD = math.sqrt(EnemyXDiff*EnemyXDiff + EnemyYDiff*EnemyYDiff)
  831. EnemyA = math.atan2(EnemyXDiff,EnemyYDiff)*(180/(math.pi))
  832.  
  833. ThisR = getNextRNG(ThisR)
  834. --=20*(W4/22.5)+(V4-20)+180
  835. V = 20 * (A/22.5)+(D-20) + 180 --unique Rock ID
  836.  
  837. io.write(V)
  838. io.write("\n")
  839. end
  840. io.output():close()
  841.  
  842. end
  843.  
  844. -- Initializations
  845. local i
  846. globalLvTable = {}
  847. globalLvTable = setupLvTable(globalLvTable)
  848. globalStatTable = {}
  849. globalStatTable = setupStatTable(globalStatTable)
  850. memory.usememorydomain("RDRAM")
  851. RNGTableGlobal = {}
  852.  
  853. ----------------------------
  854. --Changes go down here.--
  855. ----------------------------
  856.  
  857. local tmp
  858. --memory.writebyte(0x07BAB4, 10, "RDRAM")
  859. --HP50()
  860. --setSpirits(48,48,48,48)
  861. --setStats(200,100,250,20) -- HP MP De Ag
  862. --heatMapGenerator()
  863. makeDumpFile = false
  864. generateRNGTable(makeDumpFile)
  865. --avalancheBasher()
  866.  
  867. --memory.write_u32_be(0x04D748, 1, "RDRAM")  -- RNG
  868.  
  869. PrevRNG = 0
  870. PrevRNG2 = 0
  871. PrevRNG3 = 0
  872. BufRNG3 = 0
  873. BufRNG2 = 0
  874. BufRNG = 0
  875.  
  876. Last1 = 1
  877. Last2 = 1
  878. Last3 = 1
  879. Last4 = 1
  880. Last5 = 1
  881.  
  882. while true do
  883.  
  884. --memory.write_u32_be(0x7508C, 0, "RDRAM")  -- did this do something?
  885. --memory.write_u16_be(0x22FE2, 0, "RDRAM")  --41C6   --0 FREEZES RNG
  886. --memory.write_u16_be(0x22FE4, 10001, "RDRAM")
  887. --memory.write_u16_be(0x22FE6, 0, "RDRAM") --4E6D   --0 FREEZES RNG
  888. --memory.write_u32_be(0x04D748, 29, "RDRAM")  -- RNG
  889.     --memory.writebyte(0x07CAB2,0,"RDRAM")
  890.     --memory.writebyte(0x07CAB5,0,"RDRAM")
  891.     --memory.writebyte(0x07CAB4,0,"RDRAM")
  892.     --memory.writebyte(0x07CAB3,0,"RDRAM")
  893.         --memory.writefloat(0x86FA4, 1600, true, "RDRAM")
  894.     --memory.write_u32_be(0x4D748, 0, "RDRAM")
  895.  
  896. --RNG increment 0,N,1 rotates in a circle around you.
  897. --RNG increment 0,0,0 stays in one spot
  898.  
  899.     CalcNextRNG(700,430)
  900.  
  901.     --stackOfJewelsAndWings()
  902.     --HP50()
  903.     --highEncounterCounter()
  904.     --freezeEncounterCounter()
  905.     printEnemyStats(120,620)
  906.     printObjectCoordinates(50,10)
  907.     printEncounterCounter(100,500)
  908.     printStats(100,420)
  909.     printLocation(700,230)
  910.     printAgility(100,230)
  911.     printItems(650,700)
  912.     howManyRocksCurrently(700,320)
  913.     --printMemoryDomains(100,115)
  914.     --printLvTable(100,115,globalLvTable)
  915.     --printStatTable(100,115,globalStatTable)
  916.    
  917.     emu.frameadvance()
  918. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement