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