Advertisement
zephyrtronium

plugin low-level format

Feb 25th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. source files are always encoded in utf-8
  2. identifiers for variables not special may include any unicode characters in groups Lu, Ll, Lt, Lm, Lo, Nd, as well as _
  3. a token comprised only of digits is never treated as an identifier
  4. eight registers are available as variables
  5. special variables include >v (VVAR), >x (FTx), >y, >z, >c, <x (FPx), <y, <z, <c, >ma (TMa), >mb, ... >ml, >0 (register 0), ... >7
  6.  
  7.  
  8. operation summary:
  9. (register manipulation)
  10. set v x - set v to immediate (floating-point) value x
  11. copy d s - set d to contents of s
  12. swap v w - switch contents of v and w (is this actually useful?)
  13.  
  14. (binary operators)
  15. add d v w - set d to v+w
  16. sub d v w - set d to v-w
  17. mul d v w - set d to v*w
  18. div d v w - set d to v/w
  19. mod d v w - set d to v%w
  20. polar r t x y - set r to hypot(y, x) and t to atan2(y, x)
  21. rect x y r t - set x to r*cos(t) and y to r*sin(t)
  22. pow d v w - set d to pow(v, w)
  23. atan2 d v w - set d to atan2(w, v)
  24. hypot d v w - set d to hypot(v, w)
  25.  
  26. (ternary)
  27. spherical r t p x y z - set r to sqrt(x*x+y*y+z*z), t to atan2(y, x), and p to acos(z/sqrt(x*x+y*y+z*z))
  28. rect3d x y z r t p - set x to r*cos(t)*sin(p), y to r*sin(t)*sin(p), and z to r*cos(p)
  29. fma d x y z - set d to x*y+z
  30.  
  31. (unary)
  32. neg d v - d = -v
  33. acos d v - d = acos(v)
  34. asin d v - arcsine
  35. atan d v - arctangent
  36. cos d v - cosine
  37. cosh d v - hyperbolic cosine
  38. sin d v - sine
  39. sinh d v - hyperbolic sine
  40. tan d v - tangent
  41. tanh d v - hyperbolic tangent
  42. exp d v - exponential (e to the power of v)
  43. ln d v - natural logarithm
  44. sqrt d v - square root
  45. ceil d v - ceiling
  46. abs d v - absolute value
  47. floor d v - floor
  48.  
  49. (shortcuts)
  50. addtoxy v w - add v to <x and w to <y
  51. addtoxyz u v w - add u to <x, v to <y, and w to <z
  52. vaddtoxy v w - fma >v * {v, w} into <x and <y, respectively
  53. vaddtoxyz u v w - fma >v * {u, v, w} into <x, <y, <z, respectively
  54.  
  55. (control flow)
  56. beq v w n - branch forward n operations if v == w
  57. bne v w n - branch forward n operations if v != w
  58. bgt v w n - v > w
  59. ble v w n - v <= w
  60. bge v w n - v >= w
  61. blt v w n - v < w
  62. end - exit the function
  63.  
  64. (randomness)
  65. randint d - set d to a random integer in [0, RAND_MAX]
  66. random d - set d to a random real in [0, 1)
  67. randintr d v w - set d to a random integer in [v, w]
  68. randomr d v w - set d to a random real in [v, w)
  69.  
  70. it is guaranteed that for each operation, the assignment to the destination register(s) is the last thing to occur.
  71.  
  72. particular dot directives include:
  73. .name <variation name> - set the name of the variation; same rules as for identifiers
  74. .3d - indicate that the variation writes to FPx
  75. .dc - indicate that the variation writes to TC
  76. .vars {int | real | range | cyclic} <name> <init> [, ...] - list variables
  77. .privs {int | real | gauss} <name> [= <init>] [...] - private vars
  78. .prep - indicate an init() method
  79. .case <expr> - use the following to the next .case or .calc as the calc() method when expr evaluates to true. a .calc section must exist if any .case sections do.
  80. .calc - indicate start of calc() method. this is used as the default case; if the interpreter does not understand expressions, it will treat all cases as false and therefore always use .calc.
  81.  
  82. private gaussian variables may not be destination variables. new (approximately) gaussian-distributed random values automatically are assigned to them each iteration.
  83.  
  84. .name spherivoid // variation name is spherivoid
  85. .3d // 3d variation
  86. .vars real spherivoid_radius 0 // like VAR_REAL(spherivoid_radius, 0.0)
  87. .calc // calculate method
  88. spherical >0 >1 >2 >x >y >z // set registers 0-2 to spherical coordinates of input
  89. add >0 >0 spherivoid_radius // add spherivoid_radius to radius in-place
  90. rect3d >0 >1 >2 >0 >1 >2 // convert spherical coordinates to rectangular in-place
  91. vaddtoxyz >0 >1 >2 // add coordinates scaled by >v to output
  92. end
  93.  
  94. .name julian
  95. .vars int julian_power 2, real julian_dist 1
  96. .privs int absn, real cn
  97. .prep // init() method
  98. abs absn julian_power
  99. div >0 julian_dist julian_power
  100. set >1 0.5
  101. mul cn >0 >1
  102. end
  103. .calc
  104. atan2 >0 >x >y
  105. set >1 0
  106. randintr >1 >1 absn
  107. set >2 6.283185308 // 2pi
  108. fma >0 >1 >2 >0 // 2pi * randint + theta
  109. div >0 julian_power >0 // (2pi * randint + theta) / power
  110. mul >1 >x >x // sqr(x)
  111. fma >1 >y >y >1 // sqr(x) + sqr(y)
  112. pow >1 >1 cn // pow(sqr(x)+sqr(y), cn)
  113. mul >1 >1 >v // vvar * pow(sqr(x)+sqr(y), cn)
  114. rect >0 >1 >0 >1
  115. addtoxy >0 >1
  116. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement