DEADSOFTWARE

Remove ascii crap
[cavecraft.git] / src / inv.mpsrc
1 unit inv;
3 interface
4 const
5 INV_SIZE=35;
8 function getItem(i:integer):integer;
9 function getSum(i:integer):integer;
10 procedure setItem(val, i:integer);
11 procedure setSum(val, i:integer);
12 function isNull(i:integer):boolean;
13 procedure fixNull(i:integer);
15 function giveItem(ityp, isum:integer):integer;
17 procedure resetData;
18 procedure saveData;
19 procedure loadData;
21 implementation
22 uses items_store, vars, jsr75i, func, Items;
23 var
24 inv_item: array [0..INV_SIZE] of integer;
25 inv_sum: array [0..INV_SIZE] of integer;
27 function getItem(i:integer):integer;
28 begin
29 getItem:=inv_item[i];
30 end;
32 function getSum(i:integer):integer;
33 begin
34 getSum:=inv_sum[i];
35 end;
37 procedure setItem(val, i:integer);
38 begin
39 inv_item[i]:=val;
40 end;
42 procedure setSum(val, i:integer);
43 begin
44 inv_sum[i]:=val;
45 end;
47 function isNull(i:integer):boolean;
48 begin
49 if (getItem(i)<1) or (getSum(i)<1) then
50 isNull:=true;
51 end;
53 procedure fixNull(i:integer);
54 begin
55 if isNull(i) then
56 begin
57 setItem(0, i);
58 setSum(0, i);
59 end;
60 end;
62 //Добавить предмет в инвентарь, возващает количество не полученых предметов.
63 function giveItem(ityp, isum:integer):integer;
64 var
65 i, item, sum, max:integer;
66 begin
67 //Ищем такой же предмет только если он имеет возможность делиться
68 if Items.IsDividable(ityp) then
69 for i:=0 to INV_SIZE do
70 begin
71 item :=getItem(i);
72 sum :=getSum(i);
73 max := Items.GetMaximum(ityp);
75 if (item=ityp) and (isNull(i)=false) then
76 if isum < max then
77 begin
78 sum:=sum+isum;
79 isum:=0;
81 if sum > max then
82 begin
83 isum := sum - max;
84 sum := sum - isum;
85 end;
87 setSum(sum, i);
89 if isum<1 then
90 exit;
91 end;
92 end;
94 for i:=0 to INV_SIZE do
95 if isNull(i) then
96 begin
97 sum:=isum;
98 isum:=0;
99 max := Items.GetMaximum(ityp);
101 if sum > max then
102 begin
103 isum := sum - max;
104 sum := sum - isum;
105 end;
107 setItem(ityp, i);
108 setSum(sum, i);
110 if isum<1 then
111 exit;
112 end;
114 giveItem:=isum;
115 end;
117 procedure resetData;
118 var
119 i:integer;
120 begin
121 for i:=0 to INV_SIZE do
122 begin
123 setItem(0, i);
124 setSum(0, i);
125 end;
126 end;
128 procedure saveData;
129 var
130 i:integer;
131 begin
132 for i:=0 to INV_SIZE do
133 begin
134 write_byte(getItem(i));
135 WriteInt(getSum(i));
136 end;
137 end;
139 procedure loadData;
140 var
141 i:integer;
142 begin
143 for i:=0 to INV_SIZE do
144 begin
145 setItem(read_byte, i);
146 setSum(ReadInt, i);
147 end;
148 end;
150 end.