1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
/*
* This code is based on original Soltys source code
* Copyright (c) 1994-1995 Janus B. Wisniewski and L.K. Avalon
*/
#ifndef __CGE__
#define __CGE__
#include "cge/wav.h"
#include "cge/vga13h.h"
#include "cge/mouse.h"
namespace CGE {
#define TSEQ 96
#define HTALK (TSEQ + 4)
#define TOO_FAR (TSEQ + 5)
#define NO_WAY (TSEQ + 5)
#define POC_FUL (TSEQ + 5)
#define OFF_USE (TSEQ + 6)
#define EXIT_OK_TEXT 40
#define NOMUSIC_TEXT 98
#define BADSVG_TEXT 99
#define OFF_USE_COUNT 600
#define OFF_USE_TEXT 601
#define NO_WAY_TEXT 671
#define TOO_FAR_TEXT 681
#define POC_FUL_TEXT 691
#define A_C_D_TEXT 777
#define GETNAME_PROMPT 50
#define GETNAME_TITLE 51
#define QUIT_TITLE 200
#define QUIT_TEXT 201
#define NOQUIT_TEXT 202
#define DEMO_TEXT 300
#define NOSOUND_TEXT 310
#define PAN_HIG 40
#define WORLD_HIG (SCR_HIG - PAN_HIG)
#define INFO_X 177
#define INFO_Y 164
#define INFO_W 140
#define CAVE_X 4
#define CAVE_Y 166
#define CAVE_SX 0
#define CAVE_SY 0
#ifdef DEMO
#define CAVE_DX 23
#define CAVE_DY 29
#define CAVE_NX 3
#define CAVE_NY 1
#else
#define CAVE_DX 9
#define CAVE_DY 10
#define CAVE_NX 8
#define CAVE_NY 3
#endif
#define BUTTON_X 151
#define BUTTON_Y 164
#define BUTTON_DX 19
#define BUTTON_DY 11
#define BUTTON_NX 1
#define BUTTON_NY 3
#define MINI_X 86
#define MINI_Y 162
#define MAP_XCNT 40
#define MAP_ZCNT 20
#define MAP_TOP 80
#define MAP_HIG 80
#define MAP_XGRID (SCR_WID / MAP_XCNT)
#define MAP_ZGRID (MAP_HIG / MAP_ZCNT)
#define LINE_MAX 512
#define USER_MAX 100
#define SHP_MAX 1024
#define STD_DELAY 3
#define LEV_MAX 5
#define CAVE_MAX (CAVE_NX * CAVE_NY)
#define MAX_FIND_LEVEL 3
#define MAX_DISTANCE 3
#define INI_EXT ".INI"
#define IN0_EXT ".IN0"
#define LGO_EXT ".LGO"
#define SVG_EXT ".SVG"
#define WALKSIDE 10
#define BUSY_REF 500
#define SYSTIMERATE 6 // 12 Hz
#define HEROFUN0 (40 * 12)
#define HEROFUN1 ( 2 * 12)
#define PAIN (Flag[0])
#define FINIS (Flag[3])
class SYSTEM : public SPRITE {
int lum;
public:
int FunDel;
SYSTEM(CGEEngine *vm);
void SetPal();
void FunTouch();
void Touch(uint16 mask, int x, int y);
void Tick();
private:
CGEEngine *_vm;
};
class CLUSTER : public COUPLE {
public:
static uint8 Map[MAP_ZCNT][MAP_XCNT];
uint8 &Cell(void);
CLUSTER(void) : COUPLE() { }
CLUSTER(int a, int b) : COUPLE(a, b) { }
bool Protected(void);
};
class WALK : public SPRITE {
public:
CLUSTER Here;
int TracePtr;
enum DIR { NO_DIR = -1, NN, EE, SS, WW } Dir;
WALK(CGEEngine *vm, BMP_PTR *shpl);
void Tick(void);
void FindWay(CLUSTER c);
void FindWay(SPRITE *spr);
int Distance(SPRITE *spr);
void Turn(DIR d);
void Park(void);
bool Lower(SPRITE *spr);
void Reach(SPRITE *spr, int mode = -1);
private:
CGEEngine *_vm;
};
CLUSTER XZ(int x, int y);
CLUSTER XZ(COUPLE xy);
void ExpandSprite(SPRITE *spr);
void ContractSprite(SPRITE *spr);
extern WALK *Hero;
extern VGA *Vga;
extern HEART *Heart;
extern SYSTEM *Sys;
extern int OffUseCount;
extern SPRITE *PocLight;
extern MOUSE *Mouse;
extern SPRITE *Pocket[];
extern SPRITE *Sprite;
extern SPRITE *MiniCave;
extern SPRITE *Shadow;
extern SPRITE *HorzLine;
extern INFO_LINE *InfoLine;
extern SPRITE *CavLight;
extern INFO_LINE *DebugLine;
extern BMP_PTR MB[2];
extern BMP_PTR MB[2];
extern BMP_PTR HL[2];
extern BMP_PTR MC[3];
extern BMP_PTR PR[2];
extern BMP_PTR SP[3];
extern BMP_PTR LI[5];
extern SNAIL *Snail;
extern SNAIL *Snail_;
} // End of namespace CGE
#endif
|