-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbox.c
More file actions
83 lines (67 loc) · 2.39 KB
/
box.c
File metadata and controls
83 lines (67 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*****************************************************/
/* Ultimate Blocks */
/* Copyright (c) An Ly 2000, Owen Rudge 2001, 2008 */
/*****************************************************/
#include <allegro.h>
#include "blocks3.h"
void Box_Push(int x, int y, int z, int dx, int dy)
{
int i;
i = 0;
while ((i < box_count) && ((box[i].x / _block_width != x) || (box[i].y / _block_height != y) || (box[i].z != z)))
i++;
if (i == box_count)
report_error("DEBUG ERROR: i == box_count");
if ((!box[i].dx) && (!box[i].dy) && (!box[i].dz))
{
box[i].dx = dx;
box[i].dy = dy;
}
map[box[i].x / _block_width + box[i].dx][box[i].y / _block_height + box[i].dy][box[i].z / _block_depth] = (RESERVE | box[i].type);
}
void Box_Move(void)
{
int i;
for (i = 0; i < box_count; i++)
{
if ((box[i].dx) || (box[i].dy) || (box[i].dz))
{
box[i].x +=box[i].dx;
box[i].y +=box[i].dy;
if ((box[i].x % _block_width == 0) && (box[i].y % _block_height == 0) && (!box[i].dz))
{
box[i].dx = 0;
box[i].dy = 0;
map[box[i].x / _block_width][box[i].y / _block_height][box[i].z / _block_depth] = box[i].type;
}
if (box[i].dz)
{
box[i].z +=box[i].dz;
if (!box[i].z)
{
box[i].dz = 0;
map[box[i].x/_block_width][box[i].y/_block_height][0] = box[i].type;
map[box[i].x/_block_width][box[i].y/_block_height][1] = 0;
}
}
DirtyList(box[i].x, box[i].y, box[i].z, _block_width, _block_height + _block_depth, box[i].pic);
}
}
}
void Box_Fall(void)
{
int i;
for (i = 0; i < box_count; i++)
{
if ((Check_Can_Fall(box[i].x, box[i].y, box[i].z)) &&
((ply[0].x / _block_width != box[i].x / _block_width) || (ply[0].y / _block_height != box[i].y / _block_height)) &&
(((ply[0].x + (_block_width-1)) / _block_width != box[i].x / _block_width) || (ply[0].y/_block_height != box[i].y/_block_height)) &&
((ply[0].x / _block_width != box[i].x / _block_width) || ((ply[0].y + (_block_height-1))/_block_height != box[i].y/_block_height)) &&
(((ply[0].x + (_block_width-1))/_block_width != box[i].x/_block_width) || ((ply[0].y + (_block_height-1))/_block_height != box[i].y/_block_height)))
{
box[i].dz = -1;
map[box[i].x/_block_width][box[i].y/_block_height][1] = RESERVE;
map[box[i].x/_block_width][box[i].y/_block_height][0] = RESERVE;
}
}
}