-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathplanet.hpp
2797 lines (2064 loc) · 87.8 KB
/
planet.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
//
// planet.hpp
// Undiscovered Worlds
//
// Created by Jonathan Hill on 22/07/2019.
//
// Please see functions.hpp for notes.
#ifndef planet_hpp
#define planet_hpp
#include <stdio.h>
#include <string>
#include "classes.hpp"
#define ARRAYWIDTH 512
#define MAXCRATERS 100000
using namespace std;
class planet
{
public:
planet(); // constructor
~planet(); // destructor
// accessor functions
int saveversion() const; // save format
void setsaveversion(int amount);
int settingssaveversion() const; // save format for settings
void setsettingssaveversion(int amount);
long seed() const; // seed
void setseed(long amount);
int size() const; // size
void setsize(int amount);
int width() const; // global width
void setwidth(int amount);
int height() const; // global height
void setheight(int amount);
int edge() const; // edge length of faces
void setedge(int amount);
int type() const; // planetary type
void settype(int amount);
bool rotation() const; // global rotation
void setrotation(bool amount);
float tilt() const; // axial tilt
void settilt(float amount);
float eccentricity() const; // orbital eccentricity
void seteccentricity(float amount);
int perihelion() const; // perihelion
void setperihelion(int amount);
float gravity() const; // surface gravity
void setgravity(float amount);
float lunar() const; // strength of lunar gravity
void setlunar(float amount);
float tempdecrease() const; // amount temperatures decrease by per 1000 metres
void settempdecrease(float amount);
int northpolaradjust() const; // adjustment to north polar temperature
void setnorthpolaradjust(int amount);
int southpolaradjust() const; // adjustment to south polar temperature
void setsouthpolaradjust(int amount);
int averagetemp() const; // average world temperature
void setaveragetemp(int amount);
int northpolartemp() const; // north polar temperature
void setnorthpolartemp(int amount);
int southpolartemp() const; // south polar temperature
void setsouthpolartemp(int amount);
int eqtemp() const; // equatorial temperature
void seteqtemp(int amount);
int seaicetemp() const; // equatorial temperature
void setseaicetemp(int amount);
float waterpickup() const; // amount of water to pick up over oceans
void setwaterpickup(float amount);
float riverfactor() const; // global factor for calculating flow in cubic metres/second
void setriverfactor(float amount);
int riverlandreduce() const; // global factor for carving river valleys
void setriverlandreduce(int amount);
int estuarylimit() const; // global minimum river flow for estuaries
void setestuarylimit(int amount);
int glacialtemp() const; // global maximum temperature for glacially carved terrain
void setglacialtemp(int amount);
int glaciertemp() const; // global maximum temperature for rivers to become glaciers
void setglaciertemp(int amount);
float mountainreduce() const; // global factor to reduce mountain heights by a little
void setmountainreduce(float amount);
int climatenumber() const; // total number of possible climates
void setclimatenumber(int amount);
int maxelevation() const; // global maximum elevation
void setmaxelevation(int amount);
int sealevel() const; // global sea level
void setsealevel(int amount);
int snowchange() const;
void setsnowchange(int amount); // 1=abrupt; 2=speckled; 3=gradual
float normal() const;
void setnormal(float amount);
float ambient() const;
void setambient(float amount);
float gamma() const;
void setgamma(float amount);
float haze() const;
void sethaze(float amount);
float specular() const;
void setspecular(float amount);
float cloudcover() const;
void setcloudcover(float amount);
float bloomdist() const;
void setbloomdist(float amount);
float sunglare() const;
void setsunglare(float amount);
float sunlens() const;
void setsunlens(float amount);
int sunrayno() const;
void setsunrayno(int amount);
float sunraystrength() const;
void setsunraystrength(float amount);
float starbright() const;
void setstarbright(float amount);
float starcolour() const;
void setstarcolour(float amount);
float starhaze() const;
void setstarhaze(float amount);
float starnebula() const;
void setstarnebula(float amount);
int seaiceappearance() const;
void setseaiceappearance(int amount);
bool colourcliffs() const;
void setcolourcliffs(bool amount);
float landmarbling() const;
void setlandmarbling(float amount);
float lakemarbling() const;
void setlakemarbling(float amount);
float seamarbling() const;
void setseamarbling(float amount);
int minriverflowglobal() const;
void setminriverflowglobal(int amount);
int minriverflowregional() const;
void setminriverflowregional(int amount);
bool showmangroves() const;
void setshowmangroves(bool amount);
int landtotal() const;
void setlandtotal(int amount);
int seatotal() const;
void setseatotal(int amount);
int craterno() const;
void setcraterno(int amount);
int maxriverflow() const; // greatest river flow
// These are the accessor functions for the map colours.
int seaice1() const { return itsseaice1; };
void setseaice1(int amount) { itsseaice1 = amount; };
int seaice2() const { return itsseaice2; };
void setseaice2(int amount) { itsseaice2 = amount; };
int seaice3() const { return itsseaice3; };
void setseaice3(int amount) { itsseaice3 = amount; };
int sea1() const { return itssea1; };
void setsea1(int amount) { itssea1 = amount; };
int sea2() const { return itssea2; };
void setsea2(int amount) { itssea2 = amount; };
int sea3() const { return itssea3; };
void setsea3(int amount) { itssea3 = amount; };
int ocean1() const { return itsocean1; };
void setocean1(int amount) { itsocean1 = amount; };
int ocean2() const { return itsocean2; };
void setocean2(int amount) { itsocean2 = amount; };
int ocean3() const { return itsocean3; };
void setocean3(int amount) { itsocean3 = amount; };
int deepocean1() const { return itsdeepocean1; };
void setdeepocean1(int amount) { itsdeepocean1 = amount; };
int deepocean2() const { return itsdeepocean2; };
void setdeepocean2(int amount) { itsdeepocean2 = amount; };
int deepocean3() const { return itsdeepocean3; };
void setdeepocean3(int amount) { itsdeepocean3 = amount; };
int base1() const { return itsbase1; };
void setbase1(int amount) { itsbase1 = amount; };
int base2() const { return itsbase2; };
void setbase2(int amount) { itsbase2 = amount; };
int base3() const { return itsbase3; };
void setbase3(int amount) { itsbase3 = amount; };
int basetemp1() const { return itsbasetemp1; };
void setbasetemp1(int amount) { itsbasetemp1 = amount; };
int basetemp2() const { return itsbasetemp2; };
void setbasetemp2(int amount) { itsbasetemp2 = amount; };
int basetemp3() const { return itsbasetemp3; };
void setbasetemp3(int amount) { itsbasetemp3 = amount; };
int highbase1() const { return itshighbase1; };
void sethighbase1(int amount) { itshighbase1 = amount; };
int highbase2() const { return itshighbase2; };
void sethighbase2(int amount) { itshighbase2 = amount; };
int highbase3() const { return itshighbase3; };
void sethighbase3(int amount) { itshighbase3 = amount; };
int desert1() const { return itsdesert1; };
void setdesert1(int amount) { itsdesert1 = amount; };
int desert2() const { return itsdesert2; };
void setdesert2(int amount) { itsdesert2 = amount; };
int desert3() const { return itsdesert3; };
void setdesert3(int amount) { itsdesert3 = amount; };
int highdesert1() const { return itshighdesert1; };
void sethighdesert1(int amount) { itshighdesert1 = amount; };
int highdesert2() const { return itshighdesert2; };
void sethighdesert2(int amount) { itshighdesert2 = amount; };
int highdesert3() const { return itshighdesert3; };
void sethighdesert3(int amount) { itshighdesert3 = amount; };
int colddesert1() const { return itscolddesert1; };
void setcolddesert1(int amount) { itscolddesert1 = amount; };
int colddesert2() const { return itscolddesert2; };
void setcolddesert2(int amount) { itscolddesert2 = amount; };
int colddesert3() const { return itscolddesert3; };
void setcolddesert3(int amount) { itscolddesert3 = amount; };
int grass1() const { return itsgrass1; };
void setgrass1(int amount) { itsgrass1 = amount; };
int grass2() const { return itsgrass2; };
void setgrass2(int amount) { itsgrass2 = amount; };
int grass3() const { return itsgrass3; };
void setgrass3(int amount) { itsgrass3 = amount; };
int cold1() const { return itscold1; };
void setcold1(int amount) { itscold1 = amount; };
int cold2() const { return itscold2; };
void setcold2(int amount) { itscold2 = amount; };
int cold3() const { return itscold3; };
void setcold3(int amount) { itscold3 = amount; };
int tundra1() const { return itstundra1; };
void settundra1(int amount) { itstundra1 = amount; };
int tundra2() const { return itstundra2; };
void settundra2(int amount) { itstundra2 = amount; };
int tundra3() const { return itstundra3; };
void settundra3(int amount) { itstundra3 = amount; };
int eqtundra1() const { return itseqtundra1; };
void seteqtundra1(int amount) { itseqtundra1 = amount; };
int eqtundra2() const { return itseqtundra2; };
void seteqtundra2(int amount) { itseqtundra2 = amount; };
int eqtundra3() const { return itseqtundra3; };
void seteqtundra3(int amount) { itseqtundra3 = amount; };
int saltpan1() const { return itssaltpan1; };
void setsaltpan1(int amount) { itssaltpan1 = amount; };
int saltpan2() const { return itssaltpan2; };
void setsaltpan2(int amount) { itssaltpan2 = amount; };
int saltpan3() const { return itssaltpan3; };
void setsaltpan3(int amount) { itssaltpan3 = amount; };
int erg1() const { return itserg1; };
void seterg1(int amount) { itserg1 = amount; };
int erg2() const { return itserg2; };
void seterg2(int amount) { itserg2 = amount; };
int erg3() const { return itserg3; };
void seterg3(int amount) { itserg3 = amount; };
int wetlands1() const { return itswetlands1; };
void setwetlands1(int amount) { itswetlands1 = amount; };
int wetlands2() const { return itswetlands2; };
void setwetlands2(int amount) { itswetlands2 = amount; };
int wetlands3() const { return itswetlands3; };
void setwetlands3(int amount) { itswetlands3 = amount; };
int lake1() const { return itslake1; };
void setlake1(int amount) { itslake1 = amount; };
int lake2() const { return itslake2; };
void setlake2(int amount) { itslake2 = amount; };
int lake3() const { return itslake3; };
void setlake3(int amount) { itslake3 = amount; };
int river1() const { return itsriver1; };
void setriver1(int amount) { itsriver1 = amount; };
int river2() const { return itsriver2; };
void setriver2(int amount) { itsriver2 = amount; };
int river3() const { return itsriver3; };
void setriver3(int amount) { itsriver3 = amount; };
int glacier1() const { return itsglacier1; };
void setglacier1(int amount) { itsglacier1 = amount; };
int glacier2() const { return itsglacier2; };
void setglacier2(int amount) { itsglacier2 = amount; };
int glacier3() const { return itsglacier3; };
void setglacier3(int amount) { itsglacier3 = amount; };
int sand1() const { return itssand1; };
void setsand1(int amount) { itssand1 = amount; };
int sand2() const { return itssand2; };
void setsand2(int amount) { itssand2 = amount; };
int sand3() const { return itssand3; };
void setsand3(int amount) { itssand3 = amount; };
int mud1() const { return itsmud1; };
void setmud1(int amount) { itsmud1 = amount; };
int mud2() const { return itsmud2; };
void setmud2(int amount) { itsmud2 = amount; };
int mud3() const { return itsmud3; };
void setmud3(int amount) { itsmud3 = amount; };
int shingle1() const { return itsshingle1; };
void setshingle1(int amount) { itsshingle1 = amount; };
int shingle2() const { return itsshingle2; };
void setshingle2(int amount) { itsshingle2 = amount; };
int shingle3() const { return itsshingle3; };
void setshingle3(int amount) { itsshingle3 = amount; };
int mangrove1() const { return itsmangrove1; };
void setmangrove1(int amount) { itsmangrove1 = amount; };
int mangrove2() const { return itsmangrove2; };
void setmangrove2(int amount) { itsmangrove2 = amount; };
int mangrove3() const { return itsmangrove3; };
void setmangrove3(int amount) { itsmangrove3 = amount; };
int highlight1() const { return itshighlight1; };
void sethighlight1(int amount) { itshighlight1 = amount; };
int highlight2() const { return itshighlight2; };
void sethighlight2(int amount) { itshighlight2 = amount; };
int highlight3() const { return itshighlight3; };
void sethighlight3(int amount) { itshighlight3 = amount; };
int atmos1() const { return itsatmos1; };
void setatmos1(int amount) { itsatmos1 = amount; };
int atmos2() const { return itsatmos2; };
void setatmos2(int amount) { itsatmos2 = amount; };
int atmos3() const { return itsatmos3; };
void setatmos3(int amount) { itsatmos3 = amount; };
int dusk1() const { return itsdusk1; };
void setdusk1(int amount) { itsdusk1 = amount; };
int dusk2() const { return itsdusk2; };
void setdusk2(int amount) { itsdusk2 = amount; };
int dusk3() const { return itsdusk3; };
void setdusk3(int amount) { itsdusk3 = amount; };
int sun1() const { return itssun1; };
void setsun1(int amount) { itssun1 = amount; };
int sun2() const { return itssun2; };
void setsun2(int amount) { itssun2 = amount; };
int sun3() const { return itssun3; };
void setsun3(int amount) { itssun3 = amount; };
int gal1haze1() const { return itsgal1haze1; };
void setgal1haze1(int amount) { itsgal1haze1 = amount; };
int gal1haze2() const { return itsgal1haze2; };
void setgal1haze2(int amount) { itsgal1haze2 = amount; };
int gal1haze3() const { return itsgal1haze3; };
void setgal1haze3(int amount) { itsgal1haze3 = amount; };
int gal2haze1() const { return itsgal2haze1; };
void setgal2haze1(int amount) { itsgal2haze1 = amount; };
int gal2haze2() const { return itsgal2haze2; };
void setgal2haze2(int amount) { itsgal2haze2 = amount; };
int gal2haze3() const { return itsgal2haze3; };
void setgal2haze3(int amount) { itsgal2haze3 = amount; };
int gal1nebula1() const { return itsgal1nebula1; };
void setgal1nebula1(int amount) { itsgal1nebula1 = amount; };
int gal1nebula2() const { return itsgal1nebula2; };
void setgal1nebula2(int amount) { itsgal1nebula2 = amount; };
int gal1nebula3() const { return itsgal1nebula3; };
void setgal1nebula3(int amount) { itsgal1nebula3 = amount; };
int gal2nebula1() const { return itsgal2nebula1; };
void setgal2nebula1(int amount) { itsgal2nebula1 = amount; };
int gal2nebula2() const { return itsgal2nebula2; };
void setgal2nebula2(int amount) { itsgal2nebula2 = amount; };
int gal2nebula3() const { return itsgal2nebula3; };
void setgal2nebula3(int amount) { itsgal2nebula3 = amount; };
int bloom1() const { return itsbloom1; };
void setbloom1(int amount) { itsbloom1 = amount; };
int bloom2() const { return itsbloom2; };
void setbloom2(int amount) { itsbloom2 = amount; };
int bloom3() const { return itsbloom3; };
void setbloom3(int amount) { itsbloom3 = amount; };
// These accessor functions are for location-specific information.
// They don't check that x and y are valid coordinates.
int map(int face, int x, int y) const; // total terrain elevation
int nom(int face, int x, int y) const; // no-mountains terrain elevation
void setnom(int face, int x, int y, int amount);
int noise(int face, int x, int y) const; // The noise map - used for adding the terraced decoration to parts of the regional map.
void setnoise(int face, int x, int y, int amount);
bool sea(int face, int x, int y) const; // whether this is sea or not
bool outline(int face, int x, int y) const; // whether this is coast, next to sea
bool coast(int face, int x, int y) const; // whether this is coast, next to land
void longitude(int face, int x, int& degrees, int& minutes, int& seconds, bool& negative) const; // returns the longitude of this point
void latitude(int face, int y, int& degrees, int& minutes, int& seconds, bool& negative) const; // returns the latitude of this point
int reverselatitude(int lat) const; // returns the y coordinate of a latitude
int nomridge(int face, int x, int y) const; // no-mountains, with undersea ridge terrain elevation
int oceanridges(int face, int x, int y) const; // undersea ridges
void setoceanridges(int face, int x, int y, int amount);
int oceanridgeheights(int face, int x, int y) const; // undersea ridges
void setoceanridgeheights(int face, int x, int y, int amount);
int oceanrifts(int face, int x, int y) const; // undersea rifts
void setoceanrifts(int face, int x, int y, int amount);
int oceanridgeoffset(int face, int x, int y) const; // offset map for the ridges
void setoceanridgeoffset(int face, int x, int y, int amount);
int oceanridgeangle(int face, int x, int y) const; // the angle perpendicular to the line of the ridge
void setoceanridgeangle(int face, int x, int y, int amount);
int volcano(int face, int x, int y) const; // isolated peaks (negative value means it's extinct)
void setvolcano(int face, int x, int y, int amount);
bool strato(int face, int x, int y) const; // stratovolcanoes
void setstrato(int face, int x, int y, bool amount);
int clouds(int face, int x, int y) const; // clouds
void setclouds(int face, int x, int y, int amount);
int extraelev(int face, int x, int y) const; // extra terrain elevation
void setextraelev(int face, int x, int y, int amount);
int maxtemp(int face, int x, int y) const; // maximum temperature
void setmaxtemp(int face, int x, int y, int amount);
int mintemp(int face, int x, int y) const; // minimum temperature
void setmintemp(int face, int x, int y, int amount);
int jantemp(int face, int x, int y) const; // January temperature
void setjantemp(int face, int x, int y, int amount);
int jultemp(int face, int x, int y) const; // July temperature
void setjultemp(int face, int x, int y, int amount);
int equinoxtemp(int face, int x, int y, vector<float>& latitude) const; // Temperature at the equinox
int monthtemp(int face, int x, int y, int thismonth, vector<float>& latitude) const; // Temperature at a given month
void monthlytemps(int face, int x, int y, float arr[12], vector<float>& latitude) const; // All the monthly temperatures for this point
int avetemp(int face, int x, int y) const; // average temperature
int summerrain(int face, int x, int y) const; // summer precipitation
void setsummerrain(int face, int x, int y, int amount);
int winterrain(int face, int x, int y) const; // winter precipitation
void setwinterrain(int face, int x, int y, int amount);
int janrain(int face, int x, int y) const; // January precipitation
void setjanrain(int face, int x, int y, int amount);
int julrain(int face, int x, int y) const; // July precipitation
void setjulrain(int face, int x, int y, int amount);
void monthlyrain(int face, int x, int y, float temp[12], float rain[12]) const; // All the monthly precipitation for this poitn
int aprrain(int face, int x, int y) const; // April precipitation
int octrain(int face, int x, int y) const; // October precipitation
int averain(int face, int x, int y) const; // average precipitation
int janmountainrain(int face, int x, int y) const; // jan precipitation on mountains
void setjanmountainrain(int face, int x, int y, int amount);
int julmountainrain(int face, int x, int y) const; // jul precipitation on mountains
void setjulmountainrain(int face, int x, int y, int amount);
int wintermountainrain(int face, int x, int y) const; // winter precipitation on mountains
void setwintermountainrain(int face, int x, int y, int amount);
int summermountainrain(int face, int x, int y) const; // winter precipitation on mountains
void setsummermountainrain(int face, int x, int y, int amount);
int janmountainraindir(int face, int x, int y) const; // direction of jan precipitation on mountains
void setjanmountainraindir(int face, int x, int y, int amount);
int julmountainraindir(int face, int x, int y) const; // direction of jul precipitation on mountains
void setjulmountainraindir(int face, int x, int y, int amount);
int wintermountainraindir(int face, int x, int y) const; // direction of winter precipitation on mountains
void setwintermountainraindir(int face, int x, int y, int amount);
int summermountainraindir(int face, int x, int y) const; // direction of winter precipitation on mountains
void setsummermountainraindir(int face, int x, int y, int amount);
int climate(int face, int x, int y) const; // climate type
void setclimate(int face, int x, int y, int amount);
int seaice(int face, int x, int y) const; // sea ice (roughly)
int seatempreduce(int face, int x, int y) const; // temperature reduction for working out sea ice
void setseatempreduce(int face, int x, int y, int amount);
int riverdir(int face, int x, int y) const; // river flow direction
void setriverdir(int face, int x, int y, int amount);
int riverjan(int face, int x, int y) const; // January river flow volume
void setriverjan(int face, int x, int y, int amount);
int riverjul(int face, int x, int y) const; // July river flow volume
void setriverjul(int face, int x, int y, int amount);
int riveraveflow(int face, int x, int y) const; // average river flow
void monthlyflow(int face, int x, int y, float temp[12], float rain[12], int flow[12]) const; // river flow month by month
int wind(int face, int x, int y) const; // wind direction
void setwind(int face, int x, int y, int amount);
int winddir(int face, int x, int y) const; // easterly = -1, westerly = 1, none = 0
int lakesurface(int face, int x, int y) const; // lake surface elevation
void setlakesurface(int face, int x, int y, int amount);
int truelake(int face, int x, int y) const; // whether this is a true lake
float roughness(int face, int x, int y) const; // roughness
void setroughness(int face, int x, int y, float amount);
int mountainridge(int face, int x, int y) const; // mountain ridge directions
void setmountainridge(int face, int x, int y, int amount);
int mountainheight(int face, int x, int y) const; // mountain elevation
void setmountainheight(int face, int x, int y, int amount);
int craterrim(int face, int x, int y) const; // crater rims
void setcraterrim(int face, int x, int y, int amount);
int cratercentre(int face, int x, int y) const; // crater centre heights
void setcratercentre(int face, int x, int y, int amount);
int craterface(int n) const; // crater centre face
void setcraterface(int n, int amount);
int craterx(int n) const; // crater centre x
void setcraterx(int n, int amount);
int cratery(int n) const; // crater centre y
void setcratery(int n, int amount);
int craterelev(int n) const; // crater peak elevation
void setcraterelev(int n, int amount);
int craterradius(int n) const; // crater radius
void setcraterradius(int n, int amount);
int tide(int face, int x, int y) const; // tidal strength
void settide(int face, int x, int y, int amount);
int riftlakesurface(int face, int x, int y) const; // rift lake surface elevation
void setriftlakesurface(int face, int x, int y, int amount);
int riftlakebed(int face, int x, int y) const; // rift lake bed elevation
void setriftlakebed(int face, int x, int y, int amount);
int special(int face, int x, int y) const; // special features. 100: salt lake. 110: salt pan. 120: dunes. 130: fresh wetlands. 131: brackish wetlands. 132: salt wetlands.
void setspecial(int face, int x, int y, int amount);
int deltadir(int face, int x, int y) const; // delta branch flow direction (reversed)
int deltadir_no_bounds_check(int face, int x, int y) const { return deltamapdir[face][x][y]; }
void setdeltadir(int face, int x, int y, int amount);
int deltajan(int face, int x, int y) const; // January delta branch flow volume
void setdeltajan(int face, int x, int y, int amount);
int deltajul(int face, int x, int y) const; // July delta branch flow volume
void setdeltajul(int face, int x, int y, int amount);
bool lakestart(int face, int x, int y) const; // Whether a rift lake starts here
void setlakestart(int face, int x, int y, int amount);
bool island(int face, int x, int y) const; // Whether this is a one-tile island
void setisland(int face, int x, int y, bool amount);
bool mountainisland(int face, int x, int y) const; // Whether this is an island that's basically a mountain in the sea (if it is, the elevation of what would be the sea bed here is recorded)
void setmountainisland(int face, int x, int y, bool amount);
bool noshade(int face, int x, int y) const; // Whether no shading should be applied here on the global map.
void setnoshade(int face, int x, int y, bool amount);
int horse(int x, int y) const; // horse latitudes
void sethorse(int x, int y, int amount);
float sunlat(int n) const; // Sun latitudes
void setsunlat(int n, float amount);
float sunlong(int n) const; // Sun longitudes
void setsunlong(int n, float amount);
float sundist(int n) const; // Sun distances
void setsundist(int n, float amount);
int test(int face, int x, int y) const; // Test array.
void settest(int face, int x, int y, int amount);
// Other public functions.
void clear(); // Clears all of the maps.
void smoothnom(int amount); // Smoothes the no-mountain map to a given amount.
void smoothextraelev(int amount); // Smoothes the extra elevation map to a given amount.
void shiftterrain(int offset); // Shifts the physical terrain by a given amount.
void smoothrainmaps(int amount); // Smoothes the rain maps by a given amount.
void setmaxriverflow(); // Calculates the largest river flow on the map.
void saveworld(string filename); // Saves the world.
bool loadworld(string filename); // Loads the world.
private:
// Private variables.
int itssaveversion; // The save version. Only saves of this version can be loaded in.
int itssettingssaveversion; // As above, but for settings files.
int itssize; // Size of planet. 1=tiny; 2=small; 3=Earthlike.
int itsedge; // Length/width of each face of the cube. Default is 512.
int itswidth; // width of global map
int itsheight; // height of global map
int itstype; // Type of world
long itsseed; // seed number of this world
bool itsrotation; // 1 (true) like the Earth, 0 (false) the other way
float itstilt; // Axial tilt (affects seasonal differences). Earthlike = 22.5
float itseccentricity; // How elliptical the orbit is. Earthlike = 0.0167.
short itsperihelion; // Closest point to the sun. Earthlike = 0 (Jan)
float itsgravity; // Strength of gravity on the surface. Earthlike = 1.0
float itslunar; // Strength of lunar attraction. Earthlike = 1.0
float itstempdecrease; // How much temperature decreases with elevation. Earthlike = 6.5/km
int itsnorthpolaradjust; // Amount to adjust north pole temperature. Earthlike = +3
int itssouthpolaradjust; // Amount to adjust south pole temperature. Earthlike = -3
int itsaveragetemp; // Average global temperature. Earthlike = 14
int itsnorthpolartemp; // Average north polar temperature
int itssouthpolartemp; // Average south polar temperature
int itseqtemp; // Average equatorial temperature
int itsseaicetemp; // Sea temperatures of this value or lower will have sea ice
float itswaterpickup; // How much water to pick up over oceans. Default = 1.0
float itsriverfactor; // Divide river flow by this to get it in cubic metres/second
int itsriverlandreduce; // Rivers will carve channels at the base elevation of the tile, minus this
int itsestuarylimit; // Rivers this size or above might have estuaries
int itsglacialtemp; // Areas with this average temperature or lower will have glacial terrain
int itsglaciertemp; // Rivers in areas with this maximum temperature or lower will be glaciers
float itsmountainreduce; // Amount to reduce the heights by, to make the global map match the regional map a little better
int itsclimateno; // Total number of climate types
int itsmaxheight; // Maximum elevation
int itssealevel; // Sea level
int itsmaxriverflow; // Largest river flow
int itslandtotal; // Total cells of land
int itsseatotal; // Total cells of sea
int itscraterno; // Number of craters
short itssnowchange = 1; // Kind of snow border.
float itsnormal = 0.5f; // How much effect the normal map has/
float itsgamma = 0.5f; // Gamma correction.
float itsambient = 0.0f; // Ambient lighting strength.
float itshaze = 0.2f; // Thickness of the atmosphere.
float itsspecular = 0.5f; // Shininess of the planet.
float itscloudcover = 0.5f; // Extent of the cloud cover.
float itsbloomdist = 1.0f; // How extensive the bloom effect on the sun is.
float itssunglare = 0.2f; // How strong the horizontal glare effect is.
float itssunlens = 0.5f; // How strong the lens effect is.
short itssunrayno = 8; // Radial symmetry of the sun's rays.
float itssunraystrength = 0.2f; // Strength of the sun ray effect.
float itsstarbright = 1.0f;
float itsstarcolour = 1.0f;
float itsstarhaze = 1.0f;
float itsstarnebula = 1.0f;
short itsseaiceappearance = 1; // How much sea ice to display.
bool itscolourcliffs = 1; // If this is 1, high grass colours will only be used on steep slopes.
float itslandmarbling;
float itslakemarbling;
float itsseamarbling; // Amount of marbling to do on these areas on the regional map.
int itsminriverflowglobal; // Rivers greater than this will be shown on the global map.
int itsminriverflowregional; // Rivers greater than this will be shown on the regional map.
bool itsmangroves;
int itsseaice1;
int itsseaice2;
int itsseaice3;
int itssea1;
int itssea2;
int itssea3;
int itsocean1;
int itsocean2;
int itsocean3;
int itsdeepocean1;
int itsdeepocean2;
int itsdeepocean3;
int itsbase1;
int itsbase2;
int itsbase3;
int itsbasetemp1;
int itsbasetemp2;
int itsbasetemp3;
int itshighbase1;
int itshighbase2;
int itshighbase3;
int itsdesert1;
int itsdesert2;
int itsdesert3;
int itshighdesert1;
int itshighdesert2;
int itshighdesert3;
int itscolddesert1;
int itscolddesert2;
int itscolddesert3;
int itsgrass1;
int itsgrass2;
int itsgrass3;
int itscold1;
int itscold2;
int itscold3;
int itstundra1;
int itstundra2;
int itstundra3;
int itseqtundra1;
int itseqtundra2;
int itseqtundra3;
int itssaltpan1;
int itssaltpan2;
int itssaltpan3;
int itserg1;
int itserg2;
int itserg3;
int itswetlands1;
int itswetlands2;
int itswetlands3;
int itslake1;
int itslake2;
int itslake3;
int itsriver1;
int itsriver2;
int itsriver3;
int itsglacier1;
int itsglacier2;
int itsglacier3;
int itssand1;
int itssand2;
int itssand3;
int itsmud1;
int itsmud2;
int itsmud3;
int itsshingle1;
int itsshingle2;
int itsshingle3;
int itsmangrove1;
int itsmangrove2;
int itsmangrove3;
int itshighlight1;
int itshighlight2;
int itshighlight3;
int itsatmos1;
int itsatmos2;
int itsatmos3;
int itsdusk1;
int itsdusk2;
int itsdusk3;
int itssun1;
int itssun2;
int itssun3;
int itsgal1haze1;
int itsgal1haze2;
int itsgal1haze3;
int itsgal2haze1;
int itsgal2haze2;
int itsgal2haze3;
int itsgal1nebula1;
int itsgal1nebula2;
int itsgal1nebula3;
int itsgal2nebula1;
int itsgal2nebula2;
int itsgal2nebula3;
int itsbloom1;
int itsbloom2;
int itsbloom3;
// Maps are stored in the following format.
// [faceno][x][y]
// - where faceno is 0-5. Faces are numbered: 0 = front; 1 = right; 2 = back; 3 = left; 4 = top; 5 = bottom (bearing mind 0-3 are largely arbitrary!)
short jantempmap[6][ARRAYWIDTH][ARRAYWIDTH];
short jultempmap[6][ARRAYWIDTH][ARRAYWIDTH];
short climatemap[6][ARRAYWIDTH][ARRAYWIDTH];
short janrainmap[6][ARRAYWIDTH][ARRAYWIDTH];
short julrainmap[6][ARRAYWIDTH][ARRAYWIDTH];
short janmountainrainmap[6][ARRAYWIDTH][ARRAYWIDTH];
short julmountainrainmap[6][ARRAYWIDTH][ARRAYWIDTH];
short janmountainraindirmap[6][ARRAYWIDTH][ARRAYWIDTH];
short julmountainraindirmap[6][ARRAYWIDTH][ARRAYWIDTH];
short seatempreducemap[6][ARRAYWIDTH][ARRAYWIDTH]; // Amount to reduce sea temperatures when working out sea ice
short rivermapdir[6][ARRAYWIDTH][ARRAYWIDTH];
int rivermapjan[6][ARRAYWIDTH][ARRAYWIDTH];
int rivermapjul[6][ARRAYWIDTH][ARRAYWIDTH];
int windmap[6][ARRAYWIDTH][ARRAYWIDTH];
int lakemap[6][ARRAYWIDTH][ARRAYWIDTH];
float roughnessmap[6][ARRAYWIDTH][ARRAYWIDTH];
short mountainridges[6][ARRAYWIDTH][ARRAYWIDTH];
short mountainheights[6][ARRAYWIDTH][ARRAYWIDTH];
short craterrims[6][ARRAYWIDTH][ARRAYWIDTH];
short cratercentres[6][ARRAYWIDTH][ARRAYWIDTH];
short mapnom[6][ARRAYWIDTH][ARRAYWIDTH];
short tidalmap[6][ARRAYWIDTH][ARRAYWIDTH];
int riftlakemapsurface[6][ARRAYWIDTH][ARRAYWIDTH];
int riftlakemapbed[6][ARRAYWIDTH][ARRAYWIDTH];
bool lakestartmap[6][ARRAYWIDTH][ARRAYWIDTH];
short specials[6][ARRAYWIDTH][ARRAYWIDTH];
short extraelevmap[6][ARRAYWIDTH][ARRAYWIDTH];
short deltamapdir[6][ARRAYWIDTH][ARRAYWIDTH];
int deltamapjan[6][ARRAYWIDTH][ARRAYWIDTH];
int deltamapjul[6][ARRAYWIDTH][ARRAYWIDTH];
bool islandmap[6][ARRAYWIDTH][ARRAYWIDTH];
bool mountainislandmap[6][ARRAYWIDTH][ARRAYWIDTH];
short noisemap[6][ARRAYWIDTH][ARRAYWIDTH];
short oceanridgemap[6][ARRAYWIDTH][ARRAYWIDTH];
short oceanridgeheightmap[6][ARRAYWIDTH][ARRAYWIDTH];
short oceanriftmap[6][ARRAYWIDTH][ARRAYWIDTH];
short oceanridgeoffsetmap[6][ARRAYWIDTH][ARRAYWIDTH];
short oceanridgeanglemap[6][ARRAYWIDTH][ARRAYWIDTH];
short volcanomap[6][ARRAYWIDTH][ARRAYWIDTH];
bool stratomap[6][ARRAYWIDTH][ARRAYWIDTH];