/*
* Seven Kingdoms: Ancient Adversaries
*
* Copyright 1997,1998 Enlight Software Ltd.
*
* 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. 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 .
*
*/
// Filename : OHILLRES.H
// Description : Header file for class HillRes
// Ownership : Gilbert
#ifndef __OHILLRES_H
#define __OHILLRES_H
#ifndef __ORESDB_H
#include
#endif
//---------- Define constant -------//
enum
{
HIGH_HILL_PRIORITY = 7,
LOW_HILL_PRIORITY = 3,
};
//---------- Define struct HillBlockRec ------//
// ####### begin Gilbert 28/1 #######//
struct HillBlockRec
{
enum { PATTERN_ID_LEN = 3, SUB_PATTERN_ID_LEN =3, PRIORITY_LEN = 1,
OFFSET_LEN=3, FILE_NAME_LEN = 8, BITMAP_PTR_LEN = 4 };
char pattern_id[PATTERN_ID_LEN];
char sub_pattern_id[SUB_PATTERN_ID_LEN];
char priority[PRIORITY_LEN];
char special_flag;
char layer;
char bitmap_type;
char offset_x[OFFSET_LEN];
char offset_y[OFFSET_LEN];
char file_name[FILE_NAME_LEN];
char bitmap_ptr[BITMAP_PTR_LEN];
};
//---------- Define struct HillBlockInfo ------//
struct HillBlockInfo
{
short block_id;
char pattern_id;
char sub_pattern_id;
char special_flag;
char priority; // high value on top
char layer; // 1= draw together with backgroud, 2= sort together with units
char bitmap_type; // W=whole square; T=transparent; O=oversize
short offset_x;
short offset_y;
char* bitmap_ptr;
public:
short bitmap_width() { return *(short *)bitmap_ptr; }
short bitmap_height() { return *(((short *)bitmap_ptr)+1); }
void draw(int xLoc, int yLoc, int layerMask=-1);
void draw_at(int absBaseX, int absBaseY, int layerMask=-1);
};
//----------- Define class HillRes ---------------//
class HillRes
{
public:
HillBlockInfo* hill_block_info_array;
short hill_block_count;
short * first_block_index; // array index of first hill block of each pattern
short max_pattern_id;
char init_flag;
ResourceDb res_bitmap;
public:
HillRes();
void init();
void deinit();
// find exact
short locate(char patternId, char subPattern, char searchPriority, char specialFlag);
// return hill block id of any one of the subPattern
short scan(char patternId, char searchPriority, char specialFlag, char findFirst);
//-------- function related to HillBlock ---------//
HillBlockInfo* operator[](int hillBlockId);
short first_block(int hillPatternId);
private:
void load_hill_block_info();
};
// ####### end Gilbert 28/1 #######//
extern HillRes hill_res;
//----------------------------------------------------//
#endif