DEADSOFTWARE

Small refactoring of physics module
[cavecraft.git] / src / chest.mpsrc
1 unit chest;
3 interface
4 const
5 MAX_CHEST=31;
7 function create(x, y:integer):integer;
8 procedure destroy(drp:boolean; x, y:integer);
10 function getItem(n, i:integer):integer;
11 function getSum(n, i:integer):integer;
12 procedure setItem(val, n, i:integer);
13 procedure setSum(val, n, i:integer);
15 procedure resetData;
16 procedure saveData;
17 procedure loadData;
19 implementation
20 uses maps, drop, vars, jsr75i, func;
21 const
22 MAX_CELL=26;
23 CHEST_ERROR=-1;
24 var
25 chest_b: array [0..MAX_CHEST] of boolean;
26 chest_item, chest_sum: array [0..MAX_CELL, 0..MAX_CHEST] of integer;
28 function getItem(n, i:integer):integer;
29 begin
30 getItem:=chest_item[n, i];
31 end;
33 function getSum(n, i:integer):integer;
34 begin
35 getSum:=chest_sum[n, i];
36 end;
38 procedure setItem(val, n, i:integer);
39 begin
40 chest_item[n, i]:=val;
41 end;
43 procedure setSum(val, n, i:integer);
44 begin
45 chest_sum[n, i]:=val;
46 end;
48 function create(x, y:integer):integer;
49 var
50 i, j:integer;
51 begin
52 for i:=0 to MAX_CHEST do
53 if chest_b[i]=false then
54 begin
55 chest_b[i]:=true;
56 for j:=0 to MAX_CELL do
57 begin
58 setItem(0, j, i);
59 setSum(0, j, i);
60 end;
61 setMapInfo(i, x, y);
62 create:=i;
63 exit;
64 end;
65 create:=CHEST_ERROR;
66 end;
68 procedure destroy(drp:boolean; x, y:integer);
69 var
70 i, j:integer;
71 begin
72 i:=getMapInfo(x, y);
73 chest_b[i]:=false;
74 for j:=0 to MAX_CELL do
75 begin
76 if drp then
77 drop.create(getItem(j, i), getSum(j, i), x*16+4, y*16+4);
78 setItem(0, j, i);
79 setSum(0, j, i);
80 end;
81 end;
83 procedure resetData;
84 var
85 i, j:integer;
86 begin
87 for i:=0 to MAX_CHEST do
88 begin
89 chest_b[i]:=false;
90 for j:=0 to MAX_CELL do
91 begin
92 setItem(0, j, i);
93 setSum(0, j, i);
94 end;
95 end;
96 end;
98 procedure saveData;
99 var
100 i, j:integer;
101 begin
102 for i:=0 to MAX_CHEST do
103 begin
104 writebool(chest_b[i]);
105 for j:=0 to MAX_CELL do
106 begin
107 write_byte(getItem(j, i));
108 writeint(getSum(j, i));
109 end;
110 end;
111 end;
113 procedure loadData;
114 var
115 i, j:integer;
116 begin
117 for i:=0 to MAX_CHEST do
118 begin
119 chest_b[i]:=readbool;
120 for j:=0 to MAX_CELL do
121 begin
122 setItem(read_byte, j, i);
123 setSum(ReadInt, j, i);
124 end;
125 end;
126 end;
128 end.