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);
30 uses phy
, jsr75i
, vars
, items_store
, func
, ItemsLogic
;
37 drop_x
, drop_y
, drop_vely
: array [0..MAX_DROP
] of integer;
38 drop_item
, drop_sum
: array [0..MAX_DROP
] of integer;
40 old_drop
, ref_drp_count
:integer;
47 function getX(i
:integer):integer;
52 function getY(i
:integer):integer;
57 function getW
:integer;
62 function getH
:integer;
67 function getItem(i
:integer):integer;
69 getItem
:=drop_item
[i
];
72 function getSum(i
:integer):integer;
77 procedure setItem(val
, i
:integer);
82 procedure setSum(val
, i
:integer);
87 function isNull(i
:integer):boolean;
89 if (drop_item
[i
]<1) or (drop_sum
[i
]<1) then
93 procedure fixNull(i
:integer);
102 procedure create(item
, sum
, x
, y
:integer);
106 for i
:=0 to MAX_DROP
do
117 drop_item
[old_drop
]:=item
;
118 drop_sum
[old_drop
]:=sum
;
121 drop_vely
[old_drop
]:=0;
123 old_drop
:=old_drop
+1;
124 if old_drop
>MAX_DROP
then
133 for i
:=0 to MAX_DROP
do
134 if isNull(i
)=false then
136 Phy
.SetObject(drop_x
[i
], drop_y
[i
], DROP_W
, DROP_H
, 0, drop_vely
[i
], false);
140 drop_vely
[i
]:=Phy
.GetVY
;
144 procedure draw(camx
, camy
: integer);
148 if not drw_drp
then exit
;
149 for i
:=0 to 255 do if IsNull(i
) = false then begin
150 ItemsLogic
.DrawSmall(drop_item
[i
], drop_x
[i
] - camx
, drop_y
[i
] - camy
);
160 for i
:=ref_drp_count
+1 to MAX_DROP
do
161 if (isNull(ref_drp_count
) and isNull(i
))=false then
162 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
164 drop_sum
[ref_drp_count
]:=drop_sum
[ref_drp_count
]+drop_sum
[i
];
169 ref_drp_count
:=ref_drp_count
+1;
170 if ref_drp_count
>MAX_DROP
then ref_drp_count
:=0;
178 for i
:=0 to MAX_DROP
do
192 for i
:=0 to MAX_DROP
do
194 write_byte(drop_item
[i
]);
195 writeint(drop_sum
[i
]);
198 write_byte(drop_vely
[i
]);
206 for i
:=0 to MAX_DROP
do
208 drop_item
[i
]:=read_byte
;
209 drop_sum
[i
]:=ReadInt
;
212 drop_vely
[i
]:=read_byte
;