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 */
|