Subversion Repositories Games.Rick Dangerous

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
/*
2
 * src/maps.h
3
 *
4
 * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). All rights reserved.
5
 *
6
 * The use and distribution terms for this software are contained in the file
7
 * named README, which can be found in the root of this distribution. By
8
 * using this software in any fashion, you are agreeing to be bound by the
9
 * terms of this license.
10
 *
11
 * You must not remove this notice, or any other, from this software.
12
 */
13
 
14
#ifndef _MAPS_H
15
#define _MAPS_H
16
 
17
#include "system.h"
18
 
19
#define MAP_NBR_MAPS 0x05
20
#define MAP_NBR_SUBMAPS 0x2F
21
#define MAP_NBR_CONNECT 0x99
22
#define MAP_NBR_BNUMS 0x1FD8
23
#define MAP_NBR_BLOCKS 0x0100
24
#define MAP_NBR_MARKS 0x020B
25
#define MAP_NBR_EFLGC 0x0020
26
 
27
/*
28
 * map row definitions, for three zones : hidden top, screen, hidden bottom
29
 * the three zones compose map_map, which contains the definition of the
30
 * current portion of the submap.
31
 */
32
#define MAP_ROW_HTTOP 0x00
33
#define MAP_ROW_HTBOT 0x07
34
#define MAP_ROW_SCRTOP 0x08
35
#define MAP_ROW_SCRBOT 0x1F
36
#define MAP_ROW_HBTOP 0x20
37
#define MAP_ROW_HBBOT 0x27
38
 
39
extern U8 map_map[0x2c][0x20];
40
 
41
/*
42
 * main maps
43
 */
44
typedef struct
45
{
46
   U16 x, y;      /* initial position for rick */
47
   U16 row;      /* initial map_map top row within the submap */
48
   U16 submap;   /* initial submap */
49
   char *tune;   /* map tune */
50
} map_t;
51
 
52
extern map_t map_maps[MAP_NBR_MAPS];
53
 
54
/*
55
 * sub maps
56
 */
57
typedef struct
58
{
59
   U16 page;                  /* tiles page */
60
   U16 bnum;                  /* first block number */
61
   U16 connect;             /* first connection */
62
   U16 mark;                  /* first entity mark */
63
} submap_t;
64
 
65
extern submap_t map_submaps[MAP_NBR_SUBMAPS];
66
 
67
/*
68
 * connections
69
 */
70
typedef struct
71
{
72
   U8 dir;
73
   U8 rowout;
74
   U8 submap;
75
   U8 rowin;
76
} connect_t;
77
 
78
extern connect_t map_connect[MAP_NBR_CONNECT];
79
 
80
/*
81
 * blocks - one block is 4 by 4 tiles.
82
 */
83
typedef U8 block_t[0x10];
84
 
85
extern block_t map_blocks[MAP_NBR_BLOCKS];
86
 
87
/*
88
 * flags for map_marks[].ent ("yes" when set)
89
 *
90
 * MAP_MARK_NACT: this mark is not active anymore.
91
 */
92
#define MAP_MARK_NACT (0x80)
93
 
94
/*
95
 * mark structure
96
 */
97
typedef struct
98
{
99
   U8 row;
100
   U8 ent;
101
   U8 flags;
102
   U8 xy;   /* bits XXXX XYYY (from b03) with X->x, Y->y */
103
   U8 lt;   /* bits XXXX XNNN (from b04) with X->trig_x, NNN->lat & trig_y */
104
} mark_t;
105
 
106
extern mark_t map_marks[MAP_NBR_MARKS];
107
 
108
/*
109
 * block numbers, i.e. array of rows of 8 blocks
110
 */
111
extern U8 map_bnums[MAP_NBR_BNUMS];
112
 
113
/*
114
 * flags for map_eflg[map_map[row][col]]   ("yes" when set)
115
 *
116
 * MAP_EFLG_VERT: vertical move only (usually on top of _CLIMB).
117
 * MAP_EFLG_SOLID: solid block, can't go through.
118
 * MAP_EFLG_SPAD: super pad. can't go through, but sends entities to the sky.
119
 * MAP_EFLG_WAYUP: solid block, can't go through except when going up.
120
 * MAP_EFLG_FGND: foreground (hides entities).
121
 * MAP_EFLG_LETHAL: lethal (kill entities).
122
 * MAP_EFLG_CLIMB: entities can climb here.
123
 * MAP_EFLG_01:
124
 */
125
#define MAP_EFLG_VERT (0x80)
126
#define MAP_EFLG_SOLID (0x40)
127
#define MAP_EFLG_SPAD (0x20)
128
#define MAP_EFLG_WAYUP (0x10)
129
#define MAP_EFLG_FGND (0x08)
130
#define MAP_EFLG_LETHAL (0x04)
131
#define MAP_EFLG_CLIMB (0x02)
132
#define MAP_EFLG_01 (0x01)
133
 
134
extern U8 map_eflg_c[MAP_NBR_EFLGC];   /* compressed */
135
extern U8 map_eflg[0x100];   /* current */
136
 
137
/*
138
 * map_map top row within the submap
139
 */
140
extern U8 map_frow;
141
 
142
/*
143
 * tiles offset
144
 */
145
extern U8 map_tilesBank;
146
 
147
extern void map_expand (void);
148
extern void map_init (void);
149
extern U8 map_chain (void);
150
extern void map_resetMarks (void);
151
 
152
#endif