aboutsummaryrefslogtreecommitdiff
path: root/saga/animation.h
blob: b448f75b107dd9d90aa1eacb23a9c0121b305b6e (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
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2004 The ScummVM project
 *
 * The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
 *
 * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header$
 *
 */
/*
 Description:   
 
    Background animation management module private header

 Notes: 
*/

#ifndef SAGA_ANIMATION_H_
#define SAGA_ANIMATION_H_

namespace Saga {

#define R_MAX_ANIMATIONS 7
#define R_DEFAULT_FRAME_TIME 140

#define SAGA_FRAME_HEADER_MAGIC 15
#define SAGA_FRAME_HEADER_LEN 12

/* All animation resources begin with an ANIMATION_HEADER
 * at 0x00, followed by a RLE code stream
\*--------------------------------------------------------------------------*/

typedef struct R_ANIMATION_HEADER_tag {

	uint magic;

	uint screen_w;
	uint screen_h;

	uint unknown06;
	uint unknown07;

	uint nframes;
	uint flags;

	uint unknown10;
	uint unknown11;

} R_ANIMATION_HEADER;

/* A byte from the code stream of FRAME_HEADER_MAGIC signifies that a
 * FRAME_HEADER structure follows
\*--------------------------------------------------------------------------*/

typedef struct R_FRAME_HEADER_tag {

	int x_start;
	int y_start;

	int x_pos;
	int y_pos;

	int width;
	int height;

} R_FRAME_HEADER;

/* Animation info array member */
typedef struct R_ANIMATION_tag {

	const uchar *resdata;
	size_t resdata_len;

	uint n_frames;
	size_t *frame_offsets;

	uint current_frame;
	uint end_frame;
	uint stop_frame;

	const uchar *cur_frame_p;
	size_t cur_frame_len;

	int frame_time;

	uint play_flag;
	int link_flag;
	uint link_id;

	uint flags;

} R_ANIMATION;

typedef struct R_ANIMINFO_tag {

	int initialized;

	uint anim_count;
	uint anim_limit;

	R_ANIMATION *anim_tbl[R_MAX_ANIMATIONS];

} R_ANIMINFO;

int ANIM_GetNumFrames(const uchar * anim_resource, uint * n_frames);

int
ITE_DecodeFrame(const uchar * anim_resource,
    size_t frame_offset, uchar * buf, size_t buf_len);

int
IHNM_DecodeFrame(uchar * decode_buf,
    size_t decode_buf_len,
    const uchar * thisf_p,
    size_t thisf_len, const uchar ** nextf_p, size_t * nextf_len);

int
ANIM_GetFrameOffset(const uchar * anim_resource,
    uint find_frame, size_t * frame_offset);

static void CF_anim_info(int argc, char *argv[]);

} // End of namespace Saga

#endif				/* R_ANIMATION_H_ */
/* end "r_animation.h" */