shithub: rott

ref: d7f038fe0566c8239ec0b2ca1e56686476e82e09
dir: /src/lumpy.h/

View raw version
/*
Copyright (C) 1994-1995  Apogee Software, Ltd.
Copyright (C) 2002-2015  icculus.org, GNU/Linux port
Copyright (C) 2017-2018  Steven LeVesque

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.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef _lumpy_
#define _lumpy_

//****************************************************************************
//
// Public header for LUMPY typedefs
//
//****************************************************************************


typedef struct
{
    byte     width,height;
    byte     data;
} pic_t;

typedef struct
{
    pic_t * shape;
    int x;
    int y;
    byte * data;
} SDLDrawObj;


#define CONVERT_ENDIAN_pic_t(pp) { }

typedef struct
{
    short     width,height;
    short     orgx,orgy;
    byte     data;
} lpic_t;

#define CONVERT_ENDIAN_lpic_t(lp)            \
    {                                        \
        SwapIntelShort(&lp->width);          \
        SwapIntelShort(&lp->height);         \
        SwapIntelShort(&lp->orgx);           \
        SwapIntelShort(&lp->orgy);           \
    }

typedef struct
{
    short height;
    char  width[256];
    short charofs[256];
    byte  data;       // as much as required
} font_t;

#define CONVERT_ENDIAN_font_t(fp)            \
    {                                        \
        int i;                               \
        SwapIntelShort(&fp->height);         \
        for (i = 0; i < 256; i++) {          \
            SwapIntelShort(&fp->charofs[i]); \
        }                                    \
    }

typedef struct
{
    short width;
    short height;
    byte palette[768];
    byte data;
} lbm_t;

#define CONVERT_ENDIAN_lbm_t(lp)             \
    {                                        \
        SwapIntelShort(&lp->width);          \
        SwapIntelShort(&lp->height);         \
    }

typedef struct
{
    short          origsize;         // the orig size of "grabbed" gfx
    short          width;            // bounding box size
    short          height;
    short          leftoffset;       // pixels to the left of origin
    short          topoffset;        // pixels above the origin
    unsigned short collumnofs[320];  // only [width] used, the [0] is &collumnofs[width]
} patch_t;

#define CONVERT_ENDIAN_patch_t(pp)           \
    {                                        \
        int i;                               \
        SwapIntelShort(&pp->origsize);       \
        SwapIntelShort(&pp->width);          \
        SwapIntelShort(&pp->height);         \
        SwapIntelShort(&pp->leftoffset);     \
        SwapIntelShort(&pp->topoffset);      \
        for (i = 0; i < pp->width; i++) {          \
            SwapIntelShort((short*)&pp->collumnofs[i]); \
        }                                    \
    }

typedef struct
{
    short origsize;         // the orig size of "grabbed" gfx
    short width;            // bounding box size
    short height;
    short leftoffset;       // pixels to the left of origin
    short topoffset;        // pixels above the origin
    short translevel;
    short collumnofs[320];  // only [width] used, the [0] is &collumnofs[width]
} transpatch_t;

#define CONVERT_ENDIAN_transpatch_t(pp)      \
    {                                        \
        int i;                               \
        SwapIntelShort(&pp->origsize);       \
        SwapIntelShort(&pp->width);          \
        SwapIntelShort(&pp->height);         \
        SwapIntelShort(&pp->leftoffset);     \
        SwapIntelShort(&pp->topoffset);      \
        SwapIntelShort(&pp->translevel);     \
        for (i = 0; i < pp->width; i++) {          \
            SwapIntelShort((short*)&pp->collumnofs[i]); \
        }                                    \
    }

typedef struct
{
    byte  color;
    short height;
    char  width[256];
    short charofs[256];
    byte  pal[0x300];
    byte  data;       // as much as required
} cfont_t;

#define CONVERT_ENDIAN_cfont_t(pp)           \
    {                                        \
        int i;                               \
        SwapIntelShort(&pp->height);         \
        for (i = 0; i < 256; i++) {          \
            SwapIntelShort(&pp->charofs[i]); \
        }                                    \
    }

#endif