struct rgbquadb {
   char red;
   char green;
   char blue;
   char reserved;
};

struct ppal {
   char id[]='PPAL';		
   int size;					// standard: 0x0418
   char head_id[]='head';	
   int bytes_per_entry;				// standard: 4
   int unknown;					// standard: 1
   char data_id[]='data';	
   int pal_size;				// standard: 0x0400
   rgbquadb data[(pal_size / bytes_per_entry)];	// standard: [0x100]
};

struct op2image {
   int size_scanline;
   char* img_data;
   int size_y;
   int size_x;
   short unknown;
   short palette;
};

struct type_ext_unknown1 {
   char ext_info_1;
   char ext_info_2;
};

struct type_ext_unknown2 {
   char ext_info_3;
   char ext_info_4;
};

struct op2picture {
   short img_number;
   char reserved;				// standard: 0xFF
   char pic_order;
   short pos_x;
   short pos_y;
};

struct op2frame {
   char pic_count;
   char unknown;
   type_ext_unknown1 ext_unknown_1_2[(pic_count >> 7)];
   type_ext_unknown2 ext_unknown_3_4[(unknown >> 7)];
   op2picture picture[(pic_count & 0x7F)];
};

struct group_ext {
   int unknown1;
   int unknown2;
   int unknown3;
   int unknown4;
};

struct imagegroup {
   int unknown1;
   int sel_left;
   int sel_top;
   int sel_right;
   int sel_bottom;
   int center_x;
   int center_y;
   int unknown8;
   int frame_count;
   op2frame frame[frame_count];
   int group_ext_count;
   group_ext extended[group_ext_count];
};

struct op2art_prt {
   char id[]='CPAL';
   int pal_count;
   ppal pal_data[pal_count];
   int image_count;				// 0E150000 @ 00002504
   op2image image_header[image_count];
   int all_group_count;		// 70-Table	// 1F080000 @ 0001CA20
   int all_frame_count;		// E-Table	// 795E0000 @ 0001CA24
   int all_pic_count;		// 6-Table	// 9A740200 @ 0001CA28
   int all_ext_info_count;	// 4-Table	// 7C170000 @ 0001CA2C
   imagegroup group[all_group_count];
};


