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
|
/*
* brlan.h
* BannerPlayer
*
* Created by Alex Marshall on 09/03/16.
* Copyright 2009 __MyCompanyName__. All rights reserved.
*
*/
#ifndef _BRLAN_H_
#define _BRLAN_H_
#include "types.h"
typedef enum
{
RLPA_ENTRY = 0,
RLTS_ENTRY = 1,
RLVI_ENTRY = 2,
RLVC_ENTRY = 3,
RLMC_ENTRY = 4,
RLTP_ENTRY = 5
} brlan_entry_type;
typedef struct
{
fourcc magic; // "pai1" in ASCII.
u32 size; // Size of section, which is rest of the file. (header.file_size - header.offset_pai1)
u16 framesize; // Framesize
u8 flags; // Flags
u8 unk1; // Unknown
u16 num_timgs; // Number of timgs?
u16 num_entries; // Number of tags in the brlan.
u32 unk2; // Only if bit 25 of flags is set.
u32 entry_offset; // Offset to entries. (Relative to start of pai1 header.)
} brlan_pai1_header_type2;
typedef struct
{
fourcc magic; // "RLAN" in ASCII.
u32 unk1; // Always 0xFEFF 0x0008. Possibly a versioning string.
u32 file_size; // Size of whole file, including the header.
u16 pai1_offset; // The offset to the pai1 header from the start of file.
u16 pai1_count; // How many pai1 sections there are (duh, only 1... wtf?)
} brlan_header;
typedef struct
{
fourcc magic; // "pai1" in ASCII.
u32 size; // Size of section, which is rest of the file. (header.file_size - header.offset_pai1)
u16 framesize; // Framesize
u8 flags; // Flags
u8 unk1; // Unknown
u16 num_timgs; // Number of timgs?
u16 num_entries; // Number of tags in the brlan.
} brlan_pai1_universal;
typedef struct
{
fourcc magic; // "pai1" in ASCII.
u32 size; // Size of section, which is rest of the file. (header.file_size - header.offset_pai1)
u16 framesize; // Framesize
u8 flags; // Flags
u8 unk1; // Unknown
u16 num_timgs; // Number of timgs?
u16 num_entries; // Number of tags in the brlan.
u32 entry_offset; // Offset to entries. (Relative to start of pai1 header.)
} brlan_pai1_header_type1;
typedef struct
{
char name[20]; // Name of the BRLAN entry. (Must be defined in the BRLYT)
u32 flags; // Flags? (If bit 25 is set, we have another u32 after the entry. It's use is unknown.)
u32 anim_header_len; // Length of the animation header which is directly after this entry.
} brlan_entry;
typedef struct
{
fourcc magic;
u8 entry_count; // How many entries in this chunk.
u8 pad1; // All cases I've seen is zero.
u8 pad2; // All cases I've seen is zero.
u8 pad3; // All cases I've seen is zero.
} tag_header;
typedef struct
{
u32 offset; // Offset to the data pointed to by this entry.
// Relative to the start of the RLPA header.
} tag_entry;
typedef struct
{
u16 type; // Type (look at animtypes)
u16 unk1; // ??? Every case has been 0x0200
u16 coord_count; // How many coordinates.
u16 pad1; // All cases I've seen is zero.
u32 unk2; // ??? In every case I've seen, it is 0x0000000C.
} tag_entryinfo;
typedef struct
{ // Bits not listed here are currently unknown.
u32 part1; // If Bit 9 is set in flags, this is an f32, with a coordinate. (Bit 17 seems to act the same)
u32 part2; // If Bit 16 is set in flags, this is an f32, with another coordinate. (Bit 17 seems to act the same)
u32 part3; // With Bit 16 set in flags, this seems to be yet another coordinate. (Bit 17 seems to act the same)
} tag_data;
typedef struct BRLAN_trip
{
f32 frame; // Frame number.
f32 value; // Value at the frame.
f32 blend; // Interpolation value.
} BRLAN_triplets;
typedef struct BRLAN_entr
{
u16 animtype; // What subtype of animation.
u16 tripletcount; // Number of triplets.
BRLAN_triplets triplets[20]; // Shouldn't ever be more than 20.
} BRLAN_entries;
typedef struct BRLAN_anims
{
char type[4]; // The type of animation (FourCC from BRLAN file)
char name[20]; // Name.
u32 offset; // Offset into the BRLAN file to find this animation.
u16 entrycount; // How many entries.
BRLAN_entries entries[20]; // The entries. Shouldn't ever be more than 20.
} BRLAN_animation;
void BRLAN_Initialize(char rootpath[]);
u16 BRLAN_ReadAnimations(BRLAN_animation **anims);
void BRLAN_Finish();
#endif //_BRLAN_H_
|