hedgewars/uLandGenPerlin.pas
author unc0rr
Fri, 14 Mar 2014 13:59:39 +0400
changeset 10196 514e338f2eaf
parent 10192 bb1310c4bd79
child 10199 fdb689b57b1b
permissions -rw-r--r--
Fix perlin gen on 32 bit arch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     1
{$INCLUDE "options.inc"}
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     2
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     3
unit uLandGenPerlin;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     4
interface
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     5
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     6
procedure GenPerlin;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     7
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
     8
implementation
10189
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
     9
uses uVariables
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    10
    , uConsts
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    11
    , uRandom
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    12
    , uLandOutline // FillLand
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    13
    ;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    14
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    15
var p: array[0..511] of LongInt;
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    16
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    17
const fadear: array[byte] of LongInt = 
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    18
(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, 6, 7, 9, 10, 12,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    19
14, 17, 19, 22, 25, 29, 32, 36, 40, 45, 49, 54, 60, 65, 71,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    20
77, 84, 91, 98, 105, 113, 121, 130, 139, 148, 158, 167, 178,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    21
188, 199, 211, 222, 234, 247, 259, 273, 286, 300, 314, 329, 344,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    22
359, 374, 390, 407, 424, 441, 458, 476, 494, 512, 531, 550,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    23
570, 589, 609, 630, 651, 672, 693, 715, 737, 759, 782, 805, 828,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    24
851, 875, 899, 923, 948, 973, 998, 1023, 1049, 1074, 1100, 1127,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    25
1153, 1180, 1207, 1234, 1261, 1289, 1316, 1344, 1372, 1400, 1429,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    26
1457, 1486, 1515, 1543, 1572, 1602, 1631, 1660, 1690, 1719, 1749,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    27
1778, 1808, 1838, 1868, 1898, 1928, 1958, 1988, 2018, 2048, 2077,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    28
2107, 2137, 2167, 2197, 2227, 2257, 2287, 2317, 2346, 2376, 2405,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    29
2435, 2464, 2493, 2523, 2552, 2580, 2609, 2638, 2666, 2695, 2723,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    30
2751, 2779, 2806, 2834, 2861, 2888, 2915, 2942, 2968, 2995, 3021,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    31
3046, 3072, 3097, 3122, 3147, 3172, 3196, 3220, 3244, 3267, 3290,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    32
3313, 3336, 3358, 3380, 3402, 3423, 3444, 3465, 3486, 3506, 3525,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    33
3545, 3564, 3583, 3601, 3619, 3637, 3654, 3672, 3688, 3705, 3721,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    34
3736, 3751, 3766, 3781, 3795, 3809, 3822, 3836, 3848, 3861, 3873,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    35
3884, 3896, 3907, 3917, 3928, 3937, 3947, 3956, 3965, 3974, 3982,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    36
3990, 3997, 4004, 4011, 4018, 4024, 4030, 4035, 4041, 4046, 4050,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    37
4055, 4059, 4063, 4066, 4070, 4073, 4076, 4078, 4081, 4083, 4085,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    38
4086, 4088, 4089, 4091, 4092, 4092, 4093, 4094, 4094, 4095, 4095,
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    39
4095, 4095, 4095, 4095, 4095);
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    40
10183
189afaf2d076 Some tweaks to perlin generator
unc0rr
parents: 10182
diff changeset
    41
function fade(t: LongInt) : LongInt; inline;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    42
var t0, t1: LongInt;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    43
begin
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    44
    t0:= fadear[t shr 8];
10189
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    45
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    46
    if t0 = fadear[255] then 
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    47
        t1:= t0
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    48
    else
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
    49
        t1:= fadear[t shr 8 + 1];
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    50
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    51
    fade:= t0 + ((t and 255) * (t1 - t0) shr 8)
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    52
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    53
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    54
10183
189afaf2d076 Some tweaks to perlin generator
unc0rr
parents: 10182
diff changeset
    55
function lerp(t, a, b: LongInt) : LongInt; inline;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    56
begin
10196
514e338f2eaf Fix perlin gen on 32 bit arch
unc0rr
parents: 10192
diff changeset
    57
    lerp:= a + (Int64(b - a) * t shr 12)
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    58
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    59
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    60
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    61
function grad(hash, x, y: LongInt) : LongInt; inline;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    62
var h, v, u: LongInt;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    63
begin
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    64
    h:= hash and 15;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    65
    if h < 8 then u:= x else u:= y;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    66
    if h < 4 then v:= y else
10185
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    67
        if (h = 12) or (h = 14) then v:= x else v:= 0;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    68
10185
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    69
    if (h and 1) <> 0 then u:= -u;
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    70
    if (h and 2) <> 0 then v:= -v;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    71
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    72
    grad:= u + v
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    73
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    74
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    75
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    76
function inoise(x, y: LongInt) : LongInt; inline;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    77
const N = $10000;
10185
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    78
var xx, yy, u, v, A, AA, AB, B, BA, BB: LongInt;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    79
begin
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    80
    xx:= (x shr 16) and 255;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    81
    yy:= (y shr 16) and 255;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    82
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    83
    x:= x and $FFFF;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    84
    y:= y and $FFFF;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    85
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    86
    u:= fade(x);
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    87
    v:= fade(y);
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    88
10185
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    89
    A:= p[xx    ] + yy; AA:= p[A]; AB:= p[A + 1];
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    90
    B:= p[xx + 1] + yy; BA:= p[B]; BB:= p[B + 1];
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    91
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    92
    inoise:=
10185
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    93
            lerp(v, lerp(u, grad(p[AA  ], x   , y  ),
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    94
                            grad(p[BA  ], x-N , y  )),
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    95
                    lerp(u, grad(p[AB  ], x   , y-N),
007a40cfbb3d Strip Z axis from calculations
unc0rr
parents: 10184
diff changeset
    96
                            grad(p[BB  ], x-N , y-N)));
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    97
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
    98
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
    99
