Merge lp:~widelands-dev/widelands/terrain_affinity_as_int into lp:widelands
- terrain_affinity_as_int
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 8933 | ||||
Proposed branch: | lp:~widelands-dev/widelands/terrain_affinity_as_int | ||||
Merge into: | lp:widelands | ||||
Diff against target: |
1945 lines (+397/-389) 43 files modified
data/tribes/immovables/berry_bushes/blueberry/init.lua (+3/-3) data/tribes/immovables/berry_bushes/currant_black/init.lua (+3/-3) data/tribes/immovables/berry_bushes/currant_red/init.lua (+3/-3) data/tribes/immovables/berry_bushes/desert_hackberry/init.lua (+3/-3) data/tribes/immovables/berry_bushes/juniper/init.lua (+3/-3) data/tribes/immovables/berry_bushes/raspberry/init.lua (+3/-3) data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua (+3/-3) data/tribes/immovables/berry_bushes/strawberry/init.lua (+3/-3) data/world/immovables/bush1/init.lua (+8/-8) data/world/immovables/trees/alder/init.lua (+8/-8) data/world/immovables/trees/aspen/init.lua (+3/-3) data/world/immovables/trees/beech/init.lua (+3/-3) data/world/immovables/trees/birch/init.lua (+3/-3) data/world/immovables/trees/cirrus/init.lua (+3/-3) data/world/immovables/trees/larch/init.lua (+3/-3) data/world/immovables/trees/liana/init.lua (+3/-3) data/world/immovables/trees/maple/init.lua (+3/-3) data/world/immovables/trees/mushroom_dark/init.lua (+3/-3) data/world/immovables/trees/mushroom_green/init.lua (+3/-3) data/world/immovables/trees/mushroom_red/init.lua (+3/-3) data/world/immovables/trees/oak/init.lua (+3/-3) data/world/immovables/trees/palm_borassus/init.lua (+3/-3) data/world/immovables/trees/palm_coconut/init.lua (+3/-3) data/world/immovables/trees/palm_date/init.lua (+3/-3) data/world/immovables/trees/palm_oil/init.lua (+3/-3) data/world/immovables/trees/palm_roystonea/init.lua (+3/-3) data/world/immovables/trees/rowan/init.lua (+3/-3) data/world/immovables/trees/spruce/init.lua (+3/-3) data/world/immovables/trees/twine/init.lua (+3/-3) data/world/immovables/trees/umbrella_green/init.lua (+3/-3) data/world/immovables/trees/umbrella_red/init.lua (+3/-3) data/world/terrains/init.lua (+145/-145) src/logic/game.cc (+0/-4) src/logic/game.h (+0/-3) src/logic/map_objects/immovable.cc (+3/-3) src/logic/map_objects/terrain_affinity.cc (+62/-53) src/logic/map_objects/terrain_affinity.h (+26/-20) src/logic/map_objects/tribes/worker.cc (+11/-11) src/logic/map_objects/world/terrain_description.cc (+10/-10) src/logic/map_objects/world/terrain_description.h (+10/-10) src/scripting/lua_map.cc (+10/-10) test/maps/lua_testsuite.wmf/scripting/immovables_descriptions.lua (+9/-9) test/maps/lua_testsuite.wmf/scripting/terrains_resources_descriptions.lua (+8/-8) |
||||
To merge this branch: | bzr merge lp:~widelands-dev/widelands/terrain_affinity_as_int | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Arty | Approve | ||
Review via email: mp+358299@code.launchpad.net |
Commit message
Fix desyncs caused by floating point arithmetic
- Floating point arithmetic can become inconsistent across platforms/
- Upscale terrain affinity constants to turn them into ints
- Upscale the result of the affinity calculation and then use std::floor to cut it off at
largely reduced precision for consistent rounding behavior. This should fix inconsistencies
with double rounding and rounding direction.
- Catch a possible division by 0.
Description of the change
Fix cross-platform desyncs caused by floating point arithmetic. Further reading:
https:/
https:/
Test savegame:
https:/
With this savegame, I can cause a multiplayer desync on the same machine by compiling one copy of Widelands with GCC and another copy with Clang. The desync happens before the ship finishes building. With this branch, the desync is gone.
bunnybot (widelandsofficial) wrote : | # |
bunnybot (widelandsofficial) wrote : | # |
Continuous integration builds have changed state:
Travis build 4213. State: errored. Details: https:/
Appveyor build 4009. State: failed. Details: https:/
bunnybot (widelandsofficial) wrote : | # |
Continuous integration builds have changed state:
Travis build 4238. State: passed. Details: https:/
Appveyor build 4034. State: success. Details: https:/
Arty (artydent) wrote : | # |
I reviewed the code and also tested somewhat. Still has a few issues, most of them minor though. See diff comments.
The file data\world\
Overall it should be much less likely now to get different results based on platform/compiler dependent precision choices, but they might still happen. There are still things based on floating point calculations (like the main probability calculation in calculate_
That said, considering that the ratios of the final probabilities of the six best immovables already change significantly with this branch, we could possibly also change the basic probability calculation to somewhat that uses only integer operations but is not too far off from the current approach (which seems to have been based roughly on multivariate normal distributions).
Btw, where did those three weight constants in calculate_
GunChleoc (gunchleoc) wrote : | # |
Thanks for the excellent review :)
I have addressed most of your comments and left replies to the rest.
One of our math wizards spent a long time tweaking the system and the function, so I'm hesitant to change any semantics here. There is an e function involved, so there is no way to avoid floating point completely unless we radically change the system.
Arty (artydent) wrote : | # |
Yes, the exponential function is the problem. Approximating it with highish precision using only integer calculations would require a lot of computation, which isn't really feasible. There are reasonable options though if we don't mind straying a little. The function we use here is basically a three-dimensional Gauß-curve, and I think we could find an alternative that roughly preserves the shape and can be done with a small number of integer operations.
It's probably not necessary though, but if we keep getting desyncs because of such platform/
I also replied to your replies.
GunChleoc (gunchleoc) wrote : | # |
Thanks for your math wizardry - I have now implemented both suggestions.
I think that greatly cutting the precision while forcing a uniform rounding strategy (round down) should be good enough for our purposes. Let's merge this and see if we're still getting desyncs. We can always decide to change the formula later if necessary.
@bunnybot merge
Arty (artydent) wrote : | # |
Looks good now.
The comment with the assciativity is kinda obsolete now though.
And using int64_t wasn't really necessary now that you use the weights linearly.
Preview Diff
1 | === modified file 'data/tribes/immovables/berry_bushes/blueberry/init.lua' | |||
2 | --- data/tribes/immovables/berry_bushes/blueberry/init.lua 2018-02-17 15:41:29 +0000 | |||
3 | +++ data/tribes/immovables/berry_bushes/blueberry/init.lua 2018-11-23 12:45:17 +0000 | |||
4 | @@ -2,9 +2,9 @@ | |||
5 | 2 | 2 | ||
6 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
7 | 4 | preferred_temperature = 45, -- Temperature is in arbitrary units. | 4 | preferred_temperature = 45, -- Temperature is in arbitrary units. |
11 | 5 | preferred_humidity = 0.75, -- In percent (1 being very wet). | 5 | preferred_humidity = 750, -- Values between 0 and 1000 (1000 being very wet). |
12 | 6 | preferred_fertility = 0.4, -- In percent (1 being very fertile). | 6 | preferred_fertility = 400, -- Values between 0 and 1000 (1000 being very fertile). |
13 | 7 | pickiness = 0.15, -- Lower means it is less picky, i.e. it can deal better. | 7 | pickiness = 15, -- Lower means it is less picky, i.e. it can deal better. |
14 | 8 | } | 8 | } |
15 | 9 | 9 | ||
16 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
17 | 11 | 11 | ||
18 | === modified file 'data/tribes/immovables/berry_bushes/currant_black/init.lua' | |||
19 | --- data/tribes/immovables/berry_bushes/currant_black/init.lua 2018-02-17 15:41:29 +0000 | |||
20 | +++ data/tribes/immovables/berry_bushes/currant_black/init.lua 2018-11-23 12:45:17 +0000 | |||
21 | @@ -2,9 +2,9 @@ | |||
22 | 2 | 2 | ||
23 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
24 | 4 | preferred_temperature = 120, | 4 | preferred_temperature = 120, |
28 | 5 | preferred_humidity = 0.1, | 5 | preferred_humidity = 100, |
29 | 6 | preferred_fertility = 0.2, | 6 | preferred_fertility = 200, |
30 | 7 | pickiness = 0.5, | 7 | pickiness = 50, |
31 | 8 | } | 8 | } |
32 | 9 | 9 | ||
33 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
34 | 11 | 11 | ||
35 | === modified file 'data/tribes/immovables/berry_bushes/currant_red/init.lua' | |||
36 | --- data/tribes/immovables/berry_bushes/currant_red/init.lua 2018-02-17 15:41:29 +0000 | |||
37 | +++ data/tribes/immovables/berry_bushes/currant_red/init.lua 2018-11-23 12:45:17 +0000 | |||
38 | @@ -2,9 +2,9 @@ | |||
39 | 2 | 2 | ||
40 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
41 | 4 | preferred_temperature = 95, | 4 | preferred_temperature = 95, |
45 | 5 | preferred_humidity = 0.55, | 5 | preferred_humidity = 550, |
46 | 6 | preferred_fertility = 0.45, | 6 | preferred_fertility = 450, |
47 | 7 | pickiness = 0.4, | 7 | pickiness = 40, |
48 | 8 | } | 8 | } |
49 | 9 | 9 | ||
50 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
51 | 11 | 11 | ||
52 | === modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/init.lua' | |||
53 | --- data/tribes/immovables/berry_bushes/desert_hackberry/init.lua 2018-02-17 15:41:29 +0000 | |||
54 | +++ data/tribes/immovables/berry_bushes/desert_hackberry/init.lua 2018-11-23 12:45:17 +0000 | |||
55 | @@ -2,9 +2,9 @@ | |||
56 | 2 | 2 | ||
57 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
58 | 4 | preferred_temperature = 170, -- Temperature is in arbitrary units. | 4 | preferred_temperature = 170, -- Temperature is in arbitrary units. |
62 | 5 | preferred_humidity = 0.05, -- In percent (1 being very wet). | 5 | preferred_humidity = 50, -- Values between 0 and 1000 (1000 being very wet). |
63 | 6 | preferred_fertility = 0.05, -- In percent (1 being very fertile). | 6 | preferred_fertility = 50, -- Values between 0 and 1000 (1000 being very fertile). |
64 | 7 | pickiness = 0.3, -- Lower means it is less picky, i.e. it can deal better. | 7 | pickiness = 30, -- Lower means it is less picky, i.e. it can deal better. |
65 | 8 | } | 8 | } |
66 | 9 | 9 | ||
67 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
68 | 11 | 11 | ||
69 | === modified file 'data/tribes/immovables/berry_bushes/juniper/init.lua' | |||
70 | --- data/tribes/immovables/berry_bushes/juniper/init.lua 2018-04-21 15:27:00 +0000 | |||
71 | +++ data/tribes/immovables/berry_bushes/juniper/init.lua 2018-11-23 12:45:17 +0000 | |||
72 | @@ -2,9 +2,9 @@ | |||
73 | 2 | 2 | ||
74 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
75 | 4 | preferred_temperature = 115, | 4 | preferred_temperature = 115, |
79 | 5 | preferred_humidity = 0.6, | 5 | preferred_humidity = 600, |
80 | 6 | preferred_fertility = 0.2, | 6 | preferred_fertility = 200, |
81 | 7 | pickiness = 0.15, | 7 | pickiness = 15, |
82 | 8 | } | 8 | } |
83 | 9 | 9 | ||
84 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
85 | 11 | 11 | ||
86 | === modified file 'data/tribes/immovables/berry_bushes/raspberry/init.lua' | |||
87 | --- data/tribes/immovables/berry_bushes/raspberry/init.lua 2018-02-17 15:41:29 +0000 | |||
88 | +++ data/tribes/immovables/berry_bushes/raspberry/init.lua 2018-11-23 12:45:17 +0000 | |||
89 | @@ -2,9 +2,9 @@ | |||
90 | 2 | 2 | ||
91 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
92 | 4 | preferred_temperature = 50, | 4 | preferred_temperature = 50, |
96 | 5 | preferred_humidity = 0.3, | 5 | preferred_humidity = 300, |
97 | 6 | preferred_fertility = 0.05, | 6 | preferred_fertility = 50, |
98 | 7 | pickiness = 0.1, | 7 | pickiness = 10, |
99 | 8 | } | 8 | } |
100 | 9 | 9 | ||
101 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
102 | 11 | 11 | ||
103 | === modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua' | |||
104 | --- data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua 2018-02-17 15:41:29 +0000 | |||
105 | +++ data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua 2018-11-23 12:45:17 +0000 | |||
106 | @@ -2,9 +2,9 @@ | |||
107 | 2 | 2 | ||
108 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
109 | 4 | preferred_temperature = 100, -- Temperature is in arbitrary units. | 4 | preferred_temperature = 100, -- Temperature is in arbitrary units. |
113 | 5 | preferred_humidity = 0.95, -- In percent (1 being very wet). | 5 | preferred_humidity = 950, -- Values between 0 and 1000 (1000 being very wet). |
114 | 6 | preferred_fertility = 0.05, -- In percent (1 being very fertile). | 6 | preferred_fertility = 50, -- Values between 0 and 1000 (1000 being very fertile). |
115 | 7 | pickiness = 0.15, -- Lower means it is less picky, i.e. it can deal better. | 7 | pickiness = 15, -- Lower means it is less picky, i.e. it can deal better. |
116 | 8 | } | 8 | } |
117 | 9 | 9 | ||
118 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
119 | 11 | 11 | ||
120 | === modified file 'data/tribes/immovables/berry_bushes/strawberry/init.lua' | |||
121 | --- data/tribes/immovables/berry_bushes/strawberry/init.lua 2018-05-02 08:13:07 +0000 | |||
122 | +++ data/tribes/immovables/berry_bushes/strawberry/init.lua 2018-11-23 12:45:17 +0000 | |||
123 | @@ -2,9 +2,9 @@ | |||
124 | 2 | 2 | ||
125 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
126 | 4 | preferred_temperature = 110, -- Temperature is in arbitrary units. | 4 | preferred_temperature = 110, -- Temperature is in arbitrary units. |
130 | 5 | preferred_humidity = 0.6, -- In percent (1 being very wet). | 5 | preferred_humidity = 600, -- Values between 0 and 1000 (1000 being very wet). |
131 | 6 | preferred_fertility = 0.8, -- In percent (1 being very fertile). | 6 | preferred_fertility = 800, -- Values between 0 and 1000 (1000 being very fertile). |
132 | 7 | pickiness = 0.2, -- Lower means it is less picky, i.e. it can deal better. | 7 | pickiness = 20, -- Lower means it is less picky, i.e. it can deal better. |
133 | 8 | } | 8 | } |
134 | 9 | 9 | ||
135 | 10 | tribes:new_immovable_type { | 10 | tribes:new_immovable_type { |
136 | 11 | 11 | ||
137 | === modified file 'data/world/immovables/bush1/init.lua' | |||
138 | --- data/world/immovables/bush1/init.lua 2017-09-02 16:12:50 +0000 | |||
139 | +++ data/world/immovables/bush1/init.lua 2018-11-23 12:45:17 +0000 | |||
140 | @@ -83,15 +83,15 @@ | |||
141 | 83 | -- -- Temperature is in arbitrary units. | 83 | -- -- Temperature is in arbitrary units. |
142 | 84 | -- preferred_temperature = 125, | 84 | -- preferred_temperature = 125, |
143 | 85 | -- | 85 | -- |
151 | 86 | -- -- In percent (1 being very wet). | 86 | -- -- The preferred humibity. This is a value between 0 and 1000, with 1000 being very wet. |
152 | 87 | -- preferred_humidity = 0.65, | 87 | -- preferred_humidity = 650, |
153 | 88 | -- | 88 | -- |
154 | 89 | -- -- In percent (1 being very fertile). | 89 | -- -- The preferred fertility. This is a value between 0 and 1000, with 1000 being very fertile. |
155 | 90 | -- preferred_fertility = 0.6, | 90 | -- preferred_fertility = 600, |
156 | 91 | -- | 91 | -- |
157 | 92 | -- -- A value in [0, 1] that defines how well this immovable can deal with non-ideal terrain. | 92 | -- -- A value in [0, 99] that defines how well this immovable can deal with non-ideal terrain. |
158 | 93 | -- -- A lower value means that it is less picky, i.e. it can deal better with it. | 93 | -- -- A lower value means that it is less picky, i.e. it can deal better with it. |
160 | 94 | -- pickiness = 0.6, | 94 | -- pickiness = 60, |
161 | 95 | -- } | 95 | -- } |
162 | 96 | -- | 96 | -- |
163 | 97 | -- **animations** | 97 | -- **animations** |
164 | 98 | 98 | ||
165 | === modified file 'data/world/immovables/trees/alder/init.lua' | |||
166 | --- data/world/immovables/trees/alder/init.lua 2016-02-10 19:50:13 +0000 | |||
167 | +++ data/world/immovables/trees/alder/init.lua 2018-11-23 12:45:17 +0000 | |||
168 | @@ -4,15 +4,15 @@ | |||
169 | 4 | -- Temperature is in arbitrary units. | 4 | -- Temperature is in arbitrary units. |
170 | 5 | preferred_temperature = 125, | 5 | preferred_temperature = 125, |
171 | 6 | 6 | ||
179 | 7 | -- In percent (1 being very wet). | 7 | -- Value between 0 and 1000 (1000 being very wet). |
180 | 8 | preferred_humidity = 0.65, | 8 | preferred_humidity = 650, |
181 | 9 | 9 | ||
182 | 10 | -- In percent (1 being very fertile). | 10 | -- Values between 0 and 1000 (1000 being very fertile). |
183 | 11 | preferred_fertility = 0.6, | 11 | preferred_fertility = 600, |
184 | 12 | 12 | ||
185 | 13 | -- A value in [0, 1] that defines how well this can deal with non-ideal | 13 | -- A value in [0, 100] that defines how well this can deal with non-ideal |
186 | 14 | -- situations. Lower means it is less picky, i.e. it can deal better. | 14 | -- situations. Lower means it is less picky, i.e. it can deal better. |
188 | 15 | pickiness = 0.6, | 15 | pickiness = 60, |
189 | 16 | } | 16 | } |
190 | 17 | 17 | ||
191 | 18 | world:new_immovable_type{ | 18 | world:new_immovable_type{ |
192 | 19 | 19 | ||
193 | === modified file 'data/world/immovables/trees/aspen/init.lua' | |||
194 | --- data/world/immovables/trees/aspen/init.lua 2016-02-10 19:50:13 +0000 | |||
195 | +++ data/world/immovables/trees/aspen/init.lua 2018-11-23 12:45:17 +0000 | |||
196 | @@ -2,9 +2,9 @@ | |||
197 | 2 | 2 | ||
198 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
199 | 4 | preferred_temperature = 100, | 4 | preferred_temperature = 100, |
203 | 5 | preferred_humidity = 0.6, | 5 | preferred_humidity = 600, |
204 | 6 | preferred_fertility = 0.7, | 6 | preferred_fertility = 700, |
205 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
206 | 8 | } | 8 | } |
207 | 9 | 9 | ||
208 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
209 | 11 | 11 | ||
210 | === modified file 'data/world/immovables/trees/beech/init.lua' | |||
211 | --- data/world/immovables/trees/beech/init.lua 2016-02-10 19:50:13 +0000 | |||
212 | +++ data/world/immovables/trees/beech/init.lua 2018-11-23 12:45:17 +0000 | |||
213 | @@ -2,9 +2,9 @@ | |||
214 | 2 | 2 | ||
215 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
216 | 4 | preferred_temperature = 110, | 4 | preferred_temperature = 110, |
220 | 5 | preferred_humidity = 0.4, | 5 | preferred_humidity = 400, |
221 | 6 | preferred_fertility = 0.6, | 6 | preferred_fertility = 600, |
222 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
223 | 8 | } | 8 | } |
224 | 9 | 9 | ||
225 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
226 | 11 | 11 | ||
227 | === modified file 'data/world/immovables/trees/birch/init.lua' | |||
228 | --- data/world/immovables/trees/birch/init.lua 2016-02-10 19:50:13 +0000 | |||
229 | +++ data/world/immovables/trees/birch/init.lua 2018-11-23 12:45:17 +0000 | |||
230 | @@ -2,9 +2,9 @@ | |||
231 | 2 | 2 | ||
232 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
233 | 4 | preferred_temperature = 80, | 4 | preferred_temperature = 80, |
237 | 5 | preferred_humidity = 0.65, | 5 | preferred_humidity = 650, |
238 | 6 | preferred_fertility = 0.6, | 6 | preferred_fertility = 600, |
239 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
240 | 8 | } | 8 | } |
241 | 9 | 9 | ||
242 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
243 | 11 | 11 | ||
244 | === modified file 'data/world/immovables/trees/cirrus/init.lua' | |||
245 | --- data/world/immovables/trees/cirrus/init.lua 2016-02-10 19:50:13 +0000 | |||
246 | +++ data/world/immovables/trees/cirrus/init.lua 2018-11-23 12:45:17 +0000 | |||
247 | @@ -2,9 +2,9 @@ | |||
248 | 2 | 2 | ||
249 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
250 | 4 | preferred_temperature = 110, | 4 | preferred_temperature = 110, |
254 | 5 | preferred_humidity = 0.15, | 5 | preferred_humidity = 150, |
255 | 6 | preferred_fertility = 0.95, | 6 | preferred_fertility = 950, |
256 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
257 | 8 | } | 8 | } |
258 | 9 | 9 | ||
259 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
260 | 11 | 11 | ||
261 | === modified file 'data/world/immovables/trees/larch/init.lua' | |||
262 | --- data/world/immovables/trees/larch/init.lua 2016-02-10 19:50:13 +0000 | |||
263 | +++ data/world/immovables/trees/larch/init.lua 2018-11-23 12:45:17 +0000 | |||
264 | @@ -2,9 +2,9 @@ | |||
265 | 2 | 2 | ||
266 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
267 | 4 | preferred_temperature = 50, | 4 | preferred_temperature = 50, |
271 | 5 | preferred_humidity = 0.8, | 5 | preferred_humidity = 800, |
272 | 6 | preferred_fertility = 0.45, | 6 | preferred_fertility = 450, |
273 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
274 | 8 | } | 8 | } |
275 | 9 | 9 | ||
276 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
277 | 11 | 11 | ||
278 | === modified file 'data/world/immovables/trees/liana/init.lua' | |||
279 | --- data/world/immovables/trees/liana/init.lua 2016-02-10 19:50:13 +0000 | |||
280 | +++ data/world/immovables/trees/liana/init.lua 2018-11-23 12:45:17 +0000 | |||
281 | @@ -2,9 +2,9 @@ | |||
282 | 2 | 2 | ||
283 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
284 | 4 | preferred_temperature = 120, | 4 | preferred_temperature = 120, |
288 | 5 | preferred_humidity = 0.2, | 5 | preferred_humidity = 200, |
289 | 6 | preferred_fertility = 0.7, | 6 | preferred_fertility = 700, |
290 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
291 | 8 | } | 8 | } |
292 | 9 | 9 | ||
293 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
294 | 11 | 11 | ||
295 | === modified file 'data/world/immovables/trees/maple/init.lua' | |||
296 | --- data/world/immovables/trees/maple/init.lua 2016-02-28 08:33:59 +0000 | |||
297 | +++ data/world/immovables/trees/maple/init.lua 2018-11-23 12:45:17 +0000 | |||
298 | @@ -2,9 +2,9 @@ | |||
299 | 2 | 2 | ||
300 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
301 | 4 | preferred_temperature = 110, | 4 | preferred_temperature = 110, |
305 | 5 | preferred_humidity = 0.55, | 5 | preferred_humidity = 550, |
306 | 6 | preferred_fertility = 0.8, | 6 | preferred_fertility = 800, |
307 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
308 | 8 | } | 8 | } |
309 | 9 | 9 | ||
310 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
311 | 11 | 11 | ||
312 | === modified file 'data/world/immovables/trees/mushroom_dark/init.lua' | |||
313 | --- data/world/immovables/trees/mushroom_dark/init.lua 2016-02-10 19:50:13 +0000 | |||
314 | +++ data/world/immovables/trees/mushroom_dark/init.lua 2018-11-23 12:45:17 +0000 | |||
315 | @@ -2,9 +2,9 @@ | |||
316 | 2 | 2 | ||
317 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
318 | 4 | preferred_temperature = 100, | 4 | preferred_temperature = 100, |
322 | 5 | preferred_humidity = 0.2, | 5 | preferred_humidity = 200, |
323 | 6 | preferred_fertility = 0.8, | 6 | preferred_fertility = 800, |
324 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
325 | 8 | } | 8 | } |
326 | 9 | 9 | ||
327 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
328 | 11 | 11 | ||
329 | === modified file 'data/world/immovables/trees/mushroom_green/init.lua' | |||
330 | --- data/world/immovables/trees/mushroom_green/init.lua 2016-02-10 19:50:13 +0000 | |||
331 | +++ data/world/immovables/trees/mushroom_green/init.lua 2018-11-23 12:45:17 +0000 | |||
332 | @@ -2,9 +2,9 @@ | |||
333 | 2 | 2 | ||
334 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
335 | 4 | preferred_temperature = 105, | 4 | preferred_temperature = 105, |
339 | 5 | preferred_humidity = 0.2, | 5 | preferred_humidity = 200, |
340 | 6 | preferred_fertility = 0.9, | 6 | preferred_fertility = 900, |
341 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
342 | 8 | } | 8 | } |
343 | 9 | 9 | ||
344 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
345 | 11 | 11 | ||
346 | === modified file 'data/world/immovables/trees/mushroom_red/init.lua' | |||
347 | --- data/world/immovables/trees/mushroom_red/init.lua 2016-02-10 19:50:13 +0000 | |||
348 | +++ data/world/immovables/trees/mushroom_red/init.lua 2018-11-23 12:45:17 +0000 | |||
349 | @@ -2,9 +2,9 @@ | |||
350 | 2 | 2 | ||
351 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
352 | 4 | preferred_temperature = 80, | 4 | preferred_temperature = 80, |
356 | 5 | preferred_humidity = 0.35, | 5 | preferred_humidity = 350, |
357 | 6 | preferred_fertility = 0.85, | 6 | preferred_fertility = 850, |
358 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
359 | 8 | } | 8 | } |
360 | 9 | 9 | ||
361 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
362 | 11 | 11 | ||
363 | === modified file 'data/world/immovables/trees/oak/init.lua' | |||
364 | --- data/world/immovables/trees/oak/init.lua 2016-02-10 19:50:13 +0000 | |||
365 | +++ data/world/immovables/trees/oak/init.lua 2018-11-23 12:45:17 +0000 | |||
366 | @@ -2,9 +2,9 @@ | |||
367 | 2 | 2 | ||
368 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
369 | 4 | preferred_temperature = 90, | 4 | preferred_temperature = 90, |
373 | 5 | preferred_humidity = 0.7, | 5 | preferred_humidity = 700, |
374 | 6 | preferred_fertility = 0.5, | 6 | preferred_fertility = 500, |
375 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
376 | 8 | } | 8 | } |
377 | 9 | 9 | ||
378 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
379 | 11 | 11 | ||
380 | === modified file 'data/world/immovables/trees/palm_borassus/init.lua' | |||
381 | --- data/world/immovables/trees/palm_borassus/init.lua 2016-02-10 19:50:13 +0000 | |||
382 | +++ data/world/immovables/trees/palm_borassus/init.lua 2018-11-23 12:45:17 +0000 | |||
383 | @@ -2,9 +2,9 @@ | |||
384 | 2 | 2 | ||
385 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
386 | 4 | preferred_temperature = 180, | 4 | preferred_temperature = 180, |
390 | 5 | preferred_humidity = 0.4, | 5 | preferred_humidity = 400, |
391 | 6 | preferred_fertility = 0.4, | 6 | preferred_fertility = 400, |
392 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
393 | 8 | } | 8 | } |
394 | 9 | 9 | ||
395 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
396 | 11 | 11 | ||
397 | === modified file 'data/world/immovables/trees/palm_coconut/init.lua' | |||
398 | --- data/world/immovables/trees/palm_coconut/init.lua 2016-02-10 19:50:13 +0000 | |||
399 | +++ data/world/immovables/trees/palm_coconut/init.lua 2018-11-23 12:45:17 +0000 | |||
400 | @@ -2,9 +2,9 @@ | |||
401 | 2 | 2 | ||
402 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
403 | 4 | preferred_temperature = 130, | 4 | preferred_temperature = 130, |
407 | 5 | preferred_humidity = 0.5, | 5 | preferred_humidity = 500, |
408 | 6 | preferred_fertility = 0.6, | 6 | preferred_fertility = 600, |
409 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
410 | 8 | } | 8 | } |
411 | 9 | 9 | ||
412 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
413 | 11 | 11 | ||
414 | === modified file 'data/world/immovables/trees/palm_date/init.lua' | |||
415 | --- data/world/immovables/trees/palm_date/init.lua 2016-02-10 19:50:13 +0000 | |||
416 | +++ data/world/immovables/trees/palm_date/init.lua 2018-11-23 12:45:17 +0000 | |||
417 | @@ -2,9 +2,9 @@ | |||
418 | 2 | 2 | ||
419 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
420 | 4 | preferred_temperature = 160, | 4 | preferred_temperature = 160, |
424 | 5 | preferred_humidity = 0.5, | 5 | preferred_humidity = 500, |
425 | 6 | preferred_fertility = 0.5, | 6 | preferred_fertility = 500, |
426 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
427 | 8 | } | 8 | } |
428 | 9 | 9 | ||
429 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
430 | 11 | 11 | ||
431 | === modified file 'data/world/immovables/trees/palm_oil/init.lua' | |||
432 | --- data/world/immovables/trees/palm_oil/init.lua 2016-02-10 19:50:13 +0000 | |||
433 | +++ data/world/immovables/trees/palm_oil/init.lua 2018-11-23 12:45:17 +0000 | |||
434 | @@ -2,9 +2,9 @@ | |||
435 | 2 | 2 | ||
436 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
437 | 4 | preferred_temperature = 150, | 4 | preferred_temperature = 150, |
441 | 5 | preferred_humidity = 0.55, | 5 | preferred_humidity = 550, |
442 | 6 | preferred_fertility = 0.5, | 6 | preferred_fertility = 500, |
443 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
444 | 8 | } | 8 | } |
445 | 9 | 9 | ||
446 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
447 | 11 | 11 | ||
448 | === modified file 'data/world/immovables/trees/palm_roystonea/init.lua' | |||
449 | --- data/world/immovables/trees/palm_roystonea/init.lua 2016-02-10 19:50:13 +0000 | |||
450 | +++ data/world/immovables/trees/palm_roystonea/init.lua 2018-11-23 12:45:17 +0000 | |||
451 | @@ -2,9 +2,9 @@ | |||
452 | 2 | 2 | ||
453 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
454 | 4 | preferred_temperature = 160, | 4 | preferred_temperature = 160, |
458 | 5 | preferred_humidity = 0.6, | 5 | preferred_humidity = 600, |
459 | 6 | preferred_fertility = 0.6, | 6 | preferred_fertility = 600, |
460 | 7 | pickiness = 0.9, | 7 | pickiness = 90, |
461 | 8 | } | 8 | } |
462 | 9 | 9 | ||
463 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
464 | 11 | 11 | ||
465 | === modified file 'data/world/immovables/trees/rowan/init.lua' | |||
466 | --- data/world/immovables/trees/rowan/init.lua 2016-02-10 19:50:13 +0000 | |||
467 | +++ data/world/immovables/trees/rowan/init.lua 2018-11-23 12:45:17 +0000 | |||
468 | @@ -2,9 +2,9 @@ | |||
469 | 2 | 2 | ||
470 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
471 | 4 | preferred_temperature = 105, | 4 | preferred_temperature = 105, |
475 | 5 | preferred_humidity = 0.65, | 5 | preferred_humidity = 650, |
476 | 6 | preferred_fertility = 0.75, | 6 | preferred_fertility = 750, |
477 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
478 | 8 | } | 8 | } |
479 | 9 | 9 | ||
480 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
481 | 11 | 11 | ||
482 | === modified file 'data/world/immovables/trees/spruce/init.lua' | |||
483 | --- data/world/immovables/trees/spruce/init.lua 2016-02-10 19:50:13 +0000 | |||
484 | +++ data/world/immovables/trees/spruce/init.lua 2018-11-23 12:45:17 +0000 | |||
485 | @@ -2,9 +2,9 @@ | |||
486 | 2 | 2 | ||
487 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
488 | 4 | preferred_temperature = 60, | 4 | preferred_temperature = 60, |
492 | 5 | preferred_humidity = 0.7, | 5 | preferred_humidity = 700, |
493 | 6 | preferred_fertility = 0.5, | 6 | preferred_fertility = 500, |
494 | 7 | pickiness = 0.6, | 7 | pickiness = 60, |
495 | 8 | } | 8 | } |
496 | 9 | 9 | ||
497 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
498 | 11 | 11 | ||
499 | === modified file 'data/world/immovables/trees/twine/init.lua' | |||
500 | --- data/world/immovables/trees/twine/init.lua 2016-02-10 19:50:13 +0000 | |||
501 | +++ data/world/immovables/trees/twine/init.lua 2018-11-23 12:45:17 +0000 | |||
502 | @@ -2,9 +2,9 @@ | |||
503 | 2 | 2 | ||
504 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
505 | 4 | preferred_temperature = 95, | 4 | preferred_temperature = 95, |
509 | 5 | preferred_humidity = 0.2, | 5 | preferred_humidity = 200, |
510 | 6 | preferred_fertility = 0.4, | 6 | preferred_fertility = 400, |
511 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
512 | 8 | } | 8 | } |
513 | 9 | 9 | ||
514 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
515 | 11 | 11 | ||
516 | === modified file 'data/world/immovables/trees/umbrella_green/init.lua' | |||
517 | --- data/world/immovables/trees/umbrella_green/init.lua 2016-02-10 19:50:13 +0000 | |||
518 | +++ data/world/immovables/trees/umbrella_green/init.lua 2018-11-23 12:45:17 +0000 | |||
519 | @@ -2,9 +2,9 @@ | |||
520 | 2 | 2 | ||
521 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
522 | 4 | preferred_temperature = 110, | 4 | preferred_temperature = 110, |
526 | 5 | preferred_humidity = 0.2, | 5 | preferred_humidity = 200, |
527 | 6 | preferred_fertility = 0.85, | 6 | preferred_fertility = 850, |
528 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
529 | 8 | } | 8 | } |
530 | 9 | 9 | ||
531 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
532 | 11 | 11 | ||
533 | === modified file 'data/world/immovables/trees/umbrella_red/init.lua' | |||
534 | --- data/world/immovables/trees/umbrella_red/init.lua 2016-02-29 17:10:00 +0000 | |||
535 | +++ data/world/immovables/trees/umbrella_red/init.lua 2018-11-23 12:45:17 +0000 | |||
536 | @@ -2,9 +2,9 @@ | |||
537 | 2 | 2 | ||
538 | 3 | terrain_affinity = { | 3 | terrain_affinity = { |
539 | 4 | preferred_temperature = 90, | 4 | preferred_temperature = 90, |
543 | 5 | preferred_humidity = 0.15, | 5 | preferred_humidity = 150, |
544 | 6 | preferred_fertility = 0.825, | 6 | preferred_fertility = 825, |
545 | 7 | pickiness = 0.8, | 7 | pickiness = 80, |
546 | 8 | } | 8 | } |
547 | 9 | 9 | ||
548 | 10 | world:new_immovable_type{ | 10 | world:new_immovable_type{ |
549 | 11 | 11 | ||
550 | === modified file 'data/world/terrains/init.lua' | |||
551 | --- data/world/terrains/init.lua 2017-09-02 16:12:50 +0000 | |||
552 | +++ data/world/terrains/init.lua 2018-11-23 12:45:17 +0000 | |||
553 | @@ -131,17 +131,17 @@ | |||
554 | 131 | -- | 131 | -- |
555 | 132 | -- **humidity** | 132 | -- **humidity** |
556 | 133 | -- *Mandatory*. A terrain affinity constant. These are used to model how well | 133 | -- *Mandatory*. A terrain affinity constant. These are used to model how well |
558 | 134 | -- trees will grow on this terrain. Humidity is in percent (1 being very wet). | 134 | -- trees will grow on this terrain. Values range from 1 - 1000 (1000 being very wet). |
559 | 135 | -- Example:: | 135 | -- Example:: |
560 | 136 | -- | 136 | -- |
562 | 137 | -- humidity = 0.6, | 137 | -- humidity = 600, |
563 | 138 | -- | 138 | -- |
564 | 139 | -- **fertility** | 139 | -- **fertility** |
565 | 140 | -- *Mandatory*. A terrain affinity constant. These are used to model how well | 140 | -- *Mandatory*. A terrain affinity constant. These are used to model how well |
567 | 141 | -- trees will grow on this terrain. Fertility is in percent (1 being very | 141 | -- trees will grow on this terrain. Values range from 1 - 1000 (1000 being very |
568 | 142 | -- fertile). Example:: | 142 | -- fertile). Example:: |
569 | 143 | -- | 143 | -- |
571 | 144 | -- fertility = 0.7, | 144 | -- fertility = 700, |
572 | 145 | -- | 145 | -- |
573 | 146 | 146 | ||
574 | 147 | ------------------------ | 147 | ------------------------ |
575 | @@ -167,8 +167,8 @@ | |||
576 | 167 | dither_layer = 340, | 167 | dither_layer = 340, |
577 | 168 | 168 | ||
578 | 169 | temperature = 100, | 169 | temperature = 100, |
581 | 170 | humidity = 0.6, | 170 | humidity = 600, |
582 | 171 | fertility = 0.7, | 171 | fertility = 700, |
583 | 172 | } | 172 | } |
584 | 173 | 173 | ||
585 | 174 | 174 | ||
586 | @@ -187,8 +187,8 @@ | |||
587 | 187 | textures = { pics_dir .. "summer/meadow2_00.png" }, | 187 | textures = { pics_dir .. "summer/meadow2_00.png" }, |
588 | 188 | dither_layer = 350, | 188 | dither_layer = 350, |
589 | 189 | temperature = 100, | 189 | temperature = 100, |
592 | 190 | humidity = 0.6, | 190 | humidity = 600, |
593 | 191 | fertility = 0.65, | 191 | fertility = 650, |
594 | 192 | 192 | ||
595 | 193 | } | 193 | } |
596 | 194 | 194 | ||
597 | @@ -208,8 +208,8 @@ | |||
598 | 208 | textures = { pics_dir .. "summer/meadow3_00.png" }, | 208 | textures = { pics_dir .. "summer/meadow3_00.png" }, |
599 | 209 | dither_layer = 350, | 209 | dither_layer = 350, |
600 | 210 | temperature = 105, | 210 | temperature = 105, |
603 | 211 | humidity = 0.55, | 211 | humidity = 550, |
604 | 212 | fertility = 0.8, | 212 | fertility = 800, |
605 | 213 | } | 213 | } |
606 | 214 | 214 | ||
607 | 215 | 215 | ||
608 | @@ -228,8 +228,8 @@ | |||
609 | 228 | textures = { pics_dir .. "summer/meadow4_00.png" }, | 228 | textures = { pics_dir .. "summer/meadow4_00.png" }, |
610 | 229 | dither_layer = 350, | 229 | dither_layer = 350, |
611 | 230 | temperature = 110, | 230 | temperature = 110, |
614 | 231 | humidity = 0.65, | 231 | humidity = 650, |
615 | 232 | fertility = 0.75, | 232 | fertility = 750, |
616 | 233 | } | 233 | } |
617 | 234 | 234 | ||
618 | 235 | 235 | ||
619 | @@ -244,8 +244,8 @@ | |||
620 | 244 | textures = { pics_dir .. "summer/steppe_00.png" }, | 244 | textures = { pics_dir .. "summer/steppe_00.png" }, |
621 | 245 | dither_layer = 330, | 245 | dither_layer = 330, |
622 | 246 | temperature = 100, | 246 | temperature = 100, |
625 | 247 | humidity = 0.4, | 247 | humidity = 400, |
626 | 248 | fertility = 0.4, | 248 | fertility = 400, |
627 | 249 | } | 249 | } |
628 | 250 | 250 | ||
629 | 251 | 251 | ||
630 | @@ -260,8 +260,8 @@ | |||
631 | 260 | textures = { pics_dir .. "summer/steppe_barren_00.png" }, | 260 | textures = { pics_dir .. "summer/steppe_barren_00.png" }, |
632 | 261 | dither_layer = 320, | 261 | dither_layer = 320, |
633 | 262 | temperature = 100, | 262 | temperature = 100, |
636 | 263 | humidity = 0.15, | 263 | humidity = 150, |
637 | 264 | fertility = 0.15, | 264 | fertility = 150, |
638 | 265 | } | 265 | } |
639 | 266 | 266 | ||
640 | 267 | 267 | ||
641 | @@ -276,8 +276,8 @@ | |||
642 | 276 | textures = { pics_dir .. "summer/mountain_meadow_00.png" }, | 276 | textures = { pics_dir .. "summer/mountain_meadow_00.png" }, |
643 | 277 | dither_layer = 160, | 277 | dither_layer = 160, |
644 | 278 | temperature = 75, | 278 | temperature = 75, |
647 | 279 | humidity = 0.8, | 279 | humidity = 800, |
648 | 280 | fertility = 0.45, | 280 | fertility = 450, |
649 | 281 | } | 281 | } |
650 | 282 | 282 | ||
651 | 283 | world:new_terrain_type{ | 283 | world:new_terrain_type{ |
652 | @@ -296,8 +296,8 @@ | |||
653 | 296 | textures = { pics_dir .. "summer/forested_mountain1_00.png" }, | 296 | textures = { pics_dir .. "summer/forested_mountain1_00.png" }, |
654 | 297 | dither_layer = 71, | 297 | dither_layer = 71, |
655 | 298 | temperature = 50, | 298 | temperature = 50, |
658 | 299 | humidity = 0.75, | 299 | humidity = 750, |
659 | 300 | fertility = 0.5, | 300 | fertility = 500, |
660 | 301 | } | 301 | } |
661 | 302 | 302 | ||
662 | 303 | world:new_terrain_type{ | 303 | world:new_terrain_type{ |
663 | @@ -316,8 +316,8 @@ | |||
664 | 316 | textures = { pics_dir .. "summer/forested_mountain2_00.png" }, | 316 | textures = { pics_dir .. "summer/forested_mountain2_00.png" }, |
665 | 317 | dither_layer = 71, | 317 | dither_layer = 71, |
666 | 318 | temperature = 50, | 318 | temperature = 50, |
669 | 319 | humidity = 0.75, | 319 | humidity = 750, |
670 | 320 | fertility = 0.5, | 320 | fertility = 500, |
671 | 321 | } | 321 | } |
672 | 322 | 322 | ||
673 | 323 | world:new_terrain_type{ | 323 | world:new_terrain_type{ |
674 | @@ -331,8 +331,8 @@ | |||
675 | 331 | textures = { pics_dir .. "summer/mountain1_00.png" }, | 331 | textures = { pics_dir .. "summer/mountain1_00.png" }, |
676 | 332 | dither_layer = 70, | 332 | dither_layer = 70, |
677 | 333 | temperature = 80, | 333 | temperature = 80, |
680 | 334 | humidity = 0.1, | 334 | humidity = 100, |
681 | 335 | fertility = 0.1, | 335 | fertility = 100, |
682 | 336 | } | 336 | } |
683 | 337 | 337 | ||
684 | 338 | 338 | ||
685 | @@ -347,8 +347,8 @@ | |||
686 | 347 | textures = { pics_dir .. "summer/mountain2_00.png" }, | 347 | textures = { pics_dir .. "summer/mountain2_00.png" }, |
687 | 348 | dither_layer = 70, | 348 | dither_layer = 70, |
688 | 349 | temperature = 80, | 349 | temperature = 80, |
691 | 350 | humidity = 0.1, | 350 | humidity = 100, |
692 | 351 | fertility = 0.1, | 351 | fertility = 100, |
693 | 352 | } | 352 | } |
694 | 353 | 353 | ||
695 | 354 | 354 | ||
696 | @@ -363,8 +363,8 @@ | |||
697 | 363 | textures = { pics_dir .. "summer/mountain3_00.png" }, | 363 | textures = { pics_dir .. "summer/mountain3_00.png" }, |
698 | 364 | dither_layer = 70, | 364 | dither_layer = 70, |
699 | 365 | temperature = 80, | 365 | temperature = 80, |
702 | 366 | humidity = 0.1, | 366 | humidity = 100, |
703 | 367 | fertility = 0.1, | 367 | fertility = 100, |
704 | 368 | } | 368 | } |
705 | 369 | 369 | ||
706 | 370 | 370 | ||
707 | @@ -379,8 +379,8 @@ | |||
708 | 379 | textures = { pics_dir .. "summer/mountain4_00.png" }, | 379 | textures = { pics_dir .. "summer/mountain4_00.png" }, |
709 | 380 | dither_layer = 70, | 380 | dither_layer = 70, |
710 | 381 | temperature = 80, | 381 | temperature = 80, |
713 | 382 | humidity = 0.1, | 382 | humidity = 100, |
714 | 383 | fertility = 0.1, | 383 | fertility = 100, |
715 | 384 | } | 384 | } |
716 | 385 | 385 | ||
717 | 386 | world:new_terrain_type{ | 386 | world:new_terrain_type{ |
718 | @@ -394,8 +394,8 @@ | |||
719 | 394 | textures = { pics_dir .. "summer/beach_00.png" }, | 394 | textures = { pics_dir .. "summer/beach_00.png" }, |
720 | 395 | dither_layer = 60, | 395 | dither_layer = 60, |
721 | 396 | temperature = 120, | 396 | temperature = 120, |
724 | 397 | humidity = 0.6, | 397 | humidity = 600, |
725 | 398 | fertility = 0.2, | 398 | fertility = 200, |
726 | 399 | } | 399 | } |
727 | 400 | 400 | ||
728 | 401 | world:new_terrain_type{ | 401 | world:new_terrain_type{ |
729 | @@ -410,8 +410,8 @@ | |||
730 | 410 | dither_layer = 370, | 410 | dither_layer = 370, |
731 | 411 | fps = 14, | 411 | fps = 14, |
732 | 412 | temperature = 105, | 412 | temperature = 105, |
735 | 413 | humidity = 0.999, | 413 | humidity = 999, |
736 | 414 | fertility = 0.1, | 414 | fertility = 100, |
737 | 415 | } | 415 | } |
738 | 416 | world:new_terrain_type{ | 416 | world:new_terrain_type{ |
739 | 417 | name = "summer_snow", | 417 | name = "summer_snow", |
740 | @@ -424,8 +424,8 @@ | |||
741 | 424 | textures = { pics_dir .. "summer/snow_00.png" }, | 424 | textures = { pics_dir .. "summer/snow_00.png" }, |
742 | 425 | dither_layer = 220, | 425 | dither_layer = 220, |
743 | 426 | temperature = 50, | 426 | temperature = 50, |
746 | 427 | humidity = 0.999, | 427 | humidity = 999, |
747 | 428 | fertility = 0.001, | 428 | fertility = 1, |
748 | 429 | } | 429 | } |
749 | 430 | 430 | ||
750 | 431 | 431 | ||
751 | @@ -440,9 +440,9 @@ | |||
752 | 440 | textures = path.list_files(pics_dir .. "summer/lava/lava_??.png"), | 440 | textures = path.list_files(pics_dir .. "summer/lava/lava_??.png"), |
753 | 441 | dither_layer = 30, | 441 | dither_layer = 30, |
754 | 442 | fps = 4, | 442 | fps = 4, |
758 | 443 | temperature = 1273.0, | 443 | temperature = 1273, |
759 | 444 | humidity = 0.001, | 444 | humidity = 1, |
760 | 445 | fertility = 0.001, | 445 | fertility = 1, |
761 | 446 | } | 446 | } |
762 | 447 | 447 | ||
763 | 448 | 448 | ||
764 | @@ -458,8 +458,8 @@ | |||
765 | 458 | dither_layer = 180, | 458 | dither_layer = 180, |
766 | 459 | fps = 14, | 459 | fps = 14, |
767 | 460 | temperature = 100, | 460 | temperature = 100, |
770 | 461 | humidity = 0.999, | 461 | humidity = 999, |
771 | 462 | fertility = 0.001, | 462 | fertility = 1, |
772 | 463 | } | 463 | } |
773 | 464 | 464 | ||
774 | 465 | ------------------------ | 465 | ------------------------ |
775 | @@ -482,8 +482,8 @@ | |||
776 | 482 | textures = { pics_dir .. "wasteland/ashes_00.png" }, | 482 | textures = { pics_dir .. "wasteland/ashes_00.png" }, |
777 | 483 | dither_layer = 400, | 483 | dither_layer = 400, |
778 | 484 | temperature = 120, | 484 | temperature = 120, |
781 | 485 | humidity = 0.15, | 485 | humidity = 150, |
782 | 486 | fertility = 0.9, | 486 | fertility = 900, |
783 | 487 | } | 487 | } |
784 | 488 | 488 | ||
785 | 489 | 489 | ||
786 | @@ -502,8 +502,8 @@ | |||
787 | 502 | textures = { pics_dir .. "wasteland/ashes2_00.png" }, | 502 | textures = { pics_dir .. "wasteland/ashes2_00.png" }, |
788 | 503 | dither_layer = 410, | 503 | dither_layer = 410, |
789 | 504 | temperature = 118, | 504 | temperature = 118, |
792 | 505 | humidity = 0.13, | 505 | humidity = 130, |
793 | 506 | fertility = 0.999, | 506 | fertility = 999, |
794 | 507 | } | 507 | } |
795 | 508 | 508 | ||
796 | 509 | 509 | ||
797 | @@ -522,8 +522,8 @@ | |||
798 | 522 | textures = { pics_dir .. "wasteland/hardground1_00.png" }, | 522 | textures = { pics_dir .. "wasteland/hardground1_00.png" }, |
799 | 523 | dither_layer = 420, | 523 | dither_layer = 420, |
800 | 524 | temperature = 100, | 524 | temperature = 100, |
803 | 525 | humidity = 0.25, | 525 | humidity = 250, |
804 | 526 | fertility = 0.8, | 526 | fertility = 800, |
805 | 527 | } | 527 | } |
806 | 528 | 528 | ||
807 | 529 | 529 | ||
808 | @@ -542,8 +542,8 @@ | |||
809 | 542 | textures = { pics_dir .. "wasteland/hardground2_00.png" }, | 542 | textures = { pics_dir .. "wasteland/hardground2_00.png" }, |
810 | 543 | dither_layer = 370, | 543 | dither_layer = 370, |
811 | 544 | temperature = 95, | 544 | temperature = 95, |
814 | 545 | humidity = 0.15, | 545 | humidity = 150, |
815 | 546 | fertility = 0.85, | 546 | fertility = 850, |
816 | 547 | } | 547 | } |
817 | 548 | 548 | ||
818 | 549 | 549 | ||
819 | @@ -562,8 +562,8 @@ | |||
820 | 562 | textures = { pics_dir .. "wasteland/hardground3_00.png" }, | 562 | textures = { pics_dir .. "wasteland/hardground3_00.png" }, |
821 | 563 | dither_layer = 380, | 563 | dither_layer = 380, |
822 | 564 | temperature = 105, | 564 | temperature = 105, |
825 | 565 | humidity = 0.2, | 565 | humidity = 200, |
826 | 566 | fertility = 0.9, | 566 | fertility = 900, |
827 | 567 | } | 567 | } |
828 | 568 | 568 | ||
829 | 569 | 569 | ||
830 | @@ -582,8 +582,8 @@ | |||
831 | 582 | textures = { pics_dir .. "wasteland/hardground4_00.png" }, | 582 | textures = { pics_dir .. "wasteland/hardground4_00.png" }, |
832 | 583 | dither_layer = 390, | 583 | dither_layer = 390, |
833 | 584 | temperature = 90, | 584 | temperature = 90, |
836 | 585 | humidity = 0.2, | 585 | humidity = 200, |
837 | 586 | fertility = 0.8, | 586 | fertility = 800, |
838 | 587 | } | 587 | } |
839 | 588 | 588 | ||
840 | 589 | 589 | ||
841 | @@ -598,8 +598,8 @@ | |||
842 | 598 | textures = { pics_dir .. "wasteland/hardlava_00.png" }, | 598 | textures = { pics_dir .. "wasteland/hardlava_00.png" }, |
843 | 599 | dither_layer = 360, | 599 | dither_layer = 360, |
844 | 600 | temperature = 120, | 600 | temperature = 120, |
847 | 601 | humidity = 0.1, | 601 | humidity = 100, |
848 | 602 | fertility = 0.2, | 602 | fertility = 200, |
849 | 603 | } | 603 | } |
850 | 604 | 604 | ||
851 | 605 | 605 | ||
852 | @@ -618,8 +618,8 @@ | |||
853 | 618 | textures = { pics_dir .. "wasteland/forested_mountain1_00.png" }, | 618 | textures = { pics_dir .. "wasteland/forested_mountain1_00.png" }, |
854 | 619 | dither_layer = 81, | 619 | dither_layer = 81, |
855 | 620 | temperature = 110, | 620 | temperature = 110, |
858 | 621 | humidity = 0.15, | 621 | humidity = 150, |
859 | 622 | fertility = 0.95, | 622 | fertility = 950, |
860 | 623 | } | 623 | } |
861 | 624 | 624 | ||
862 | 625 | world:new_terrain_type{ | 625 | world:new_terrain_type{ |
863 | @@ -637,8 +637,8 @@ | |||
864 | 637 | textures = { pics_dir .. "wasteland/forested_mountain2_00.png" }, | 637 | textures = { pics_dir .. "wasteland/forested_mountain2_00.png" }, |
865 | 638 | dither_layer = 81, | 638 | dither_layer = 81, |
866 | 639 | temperature = 95, | 639 | temperature = 95, |
869 | 640 | humidity = 0.2, | 640 | humidity = 200, |
870 | 641 | fertility = 0.4, | 641 | fertility = 400, |
871 | 642 | } | 642 | } |
872 | 643 | 643 | ||
873 | 644 | world:new_terrain_type{ | 644 | world:new_terrain_type{ |
874 | @@ -652,8 +652,8 @@ | |||
875 | 652 | textures = { pics_dir .. "wasteland/mountain1_00.png" }, | 652 | textures = { pics_dir .. "wasteland/mountain1_00.png" }, |
876 | 653 | dither_layer = 90, | 653 | dither_layer = 90, |
877 | 654 | temperature = 80, | 654 | temperature = 80, |
880 | 655 | humidity = 0.05, | 655 | humidity = 50, |
881 | 656 | fertility = 0.2, | 656 | fertility = 200, |
882 | 657 | } | 657 | } |
883 | 658 | 658 | ||
884 | 659 | 659 | ||
885 | @@ -668,8 +668,8 @@ | |||
886 | 668 | textures = { pics_dir .. "wasteland/mountain2_00.png" }, | 668 | textures = { pics_dir .. "wasteland/mountain2_00.png" }, |
887 | 669 | dither_layer = 90, | 669 | dither_layer = 90, |
888 | 670 | temperature = 80, | 670 | temperature = 80, |
891 | 671 | humidity = 0.05, | 671 | humidity = 50, |
892 | 672 | fertility = 0.2, | 672 | fertility = 200, |
893 | 673 | } | 673 | } |
894 | 674 | 674 | ||
895 | 675 | 675 | ||
896 | @@ -684,8 +684,8 @@ | |||
897 | 684 | textures = { pics_dir .. "wasteland/mountain3_00.png" }, | 684 | textures = { pics_dir .. "wasteland/mountain3_00.png" }, |
898 | 685 | dither_layer = 90, | 685 | dither_layer = 90, |
899 | 686 | temperature = 80, | 686 | temperature = 80, |
902 | 687 | humidity = 0.05, | 687 | humidity = 50, |
903 | 688 | fertility = 0.2, | 688 | fertility = 200, |
904 | 689 | } | 689 | } |
905 | 690 | 690 | ||
906 | 691 | 691 | ||
907 | @@ -700,8 +700,8 @@ | |||
908 | 700 | textures = { pics_dir .. "wasteland/mountain4_00.png" }, | 700 | textures = { pics_dir .. "wasteland/mountain4_00.png" }, |
909 | 701 | dither_layer = 80, | 701 | dither_layer = 80, |
910 | 702 | temperature = 80, | 702 | temperature = 80, |
913 | 703 | humidity = 0.05, | 703 | humidity = 50, |
914 | 704 | fertility = 0.2, | 704 | fertility = 200, |
915 | 705 | } | 705 | } |
916 | 706 | 706 | ||
917 | 707 | 707 | ||
918 | @@ -716,8 +716,8 @@ | |||
919 | 716 | textures = { pics_dir .. "wasteland/beach_00.png" }, | 716 | textures = { pics_dir .. "wasteland/beach_00.png" }, |
920 | 717 | dither_layer = 50, | 717 | dither_layer = 50, |
921 | 718 | temperature = 60, | 718 | temperature = 60, |
924 | 719 | humidity = 0.4, | 719 | humidity = 400, |
925 | 720 | fertility = 0.2, | 720 | fertility = 200, |
926 | 721 | } | 721 | } |
927 | 722 | 722 | ||
928 | 723 | 723 | ||
929 | @@ -732,9 +732,9 @@ | |||
930 | 732 | textures = path.list_files(pics_dir .. "wasteland/lava_stone1/lava-stone1_??.png"), | 732 | textures = path.list_files(pics_dir .. "wasteland/lava_stone1/lava-stone1_??.png"), |
931 | 733 | dither_layer = 20, | 733 | dither_layer = 20, |
932 | 734 | fps = 7, | 734 | fps = 7, |
936 | 735 | temperature = 1273.0, | 735 | temperature = 1273, |
937 | 736 | humidity = 0.001, | 736 | humidity = 1, |
938 | 737 | fertility = 0.001, | 737 | fertility = 1, |
939 | 738 | } | 738 | } |
940 | 739 | 739 | ||
941 | 740 | 740 | ||
942 | @@ -749,9 +749,9 @@ | |||
943 | 749 | textures = path.list_files(pics_dir .. "wasteland/lava_stone2/lava-stone2_??.png"), | 749 | textures = path.list_files(pics_dir .. "wasteland/lava_stone2/lava-stone2_??.png"), |
944 | 750 | dither_layer = 10, | 750 | dither_layer = 10, |
945 | 751 | fps = 7, | 751 | fps = 7, |
949 | 752 | temperature = 1273.0, | 752 | temperature = 1273, |
950 | 753 | humidity = 0.001, | 753 | humidity = 1, |
951 | 754 | fertility = 0.001, | 754 | fertility = 1, |
952 | 755 | } | 755 | } |
953 | 756 | 756 | ||
954 | 757 | 757 | ||
955 | @@ -767,8 +767,8 @@ | |||
956 | 767 | dither_layer = 170, | 767 | dither_layer = 170, |
957 | 768 | fps = 14, | 768 | fps = 14, |
958 | 769 | temperature = 100, | 769 | temperature = 100, |
961 | 770 | humidity = 0.999, | 770 | humidity = 999, |
962 | 771 | fertility = 0.001, | 771 | fertility = 1, |
963 | 772 | } | 772 | } |
964 | 773 | 773 | ||
965 | 774 | 774 | ||
966 | @@ -792,8 +792,8 @@ | |||
967 | 792 | textures = { pics_dir .. "winter/tundra_00.png" }, | 792 | textures = { pics_dir .. "winter/tundra_00.png" }, |
968 | 793 | dither_layer = 230, | 793 | dither_layer = 230, |
969 | 794 | temperature = 50, | 794 | temperature = 50, |
972 | 795 | humidity = 0.85, | 795 | humidity = 850, |
973 | 796 | fertility = 0.45, | 796 | fertility = 450, |
974 | 797 | } | 797 | } |
975 | 798 | 798 | ||
976 | 799 | 799 | ||
977 | @@ -812,8 +812,8 @@ | |||
978 | 812 | textures = { pics_dir .. "winter/tundra2_00.png" }, | 812 | textures = { pics_dir .. "winter/tundra2_00.png" }, |
979 | 813 | dither_layer = 240, | 813 | dither_layer = 240, |
980 | 814 | temperature = 55, | 814 | temperature = 55, |
983 | 815 | humidity = 0.75, | 815 | humidity = 750, |
984 | 816 | fertility = 0.45, | 816 | fertility = 450, |
985 | 817 | } | 817 | } |
986 | 818 | 818 | ||
987 | 819 | 819 | ||
988 | @@ -832,8 +832,8 @@ | |||
989 | 832 | textures = { pics_dir .. "winter/tundra3_00.png" }, | 832 | textures = { pics_dir .. "winter/tundra3_00.png" }, |
990 | 833 | dither_layer = 240, | 833 | dither_layer = 240, |
991 | 834 | temperature = 50, | 834 | temperature = 50, |
994 | 835 | humidity = 0.8, | 835 | humidity = 800, |
995 | 836 | fertility = 0.4, | 836 | fertility = 400, |
996 | 837 | } | 837 | } |
997 | 838 | 838 | ||
998 | 839 | 839 | ||
999 | @@ -848,8 +848,8 @@ | |||
1000 | 848 | textures = { pics_dir .. "winter/tundra_taiga_00.png" }, | 848 | textures = { pics_dir .. "winter/tundra_taiga_00.png" }, |
1001 | 849 | dither_layer = 230, | 849 | dither_layer = 230, |
1002 | 850 | temperature = 40, | 850 | temperature = 40, |
1005 | 851 | humidity = 0.75, | 851 | humidity = 750, |
1006 | 852 | fertility = 0.4, | 852 | fertility = 400, |
1007 | 853 | } | 853 | } |
1008 | 854 | 854 | ||
1009 | 855 | 855 | ||
1010 | @@ -864,8 +864,8 @@ | |||
1011 | 864 | textures = { pics_dir .. "winter/taiga_00.png" }, | 864 | textures = { pics_dir .. "winter/taiga_00.png" }, |
1012 | 865 | dither_layer = 250, | 865 | dither_layer = 250, |
1013 | 866 | temperature = 35, | 866 | temperature = 35, |
1016 | 867 | humidity = 0.75, | 867 | humidity = 750, |
1017 | 868 | fertility = 0.3, | 868 | fertility = 300, |
1018 | 869 | } | 869 | } |
1019 | 870 | 870 | ||
1020 | 871 | 871 | ||
1021 | @@ -880,8 +880,8 @@ | |||
1022 | 880 | textures = { pics_dir .. "winter/snow_00.png" }, | 880 | textures = { pics_dir .. "winter/snow_00.png" }, |
1023 | 881 | dither_layer = 250, | 881 | dither_layer = 250, |
1024 | 882 | temperature = 25, | 882 | temperature = 25, |
1027 | 883 | humidity = 0.8, | 883 | humidity = 800, |
1028 | 884 | fertility = 0.1, | 884 | fertility = 100, |
1029 | 885 | } | 885 | } |
1030 | 886 | 886 | ||
1031 | 887 | 887 | ||
1032 | @@ -900,8 +900,8 @@ | |||
1033 | 900 | textures = { pics_dir .. "winter/forested_mountain1_00.png" }, | 900 | textures = { pics_dir .. "winter/forested_mountain1_00.png" }, |
1034 | 901 | dither_layer = 101, | 901 | dither_layer = 101, |
1035 | 902 | temperature = 35, | 902 | temperature = 35, |
1038 | 903 | humidity = 0.7, | 903 | humidity = 700, |
1039 | 904 | fertility = 0.4, | 904 | fertility = 400, |
1040 | 905 | } | 905 | } |
1041 | 906 | 906 | ||
1042 | 907 | world:new_terrain_type{ | 907 | world:new_terrain_type{ |
1043 | @@ -919,8 +919,8 @@ | |||
1044 | 919 | textures = { pics_dir .. "winter/forested_mountain2_00.png" }, | 919 | textures = { pics_dir .. "winter/forested_mountain2_00.png" }, |
1045 | 920 | dither_layer = 101, | 920 | dither_layer = 101, |
1046 | 921 | temperature = 35, | 921 | temperature = 35, |
1049 | 922 | humidity = 0.7, | 922 | humidity = 700, |
1050 | 923 | fertility = 0.4, | 923 | fertility = 400, |
1051 | 924 | } | 924 | } |
1052 | 925 | 925 | ||
1053 | 926 | world:new_terrain_type{ | 926 | world:new_terrain_type{ |
1054 | @@ -934,8 +934,8 @@ | |||
1055 | 934 | textures = { pics_dir .. "winter/mountain1_00.png" }, | 934 | textures = { pics_dir .. "winter/mountain1_00.png" }, |
1056 | 935 | dither_layer = 110, | 935 | dither_layer = 110, |
1057 | 936 | temperature = 20, | 936 | temperature = 20, |
1060 | 937 | humidity = 0.3, | 937 | humidity = 300, |
1061 | 938 | fertility = 0.05, | 938 | fertility = 50, |
1062 | 939 | } | 939 | } |
1063 | 940 | 940 | ||
1064 | 941 | 941 | ||
1065 | @@ -950,8 +950,8 @@ | |||
1066 | 950 | textures = { pics_dir .. "winter/mountain2_00.png" }, | 950 | textures = { pics_dir .. "winter/mountain2_00.png" }, |
1067 | 951 | dither_layer = 110, | 951 | dither_layer = 110, |
1068 | 952 | temperature = 20, | 952 | temperature = 20, |
1071 | 953 | humidity = 0.3, | 953 | humidity = 300, |
1072 | 954 | fertility = 0.05, | 954 | fertility = 50, |
1073 | 955 | } | 955 | } |
1074 | 956 | 956 | ||
1075 | 957 | 957 | ||
1076 | @@ -966,8 +966,8 @@ | |||
1077 | 966 | textures = { pics_dir .. "winter/mountain3_00.png" }, | 966 | textures = { pics_dir .. "winter/mountain3_00.png" }, |
1078 | 967 | dither_layer = 100, | 967 | dither_layer = 100, |
1079 | 968 | temperature = 20, | 968 | temperature = 20, |
1082 | 969 | humidity = 0.3, | 969 | humidity = 300, |
1083 | 970 | fertility = 0.05, | 970 | fertility = 50, |
1084 | 971 | } | 971 | } |
1085 | 972 | 972 | ||
1086 | 973 | 973 | ||
1087 | @@ -982,8 +982,8 @@ | |||
1088 | 982 | textures = { pics_dir .. "winter/mountain4_00.png" }, | 982 | textures = { pics_dir .. "winter/mountain4_00.png" }, |
1089 | 983 | dither_layer = 100, | 983 | dither_layer = 100, |
1090 | 984 | temperature = 20, | 984 | temperature = 20, |
1093 | 985 | humidity = 0.3, | 985 | humidity = 300, |
1094 | 986 | fertility = 0.05, | 986 | fertility = 50, |
1095 | 987 | } | 987 | } |
1096 | 988 | world:new_terrain_type{ | 988 | world:new_terrain_type{ |
1097 | 989 | name = "ice", | 989 | name = "ice", |
1098 | @@ -996,8 +996,8 @@ | |||
1099 | 996 | textures = { pics_dir .. "winter/ice_00.png" }, | 996 | textures = { pics_dir .. "winter/ice_00.png" }, |
1100 | 997 | dither_layer = 260, | 997 | dither_layer = 260, |
1101 | 998 | temperature = 25, | 998 | temperature = 25, |
1104 | 999 | humidity = 0.5, | 999 | humidity = 500, |
1105 | 1000 | fertility = 0.1, | 1000 | fertility = 100, |
1106 | 1001 | } | 1001 | } |
1107 | 1002 | 1002 | ||
1108 | 1003 | 1003 | ||
1109 | @@ -1012,8 +1012,8 @@ | |||
1110 | 1012 | textures = { pics_dir .. "winter/beach_00.png" }, | 1012 | textures = { pics_dir .. "winter/beach_00.png" }, |
1111 | 1013 | dither_layer = 40, | 1013 | dither_layer = 40, |
1112 | 1014 | temperature = 60, | 1014 | temperature = 60, |
1115 | 1015 | humidity = 0.5, | 1015 | humidity = 500, |
1116 | 1016 | fertility = 0.1, | 1016 | fertility = 100, |
1117 | 1017 | } | 1017 | } |
1118 | 1018 | 1018 | ||
1119 | 1019 | 1019 | ||
1120 | @@ -1029,8 +1029,8 @@ | |||
1121 | 1029 | dither_layer = 210, | 1029 | dither_layer = 210, |
1122 | 1030 | fps = 5, | 1030 | fps = 5, |
1123 | 1031 | temperature = 50, | 1031 | temperature = 50, |
1126 | 1032 | humidity = 0.999, | 1032 | humidity = 999, |
1127 | 1033 | fertility = 0.001, | 1033 | fertility = 1, |
1128 | 1034 | } | 1034 | } |
1129 | 1035 | 1035 | ||
1130 | 1036 | 1036 | ||
1131 | @@ -1046,8 +1046,8 @@ | |||
1132 | 1046 | dither_layer = 210, | 1046 | dither_layer = 210, |
1133 | 1047 | fps = 5, | 1047 | fps = 5, |
1134 | 1048 | temperature = 50, | 1048 | temperature = 50, |
1137 | 1049 | humidity = 0.999, | 1049 | humidity = 999, |
1138 | 1050 | fertility = 0.001, | 1050 | fertility = 1, |
1139 | 1051 | } | 1051 | } |
1140 | 1052 | 1052 | ||
1141 | 1053 | 1053 | ||
1142 | @@ -1063,8 +1063,8 @@ | |||
1143 | 1063 | dither_layer = 190, | 1063 | dither_layer = 190, |
1144 | 1064 | fps = 8, | 1064 | fps = 8, |
1145 | 1065 | temperature = 50, | 1065 | temperature = 50, |
1148 | 1066 | humidity = 0.999, | 1066 | humidity = 999, |
1149 | 1067 | fertility = 0.001, | 1067 | fertility = 1, |
1150 | 1068 | } | 1068 | } |
1151 | 1069 | 1069 | ||
1152 | 1070 | 1070 | ||
1153 | @@ -1083,8 +1083,8 @@ | |||
1154 | 1083 | textures = { pics_dir .. "desert/desert4_00.png" }, | 1083 | textures = { pics_dir .. "desert/desert4_00.png" }, |
1155 | 1084 | dither_layer = 270, | 1084 | dither_layer = 270, |
1156 | 1085 | temperature = 168, | 1085 | temperature = 168, |
1159 | 1086 | humidity = 0.001, | 1086 | humidity = 1, |
1160 | 1087 | fertility = 0.1, | 1087 | fertility = 100, |
1161 | 1088 | } | 1088 | } |
1162 | 1089 | 1089 | ||
1163 | 1090 | world:new_terrain_type{ | 1090 | world:new_terrain_type{ |
1164 | @@ -1098,8 +1098,8 @@ | |||
1165 | 1098 | textures = { pics_dir .. "desert/drysoil_00.png" }, | 1098 | textures = { pics_dir .. "desert/drysoil_00.png" }, |
1166 | 1099 | dither_layer = 300, | 1099 | dither_layer = 300, |
1167 | 1100 | temperature = 172, | 1100 | temperature = 172, |
1170 | 1101 | humidity = 0.2, | 1101 | humidity = 200, |
1171 | 1102 | fertility = 0.2, | 1102 | fertility = 200, |
1172 | 1103 | } | 1103 | } |
1173 | 1104 | world:new_terrain_type{ | 1104 | world:new_terrain_type{ |
1174 | 1105 | name = "desert_steppe", | 1105 | name = "desert_steppe", |
1175 | @@ -1116,8 +1116,8 @@ | |||
1176 | 1116 | textures = { pics_dir .. "desert/steppe_00.png" }, | 1116 | textures = { pics_dir .. "desert/steppe_00.png" }, |
1177 | 1117 | dither_layer = 360, | 1117 | dither_layer = 360, |
1178 | 1118 | temperature = 155, | 1118 | temperature = 155, |
1181 | 1119 | humidity = 0.5, | 1119 | humidity = 500, |
1182 | 1120 | fertility = 0.5, | 1120 | fertility = 500, |
1183 | 1121 | } | 1121 | } |
1184 | 1122 | 1122 | ||
1185 | 1123 | 1123 | ||
1186 | @@ -1136,8 +1136,8 @@ | |||
1187 | 1136 | textures = { pics_dir .. "desert/meadow_00.png" }, | 1136 | textures = { pics_dir .. "desert/meadow_00.png" }, |
1188 | 1137 | dither_layer = 310, | 1137 | dither_layer = 310, |
1189 | 1138 | temperature = 160, | 1138 | temperature = 160, |
1192 | 1139 | humidity = 0.6, | 1139 | humidity = 600, |
1193 | 1140 | fertility = 0.6, | 1140 | fertility = 600, |
1194 | 1141 | } | 1141 | } |
1195 | 1142 | 1142 | ||
1196 | 1143 | 1143 | ||
1197 | @@ -1156,8 +1156,8 @@ | |||
1198 | 1156 | textures = { pics_dir .. "desert/mountainmeadow_00.png" }, | 1156 | textures = { pics_dir .. "desert/mountainmeadow_00.png" }, |
1199 | 1157 | dither_layer = 150, | 1157 | dither_layer = 150, |
1200 | 1158 | temperature = 145, | 1158 | temperature = 145, |
1203 | 1159 | humidity = 0.5, | 1159 | humidity = 500, |
1204 | 1160 | fertility = 0.5, | 1160 | fertility = 500, |
1205 | 1161 | } | 1161 | } |
1206 | 1162 | 1162 | ||
1207 | 1163 | 1163 | ||
1208 | @@ -1176,8 +1176,8 @@ | |||
1209 | 1176 | textures = { pics_dir .. "desert/highmountainmeadow_00.png" }, | 1176 | textures = { pics_dir .. "desert/highmountainmeadow_00.png" }, |
1210 | 1177 | dither_layer = 150, | 1177 | dither_layer = 150, |
1211 | 1178 | temperature = 140, | 1178 | temperature = 140, |
1214 | 1179 | humidity = 0.4, | 1179 | humidity = 400, |
1215 | 1180 | fertility = 0.4, | 1180 | fertility = 400, |
1216 | 1181 | } | 1181 | } |
1217 | 1182 | 1182 | ||
1218 | 1183 | 1183 | ||
1219 | @@ -1196,8 +1196,8 @@ | |||
1220 | 1196 | textures = { pics_dir .. "desert/forested_mountain1_00.png" }, | 1196 | textures = { pics_dir .. "desert/forested_mountain1_00.png" }, |
1221 | 1197 | dither_layer = 71, | 1197 | dither_layer = 71, |
1222 | 1198 | temperature = 141, | 1198 | temperature = 141, |
1225 | 1199 | humidity = 0.5, | 1199 | humidity = 500, |
1226 | 1200 | fertility = 0.5, | 1200 | fertility = 500, |
1227 | 1201 | } | 1201 | } |
1228 | 1202 | 1202 | ||
1229 | 1203 | world:new_terrain_type{ | 1203 | world:new_terrain_type{ |
1230 | @@ -1215,8 +1215,8 @@ | |||
1231 | 1215 | textures = { pics_dir .. "desert/forested_mountain2_00.png" }, | 1215 | textures = { pics_dir .. "desert/forested_mountain2_00.png" }, |
1232 | 1216 | dither_layer = 141, | 1216 | dither_layer = 141, |
1233 | 1217 | temperature = 120, | 1217 | temperature = 120, |
1236 | 1218 | humidity = 0.5, | 1218 | humidity = 500, |
1237 | 1219 | fertility = 0.5, | 1219 | fertility = 500, |
1238 | 1220 | } | 1220 | } |
1239 | 1221 | 1221 | ||
1240 | 1222 | 1222 | ||
1241 | @@ -1231,8 +1231,8 @@ | |||
1242 | 1231 | textures = { pics_dir .. "desert/mountain1_00.png" }, | 1231 | textures = { pics_dir .. "desert/mountain1_00.png" }, |
1243 | 1232 | dither_layer = 120, | 1232 | dither_layer = 120, |
1244 | 1233 | temperature = 130, | 1233 | temperature = 130, |
1247 | 1234 | humidity = 0.05, | 1234 | humidity = 50, |
1248 | 1235 | fertility = 0.05, | 1235 | fertility = 50, |
1249 | 1236 | } | 1236 | } |
1250 | 1237 | 1237 | ||
1251 | 1238 | 1238 | ||
1252 | @@ -1247,8 +1247,8 @@ | |||
1253 | 1247 | textures = { pics_dir .. "desert/mountain2_00.png" }, | 1247 | textures = { pics_dir .. "desert/mountain2_00.png" }, |
1254 | 1248 | dither_layer = 120, | 1248 | dither_layer = 120, |
1255 | 1249 | temperature = 130, | 1249 | temperature = 130, |
1258 | 1250 | humidity = 0.05, | 1250 | humidity = 50, |
1259 | 1251 | fertility = 0.05, | 1251 | fertility = 50, |
1260 | 1252 | } | 1252 | } |
1261 | 1253 | 1253 | ||
1262 | 1254 | 1254 | ||
1263 | @@ -1263,8 +1263,8 @@ | |||
1264 | 1263 | textures = { pics_dir .. "desert/mountain3_00.png" }, | 1263 | textures = { pics_dir .. "desert/mountain3_00.png" }, |
1265 | 1264 | dither_layer = 130, | 1264 | dither_layer = 130, |
1266 | 1265 | temperature = 130, | 1265 | temperature = 130, |
1269 | 1266 | humidity = 0.05, | 1266 | humidity = 50, |
1270 | 1267 | fertility = 0.05, | 1267 | fertility = 50, |
1271 | 1268 | } | 1268 | } |
1272 | 1269 | 1269 | ||
1273 | 1270 | 1270 | ||
1274 | @@ -1279,8 +1279,8 @@ | |||
1275 | 1279 | textures = { pics_dir .. "desert/mountain4_00.png" }, | 1279 | textures = { pics_dir .. "desert/mountain4_00.png" }, |
1276 | 1280 | dither_layer = 140, | 1280 | dither_layer = 140, |
1277 | 1281 | temperature = 130, | 1281 | temperature = 130, |
1280 | 1282 | humidity = 0.05, | 1282 | humidity = 50, |
1281 | 1283 | fertility = 0.05, | 1283 | fertility = 50, |
1282 | 1284 | } | 1284 | } |
1283 | 1285 | world:new_terrain_type{ | 1285 | world:new_terrain_type{ |
1284 | 1286 | name = "desert1", | 1286 | name = "desert1", |
1285 | @@ -1293,8 +1293,8 @@ | |||
1286 | 1293 | textures = { pics_dir .. "desert/desert1_00.png" }, | 1293 | textures = { pics_dir .. "desert/desert1_00.png" }, |
1287 | 1294 | dither_layer = 290, | 1294 | dither_layer = 290, |
1288 | 1295 | temperature = 167, | 1295 | temperature = 167, |
1291 | 1296 | humidity = 0.001, | 1296 | humidity = 1, |
1292 | 1297 | fertility = 0.001, | 1297 | fertility = 1, |
1293 | 1298 | } | 1298 | } |
1294 | 1299 | 1299 | ||
1295 | 1300 | 1300 | ||
1296 | @@ -1309,8 +1309,8 @@ | |||
1297 | 1309 | textures = { pics_dir .. "desert/desert2_00.png" }, | 1309 | textures = { pics_dir .. "desert/desert2_00.png" }, |
1298 | 1310 | dither_layer = 280, | 1310 | dither_layer = 280, |
1299 | 1311 | temperature = 168, | 1311 | temperature = 168, |
1302 | 1312 | humidity = 0.001, | 1312 | humidity = 1, |
1303 | 1313 | fertility = 0.001, | 1313 | fertility = 1, |
1304 | 1314 | } | 1314 | } |
1305 | 1315 | 1315 | ||
1306 | 1316 | 1316 | ||
1307 | @@ -1325,8 +1325,8 @@ | |||
1308 | 1325 | textures = { pics_dir .. "desert/desert3_00.png" }, | 1325 | textures = { pics_dir .. "desert/desert3_00.png" }, |
1309 | 1326 | dither_layer = 280, | 1326 | dither_layer = 280, |
1310 | 1327 | temperature = 178, | 1327 | temperature = 178, |
1313 | 1328 | humidity = 0.001, | 1328 | humidity = 1, |
1314 | 1329 | fertility = 0.001, | 1329 | fertility = 1, |
1315 | 1330 | } | 1330 | } |
1316 | 1331 | 1331 | ||
1317 | 1332 | 1332 | ||
1318 | @@ -1341,8 +1341,8 @@ | |||
1319 | 1341 | textures = { pics_dir .. "desert/beach_00.png" }, | 1341 | textures = { pics_dir .. "desert/beach_00.png" }, |
1320 | 1342 | dither_layer = 60, | 1342 | dither_layer = 60, |
1321 | 1343 | temperature = 179, | 1343 | temperature = 179, |
1324 | 1344 | humidity = 0.5, | 1344 | humidity = 500, |
1325 | 1345 | fertility = 0.1, | 1345 | fertility = 100, |
1326 | 1346 | } | 1346 | } |
1327 | 1347 | 1347 | ||
1328 | 1348 | 1348 | ||
1329 | @@ -1358,6 +1358,6 @@ | |||
1330 | 1358 | dither_layer = 200, | 1358 | dither_layer = 200, |
1331 | 1359 | fps = 5, | 1359 | fps = 5, |
1332 | 1360 | temperature = 150, | 1360 | temperature = 150, |
1335 | 1361 | humidity = 0.999, | 1361 | humidity = 999, |
1336 | 1362 | fertility = 0.001, | 1362 | fertility = 1, |
1337 | 1363 | } | 1363 | } |
1338 | 1364 | 1364 | ||
1339 | === modified file 'src/logic/game.cc' | |||
1340 | --- src/logic/game.cc 2018-11-23 08:20:36 +0000 | |||
1341 | +++ src/logic/game.cc 2018-11-23 12:45:17 +0000 | |||
1342 | @@ -1076,8 +1076,4 @@ | |||
1343 | 1076 | fw.unsigned_32(general_stats_[p - 1].custom_statistic[j]); | 1076 | fw.unsigned_32(general_stats_[p - 1].custom_statistic[j]); |
1344 | 1077 | } | 1077 | } |
1345 | 1078 | } | 1078 | } |
1346 | 1079 | |||
1347 | 1080 | double logic_rand_as_double(Game* game) { | ||
1348 | 1081 | return static_cast<double>(game->logic_rand()) / std::numeric_limits<uint32_t>::max(); | ||
1349 | 1082 | } | ||
1350 | 1083 | } | 1079 | } |
1351 | 1084 | 1080 | ||
1352 | === modified file 'src/logic/game.h' | |||
1353 | --- src/logic/game.h 2018-10-21 09:42:03 +0000 | |||
1354 | +++ src/logic/game.h 2018-11-23 12:45:17 +0000 | |||
1355 | @@ -347,9 +347,6 @@ | |||
1356 | 347 | location.y += logic_rand() % s - radius; | 347 | location.y += logic_rand() % s - radius; |
1357 | 348 | return location; | 348 | return location; |
1358 | 349 | } | 349 | } |
1359 | 350 | |||
1360 | 351 | // Returns a value between [0., 1]. | ||
1361 | 352 | double logic_rand_as_double(Game* game); | ||
1362 | 353 | } | 350 | } |
1363 | 354 | 351 | ||
1364 | 355 | #endif // end of include guard: WL_LOGIC_GAME_H | 352 | #endif // end of include guard: WL_LOGIC_GAME_H |
1365 | 356 | 353 | ||
1366 | === modified file 'src/logic/map_objects/immovable.cc' | |||
1367 | --- src/logic/map_objects/immovable.cc 2018-09-25 06:32:35 +0000 | |||
1368 | +++ src/logic/map_objects/immovable.cc 2018-11-23 12:45:17 +0000 | |||
1369 | @@ -943,7 +943,7 @@ | |||
1370 | 943 | FCoords const f = map.get_fcoords(immovable.get_position()); | 943 | FCoords const f = map.get_fcoords(immovable.get_position()); |
1371 | 944 | const ImmovableDescr& descr = immovable.descr(); | 944 | const ImmovableDescr& descr = immovable.descr(); |
1372 | 945 | 945 | ||
1374 | 946 | if (logic_rand_as_double(&game) < | 946 | if ((game.logic_rand() % TerrainAffinity::kPrecisionFactor) < |
1375 | 947 | probability_to_grow(descr.terrain_affinity(), f, map, game.world().terrains())) { | 947 | probability_to_grow(descr.terrain_affinity(), f, map, game.world().terrains())) { |
1376 | 948 | MapObjectDescr::OwnerType owner_type = descr.owner_type(); | 948 | MapObjectDescr::OwnerType owner_type = descr.owner_type(); |
1377 | 949 | Player* owner = immovable.get_owner(); | 949 | Player* owner = immovable.get_owner(); |
1378 | @@ -1030,7 +1030,7 @@ | |||
1379 | 1030 | FCoords const f = map.get_fcoords(immovable.get_position()); | 1030 | FCoords const f = map.get_fcoords(immovable.get_position()); |
1380 | 1031 | const ImmovableDescr& descr = immovable.descr(); | 1031 | const ImmovableDescr& descr = immovable.descr(); |
1381 | 1032 | 1032 | ||
1383 | 1033 | if (logic_rand_as_double(&game) < | 1033 | if ((game.logic_rand() % TerrainAffinity::kPrecisionFactor) < |
1384 | 1034 | probability_to_grow(descr.terrain_affinity(), f, map, game.world().terrains())) { | 1034 | probability_to_grow(descr.terrain_affinity(), f, map, game.world().terrains())) { |
1385 | 1035 | // Seed a new tree. | 1035 | // Seed a new tree. |
1386 | 1036 | MapFringeRegion<> mr(map, Area<>(f, 0)); | 1036 | MapFringeRegion<> mr(map, Area<>(f, 0)); |
1387 | @@ -1047,7 +1047,7 @@ | |||
1388 | 1047 | const FCoords new_location = map.get_fcoords(mr.location()); | 1047 | const FCoords new_location = map.get_fcoords(mr.location()); |
1389 | 1048 | if (!new_location.field->get_immovable() && | 1048 | if (!new_location.field->get_immovable() && |
1390 | 1049 | (new_location.field->nodecaps() & MOVECAPS_WALK) && | 1049 | (new_location.field->nodecaps() & MOVECAPS_WALK) && |
1392 | 1050 | logic_rand_as_double(&game) < probability_to_grow(descr.terrain_affinity(), new_location, | 1050 | (game.logic_rand() % TerrainAffinity::kPrecisionFactor) < probability_to_grow(descr.terrain_affinity(), new_location, |
1393 | 1051 | map, game.world().terrains())) { | 1051 | map, game.world().terrains())) { |
1394 | 1052 | game.create_immovable_with_name(mr.location(), type_name, descr.owner_type(), | 1052 | game.create_immovable_with_name(mr.location(), type_name, descr.owner_type(), |
1395 | 1053 | nullptr /* owner */, nullptr /* former_building_descr */); | 1053 | nullptr /* owner */, nullptr /* former_building_descr */); |
1396 | 1054 | 1054 | ||
1397 | === modified file 'src/logic/map_objects/terrain_affinity.cc' | |||
1398 | --- src/logic/map_objects/terrain_affinity.cc 2018-04-07 16:59:00 +0000 | |||
1399 | +++ src/logic/map_objects/terrain_affinity.cc 2018-11-23 12:45:17 +0000 | |||
1400 | @@ -33,113 +33,122 @@ | |||
1401 | 33 | 33 | ||
1402 | 34 | namespace { | 34 | namespace { |
1403 | 35 | 35 | ||
1405 | 36 | constexpr double pow2(const double& a) { | 36 | // Literature on cross-platform floating point precision-problems: |
1406 | 37 | // https://arxiv.org/abs/cs/0701192 | ||
1407 | 38 | // Monniaux, David (2008): "The pitfalls of verifying floating-point computations", | ||
1408 | 39 | // in: ACM Transactions on Programming Languages and Systems 30, 3 (2008) 12. | ||
1409 | 40 | // | ||
1410 | 41 | // Recommends using heximal float constants, but we'd need to switch to C++17 for that. | ||
1411 | 42 | // | ||
1412 | 43 | // https://randomascii.wordpress.com/2012/03/21/intermediate-floating-point-precision/ | ||
1413 | 44 | |||
1414 | 45 | constexpr double square(const double& a) { | ||
1415 | 37 | return a * a; | 46 | return a * a; |
1416 | 38 | } | 47 | } |
1417 | 39 | 48 | ||
1418 | 40 | // Helper function for probability_to_grow | 49 | // Helper function for probability_to_grow |
1419 | 41 | // Calculates the probability to grow for the given affinity and terrain values | 50 | // Calculates the probability to grow for the given affinity and terrain values |
1440 | 42 | double calculate_probability_to_grow(const TerrainAffinity& affinity, | 51 | inline unsigned int calculate_probability_to_grow(const TerrainAffinity& affinity, |
1441 | 43 | double terrain_humidity, | 52 | int terrain_humidity, |
1442 | 44 | double terrain_fertility, | 53 | int terrain_fertility, |
1443 | 45 | double terrain_temperature) { | 54 | int terrain_temperature) { |
1444 | 46 | 55 | constexpr double kHumidityWeight = 5.00086642549548; | |
1445 | 47 | constexpr double kHumidityWeight = 0.500086642549548; | 56 | constexpr double kFertilityWeight = 5.292268046607387; |
1446 | 48 | constexpr double kFertilityWeight = 0.5292268046607387; | 57 | constexpr double kTemperatureWeight = 0.6131300863608306; |
1447 | 49 | constexpr double kTemperatureWeight = 61.31300863608306; | 58 | |
1448 | 50 | 59 | // Avoid division by 0 | |
1449 | 51 | const double sigma_humidity = (1. - affinity.pickiness()); | 60 | assert(affinity.pickiness() < 100); |
1450 | 52 | const double sigma_temperature = (1. - affinity.pickiness()); | 61 | const double sigma = std::floor(100.0 - affinity.pickiness()); |
1451 | 53 | const double sigma_fertility = (1. - affinity.pickiness()); | 62 | |
1452 | 54 | 63 | // Unlike real numbers, floating point multiplication/division is neither associative nor commutative. Fortunately, execution order is well-defined by the C++ standard. | |
1453 | 55 | return exp((-pow2((affinity.preferred_fertility() - terrain_fertility) / | 64 | const double result = exp(- |
1454 | 56 | (kFertilityWeight * sigma_fertility)) - | 65 | (square((affinity.preferred_fertility() - terrain_fertility) / (kFertilityWeight * sigma)) + |
1455 | 57 | pow2((affinity.preferred_humidity() - terrain_humidity) / | 66 | square((affinity.preferred_humidity() - terrain_humidity) / (kHumidityWeight * sigma)) + |
1456 | 58 | (kHumidityWeight * sigma_humidity)) - | 67 | square((affinity.preferred_temperature() - terrain_temperature) / (kTemperatureWeight * sigma))) / 2.0); |
1457 | 59 | pow2((affinity.preferred_temperature() - terrain_temperature) / | 68 | |
1458 | 60 | (kTemperatureWeight * sigma_temperature))) / | 69 | return static_cast<unsigned int>(std::max(0.0, std::floor(result * static_cast<double>(TerrainAffinity::kPrecisionFactor)))); |
1439 | 61 | 2); | ||
1459 | 62 | } | 70 | } |
1460 | 63 | 71 | ||
1461 | 64 | } // namespace | 72 | } // namespace |
1462 | 65 | 73 | ||
1463 | 66 | TerrainAffinity::TerrainAffinity(const LuaTable& table, const std::string& immovable_name) | 74 | TerrainAffinity::TerrainAffinity(const LuaTable& table, const std::string& immovable_name) |
1476 | 67 | : preferred_fertility_(table.get_double("preferred_fertility")), | 75 | : preferred_fertility_(table.get_int("preferred_fertility")), |
1477 | 68 | preferred_humidity_(table.get_double("preferred_humidity")), | 76 | preferred_humidity_(table.get_int("preferred_humidity")), |
1478 | 69 | preferred_temperature_(table.get_double("preferred_temperature")), | 77 | preferred_temperature_(table.get_int("preferred_temperature")), |
1479 | 70 | pickiness_(table.get_double("pickiness")) { | 78 | pickiness_(table.get_int("pickiness")) { |
1480 | 71 | if (!(0 <= preferred_fertility_ && preferred_fertility_ <= 1.)) { | 79 | if (!(0 <= preferred_fertility_ && preferred_fertility_ <= 1000)) { |
1481 | 72 | throw GameDataError("%s: preferred_fertility is not in [0, 1].", immovable_name.c_str()); | 80 | throw GameDataError("%s: preferred_fertility is not in [0, 1000].", immovable_name.c_str()); |
1482 | 73 | } | 81 | } |
1483 | 74 | if (!(0 <= preferred_humidity_ && preferred_humidity_ <= 1.)) { | 82 | if (!(0 <= preferred_humidity_ && preferred_humidity_ <= 1000)) { |
1484 | 75 | throw GameDataError("%s: preferred_humidity is not in [0, 1].", immovable_name.c_str()); | 83 | throw GameDataError("%s: preferred_humidity is not in [0, 1000].", immovable_name.c_str()); |
1485 | 76 | } | 84 | } |
1486 | 77 | if (!(0 <= pickiness_ && pickiness_ <= 1.)) { | 85 | if (!(0 <= pickiness_ && pickiness_ < 100)) { |
1487 | 78 | throw GameDataError("%s: pickiness is not in [0, 1].", immovable_name.c_str()); | 86 | throw GameDataError("%s: pickiness is not in [0, 99].", immovable_name.c_str()); |
1488 | 79 | } | 87 | } |
1489 | 80 | if (preferred_temperature_ < 0) { | 88 | if (preferred_temperature_ < 0) { |
1490 | 81 | throw GameDataError("%s: preferred_temperature is not possible.", immovable_name.c_str()); | 89 | throw GameDataError("%s: preferred_temperature is not possible.", immovable_name.c_str()); |
1491 | 82 | } | 90 | } |
1492 | 83 | } | 91 | } |
1493 | 84 | 92 | ||
1495 | 85 | double TerrainAffinity::preferred_temperature() const { | 93 | int TerrainAffinity::preferred_temperature() const { |
1496 | 86 | return preferred_temperature_; | 94 | return preferred_temperature_; |
1497 | 87 | } | 95 | } |
1498 | 88 | 96 | ||
1500 | 89 | double TerrainAffinity::preferred_fertility() const { | 97 | int TerrainAffinity::preferred_fertility() const { |
1501 | 90 | return preferred_fertility_; | 98 | return preferred_fertility_; |
1502 | 91 | } | 99 | } |
1503 | 92 | 100 | ||
1505 | 93 | double TerrainAffinity::preferred_humidity() const { | 101 | int TerrainAffinity::preferred_humidity() const { |
1506 | 94 | return preferred_humidity_; | 102 | return preferred_humidity_; |
1507 | 95 | } | 103 | } |
1508 | 96 | 104 | ||
1510 | 97 | double TerrainAffinity::pickiness() const { | 105 | int TerrainAffinity::pickiness() const { |
1511 | 98 | return pickiness_; | 106 | return pickiness_; |
1512 | 99 | } | 107 | } |
1513 | 100 | 108 | ||
1515 | 101 | double probability_to_grow(const TerrainAffinity& affinity, | 109 | unsigned int probability_to_grow(const TerrainAffinity& affinity, |
1516 | 102 | const FCoords& fcoords, | 110 | const FCoords& fcoords, |
1517 | 103 | const Map& map, | 111 | const Map& map, |
1518 | 104 | const DescriptionMaintainer<TerrainDescription>& terrains) { | 112 | const DescriptionMaintainer<TerrainDescription>& terrains) { |
1522 | 105 | double terrain_humidity = 0; | 113 | // Initialize with 3 to get proper rounding with the integer division in the return statement |
1523 | 106 | double terrain_fertility = 0; | 114 | int terrain_humidity = 3; |
1524 | 107 | double terrain_temperature = 0; | 115 | int terrain_fertility = 3; |
1525 | 116 | int terrain_temperature = 3; | ||
1526 | 108 | 117 | ||
1528 | 109 | const auto average = [&terrain_humidity, &terrain_fertility, &terrain_temperature, | 118 | const auto sum_up_values = [&terrain_humidity, &terrain_fertility, &terrain_temperature, |
1529 | 110 | &terrains](const int terrain_index) { | 119 | &terrains](const int terrain_index) { |
1530 | 111 | const TerrainDescription& t = terrains.get(terrain_index); | 120 | const TerrainDescription& t = terrains.get(terrain_index); |
1534 | 112 | terrain_humidity += t.humidity() / 6.; | 121 | terrain_humidity += t.humidity(); |
1535 | 113 | terrain_temperature += t.temperature() / 6.; | 122 | terrain_temperature += t.temperature(); |
1536 | 114 | terrain_fertility += t.fertility() / 6.; | 123 | terrain_fertility += t.fertility(); |
1537 | 115 | }; | 124 | }; |
1538 | 116 | 125 | ||
1541 | 117 | average(fcoords.field->terrain_d()); | 126 | sum_up_values(fcoords.field->terrain_d()); |
1542 | 118 | average(fcoords.field->terrain_r()); | 127 | sum_up_values(fcoords.field->terrain_r()); |
1543 | 119 | { | 128 | { |
1544 | 120 | FCoords tln; | 129 | FCoords tln; |
1545 | 121 | map.get_tln(fcoords, &tln); | 130 | map.get_tln(fcoords, &tln); |
1548 | 122 | average(tln.field->terrain_d()); | 131 | sum_up_values(tln.field->terrain_d()); |
1549 | 123 | average(tln.field->terrain_r()); | 132 | sum_up_values(tln.field->terrain_r()); |
1550 | 124 | } | 133 | } |
1551 | 125 | 134 | ||
1552 | 126 | { | 135 | { |
1553 | 127 | FCoords trn; | 136 | FCoords trn; |
1554 | 128 | map.get_trn(fcoords, &trn); | 137 | map.get_trn(fcoords, &trn); |
1556 | 129 | average(trn.field->terrain_d()); | 138 | sum_up_values(trn.field->terrain_d()); |
1557 | 130 | } | 139 | } |
1558 | 131 | 140 | ||
1559 | 132 | { | 141 | { |
1560 | 133 | FCoords ln; | 142 | FCoords ln; |
1561 | 134 | map.get_ln(fcoords, &ln); | 143 | map.get_ln(fcoords, &ln); |
1563 | 135 | average(ln.field->terrain_r()); | 144 | sum_up_values(ln.field->terrain_r()); |
1564 | 136 | } | 145 | } |
1565 | 137 | 146 | ||
1566 | 138 | return calculate_probability_to_grow( | 147 | return calculate_probability_to_grow( |
1568 | 139 | affinity, terrain_humidity, terrain_fertility, terrain_temperature); | 148 | affinity, terrain_humidity / 6, terrain_fertility / 6, terrain_temperature / 6); |
1569 | 140 | } | 149 | } |
1570 | 141 | 150 | ||
1572 | 142 | double probability_to_grow(const TerrainAffinity& affinity, const TerrainDescription& terrain) { | 151 | unsigned int probability_to_grow(const TerrainAffinity& affinity, const TerrainDescription& terrain) { |
1573 | 143 | 152 | ||
1574 | 144 | return calculate_probability_to_grow( | 153 | return calculate_probability_to_grow( |
1575 | 145 | affinity, terrain.humidity(), terrain.fertility(), terrain.temperature()); | 154 | affinity, terrain.humidity(), terrain.fertility(), terrain.temperature()); |
1576 | 146 | 155 | ||
1577 | === modified file 'src/logic/map_objects/terrain_affinity.h' | |||
1578 | --- src/logic/map_objects/terrain_affinity.h 2018-04-07 16:59:00 +0000 | |||
1579 | +++ src/logic/map_objects/terrain_affinity.h 2018-11-23 12:45:17 +0000 | |||
1580 | @@ -31,7 +31,6 @@ | |||
1581 | 31 | 31 | ||
1582 | 32 | class Map; | 32 | class Map; |
1583 | 33 | class TerrainDescription; | 33 | class TerrainDescription; |
1584 | 34 | class World; | ||
1585 | 35 | struct FCoords; | 34 | struct FCoords; |
1586 | 36 | 35 | ||
1587 | 37 | // Describes the parameters and the pickiness of Immovables towards terrain | 36 | // Describes the parameters and the pickiness of Immovables towards terrain |
1588 | @@ -39,39 +38,46 @@ | |||
1589 | 39 | // define this. | 38 | // define this. |
1590 | 40 | class TerrainAffinity { | 39 | class TerrainAffinity { |
1591 | 41 | public: | 40 | public: |
1592 | 41 | static constexpr int kPrecisionFactor = 1 << 26; | ||
1593 | 42 | |||
1594 | 42 | explicit TerrainAffinity(const LuaTable& table, const std::string& immovable_name); | 43 | explicit TerrainAffinity(const LuaTable& table, const std::string& immovable_name); |
1595 | 43 | 44 | ||
1596 | 44 | // Preferred temperature is in arbitrary units. | 45 | // Preferred temperature is in arbitrary units. |
1606 | 45 | double preferred_temperature() const; | 46 | int preferred_temperature() const; |
1607 | 46 | 47 | ||
1608 | 47 | // Preferred fertility in percent [0, 1]. | 48 | // Preferred fertility, ranging from 0 to 1000. |
1609 | 48 | double preferred_fertility() const; | 49 | int preferred_fertility() const; |
1610 | 49 | 50 | ||
1611 | 50 | // Preferred humidity in percent [0, 1]. | 51 | // Preferred humidity, ranging from 0 to 1000. |
1612 | 51 | double preferred_humidity() const; | 52 | int preferred_humidity() const; |
1613 | 52 | 53 | ||
1614 | 53 | // A value in [0, 1] that defines how well this can deal with non-ideal | 54 | // A value in [0, 99] that defines how well this can deal with non-ideal |
1615 | 54 | // situations. Lower means it is less picky, i.e. it can deal better. | 55 | // situations. Lower means it is less picky, i.e. it can deal better. |
1617 | 55 | double pickiness() const; | 56 | int pickiness() const; |
1618 | 56 | 57 | ||
1619 | 57 | private: | 58 | private: |
1624 | 58 | double preferred_fertility_; | 59 | const int preferred_fertility_; |
1625 | 59 | double preferred_humidity_; | 60 | const int preferred_humidity_; |
1626 | 60 | double preferred_temperature_; | 61 | const int preferred_temperature_; |
1627 | 61 | double pickiness_; | 62 | const int pickiness_; |
1628 | 62 | 63 | ||
1629 | 63 | DISALLOW_COPY_AND_ASSIGN(TerrainAffinity); | 64 | DISALLOW_COPY_AND_ASSIGN(TerrainAffinity); |
1630 | 64 | }; | 65 | }; |
1631 | 65 | 66 | ||
1635 | 66 | // Returns a value in [0., 1.] that describes the suitability for the | 67 | /** |
1636 | 67 | // 'immovable_affinity' for 'field'. Higher is better suited. | 68 | * Returns a value in [0, TerrainAffinity::kPrecisionFactor] that describes the suitability for the 'immovable_affinity' for all 6 terrains around 'field'. |
1637 | 68 | double probability_to_grow(const TerrainAffinity& immovable_affinity, | 69 | * Higher is better suited, with TerrainAffinity::kPrecisionFactor representing a probability of 1. |
1638 | 70 | * */ | ||
1639 | 71 | unsigned int probability_to_grow(const TerrainAffinity& immovable_affinity, | ||
1640 | 69 | const FCoords& fcoords, | 72 | const FCoords& fcoords, |
1641 | 70 | const Map& map, | 73 | const Map& map, |
1642 | 71 | const DescriptionMaintainer<TerrainDescription>& terrains); | 74 | const DescriptionMaintainer<TerrainDescription>& terrains); |
1643 | 72 | 75 | ||
1646 | 73 | // Probability to grow for a single terrain | 76 | /** |
1647 | 74 | double probability_to_grow(const TerrainAffinity& immovable_affinity, | 77 | * Returns a value in [0, TerrainAffinity::kPrecisionFactor] that describes the suitability for the 'immovable_affinity' for a single 'terrain'. |
1648 | 78 | * Higher is better suited, with TerrainAffinity::kPrecisionFactor representing a probability of 1. | ||
1649 | 79 | * */ | ||
1650 | 80 | unsigned int probability_to_grow(const TerrainAffinity& immovable_affinity, | ||
1651 | 75 | const TerrainDescription& terrain); | 81 | const TerrainDescription& terrain); |
1652 | 76 | 82 | ||
1653 | 77 | } // namespace Widelands | 83 | } // namespace Widelands |
1654 | 78 | 84 | ||
1655 | === modified file 'src/logic/map_objects/tribes/worker.cc' | |||
1656 | --- src/logic/map_objects/tribes/worker.cc 2018-11-07 10:19:29 +0000 | |||
1657 | +++ src/logic/map_objects/tribes/worker.cc 2018-11-23 12:45:17 +0000 | |||
1658 | @@ -452,11 +452,11 @@ | |||
1659 | 452 | const uint32_t attribute_id = ImmovableDescr::get_attribute_id("tree_sapling"); | 452 | const uint32_t attribute_id = ImmovableDescr::get_attribute_id("tree_sapling"); |
1660 | 453 | 453 | ||
1661 | 454 | const DescriptionMaintainer<TerrainDescription>& terrains = game.world().terrains(); | 454 | const DescriptionMaintainer<TerrainDescription>& terrains = game.world().terrains(); |
1663 | 455 | double best = 0.0; | 455 | int best = 0; |
1664 | 456 | for (DescriptionIndex i = 0; i < immovables.size(); ++i) { | 456 | for (DescriptionIndex i = 0; i < immovables.size(); ++i) { |
1665 | 457 | const ImmovableDescr& immovable_descr = immovables.get(i); | 457 | const ImmovableDescr& immovable_descr = immovables.get(i); |
1666 | 458 | if (immovable_descr.has_attribute(attribute_id) && immovable_descr.has_terrain_affinity()) { | 458 | if (immovable_descr.has_attribute(attribute_id) && immovable_descr.has_terrain_affinity()) { |
1668 | 459 | double probability = | 459 | int probability = |
1669 | 460 | probability_to_grow(immovable_descr.terrain_affinity(), fpos, map, terrains); | 460 | probability_to_grow(immovable_descr.terrain_affinity(), fpos, map, terrains); |
1670 | 461 | if (probability > best) { | 461 | if (probability > best) { |
1671 | 462 | best = probability; | 462 | best = probability; |
1672 | @@ -464,7 +464,7 @@ | |||
1673 | 464 | } | 464 | } |
1674 | 465 | } | 465 | } |
1675 | 466 | // normalize value to int16 range | 466 | // normalize value to int16 range |
1677 | 467 | const int16_t correct_val = (std::numeric_limits<int16_t>::max() - 1) * best; | 467 | const int16_t correct_val = (std::numeric_limits<int16_t>::max() - 1) * (static_cast<double>(best) / TerrainAffinity::kPrecisionFactor); |
1678 | 468 | 468 | ||
1679 | 469 | if (x_check && (correct_val != cache_entry)) { | 469 | if (x_check && (correct_val != cache_entry)) { |
1680 | 470 | forester_cache.clear(); | 470 | forester_cache.clear(); |
1681 | @@ -798,7 +798,7 @@ | |||
1682 | 798 | // affinity). We will pick one of them at random later. The container is | 798 | // affinity). We will pick one of them at random later. The container is |
1683 | 799 | // picked to be a stable sorting one, so that no deyncs happen in | 799 | // picked to be a stable sorting one, so that no deyncs happen in |
1684 | 800 | // multiplayer. | 800 | // multiplayer. |
1686 | 801 | std::set<std::tuple<double, DescriptionIndex, MapObjectDescr::OwnerType>> | 801 | std::set<std::tuple<int, DescriptionIndex, MapObjectDescr::OwnerType>> |
1687 | 802 | best_suited_immovables_index; | 802 | best_suited_immovables_index; |
1688 | 803 | 803 | ||
1689 | 804 | // Checks if the 'immovable_description' has a terrain_affinity, if so use it. Otherwise assume | 804 | // Checks if the 'immovable_description' has a terrain_affinity, if so use it. Otherwise assume |
1690 | @@ -809,7 +809,7 @@ | |||
1691 | 809 | if (!immovable_description.has_attribute(attribute_id)) { | 809 | if (!immovable_description.has_attribute(attribute_id)) { |
1692 | 810 | return; | 810 | return; |
1693 | 811 | } | 811 | } |
1695 | 812 | double p = 1.; | 812 | int p = TerrainAffinity::kPrecisionFactor; |
1696 | 813 | if (immovable_description.has_terrain_affinity()) { | 813 | if (immovable_description.has_terrain_affinity()) { |
1697 | 814 | p = probability_to_grow( | 814 | p = probability_to_grow( |
1698 | 815 | immovable_description.terrain_affinity(), fpos, map, game.world().terrains()); | 815 | immovable_description.terrain_affinity(), fpos, map, game.world().terrains()); |
1699 | @@ -856,18 +856,18 @@ | |||
1700 | 856 | // Randomly pick one of the immovables to be planted. | 856 | // Randomly pick one of the immovables to be planted. |
1701 | 857 | 857 | ||
1702 | 858 | // Each candidate is weighted by its probability to grow. | 858 | // Each candidate is weighted by its probability to grow. |
1704 | 859 | double total_weight = 0.0; | 859 | int total_weight = 0; |
1705 | 860 | for (const auto& bsii : best_suited_immovables_index) { | 860 | for (const auto& bsii : best_suited_immovables_index) { |
1708 | 861 | double weight = std::get<0>(bsii); | 861 | const int weight = std::get<0>(bsii); |
1709 | 862 | total_weight += weight * weight; | 862 | total_weight += weight; |
1710 | 863 | } | 863 | } |
1711 | 864 | 864 | ||
1713 | 865 | double choice = logic_rand_as_double(&game) * total_weight; | 865 | int choice = game.logic_rand() % total_weight; |
1714 | 866 | for (const auto& bsii : best_suited_immovables_index) { | 866 | for (const auto& bsii : best_suited_immovables_index) { |
1716 | 867 | double weight = std::get<0>(bsii); | 867 | const int weight = std::get<0>(bsii); |
1717 | 868 | state.ivar2 = std::get<1>(bsii); | 868 | state.ivar2 = std::get<1>(bsii); |
1718 | 869 | state.ivar3 = static_cast<int>(std::get<2>(bsii)); | 869 | state.ivar3 = static_cast<int>(std::get<2>(bsii)); |
1720 | 870 | choice -= weight * weight; | 870 | choice -= weight; |
1721 | 871 | if (0 > choice) { | 871 | if (0 > choice) { |
1722 | 872 | break; | 872 | break; |
1723 | 873 | } | 873 | } |
1724 | 874 | 874 | ||
1725 | === modified file 'src/logic/map_objects/world/terrain_description.cc' | |||
1726 | --- src/logic/map_objects/world/terrain_description.cc 2018-04-07 16:59:00 +0000 | |||
1727 | +++ src/logic/map_objects/world/terrain_description.cc 2018-11-23 12:45:17 +0000 | |||
1728 | @@ -105,19 +105,19 @@ | |||
1729 | 105 | default_resource_index_(world.get_resource(table.get_string("default_resource").c_str())), | 105 | default_resource_index_(world.get_resource(table.get_string("default_resource").c_str())), |
1730 | 106 | default_resource_amount_(table.get_int("default_resource_amount")), | 106 | default_resource_amount_(table.get_int("default_resource_amount")), |
1731 | 107 | dither_layer_(table.get_int("dither_layer")), | 107 | dither_layer_(table.get_int("dither_layer")), |
1735 | 108 | temperature_(table.get_double("temperature")), | 108 | temperature_(table.get_int("temperature")), |
1736 | 109 | fertility_(table.get_double("fertility")), | 109 | fertility_(table.get_int("fertility")), |
1737 | 110 | humidity_(table.get_double("humidity")) { | 110 | humidity_(table.get_int("humidity")) { |
1738 | 111 | 111 | ||
1739 | 112 | if (table.has_key("tooltips")) { | 112 | if (table.has_key("tooltips")) { |
1740 | 113 | custom_tooltips_ = table.get_table("tooltips")->array_entries<std::string>(); | 113 | custom_tooltips_ = table.get_table("tooltips")->array_entries<std::string>(); |
1741 | 114 | } | 114 | } |
1742 | 115 | 115 | ||
1745 | 116 | if (!(0 < fertility_ && fertility_ < 1.)) { | 116 | if (!(0 < fertility_ && fertility_ < 1000)) { |
1746 | 117 | throw GameDataError("%s: fertility is not in (0, 1).", name_.c_str()); | 117 | throw GameDataError("%s: fertility is not in (0, 1000).", name_.c_str()); |
1747 | 118 | } | 118 | } |
1750 | 119 | if (!(0 < humidity_ && humidity_ < 1.)) { | 119 | if (!(0 < humidity_ && humidity_ < 1000)) { |
1751 | 120 | throw GameDataError("%s: humidity is not in (0, 1).", name_.c_str()); | 120 | throw GameDataError("%s: humidity is not in (0, 1000).", name_.c_str()); |
1752 | 121 | } | 121 | } |
1753 | 122 | if (temperature_ < 0) { | 122 | if (temperature_ < 0) { |
1754 | 123 | throw GameDataError("%s: temperature is not possible.", name_.c_str()); | 123 | throw GameDataError("%s: temperature is not possible.", name_.c_str()); |
1755 | @@ -244,15 +244,15 @@ | |||
1756 | 244 | return dither_layer_; | 244 | return dither_layer_; |
1757 | 245 | } | 245 | } |
1758 | 246 | 246 | ||
1760 | 247 | double TerrainDescription::temperature() const { | 247 | int TerrainDescription::temperature() const { |
1761 | 248 | return temperature_; | 248 | return temperature_; |
1762 | 249 | } | 249 | } |
1763 | 250 | 250 | ||
1765 | 251 | double TerrainDescription::humidity() const { | 251 | int TerrainDescription::humidity() const { |
1766 | 252 | return humidity_; | 252 | return humidity_; |
1767 | 253 | } | 253 | } |
1768 | 254 | 254 | ||
1770 | 255 | double TerrainDescription::fertility() const { | 255 | int TerrainDescription::fertility() const { |
1771 | 256 | return fertility_; | 256 | return fertility_; |
1772 | 257 | } | 257 | } |
1773 | 258 | 258 | ||
1774 | 259 | 259 | ||
1775 | === modified file 'src/logic/map_objects/world/terrain_description.h' | |||
1776 | --- src/logic/map_objects/world/terrain_description.h 2018-04-27 06:11:05 +0000 | |||
1777 | +++ src/logic/map_objects/world/terrain_description.h 2018-11-23 12:45:17 +0000 | |||
1778 | @@ -115,13 +115,13 @@ | |||
1779 | 115 | 115 | ||
1780 | 116 | /// Parameters for terrain affinity of immovables. | 116 | /// Parameters for terrain affinity of immovables. |
1781 | 117 | /// Temperature is in arbitrary units. | 117 | /// Temperature is in arbitrary units. |
1789 | 118 | double temperature() const; | 118 | int temperature() const; |
1790 | 119 | 119 | ||
1791 | 120 | /// Humidity in percent [0, 1]. | 120 | /// Humidity, ranging from 0 to 1000. |
1792 | 121 | double humidity() const; | 121 | int humidity() const; |
1793 | 122 | 122 | ||
1794 | 123 | /// Fertility in percent [0, 1]. | 123 | /// Fertility, ranging from 0 to 1000. |
1795 | 124 | double fertility() const; | 124 | int fertility() const; |
1796 | 125 | 125 | ||
1797 | 126 | /// Additional tooptip entries for the editor | 126 | /// Additional tooptip entries for the editor |
1798 | 127 | const std::vector<std::string>& custom_tooltips() const { | 127 | const std::vector<std::string>& custom_tooltips() const { |
1799 | @@ -139,9 +139,9 @@ | |||
1800 | 139 | int default_resource_amount_; | 139 | int default_resource_amount_; |
1801 | 140 | int dither_layer_; | 140 | int dither_layer_; |
1802 | 141 | int frame_length_; | 141 | int frame_length_; |
1806 | 142 | double temperature_; | 142 | int temperature_; |
1807 | 143 | double fertility_; | 143 | int fertility_; |
1808 | 144 | double humidity_; | 144 | int humidity_; |
1809 | 145 | std::vector<std::string> texture_paths_; | 145 | std::vector<std::string> texture_paths_; |
1810 | 146 | std::vector<const Image*> textures_; | 146 | std::vector<const Image*> textures_; |
1811 | 147 | RGBColor minimap_colors_[256]; | 147 | RGBColor minimap_colors_[256]; |
1812 | 148 | 148 | ||
1813 | === modified file 'src/scripting/lua_map.cc' | |||
1814 | --- src/scripting/lua_map.cc 2018-11-09 01:26:21 +0000 | |||
1815 | +++ src/scripting/lua_map.cc 2018-11-23 12:45:17 +0000 | |||
1816 | @@ -1927,8 +1927,8 @@ | |||
1817 | 1927 | 1927 | ||
1818 | 1928 | returns the terrain affinity values for this immovable | 1928 | returns the terrain affinity values for this immovable |
1819 | 1929 | 1929 | ||
1822 | 1930 | (RO) a table containing numbers labeled as pickiness (double), preferred_fertility (double), | 1930 | (RO) a table containing numbers labeled as pickiness (uint), preferred_fertility (uint), |
1823 | 1931 | preferred_humidity (double), and preferred_temperature (uint), | 1931 | preferred_humidity (uint), and preferred_temperature (uint), |
1824 | 1932 | or nil if the immovable has no terrain affinity. | 1932 | or nil if the immovable has no terrain affinity. |
1825 | 1933 | */ | 1933 | */ |
1826 | 1934 | int LuaImmovableDescription::get_terrain_affinity(lua_State* L) { | 1934 | int LuaImmovableDescription::get_terrain_affinity(lua_State* L) { |
1827 | @@ -1936,13 +1936,13 @@ | |||
1828 | 1936 | const TerrainAffinity& affinity = get()->terrain_affinity(); | 1936 | const TerrainAffinity& affinity = get()->terrain_affinity(); |
1829 | 1937 | lua_newtable(L); | 1937 | lua_newtable(L); |
1830 | 1938 | lua_pushstring(L, "pickiness"); | 1938 | lua_pushstring(L, "pickiness"); |
1832 | 1939 | lua_pushdouble(L, affinity.pickiness()); | 1939 | lua_pushuint32(L, affinity.pickiness()); |
1833 | 1940 | lua_settable(L, -3); | 1940 | lua_settable(L, -3); |
1834 | 1941 | lua_pushstring(L, "preferred_fertility"); | 1941 | lua_pushstring(L, "preferred_fertility"); |
1836 | 1942 | lua_pushdouble(L, affinity.preferred_fertility()); | 1942 | lua_pushuint32(L, affinity.preferred_fertility()); |
1837 | 1943 | lua_settable(L, -3); | 1943 | lua_settable(L, -3); |
1838 | 1944 | lua_pushstring(L, "preferred_humidity"); | 1944 | lua_pushstring(L, "preferred_humidity"); |
1840 | 1945 | lua_pushdouble(L, affinity.preferred_humidity()); | 1945 | lua_pushuint32(L, affinity.preferred_humidity()); |
1841 | 1946 | lua_settable(L, -3); | 1946 | lua_settable(L, -3); |
1842 | 1947 | lua_pushstring(L, "preferred_temperature"); | 1947 | lua_pushstring(L, "preferred_temperature"); |
1843 | 1948 | lua_pushuint32(L, affinity.preferred_temperature()); | 1948 | lua_pushuint32(L, affinity.preferred_temperature()); |
1844 | @@ -2034,7 +2034,7 @@ | |||
1845 | 2034 | if (get()->has_terrain_affinity()) { | 2034 | if (get()->has_terrain_affinity()) { |
1846 | 2035 | const TerrainDescription* terrain = | 2035 | const TerrainDescription* terrain = |
1847 | 2036 | (*get_user_class<LuaMaps::LuaTerrainDescription>(L, 2))->get(); | 2036 | (*get_user_class<LuaMaps::LuaTerrainDescription>(L, 2))->get(); |
1849 | 2037 | lua_pushdouble(L, Widelands::probability_to_grow(get()->terrain_affinity(), *terrain)); | 2037 | lua_pushdouble(L, Widelands::probability_to_grow(get()->terrain_affinity(), *terrain) / static_cast<double>(Widelands::TerrainAffinity::kPrecisionFactor)); |
1850 | 2038 | } else { | 2038 | } else { |
1851 | 2039 | lua_pushnil(L); | 2039 | lua_pushnil(L); |
1852 | 2040 | } | 2040 | } |
1853 | @@ -3513,22 +3513,22 @@ | |||
1854 | 3513 | /* RST | 3513 | /* RST |
1855 | 3514 | .. attribute:: fertility | 3514 | .. attribute:: fertility |
1856 | 3515 | 3515 | ||
1858 | 3516 | (RO) the :class:`double` fertility value for this terrain | 3516 | (RO) the :class:`uint` fertility value for this terrain |
1859 | 3517 | */ | 3517 | */ |
1860 | 3518 | 3518 | ||
1861 | 3519 | int LuaTerrainDescription::get_fertility(lua_State* L) { | 3519 | int LuaTerrainDescription::get_fertility(lua_State* L) { |
1863 | 3520 | lua_pushdouble(L, get()->fertility()); | 3520 | lua_pushuint32(L, get()->fertility()); |
1864 | 3521 | return 1; | 3521 | return 1; |
1865 | 3522 | } | 3522 | } |
1866 | 3523 | 3523 | ||
1867 | 3524 | /* RST | 3524 | /* RST |
1868 | 3525 | .. attribute:: humidity | 3525 | .. attribute:: humidity |
1869 | 3526 | 3526 | ||
1871 | 3527 | (RO) the :class:`double` humidity value for this terrain | 3527 | (RO) the :class:`uint` humidity value for this terrain |
1872 | 3528 | */ | 3528 | */ |
1873 | 3529 | 3529 | ||
1874 | 3530 | int LuaTerrainDescription::get_humidity(lua_State* L) { | 3530 | int LuaTerrainDescription::get_humidity(lua_State* L) { |
1876 | 3531 | lua_pushdouble(L, get()->humidity()); | 3531 | lua_pushuint32(L, get()->humidity()); |
1877 | 3532 | return 1; | 3532 | return 1; |
1878 | 3533 | } | 3533 | } |
1879 | 3534 | 3534 | ||
1880 | 3535 | 3535 | ||
1881 | === modified file 'test/maps/lua_testsuite.wmf/scripting/immovables_descriptions.lua' | |||
1882 | --- test/maps/lua_testsuite.wmf/scripting/immovables_descriptions.lua 2018-09-29 05:10:39 +0000 | |||
1883 | +++ test/maps/lua_testsuite.wmf/scripting/immovables_descriptions.lua 2018-11-23 12:45:17 +0000 | |||
1884 | @@ -75,22 +75,22 @@ | |||
1885 | 75 | local aff_umbrella_green_mature = egbase:get_immovable_description("umbrella_green_wasteland_mature").terrain_affinity | 75 | local aff_umbrella_green_mature = egbase:get_immovable_description("umbrella_green_wasteland_mature").terrain_affinity |
1886 | 76 | 76 | ||
1887 | 77 | -- Pickiness | 77 | -- Pickiness |
1889 | 78 | assert_near(0.6, aff_alder_sapling["pickiness"], 0.01) | 78 | assert_equal(60, aff_alder_sapling["pickiness"]) |
1890 | 79 | assert_equal(aff_alder_sapling["pickiness"], aff_alder_old["pickiness"]) | 79 | assert_equal(aff_alder_sapling["pickiness"], aff_alder_old["pickiness"]) |
1893 | 80 | assert_near(0.6, aff_mushroom_red_pole["pickiness"], 0.01) | 80 | assert_equal(60, aff_mushroom_red_pole["pickiness"]) |
1894 | 81 | assert_near(0.8, aff_umbrella_green_mature["pickiness"], 0.01) | 81 | assert_equal(80, aff_umbrella_green_mature["pickiness"]) |
1895 | 82 | 82 | ||
1896 | 83 | -- preferred_fertility | 83 | -- preferred_fertility |
1898 | 84 | assert_near(0.6, aff_alder_sapling["preferred_fertility"], 0.01) | 84 | assert_equal(600, aff_alder_sapling["preferred_fertility"]) |
1899 | 85 | assert_equal(aff_alder_sapling["preferred_fertility"], aff_alder_old["preferred_fertility"]) | 85 | assert_equal(aff_alder_sapling["preferred_fertility"], aff_alder_old["preferred_fertility"]) |
1902 | 86 | assert_near(0.85, aff_mushroom_red_pole["preferred_fertility"], 0.01) | 86 | assert_equal(850, aff_mushroom_red_pole["preferred_fertility"]) |
1903 | 87 | assert_near(0.85, aff_umbrella_green_mature["preferred_fertility"], 0.01) | 87 | assert_equal(850, aff_umbrella_green_mature["preferred_fertility"]) |
1904 | 88 | 88 | ||
1905 | 89 | -- preferred_humidity | 89 | -- preferred_humidity |
1907 | 90 | assert_near(0.65, aff_alder_sapling["preferred_humidity"], 0.01) | 90 | assert_equal(650, aff_alder_sapling["preferred_humidity"]) |
1908 | 91 | assert_equal(aff_alder_sapling["preferred_humidity"], aff_alder_old["preferred_humidity"]) | 91 | assert_equal(aff_alder_sapling["preferred_humidity"], aff_alder_old["preferred_humidity"]) |
1911 | 92 | assert_near(0.35, aff_mushroom_red_pole["preferred_humidity"], 0.01) | 92 | assert_equal(350, aff_mushroom_red_pole["preferred_humidity"]) |
1912 | 93 | assert_near(0.2, aff_umbrella_green_mature["preferred_humidity"], 0.01) | 93 | assert_equal(200, aff_umbrella_green_mature["preferred_humidity"]) |
1913 | 94 | 94 | ||
1914 | 95 | -- preferred_temperature | 95 | -- preferred_temperature |
1915 | 96 | assert_equal(125, aff_alder_sapling["preferred_temperature"]) | 96 | assert_equal(125, aff_alder_sapling["preferred_temperature"]) |
1916 | 97 | 97 | ||
1917 | === modified file 'test/maps/lua_testsuite.wmf/scripting/terrains_resources_descriptions.lua' | |||
1918 | --- test/maps/lua_testsuite.wmf/scripting/terrains_resources_descriptions.lua 2016-07-10 19:03:33 +0000 | |||
1919 | +++ test/maps/lua_testsuite.wmf/scripting/terrains_resources_descriptions.lua 2018-11-23 12:45:17 +0000 | |||
1920 | @@ -141,17 +141,17 @@ | |||
1921 | 141 | end | 141 | end |
1922 | 142 | 142 | ||
1923 | 143 | function test_terrains_resource_descr:test_terrain_fertility() | 143 | function test_terrains_resource_descr:test_terrain_fertility() |
1928 | 144 | assert_near(0.7, egbase:get_terrain_description("summer_meadow1").fertility, 0.01) | 144 | assert_equal(700, egbase:get_terrain_description("summer_meadow1").fertility) |
1929 | 145 | assert_near(0.2, egbase:get_terrain_description("wasteland_beach").fertility, 0.01) | 145 | assert_equal(200, egbase:get_terrain_description("wasteland_beach").fertility) |
1930 | 146 | assert_near(0.5, egbase:get_terrain_description("desert_forested_mountain2").fertility, 0.01) | 146 | assert_equal(500, egbase:get_terrain_description("desert_forested_mountain2").fertility) |
1931 | 147 | assert_near(0.001, egbase:get_terrain_description("winter_water").fertility, 0.0001) | 147 | assert_equal(1, egbase:get_terrain_description("winter_water").fertility) |
1932 | 148 | end | 148 | end |
1933 | 149 | 149 | ||
1934 | 150 | function test_terrains_resource_descr:test_terrain_humidity() | 150 | function test_terrains_resource_descr:test_terrain_humidity() |
1939 | 151 | assert_near(0.6, egbase:get_terrain_description("summer_meadow1").humidity, 0.01) | 151 | assert_equal(600, egbase:get_terrain_description("summer_meadow1").humidity) |
1940 | 152 | assert_near(0.4, egbase:get_terrain_description("wasteland_beach").humidity, 0.01) | 152 | assert_equal(400, egbase:get_terrain_description("wasteland_beach").humidity) |
1941 | 153 | assert_near(0.5, egbase:get_terrain_description("desert_forested_mountain2").humidity, 0.01) | 153 | assert_equal(500, egbase:get_terrain_description("desert_forested_mountain2").humidity) |
1942 | 154 | assert_near(0.999, egbase:get_terrain_description("winter_water").humidity, 0.0001) | 154 | assert_equal(999, egbase:get_terrain_description("winter_water").humidity) |
1943 | 155 | end | 155 | end |
1944 | 156 | 156 | ||
1945 | 157 | function test_terrains_resource_descr:test_terrain_temperature() | 157 | function test_terrains_resource_descr:test_terrain_temperature() |
Continuous integration builds have changed state:
Travis build 4197. State: failed. Details: https:/ /travis- ci.org/ widelands/ widelands/ builds/ 452676073. /ci.appveyor. com/project/ widelands- dev/widelands/ build/_ widelands_ dev_widelands_ terrain_ affinity_ as_int- 3993.
Appveyor build 3993. State: failed. Details: https:/