- //-----------------------------------------
- // By Florian Köberle
- // eMail-Name: "FloriansKarten"; eMail-Provider: "web.de"
- //
- // Using Perlin noise to create a Forest
- //-------------------------------------------
- function GetValue takes integer X, integer Y returns integer
- return udg_Wert[(X + (Y*(udg_DataSize-1)))]
- endfunction
- function Interpoliere takes integer Wert1, integer Wert2, integer Nr, integer Von returns integer
- local integer Ergebnis1
- local integer Ergebnis2
- // Geprüft
- set Ergebnis1 = ( ( Wert1 * udg_Interpolation[( Nr * ( udg_Size / Von ) )] ) / udg_Interpolation_Max )
- set Ergebnis2 = ( ( Wert2 * (udg_Interpolation_Max - udg_Interpolation[( Nr * ( udg_Size / Von ) )] ) ) / udg_Interpolation_Max )
- // call DisplayTextToForce( GetPlayersAll(),"-----------------------")
- // call DisplayTextToForce( GetPlayersAll(),"Wert1: " + I2S(Wert1))
- // call DisplayTextToForce( GetPlayersAll(),"Wert2: " + I2S(Wert2))
- // call DisplayTextToForce( GetPlayersAll(),"Nr: " + I2S(Nr))
- // call DisplayTextToForce( GetPlayersAll(),"Von: " + I2S(Von))
- // call DisplayTextToForce( GetPlayersAll(),"Ergebnis1:" + I2S(Ergebnis1))
- // call DisplayTextToForce( GetPlayersAll(),"Ergebnis2:" + I2S(Ergebnis2))
- // call DisplayTextToForce( GetPlayersAll(),"Ges:" + I2S(Ergebnis1 + Ergebnis2))
- // call DisplayTextToForce( GetPlayersAll(),"-----------------------")
- return (Ergebnis1 + Ergebnis2)
- endfunction
- function Berechne takes integer X, integer Y returns integer
- local integer Ergebnis
- local integer WertX0
- local integer WertX1
- local integer I_X0
- local integer I_X1
- local integer I_Y0
- local integer I_Y1
- local integer Level
- local integer Field_Size
- local integer Field_DataSize
- local integer Max
- //-----------------------
- set Level = 2
- set Max = 500
- set Field_Size = (udg_Size / Level)
- set Field_DataSize = ((udg_DataSize-1) / Level)
- set I_X0 = Field_DataSize*(X / Field_Size) // ok
- set I_X1 = I_X0 + Field_DataSize // ok
- set I_Y0 = Field_DataSize*(Y / Field_Size) // ok
- set I_Y1 = I_Y0 + Field_DataSize // ok
- //call DisplayTextToForce( GetPlayersAll(), ((("P1( " + I2S(I_X0)) + (" / " + I2S(I_Y0))+ " ) P2( ")+ (I2S(I_X1) + (" / " + (I2S(I_Y1) + " )")))))
- set WertX0 = Interpoliere(GetValue(I_X0,I_Y0),GetValue(I_X1,I_Y0),ModuloInteger(X , Field_Size),Field_Size)
- set WertX1 = Interpoliere(GetValue(I_X0,I_Y1),GetValue(I_X1,I_Y1),ModuloInteger(X , Field_Size),Field_Size)
- set Ergebnis = (Interpoliere(WertX0,WertX1,ModuloInteger(Y , Field_Size),Field_Size) / 2)
- //--------------------------------------
- set Level = 4
- set Max = Max + 1000
- set Field_Size = (udg_Size / Level)
- set Field_DataSize = ((udg_DataSize-1) / Level)
- set I_X0 = Field_DataSize*(X / Field_Size) // ok
- set I_X1 = I_X0 + Field_DataSize // ok
- set I_Y0 = Field_DataSize*(Y / Field_Size) // ok
- set I_Y1 = I_Y0 + Field_DataSize // ok
- //call DisplayTextToForce( GetPlayersAll(), ((("P1( " + I2S(I_X0)) + (" / " + I2S(I_Y0))+ " ) P2( ")+ (I2S(I_X1) + (" / " + (I2S(I_Y1) + " )")))))
- set WertX0 = Interpoliere(GetValue(I_X0,I_Y0),GetValue(I_X1,I_Y0),ModuloInteger(X , Field_Size),Field_Size)
- set WertX1 = Interpoliere(GetValue(I_X0,I_Y1),GetValue(I_X1,I_Y1),ModuloInteger(X , Field_Size),Field_Size)
- set Ergebnis = Ergebnis + Interpoliere(WertX0,WertX1,ModuloInteger(Y , Field_Size),Field_Size)
- //--------------------------------------
- set Level = 16
- set Max = Max + 1000
- set Field_Size = (udg_Size / Level)
- set Field_DataSize = ((udg_DataSize-1) / Level)
- set I_X0 = Field_DataSize*(X / Field_Size) // ok
- set I_X1 = I_X0 + Field_DataSize // ok
- set I_Y0 = Field_DataSize*(Y / Field_Size) // ok
- set I_Y1 = I_Y0 + Field_DataSize // ok
- //call DisplayTextToForce( GetPlayersAll(), ((("P1( " + I2S(I_X0)) + (" / " + I2S(I_Y0))+ " ) P2( ")+ (I2S(I_X1) + (" / " + (I2S(I_Y1) + " )")))))
- set WertX0 = Interpoliere(GetValue(I_X0,I_Y0),GetValue(I_X1,I_Y0),ModuloInteger(X , Field_Size),Field_Size)
- set WertX1 = Interpoliere(GetValue(I_X0,I_Y1),GetValue(I_X1,I_Y1),ModuloInteger(X , Field_Size),Field_Size)
- set Ergebnis = Ergebnis + Interpoliere(WertX0,WertX1,ModuloInteger(Y , Field_Size),Field_Size)
- //--------------------------------------
- set Level = 32
- set Max = Max + 2000
- set Field_Size = (udg_Size / Level)
- set Field_DataSize = ((udg_DataSize-1) / Level)
- set I_X0 = Field_DataSize*(X / Field_Size) // ok
- set I_X1 = I_X0 + Field_DataSize // ok
- set I_Y0 = Field_DataSize*(Y / Field_Size) // ok
- set I_Y1 = I_Y0 + Field_DataSize // ok
- //call DisplayTextToForce( GetPlayersAll(), ((("P1( " + I2S(I_X0)) + (" / " + I2S(I_Y0))+ " ) P2( ")+ (I2S(I_X1) + (" / " + (I2S(I_Y1) + " )")))))
- set WertX0 = Interpoliere(GetValue(I_X0,I_Y0),GetValue(I_X1,I_Y0),ModuloInteger(X , Field_Size),Field_Size)
- set WertX1 = Interpoliere(GetValue(I_X0,I_Y1),GetValue(I_X1,I_Y1),ModuloInteger(X , Field_Size),Field_Size)
- set Ergebnis = Ergebnis + (2*Interpoliere(WertX0,WertX1,ModuloInteger(Y , Field_Size),Field_Size))
- return (Ergebnis*1000)/Max
- endfunction