function f(t: double): double; inline;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   100
begin
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   101
    f:= t * t * t * (t * (t * 6 - 15) + 10);
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   102
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   103
10182
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   104
procedure inoise_setup();
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   105
var i, ii, t: LongInt;
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   106
begin
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   107
    for i:= 0 to 254 do
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   108
        p[i]:= i + 1;
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   109
    p[255]:= 0;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   110
10182
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   111
    for i:= 0 to 254 do
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   112
    begin
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   113
        ii:= GetRandom(256 - i) + i;
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   114
        t:= p[i];
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   115
        p[i]:= p[ii];
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   116
        p[ii]:= t
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   117
    end;
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   118
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   119
    for i:= 0 to 255 do
10182
9d34898b22f7 Add randomness
unc0rr
parents: 10181
diff changeset
   120
        p[256 + i]:= p[i];
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   121
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   122
10192
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   123
const detail = 150000;
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   124
    field = 3;
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
   125
    df = detail * field;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   126
    width = 4096;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   127
    height = 2048;
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   128
    minY = 500;
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   129
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   130
    bottomPlateHeight = 90;
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   131
    bottomPlateMargin = 1200;
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   132
    margin = 200;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   133
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   134
procedure GenPerlin;
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   135
var y, x, dy, di, dj, r: LongInt;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   136
begin
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   137
    inoise_setup();
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   138
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   139
    for y:= minY to pred(height) do
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   140
    begin
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
   141
        di:= df * y div height;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   142
        for x:= 0 to pred(width) do
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   143
        begin
10188
e8f2dbabd01b as suggested, precompute to avoid use of double
nemo
parents: 10187
diff changeset
   144
            dj:= df * x div width;
10192
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   145
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   146
           r:= (abs(inoise(di, dj)) + y*4) mod 65536 div 256;
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   147
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   148
            //r:= (abs(inoise(di, dj))) shr 8 and $ff;
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   149
            if (x < margin) or (x > width - margin) then r:= r - abs(x - width div 2) + width div 2 - margin; // fade on edges
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   150
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   151
            r:= r - (height - y) div 32;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   152
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   153
            //r:= r - max(0, - abs(x - width div 2) + width * 2 div 100); // split vertically in the middle
10183
189afaf2d076 Some tweaks to perlin generator
unc0rr
parents: 10182
diff changeset
   154
            //r:= r + (trunc(1000 - sqrt(sqr(x - (width div 2)) * 4 + sqr(y - height * 5 div 4) * 22))) div 600 * 20; // ellipse
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   155
            //r:= r + 1 - ((abs(x - (width div 2)) + abs(y - height) * 2)) div 32; // manhattan length ellipse
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   156
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   157
            {
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   158
            if (y > height - bottomPlateHeight) and (x > bottomPlateMargin) and (x + bottomPlateMargin < width) then
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   159
            begin
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   160
                dy:= (y - height + bottomPlateHeight);
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   161
                r:= r + dy;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   162
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   163
                if x < bottomPlateMargin + bottomPlateHeight then
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   164
                    r:= r + (x - bottomPlateMargin - bottomPlateHeight)
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   165
                else
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   166
                if x + bottomPlateMargin + bottomPlateHeight > width then
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   167
                    r:= r - (x - width + bottomPlateMargin + bottomPlateHeight);
10187
0d506346c1f0 Experiment: enforce a plate at bottom so the map generated is more connected
unc0rr
parents: 10186
diff changeset
   168
            end;
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   169
            }
10192
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   170
bb1310c4bd79 Feel free to revert this one, was just screwing around with stuff from before. I kinda like it and figured committing it was the easiest way for you to look at it. http://m8y.org/hw/perlin.png
nemo
parents: 10191
diff changeset
   171
            if r < 50 then Land[y, x]:= 0 else Land[y, x]:= lfObjMask;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   172
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   173
        end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   174
    end;
10184
f87776bd5acd Setup leftX, rightX and topY
unc0rr
parents: 10183
diff changeset
   175
10189
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
   176
    for x:= 0 to width do
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
   177
        if Land[height - 1, x] = lfObjMask then FillLand(x, height - 1, 0, lfBasic);
10191
d9862e01309a this is fine right?
nemo
parents: 10190
diff changeset
   178
    //FillLand(0, minY, lfBasic, lfObjMask);
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   179
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   180
    // strip all lfObjMask pixels
10191
d9862e01309a this is fine right?
nemo
parents: 10190
diff changeset
   181
    for y:= minY to LAND_HEIGHT - 1 do
10190
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   182
        for x:= 0 to LAND_WIDTH - 1 do
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   183
            if Land[y, x] = lfObjMask then
e4f81f6d428c Tweaks and tweaks
unc0rr
parents: 10189
diff changeset
   184
                Land[y, x]:= 0;
10189
875607ce793d - Rework FillLand
unc0rr
parents: 10188
diff changeset
   185
10184
f87776bd5acd Setup leftX, rightX and topY
unc0rr
parents: 10183
diff changeset
   186
    leftX:= 0;
f87776bd5acd Setup leftX, rightX and topY
unc0rr
parents: 10183
diff changeset
   187
    rightX:= 4095;
f87776bd5acd Setup leftX, rightX and topY
unc0rr
parents: 10183
diff changeset
   188
    topY:= 0;
f87776bd5acd Setup leftX, rightX and topY
unc0rr
parents: 10183
diff changeset
   189
    hasBorder:= false;
10181
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   190
end;
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   191
4708343d5963 Perlin noise generator untweaked, temporarily replacing maze generator
unc0rr
parents:
diff changeset
   192
end.