123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /* -*- mode: c; tab-width: 4; c-basic-offset: 4; c-file-style: "linux" -*- */
- //
- // Copyright (c) 2009-2011, Wei Mingzhi <whistler_wmz@users.sf.net>.
- // Copyright (c) 2011-2017, SDLPAL development team.
- // All rights reserved.
- //
- // This file is part of SDLPAL.
- //
- // SDLPAL 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 3 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, see <http://www.gnu.org/licenses/>.
- //
- #ifndef _MAP_H
- #define _MAP_H
- #include "common.h"
- //
- // Map format:
- //
- // +----------------------------------------------> x
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 0, h = 0)
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 0, h = 1)
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 1, h = 0)
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 1, h = 1)
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 2, h = 0)
- // | * * * * * * * * * * ... * * * * * * * * * * (y = 2, h = 1)
- // | ............................................
- // v
- // y
- //
- // Note:
- //
- // Tiles are in diamond shape (32x15).
- //
- // Each tile is represented with a DWORD value, which contains information
- // about the tile bitmap, block flag, height, etc.
- //
- // Bottom layer sprite index:
- // (d & 0xFF) | ((d >> 4) & 0x100)
- //
- // Top layer sprite index:
- // d >>= 16;
- // ((d & 0xFF) | ((d >> 4) & 0x100)) - 1)
- //
- // Block flag (player cannot walk through this tile):
- // d & 0x2000
- //
- typedef struct tagPALMAP
- {
- DWORD Tiles[128][64][2];
- LPSPRITE pTileSprite;
- INT iMapNum;
- } PALMAP, *LPPALMAP;
- typedef const PALMAP *LPCPALMAP;
- PAL_C_LINKAGE_BEGIN
- LPPALMAP
- PAL_LoadMap(
- INT iMapNum,
- FILE *fpMapMKF,
- FILE *fpGopMKF
- );
- VOID
- PAL_FreeMap(
- LPPALMAP lpMap
- );
- LPCBITMAPRLE
- PAL_MapGetTileBitmap(
- BYTE x,
- BYTE y,
- BYTE h,
- BYTE ucLayer,
- LPCPALMAP lpMap
- );
- BOOL
- PAL_MapTileIsBlocked(
- BYTE x,
- BYTE y,
- BYTE h,
- LPCPALMAP lpMap
- );
- BYTE
- PAL_MapGetTileHeight(
- BYTE x,
- BYTE y,
- BYTE h,
- BYTE ucLayer,
- LPCPALMAP lpMap
- );
- VOID
- PAL_MapBlitToSurface(
- LPCPALMAP lpMap,
- SDL_Surface *lpSurface,
- const SDL_Rect *lpSrcRect,
- BYTE ucLayer
- );
- PAL_C_LINKAGE_END
- //
- // Convert map location to the real location
- //
- #define PAL_XYH_TO_POS(x, y, h) \
- PAL_POS((x) * 32 + (h) * 16, (y) * 16 + (h) * 8)
- //
- // Convert real location to map location
- //
- #define PAL_POS_TO_XYH(pos, x, y, h) \
- { \
- (h) = (BYTE)(((PAL_X(pos) % 32) != 0) ? 1 : 0); \
- (x) = (BYTE)(PAL_X(pos) / 32); \
- (y) = (BYTE)(PAL_Y(pos) / 16); \
- }
- #endif
|