5 drp_phy
, drw_drp
, ref_drp
:boolean;
8 function getX(i
:integer):integer;
9 function getY(i
:integer):integer;
10 function getW
:integer;
11 function getH
:integer;
12 function getItem(i
:integer):integer;
13 function getSum(i
:integer):integer;
14 procedure setItem(val
, i
:integer);
15 procedure setSum(val
, i
:integer);
16 function isNull(i
:integer):boolean;
17 procedure fixNull(i
:integer);
19 procedure draw(camx
, camy
:integer);
23 procedure create(item
, sum
, x
, y
:integer);
29 uses phy
, jsr75i
, vars
, items_store
, items
, func
;
35 drop_x
, drop_y
, drop_vely
: array [0..MAX_DROP
] of integer;
36 drop_item
, drop_sum
: array [0..MAX_DROP
] of integer;
38 old_drop
, ref_drp_count
:integer;
45 function getX(i
:integer):integer;
50 function getY(i
:integer):integer;
55 function getW
:integer;
60 function getH
:integer;
65 function getItem(i
:integer):integer;
67 getItem
:=drop_item
[i
];
70 function getSum(i
:integer):integer;
75 procedure setItem(val
, i
:integer);
80 procedure setSum(val
, i
:integer);
85 function isNull(i
:integer):boolean;
87 if (drop_item
[i
]<1) or (drop_sum
[i
]<1) then
91 procedure fixNull(i
:integer);
100 procedure create(item
, sum
, x
, y
:integer);
104 for i
:=0 to MAX_DROP
do
115 drop_item
[old_drop
]:=item
;
116 drop_sum
[old_drop
]:=sum
;
119 drop_vely
[old_drop
]:=0;
121 old_drop
:=old_drop
+1;
122 if old_drop
>MAX_DROP
then
131 for i
:=0 to MAX_DROP
do
132 if isNull(i
)=false then
134 phy
.loadObject(drop_x
[i
], drop_y
[i
], DROP_W
, DROP_H
, 0, drop_vely
[i
], false);
138 drop_vely
[i
]:=phy
.getVelY
;
142 procedure draw(camx
, camy
:integer);
148 if isNull(i
)=false then
149 drawSmallItem(drop_item
[i
], drop_x
[i
]-camx
, drop_y
[i
]-camy
);
158 for i
:=ref_drp_count
+1 to MAX_DROP
do
159 if (isNull(ref_drp_count
) and isNull(i
))=false then
160 if (drop_item
[ref_drp_count
]=drop_item
[i
]) and (drop_x
[ref_drp_count
]=drop_x
[i
]) and (drop_y
[ref_drp_count
]=drop_y
[i
]) then
162 drop_sum
[ref_drp_count
]:=drop_sum
[ref_drp_count
]+drop_sum
[i
];
167 ref_drp_count
:=ref_drp_count
+1;
168 if ref_drp_count
>MAX_DROP
then ref_drp_count
:=0;
176 for i
:=0 to MAX_DROP
do
190 for i
:=0 to MAX_DROP
do
192 write_byte(drop_item
[i
]);
193 writeint(drop_sum
[i
]);
196 write_byte(drop_vely
[i
]);
204 for i
:=0 to MAX_DROP
do
206 drop_item
[i
]:=read_byte
;
207 drop_sum
[i
]:=ReadInt
;
210 drop_vely
[i
]:=read_byte
;