Advertisement
killer64

SGConv

Jul 25th, 2013
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.38 KB | None | 0 0
  1. local symbolChars="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2. local tSymbolChars={}
  3. for l1=1,#symbolChars do
  4.     tSymbolChars[string.sub(symbolChars,l1,l1)]=l1-1
  5. end
  6. local numSymbols=#symbolChars
  7. local addressLength=7
  8. local numDimensionSymbols=2
  9. local numCoordSymbols=addressLength-numDimensionSymbols
  10. local coordPower=numSymbols^numCoordSymbols
  11. local dimensionPower=numSymbols^numDimensionSymbols
  12. local maxCoord=(math.floor(math.sqrt(coordPower-1)))/2
  13. local minCoord=-maxCoord
  14. local coordRange=maxCoord-minCoord+1
  15. local minDimension=-1
  16. local maxDimension=minDimension+dimensionPower-1
  17. sgconv={}
  18. function sgconv.intToSymbols(a,b)
  19.     local s=""
  20.     repeat
  21.         local d=(a%numSymbols)+1
  22.         a=math.floor(a/numSymbols)
  23.         s=string.sub(symbolChars,d,d)..s
  24.     until a==0
  25.     return string.reverse(s)..string.rep("A",b-#s)
  26. end
  27. function sgconv.intFromSymbols(s)
  28.     local i=0
  29.     for l1=1,#s do
  30.         i=i+(tSymbolChars[string.sub(s,l1,l1)]*(numSymbols^(l1-1)))
  31.     end
  32.     return i
  33. end
  34. function sgconv.toAddr(x,z,dim)
  35.     return sgconv.intToSymbols((math.floor(x/16)-minCoord)*coordRange+(math.floor(z/16)-minCoord),numCoordSymbols)..sgconv.intToSymbols(dim-minDimension,numDimensionSymbols)
  36. end
  37. function sgconv.fromAddr(addr)
  38.     local s=sgconv.intFromSymbols(addr:sub(1,numCoordSymbols))
  39.     return math.floor(minCoord+s/coordRange)*16,math.floor(minCoord+s%coordRange)*16,sgconv.intFromSymbols(string.sub(addr,-2,-1))-1
  40. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement