Advertisement
Urumasi

GTerra

Aug 30th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.03 KB | None | 0 0
  1. @name GTerra
  2. @inputs E:wirelink W A S D R Start Stop
  3. @persist World:array Blocks:array Pos:vector2 Slopes:array Slope OreGen:array Tick Debug On Jump Grav
  4. #[
  5. Block IDs:
  6. 0 Air
  7. 1 Dirt
  8. 2 Stone
  9. 3 Bedrock
  10. 4 Coal ore
  11. 5 Iron ore
  12. 6 Gold ore
  13. 7 Diamond ore
  14. ]#
  15. runOnTick(1)
  16. function wT(X, Y, D){
  17.     World:setNumber(X+Y*32-32, D)
  18. }
  19. function number rT(X, Y){
  20.     if(X<1 || X>32 || Y<1 || Y>32){
  21.         return 3
  22.     }
  23.     return World:number(X+Y*32-32)
  24. }
  25. function dL(I){
  26.     for(J=1, 8){
  27.         E:egpColor(I*8+J-8, Blocks:vector(rT(J+Pos:x()-5, I+Pos:y()-5)+1))
  28.         if(Debug){
  29.             E:egpText(129, Pos:x()+":"+Pos:y(), vec2(0, 0))
  30.             E:egpText(I*8+J+56, (J+Pos:x()-5):toString()+":"+(I+Pos:y()-5):toString(), vec2((J-1)*64+10, (I-1)*64+24))
  31.             E:egpColor(I*8+J+56, vec(50, 50, 50))
  32.         }else{
  33.             E:egpRemove(I*8+J+56)
  34.             E:egpRemove(129)
  35.         }
  36.     }
  37. }
  38. if(first()){
  39.     E:egpClear()
  40.     Grav = 1
  41.     Blocks = array(vec(150, 150, 255), vec(150, 50, 0), vec(150, 150, 150), vec(30, 30, 30), vec(90, 90, 90), vec(255, 200, 130), vec(255, 255, 50), vec(90, 180, 180))
  42.     OreGen = array(4, 4, 30, 5, 6, 35, 6, 10, 60, 7, 16, 100)
  43. }
  44. if(Start){
  45.     On = 1
  46. }
  47. if(On){
  48.     Tick++
  49.     if(Tick == 1){
  50.         Slope = randint(8)+16
  51.         E:egpText(131, "Welcome to GTerra, an E2 game by Urumasi", vec2(0, 200))
  52.         E:egpSize(131, 28)
  53.     }
  54.     if(Tick<33){
  55.         E:egpText(130, "Generating terrain "+floor(Tick/10.56)+"%", vec2(180, 256))
  56.         E:egpText(132, "Creating slopes "+Tick+"/32", vec2(180, 280))
  57.         local R = randint(10)
  58.         if((R==1 || R==2) && Slope<24){
  59.             Slope++
  60.         }elseif((R==3 || R==4) && Slope>0){
  61.             Slope--
  62.         }elseif(R==5 && Slope<24){
  63.             Slope+=2
  64.         }elseif(R==6 && Slope>0){
  65.             Slope-=2
  66.         }
  67.         Slopes:setNumber(Tick, Slope)
  68.     }elseif(Tick<1057){
  69.         E:egpText(130, "Generating terrain "+floor(Tick/10.56)+"%", vec2(180, 256))
  70.         E:egpText(132, "Placing blocks "+(Tick-32)+"/1024", vec2(175, 280))
  71.         #floor((Tick-33)/32)+1
  72.         #(Tick-33)%32+1
  73.         if((Tick-33)%32+1 < Slopes:number(floor((Tick-33)/32)+1)){
  74.             wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, 0)
  75.         }elseif((Tick-33)%32+1 == Slopes:number(floor((Tick-33)/32)+1)){
  76.             wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, 1)
  77.         }else{
  78.             local Chosen = 2
  79.             for(I=1, OreGen:count()/3){
  80.                 if((Tick-33)%32+1 > Slopes:number(floor((Tick-33)/32)+1)+OreGen:number(I*3-1)){
  81.                     if(randint(OreGen:number(I*3))==1){
  82.                         Chosen = OreGen:number(I*3-2)
  83.                     }
  84.                 }
  85.             }
  86.             wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, Chosen)
  87.         }
  88.     }elseif(Tick<1123){
  89.         E:egpRemove(130)
  90.         E:egpRemove(131)
  91.         E:egpRemove(132)
  92.         E:egpBox(Tick-1056, vec2(((Tick-1057)%8)*64+32, floor((Tick-1057)/8)*64+32), vec2(64, 64))
  93.     }else{
  94.         if(Tick == 1123){
  95.             Pos = vec2(16, Slopes:number(16)-1)
  96.             E:egpRoundedBox(133, vec2(288, 288), vec2(32, 64))
  97.         }
  98.         if(Tick%16==0){
  99.             if(A && !rT(Pos:x()-1, Pos:y())){
  100.                 Pos -= vec2(1, 0)
  101.             }
  102.             if(S && !rT(Pos:x(), Pos:y()+1)){
  103.                 Pos += vec2(0, 1)
  104.             }
  105.             if(D && !rT(Pos:x()+1, Pos:y())){
  106.                 Pos += vec2(1, 0)
  107.             }
  108.             if(R){
  109.                 Debug = 1-Debug
  110.             }
  111.         }
  112.         if(Tick%24==0){
  113.             if(W && rT(Pos:x(), Pos:y()+1)){
  114.                 Jump = 2
  115.             }
  116.             if(Jump){
  117.                 Pos -= vec2(0, 1)
  118.                 Jump--
  119.                 Grav = 0
  120.             }else{
  121.                 Grav = 1
  122.             }
  123.             if(!Jump && !rT(Pos:x(), Pos:y()+1) && Grav){
  124.                 Pos += vec2(0, 1)
  125.             }
  126.         }
  127.         dL(Tick%8+1)
  128.     }
  129.     if(Stop){
  130.         Tick = 0
  131.         E:egpClear()
  132.         On = 0
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement