1 #include "aqueduct.h"
2 
3 #include "map/grid.h"
4 
5 /**
6  * The aqueduct grid is used in two ways:
7  * 1) to mark water/no water (0/1, see map/water_supply.c)
8  * 2) to store image IDs for the aqueduct (0-15)
9  * This leads to some strange results
10  */
11 static grid_u8 aqueduct;
12 static grid_u8 aqueduct_backup;
13 
map_aqueduct_at(int grid_offset)14 int map_aqueduct_at(int grid_offset)
15 {
16     return aqueduct.items[grid_offset];
17 }
18 
map_aqueduct_set(int grid_offset,int value)19 void map_aqueduct_set(int grid_offset, int value)
20 {
21     aqueduct.items[grid_offset] = value;
22 }
23 
map_aqueduct_remove(int grid_offset)24 void map_aqueduct_remove(int grid_offset)
25 {
26     aqueduct.items[grid_offset] = 0;
27     if (aqueduct.items[grid_offset + map_grid_delta(0, -1)] == 5) {
28         aqueduct.items[grid_offset + map_grid_delta(0, -1)] = 1;
29     }
30     if (aqueduct.items[grid_offset + map_grid_delta(1, 0)] == 6) {
31         aqueduct.items[grid_offset + map_grid_delta(1, 0)] = 2;
32     }
33     if (aqueduct.items[grid_offset + map_grid_delta(0, 1)] == 5) {
34         aqueduct.items[grid_offset + map_grid_delta(0, 1)] = 3;
35     }
36     if (aqueduct.items[grid_offset + map_grid_delta(-1, 0)] == 6) {
37         aqueduct.items[grid_offset + map_grid_delta(-1, 0)] = 4;
38     }
39 }
40 
map_aqueduct_clear(void)41 void map_aqueduct_clear(void)
42 {
43     map_grid_clear_u8(aqueduct.items);
44 }
45 
map_aqueduct_backup(void)46 void map_aqueduct_backup(void)
47 {
48     map_grid_copy_u8(aqueduct.items, aqueduct_backup.items);
49 }
50 
map_aqueduct_restore(void)51 void map_aqueduct_restore(void)
52 {
53     map_grid_copy_u8(aqueduct_backup.items, aqueduct.items);
54 }
55 
map_aqueduct_save_state(buffer * buf,buffer * backup)56 void map_aqueduct_save_state(buffer *buf, buffer *backup)
57 {
58     map_grid_save_state_u8(aqueduct.items, buf);
59     map_grid_save_state_u8(aqueduct_backup.items, backup);
60 }
61 
map_aqueduct_load_state(buffer * buf,buffer * backup)62 void map_aqueduct_load_state(buffer *buf, buffer *backup)
63 {
64     map_grid_load_state_u8(aqueduct.items, buf);
65     map_grid_load_state_u8(aqueduct_backup.items, backup);
66 }
67