Advertisement
Kaztalek

Hachiemon Timer Script

Jan 2nd, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.67 KB | None | 0 0
  1. --"times.lua"
  2. --For use in Hachiemon on Bizhawk 1.9.1
  3. --
  4. --Addresses:
  5. --0xAC is Level
  6. --0xB8 is Game Time Minutes
  7. --0xB9 is Game Time Seconds
  8. --0xBA is Game Time Frames
  9. --0xD29 is End Stage
  10. --0x224A is Final Boss Health
  11. --0x24E7 is 76 when Final Battle starts
  12.  
  13. function LinesFrom(file,array)
  14.     array = {}
  15.     for i in io.lines(file) do
  16.         array[#array + 1] = i
  17.     end
  18.     return array
  19. end
  20.  
  21. function Save(file,array)
  22.     saveFile = io.open(file, "w")
  23.     for i=1,#array do
  24.         saveFile:write(array[i].."\n")
  25.     end
  26.     saveFile:close()
  27. end
  28.  
  29. function ReadTime(frame)
  30.     minutes = memory.readbyte(0xB8)
  31.     seconds = memory.readbyte(0xB9)
  32.     frames = memory.readbyte(0xBA)
  33.     if frame then
  34.         return minutes*3600+seconds*60+frames
  35.     end
  36.     if seconds < 10 then
  37.         seconds = 0 .. seconds
  38.     end
  39.     if frames < 10 then
  40.         frames = 0 .. frames
  41.     end
  42.     return minutes ..":".. seconds .."'".. frames
  43. end
  44.  
  45. function Split()
  46.     if ReadTime(true) < tonumber(bestF[lvl]) then
  47.         bestF[lvl] = ReadTime(true)
  48.         bestT[lvl] = ReadTime(false)
  49.         Save(fileF,bestF)
  50.         Save(fileT,bestT)
  51.     end
  52. end
  53.  
  54. fileF = "timesF.txt"
  55. fileT = "timesT.txt"
  56. bestF = LinesFrom(fileF,bestF) --frames
  57. bestT = LinesFrom(fileT,bestT) --times
  58. switch = true
  59.  
  60. while true do
  61.     lvl = memory.readbyte(0xAC)+1
  62.     gui.text(0,0,"Level ".. lvl)
  63.     gui.text(0,14,"Best: ".. bestT[lvl])
  64.     gui.text(0,28,"Now: ".. ReadTime(false))
  65.     if lvl == 22 and switch and memory.readbyte(0x24E7) == 76 and memory.readbyte(0x224A) == 0 then
  66.         Split()
  67.         switch = false
  68.     else
  69.         done = memory.readbyte(0xD29)
  70.         if done > 127 and switch then
  71.             Split()
  72.             switch = false
  73.         elseif done < 128 and not switch then
  74.             switch = true
  75.         end
  76.     end
  77.     emu.frameadvance()
  78. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement