Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name GTerra
- @inputs E:wirelink W A S D R Start Stop
- @persist World:array Blocks:array Pos:vector2 Slopes:array Slope OreGen:array Tick Debug On Jump Grav
- #[
- Block IDs:
- 0 Air
- 1 Dirt
- 2 Stone
- 3 Bedrock
- 4 Coal ore
- 5 Iron ore
- 6 Gold ore
- 7 Diamond ore
- ]#
- runOnTick(1)
- function wT(X, Y, D){
- World:setNumber(X+Y*32-32, D)
- }
- function number rT(X, Y){
- if(X<1 || X>32 || Y<1 || Y>32){
- return 3
- }
- return World:number(X+Y*32-32)
- }
- function dL(I){
- for(J=1, 8){
- E:egpColor(I*8+J-8, Blocks:vector(rT(J+Pos:x()-5, I+Pos:y()-5)+1))
- if(Debug){
- E:egpText(129, Pos:x()+":"+Pos:y(), vec2(0, 0))
- 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))
- E:egpColor(I*8+J+56, vec(50, 50, 50))
- }else{
- E:egpRemove(I*8+J+56)
- E:egpRemove(129)
- }
- }
- }
- if(first()){
- E:egpClear()
- Grav = 1
- 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))
- OreGen = array(4, 4, 30, 5, 6, 35, 6, 10, 60, 7, 16, 100)
- }
- if(Start){
- On = 1
- }
- if(On){
- Tick++
- if(Tick == 1){
- Slope = randint(8)+16
- E:egpText(131, "Welcome to GTerra, an E2 game by Urumasi", vec2(0, 200))
- E:egpSize(131, 28)
- }
- if(Tick<33){
- E:egpText(130, "Generating terrain "+floor(Tick/10.56)+"%", vec2(180, 256))
- E:egpText(132, "Creating slopes "+Tick+"/32", vec2(180, 280))
- local R = randint(10)
- if((R==1 || R==2) && Slope<24){
- Slope++
- }elseif((R==3 || R==4) && Slope>0){
- Slope--
- }elseif(R==5 && Slope<24){
- Slope+=2
- }elseif(R==6 && Slope>0){
- Slope-=2
- }
- Slopes:setNumber(Tick, Slope)
- }elseif(Tick<1057){
- E:egpText(130, "Generating terrain "+floor(Tick/10.56)+"%", vec2(180, 256))
- E:egpText(132, "Placing blocks "+(Tick-32)+"/1024", vec2(175, 280))
- #floor((Tick-33)/32)+1
- #(Tick-33)%32+1
- if((Tick-33)%32+1 < Slopes:number(floor((Tick-33)/32)+1)){
- wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, 0)
- }elseif((Tick-33)%32+1 == Slopes:number(floor((Tick-33)/32)+1)){
- wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, 1)
- }else{
- local Chosen = 2
- for(I=1, OreGen:count()/3){
- if((Tick-33)%32+1 > Slopes:number(floor((Tick-33)/32)+1)+OreGen:number(I*3-1)){
- if(randint(OreGen:number(I*3))==1){
- Chosen = OreGen:number(I*3-2)
- }
- }
- }
- wT(floor((Tick-33)/32)+1, (Tick-33)%32+1, Chosen)
- }
- }elseif(Tick<1123){
- E:egpRemove(130)
- E:egpRemove(131)
- E:egpRemove(132)
- E:egpBox(Tick-1056, vec2(((Tick-1057)%8)*64+32, floor((Tick-1057)/8)*64+32), vec2(64, 64))
- }else{
- if(Tick == 1123){
- Pos = vec2(16, Slopes:number(16)-1)
- E:egpRoundedBox(133, vec2(288, 288), vec2(32, 64))
- }
- if(Tick%16==0){
- if(A && !rT(Pos:x()-1, Pos:y())){
- Pos -= vec2(1, 0)
- }
- if(S && !rT(Pos:x(), Pos:y()+1)){
- Pos += vec2(0, 1)
- }
- if(D && !rT(Pos:x()+1, Pos:y())){
- Pos += vec2(1, 0)
- }
- if(R){
- Debug = 1-Debug
- }
- }
- if(Tick%24==0){
- if(W && rT(Pos:x(), Pos:y()+1)){
- Jump = 2
- }
- if(Jump){
- Pos -= vec2(0, 1)
- Jump--
- Grav = 0
- }else{
- Grav = 1
- }
- if(!Jump && !rT(Pos:x(), Pos:y()+1) && Grav){
- Pos += vec2(0, 1)
- }
- }
- dL(Tick%8+1)
- }
- if(Stop){
- Tick = 0
- E:egpClear()
- On = 0
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement