99 lines
2.9 KiB
C
99 lines
2.9 KiB
C
|
#ifndef AUTOMAP_H
|
||
|
#define AUTOMAP_H
|
||
|
|
||
|
#include "db.h"
|
||
|
#include "map_defs.h"
|
||
|
|
||
|
#define AUTOMAP_DB ("AUTOMAP.DB")
|
||
|
#define AUTOMAP_TMP ("AUTOMAP.TMP")
|
||
|
|
||
|
// The number of map entries that is stored in automap.db.
|
||
|
//
|
||
|
// NOTE: I don't know why this value is not equal to the number of maps.
|
||
|
#define AUTOMAP_MAP_COUNT (160)
|
||
|
|
||
|
#define AUTOMAP_OFFSET_COUNT (AUTOMAP_MAP_COUNT * ELEVATION_COUNT)
|
||
|
|
||
|
#define AUTOMAP_WINDOW_WIDTH (519)
|
||
|
#define AUTOMAP_WINDOW_HEIGHT (480)
|
||
|
|
||
|
#define AUTOMAP_PIPBOY_VIEW_X (238)
|
||
|
#define AUTOMAP_PIPBOY_VIEW_Y (105)
|
||
|
|
||
|
// View options for rendering automap for map window. These are stored in
|
||
|
// [gAutomapFlags] and is saved in save game file.
|
||
|
typedef enum AutomapFlags {
|
||
|
// NOTE: This is a special flag to denote the map is activated in the game (as
|
||
|
// opposed to the mapper). It's always on. Turning it off produces nice color
|
||
|
// coded map with all objects and their types visible, however there is no way
|
||
|
// you can do it within the game UI.
|
||
|
AUTOMAP_IN_GAME = 0x01,
|
||
|
|
||
|
// High details is on.
|
||
|
AUTOMAP_WTH_HIGH_DETAILS = 0x02,
|
||
|
|
||
|
// Scanner is active.
|
||
|
AUTOMAP_WITH_SCANNER = 0x04,
|
||
|
} AutomapFlags;
|
||
|
|
||
|
typedef enum AutomapFrm {
|
||
|
AUTOMAP_FRM_BACKGROUND,
|
||
|
AUTOMAP_FRM_BUTTON_UP,
|
||
|
AUTOMAP_FRM_BUTTON_DOWN,
|
||
|
AUTOMAP_FRM_SWITCH_UP,
|
||
|
AUTOMAP_FRM_SWITCH_DOWN,
|
||
|
AUTOMAP_FRM_COUNT,
|
||
|
} AutomapFrm;
|
||
|
|
||
|
typedef struct AutomapHeader {
|
||
|
unsigned char version;
|
||
|
|
||
|
// The size of entire automap database (including header itself).
|
||
|
int dataSize;
|
||
|
|
||
|
// Offsets from the beginning of the automap database file into
|
||
|
// entries data.
|
||
|
//
|
||
|
// These offsets are specified for every map/elevation combination. A value
|
||
|
// of 0 specifies that there is no data for appropriate map/elevation
|
||
|
// combination.
|
||
|
int offsets[AUTOMAP_MAP_COUNT][ELEVATION_COUNT];
|
||
|
} AutomapHeader;
|
||
|
|
||
|
typedef struct AutomapEntry {
|
||
|
int dataSize;
|
||
|
unsigned char isCompressed;
|
||
|
unsigned char* compressedData;
|
||
|
unsigned char* data;
|
||
|
} AutomapEntry;
|
||
|
|
||
|
extern const int _defam[AUTOMAP_MAP_COUNT][ELEVATION_COUNT];
|
||
|
extern const int _displayMapList[AUTOMAP_MAP_COUNT];
|
||
|
extern const int gAutomapFrmIds[AUTOMAP_FRM_COUNT];
|
||
|
|
||
|
extern int gAutomapFlags;
|
||
|
|
||
|
extern AutomapHeader gAutomapHeader;
|
||
|
extern AutomapEntry gAutomapEntry;
|
||
|
|
||
|
int automapInit();
|
||
|
int automapReset();
|
||
|
void automapExit();
|
||
|
int automapLoad(File* stream);
|
||
|
int automapSave(File* stream);
|
||
|
int _automapDisplayMap(int map);
|
||
|
void automapShow(bool isInGame, bool isUsingScanner);
|
||
|
void automapRenderInMapWindow(int window, int elevation, unsigned char* backgroundData, int flags);
|
||
|
int automapRenderInPipboyWindow(int win, int map, int elevation);
|
||
|
int automapSaveCurrent();
|
||
|
int automapSaveEntry(File* stream);
|
||
|
int automapLoadEntry(int map, int elevation);
|
||
|
int automapSaveHeader(File* stream);
|
||
|
int automapLoadHeader(File* stream);
|
||
|
void _decode_map_data(int elevation);
|
||
|
int automapCreate();
|
||
|
int _copy_file_data(File* stream1, File* stream2, int length);
|
||
|
int automapGetHeader(AutomapHeader** automapHeaderPtr);
|
||
|
|
||
|
#endif /* AUTOMAP_H */
|