Advertisement
nmarkro

trackRNG idea

Jan 11th, 2021
828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.52 KB | None | 0 0
  1. local RNG1Table = {};
  2. RNG1Table[0] = 0;
  3. RNG1Table[RNG1Seed] = 1;
  4.  
  5. local RNG2Table = {};
  6. RNG2Table[0] = 0;
  7. RNG2Table[RNG2Seed] = 1
  8.  
  9. function ram.trackRNG() -- Call only once per frame
  10.     --[[
  11.         Scenarios:
  12.         Value = 0
  13.         Value = Seed
  14.         Delta = 0
  15.         Delta = 1
  16.         Delta > 1
  17.         Delta < 0 (loaded a state)
  18.     ]]--
  19.    
  20.     local RNG1DeltaTemp = 0;
  21.     local RNG1ValueTemp = memory.read_u32_le(RNG1);
  22.    
  23.     if RNG1Value ~= RNG1ValueTemp then
  24.         if RNG1ValueTemp == 0 then
  25.             RNG1Value = 0;
  26.             RNG1Index = 0;
  27.             RNG1IndexTemp = 0;
  28.         elseif RNG1ValueTemp == RNG1Seed then
  29.             RNG1Value = RNG1Seed;
  30.             RNG1Index = 1;
  31.             RNG1IndexTemp = 1;
  32.         else
  33.             if RNG1Table[RNG1ValueTemp] ~= nil then
  34.                 RNG1IndexTemp = RNG1Table[RNG1ValueTemp];
  35.                 RNG1Value = RNG1ValueTemp;
  36.             else
  37.                 while RNG1Value ~= RNG1ValueTemp and RNG1DeltaTemp < RNGCheckMax do
  38.                     RNG1DeltaTemp = RNG1DeltaTemp + 1;
  39.                     RNG1Value = ram.simulateRNG(RNG1Value);
  40.                     RNG1Table[RNG1Value] = RNG1IndexTemp + RNG1DeltaTemp;
  41.                 end
  42.             end
  43.         end
  44.     end
  45.    
  46.     RNG1IndexTemp = RNG1IndexTemp + RNG1DeltaTemp;
  47.    
  48.     if RNG1Value == RNG1ValueTemp then
  49.         if RNG1Index then
  50.             RNG1Delta = RNG1IndexTemp - RNG1Index;
  51.             RNG1Index = RNG1IndexTemp;
  52.         else
  53.             RNG1Delta = RNG1IndexTemp;
  54.             RNG1Index = RNG1IndexTemp;
  55.         end
  56.     else
  57.         RNG1Index = nil;
  58.         RNG1Delta = nil;
  59.        
  60.         if RNG1IndexTemp > emu.framecount() then
  61.             RNG1Value = RNG1Seed;
  62.             RNG1IndexTemp = 1;
  63.         end
  64.     end
  65.    
  66.     local RNG2DeltaTemp = 0;
  67.     local RNG2ValueTemp = memory.read_u32_le(RNG2);
  68.    
  69.     if RNG2Value ~= RNG2ValueTemp then
  70.         if RNG2ValueTemp == 0 then
  71.             RNG2Value = 0;
  72.             RNG2Index = 0;
  73.             RNG2IndexTemp = 0;
  74.         elseif RNG2ValueTemp == RNG2Seed then
  75.             RNG2Value = RNG2Seed;
  76.             RNG2Index = 1;
  77.             RNG2IndexTemp = 1;
  78.         else
  79.             if RNG2Table[RNG2ValueTemp] ~= nil then
  80.                 RNG2IndexTemp = RNG2Table[RNG2ValueTemp];
  81.                 RNG2Value = RNG2ValueTemp;
  82.             else
  83.                 while RNG2Value ~= RNG2ValueTemp and RNG2DeltaTemp < RNGCheckMax do
  84.                     RNG2DeltaTemp = RNG2DeltaTemp + 1;
  85.                     RNG2Value = ram.simulateRNG(RNG2Value);
  86.                     RNG2Table[RNG2Value] = RNG2IndexTemp + RNG2DeltaTemp;
  87.                 end
  88.             end
  89.         end
  90.     end
  91.    
  92.     RNG2IndexTemp = RNG2IndexTemp + RNG2DeltaTemp;
  93.    
  94.     if RNG2Value == RNG2ValueTemp then
  95.         if RNG2Index then
  96.             RNG2Delta = RNG2IndexTemp - RNG2Index;
  97.             RNG2Index = RNG2IndexTemp;
  98.         else
  99.             RNG2Delta = RNG2IndexTemp;
  100.             RNG2Index = RNG2IndexTemp;
  101.         end
  102.     else
  103.         RNG2Index = nil;
  104.         RNG2Delta = nil;
  105.        
  106.         if RNG2IndexTemp > emu.framecount() then
  107.             RNG2Value = RNG2Seed;
  108.             RNG2IndexTemp = 1;
  109.         end
  110.     end
  111. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement