aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/view.h
blob: 893e8bc970df1ee41e7ddad0790ec2674b7b4a7b (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2006 The ScummVM project
 *
 * Copyright (C) 1999-2001 Sarien Team
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * $URL$
 * $Id$
 *
 */

#ifndef AGI_VIEW_H
#define AGI_VIEW_H

namespace Agi {

struct view_cel {
	uint8 height;
	uint8 width;
	uint8 transparency;
	uint8 mirror_loop;
	uint8 mirror;
	uint8 *data;
};

struct view_loop {
	int num_cels;
	struct view_cel *cel;
};

/**
 * AGI view resource structure.
 */
struct agi_view {
	int num_loops;
	struct view_loop *loop;
	char *descr;
	uint8 *rdata;
};

/**
 * AGI view table entry
 */
struct vt_entry {
	uint8 step_time;
	uint8 step_time_count;
	uint8 entry;
	int16 x_pos;
	int16 y_pos;
	uint8 current_view;
	struct agi_view *view_data;
	uint8 current_loop;
	uint8 num_loops;
	struct view_loop *loop_data;
	uint8 current_cel;
	uint8 num_cels;
	struct view_cel *cel_data;
	struct view_cel *cel_data_2;
	int16 x_pos2;
	int16 y_pos2;
	void *s;
	int16 x_size;
	int16 y_size;
	uint8 step_size;
	uint8 cycle_time;
	uint8 cycle_time_count;
	uint8 direction;

#define MOTION_NORMAL		0
#define MOTION_WANDER		1
#define	MOTION_FOLLOW_EGO	2
#define	MOTION_MOVE_OBJ		3
	uint8 motion;

#define	CYCLE_NORMAL		0
#define CYCLE_END_OF_LOOP	1
#define	CYCLE_REV_LOOP 		2
#define	CYCLE_REVERSE		3
	uint8 cycle;

	uint8 priority;

#define DRAWN		0x0001
#define IGNORE_BLOCKS	0x0002
#define FIXED_PRIORITY	0x0004
#define IGNORE_HORIZON	0x0008
#define UPDATE		0x0010
#define CYCLING		0x0020
#define ANIMATED	0x0040
#define MOTION		0x0080
#define ON_WATER	0x0100
#define IGNORE_OBJECTS	0x0200
#define UPDATE_POS	0x0400
#define ON_LAND		0x0800
#define DONTUPDATE	0x1000
#define FIX_LOOP	0x2000
#define DIDNT_MOVE	0x4000
#define	ADJ_EGO_XY	0x8000
	uint16 flags;

	uint8 parm1;
	uint8 parm2;
	uint8 parm3;
	uint8 parm4;
};				/* struct vt_entry */

/* Motion */
void check_all_motions(void);
void move_obj(vt_entry *);
void in_destination(vt_entry *);
void fix_position(int);
void update_position(void);

/* View table management */
void set_cel(vt_entry *, int);
void set_loop(vt_entry *, int);
void set_view(vt_entry *, int);
void start_update(vt_entry *);
void stop_update(vt_entry *);
void update_viewtable(void);

void unload_view(int);
int decode_view(int);
void add_to_pic(int, int, int, int, int, int, int);
void draw_obj(int);

bool is_ego_view(const vt_entry *v);

}                             // End of namespace Agi

#endif				/* AGI_VIEW_H */