view utils/frmconv/frm.h @ 311:a0e00b4b0fac

fixed the test due to removing linearpather
author wenlin_fife@33b003aa-7bff-0310-803a-e67f0ece8222
date Fri, 14 Aug 2009 00:02:12 +0000
parents 90005975cdbb
children
line wrap: on
line source

/***************************************************************************
 *   Copyright (C) 2005-2008 by the FIFE team                              *
 *   http://www.fifengine.de                                               *
 *   This file is part of FIFE.                                            *
 *                                                                         *
 *   FIFE is free software; you can redistribute it and/or                 *
 *   modify it under the terms of the GNU Lesser General Public            *
 *   License as published by the Free Software Foundation; either          *
 *   version 2.1 of the License, or (at your option) any later version.    *
 *                                                                         *
 *   This library 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     *
 *   Lesser General Public License for more details.                       *
 *                                                                         *
 *   You should have received a copy of the GNU Lesser General Public      *
 *   License along with this library; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
 ***************************************************************************/

#ifndef FRM_H_
#define FRM_H_

// Some constant offset in the frm file for easier readability of the later code
// The documentation use both "direction" and "orientation". I stick to "orientation"
#define FRM_OFFSET_VERSION_NR           0x00
#define FRM_OFFSET_FRAMESPERORIENT      0x08
#define FRM_OFFSET_SHIFTX_ORIENT0       0x0A
#define FRM_OFFSET_SHIFTX_ORIENT1       0x0C
#define FRM_OFFSET_SHIFTX_ORIENT2       0x0E
#define FRM_OFFSET_SHIFTX_ORIENT3       0x10
#define FRM_OFFSET_SHIFTX_ORIENT4       0x12
#define FRM_OFFSET_SHIFTX_ORIENT5       0x14
#define FRM_OFFSET_SHIFTY_ORIENT0       0x16
#define FRM_OFFSET_SHIFTY_ORIENT1       0x18
#define FRM_OFFSET_SHIFTY_ORIENT2       0x1A
#define FRM_OFFSET_SHIFTY_ORIENT3       0x1C
#define FRM_OFFSET_SHIFTY_ORIENT4       0x1E
#define FRM_OFFSET_SHIFTY_ORIENT5       0x20
#define FRM_OFFSET_FIRSTFRAME_ORIENT0   0x22
#define FRM_OFFSET_FIRSTFRAME_ORIENT1   0x26
#define FRM_OFFSET_FIRSTFRAME_ORIENT2   0x2A
#define FRM_OFFSET_FIRSTFRAME_ORIENT3   0x2E
#define FRM_OFFSET_FIRSTFRAME_ORIENT4   0x32
#define FRM_OFFSET_FIRSTFRAME_ORIENT5   0x36
#define FRM_OFFSET_FRAMEAREASIZE        0x3A
#define FRM_OFFSET_FRAMEDATA            0x3E

// These are relative offset
// Example: The absolute offset of the height of frame 0 is therefore:
//          0x40 == FRM_OFFSET_FRAMEDATA + FRMFRAME_OFFSET_HEIGHT
#define FRMFRAME_OFFSET_WIDTH           0x00
#define FRMFRAME_OFFSET_HEIGHT          0x02
#define FRMFRAME_OFFSET_SIZE            0x04
#define FRMFRAME_OFFSET_XOFF            0x08
#define FRMFRAME_OFFSET_YOFF            0x0A
#define FRMFRAME_OFFSET_DATA            0x0C

typedef struct {
   uint8_t red;
   uint8_t green;
   uint8_t blue;
} frm_color;


typedef struct _frm_frame {
	uint16_t width;       // self-explanatory
	uint16_t height;      // 
	uint32_t framesize;   // Should be equal to width*height
	uint8_t  orient;      // The orientation of the frame.
	unsigned char **rowptr; // the actual image data. The byte value is in index in a palette (pal.h)
	
	struct _frm_frame *next_frame; // Pointer to the next frame. NULL ends the list :)
} frm_frame;

typedef struct {
	uint16_t frameperorient; // FramesPerOrientation at offset 0x8 (size: two bytes) in the frm file
	uint32_t frameareasize; // Frameareasize at offset 0x3A (size: four bytes) in the frm file 
	                     // I haven't checked, if this value is always correct. If it is, we should
	                     // use the information for the memory allocation.

	uint32_t nrofframes;  // The number of frames in this animation 
	
	frm_color *palette; // A pointer to the palette. Normally the one from pal.h
	
	frm_frame *frames;  // A single linked list of frm_frame. Each frm_frame describes one frame
	                    // There should be nrofframes many.
} frm_anim;



frm_anim *loadFRMAnim(FILE *frmfile);
void freefrmanim(frm_anim *anim);

#endif /*FRM_H_*/