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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
/* ScummVM - Scumm Interpreter
* Copyright (C) 2003 The ScummVM project
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header$
*
*/
#ifndef CONTROL_H
#define CONTROL_H
#include "common/stdafx.h"
#include "common/scummsys.h"
#include "sky/struc.h"
#include "common/engine.h"
#include "sky/screen.h"
#include "sky/disk.h"
#include "sky/mouse.h"
#define MAX_SAVE_GAMES 999
#define MAX_TEXT_LEN 80
#define PAN_LINE_WIDTH 184
#define PAN_CHAR_HEIGHT 12
#define MPNL_X 60 // Main Panel
#define MPNL_Y 10
#define SPNL_X 20 // Save Panel
#define SPNL_Y 20
#define SP_HEIGHT 149
#define SP_TOP_GAP 12
#define SP_BOT_GAP 27
#define GAME_NAME_X (SPNL_X + 18) // x coordinate of game names
#define GAME_NAME_Y (SPNL_Y + SP_TOP_GAP) // start y coord of game names
#define MAX_ON_SCREEN ((SP_HEIGHT - SP_TOP_GAP - SP_BOT_GAP) / PAN_CHAR_HEIGHT) // no of save games on screen
#define CP_PANEL 60400 // main panel sprite
#define CHARACTER_LIST " ,().='-&+!?\"" // list of allowed characters
#define MAINPANEL 0
#define SAVEPANEL 1
#define NO_MASK false
#define WITH_MASK true
// resource's onClick routines
#define DO_NOTHING 0
#define REST_GAME_PANEL 1
#define SAVE_GAME_PANEL 2
#define SAVE_A_GAME 3
#define RESTORE_A_GAME 4
#define SP_CANCEL 5
#define SHIFT_DOWN_FAST 6
#define SHIFT_DOWN_SLOW 7
#define SHIFT_UP_FAST 8
#define SHIFT_UP_SLOW 9
#define SPEED_SLIDE 10
#define MUSIC_SLIDE 11
#define TOGGLE_FX 12
#define TOGGLE_MS 13
#define TOGGLE_TEXT 14
#define EXIT 15
#define RESTART 16
#define QUIT_TO_DOS 17
// onClick return codes
#define CANCEL_PRESSED 100
#define NAME_TOO_SHORT 101
#define GAME_SAVED 102
#define SHIFTED 103
#define TOGGLED 104
#define RESTARTED 105
#define GAME_RESTORED 106
#define RESTORE_FAILED 107
#define NO_DISK_SPACE 108
#define SPEED_CHANGED 109
#define QUIT_PANEL 110
#define SLOW 0
#define FAST 1
#define SPEED_MULTIPLY 8
//-
#define SAVE_EXT 1
#define SAVE_MEGA0 2
#define SAVE_MEGA1 4
#define SAVE_MEGA2 8
#define SAVE_MEGA3 16
#define SAVE_HEADER "(C) Revolution Software Ltd 1993.\x00System 2 written by David Sykes and Tony Warriner\x0D\x0APortable implementation done by the ScummVM team\x0D\x0ASave File Revision 1\x00"
class SkyConResource {
public:
SkyConResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, uint16 pX, uint16 pY, uint32 pText, uint8 pOnClick, OSystem *system, uint8 *screen);
virtual ~SkyConResource(void) {};
void setSprite(void *pSpData) { _spriteData = (dataFileHeader*)pSpData; };
void setText(uint32 pText) { if (pText) _text = pText + 0x7000; else _text = 0; };
void setXY(uint16 x, uint16 y) { _x = x; _y = y; };
bool isMouseOver(uint32 mouseX, uint32 mouseY);
virtual void drawToScreen(bool doMask);
dataFileHeader *_spriteData;
uint32 _numSprites, _curSprite;
uint16 _x, _y;
uint32 _text;
uint8 _onClick;
OSystem *_system;
uint8 *_screen;
private:
};
class SkyTextResource : public SkyConResource {
public:
SkyTextResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, uint16 pX, uint16 pY, uint32 pText, uint8 pOnClick, OSystem *system, uint8 *screen);
virtual ~SkyTextResource(void);
virtual void drawToScreen(bool doMask);
private:
uint16 _oldX, _oldY;
uint8 *_oldScreen;
};
class SkyControl {
public:
SkyControl(SkyScreen *screen, SkyDisk *disk, SkyMouse *mouse, SkyText *text, SkyMusicBase *music, OSystem *system, const char *savePath);
void doControlPanel(void);
void showGameQuitMsg(bool useScreen = true);
private:
void initPanel(void);
void removePanel(void);
void drawMainPanel(void);
void delay(unsigned int amount);
void buttonControl(SkyConResource *pButton);
void loadSaveDescriptions(uint8 *destBuf);
void setUpGameSprites(uint8 *nameBuf, dataFileHeader **nameSprites, uint16 firstNum);
void showSprites(dataFileHeader **nameSprites);
void animClick(SkyConResource *pButton);
bool getYesNo(void);
uint16 doMusicSlide(void);
uint16 doSpeedSlide(void);
uint16 handleClick(SkyConResource *pButton);
uint16 toggleFx(SkyConResource *pButton);
uint16 toggleText(SkyConResource *pButton);
uint16 shiftDown(uint8 speed);
uint16 shiftUp(uint8 speed);
const char *_savePath;
uint16 saveGameToFile(char *fName);
void stosMegaSet(uint8 **destPos, MegaSet *mega);
void stosCompact(uint8 **destPos, Compact *cpt);
void stosAR(uint8 **destPos, uint8 *arData);
uint32 prepareSaveData(uint8 *destBuf);
uint16 restoreGameFromFile(char *fName);
static Compact *_saveLoadCpts[833]; // \ moved to sky/compacts/savedata.cpp
static uint8 *_saveLoadARs[18]; // /
uint16 saveRestorePanel(bool allowEdit);
SkyScreen *_skyScreen;
SkyDisk *_skyDisk;
SkyMouse *_skyMouse;
SkyText *_skyText;
SkyMusicBase *_skyMusic;
OSystem *_system;
int _mouseX, _mouseY;
bool _mouseClicked;
byte _keyPressed;
SkyConResource *createResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, int16 pX, int16 pY, uint32 pText, uint8 pOnClick, uint8 panelType);
struct {
uint8 *controlPanel;
uint8 *button;
uint8 *buttonDown;
uint8 *savePanel;
uint8 *yesNo;
uint8 *slide;
uint8 *slode;
uint8 *slode2;
uint8 *slide2;
uint8 *musicBodge;
} _sprites;
uint8 *_screenBuf;
int _lastButton;
uint32 _curButtonText;
uint16 _firstText;
dataFileHeader *_textSprite;
SkyTextResource *_text;
SkyConResource *_controlPanel, *_exitButton, *_slide, *_slide2, *_slode;
SkyConResource *_restorePanButton, *_savePanButton, *_dosPanButton, *_restartPanButton, *_fxPanButton, *_musicPanButton;
SkyConResource *_bodge, *_yesNo;
SkyConResource *_controlPanLookList[9];
//- Save/restore panel
SkyConResource *_savePanel;
SkyConResource *_saveButton, *_downFastButton, *_downSlowButton;
SkyConResource *_upFastButton, *_upSlowButton, *_quitButton, *_restoreButton;
SkyConResource *_savePanLookList[6], *_restorePanLookList[6];
};
#endif // CONTROL_H
|