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
|
/* 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.
*
*/
#ifndef GLK_LEVEL9_LEVEL9_MAIN
#define GLK_LEVEL9_LEVEL9_MAIN
#include "common/scummsys.h"
#include "common/endian.h"
#include "common/stream.h"
namespace Glk {
namespace Level9 {
typedef byte L9BYTE;
typedef uint16 L9UINT16;
typedef uint32 L9UINT32;
typedef bool L9BOOL;
#define FALSE false
#define TRUE true
#define LISTAREASIZE 0x800
#define STACKSIZE 1024
#define V1FILESIZE 0x600
#ifndef MAX_PATH
#define MAX_PATH 256
#endif
struct GameState {
L9UINT32 Id;
L9UINT16 codeptr, stackptr, listsize, stacksize, filenamesize, checksum;
L9UINT16 vartable[256];
L9BYTE listarea[LISTAREASIZE];
L9UINT16 stack[STACKSIZE];
char filename[MAX_PATH];
};
enum BitmapType {
NO_BITMAPS,
AMIGA_BITMAPS,
PC1_BITMAPS,
PC2_BITMAPS,
C64_BITMAPS,
BBC_BITMAPS,
CPC_BITMAPS,
MAC_BITMAPS,
ST1_BITMAPS,
ST2_BITMAPS
};
struct Colour {
L9BYTE red, green, blue;
};
struct Bitmap {
L9UINT16 width, height;
L9BYTE *bitmap;
Colour palette[32];
L9UINT16 npalette;
};
#define MAX_BITMAP_WIDTH 512
#define MAX_BITMAP_HEIGHT 218
#define L9WORD(x) READ_LE_UINT16(x)
#define L9SETWORD(x,val) WRITE_LE_UINT16(x, val)
#define L9SETDWORD(x,val) WRITE_LE_UINT32(x, val)
extern byte *startdata;
extern uint32 FileSize;
extern void level9_initialize();
/* routines provided by os dependent code */
extern void os_printchar(char c);
extern L9BOOL os_input(char *ibuff, int size);
extern char os_readchar(int millis);
extern L9BOOL os_stoplist(void);
extern void os_flush(void);
extern L9BOOL os_save_file(L9BYTE *Ptr, int Bytes);
extern L9BOOL os_load_file(L9BYTE *Ptr, int *Bytes, int Max);
extern L9BOOL os_get_game_file(char *NewName, int Size);
extern void os_set_filenumber(char *NewName, int Size, int n);
extern void os_graphics(int mode);
extern void os_cleargraphics(void);
extern void os_setcolour(int colour, int index);
extern void os_drawline(int x1, int y1, int x2, int y2, int colour1, int colour2);
extern void os_fill(int x, int y, int colour1, int colour2);
extern void os_show_bitmap(int pic, int x, int y);
extern Common::SeekableReadStream *os_open_script_file(void);
/* routines provided by level9 interpreter */
extern L9BOOL LoadGame(const char *filename, char *picname);
extern L9BOOL RunGame(void);
extern void StopGame(void);
extern void RestoreGame(char *filename);
extern void FreeMemory(void);
extern void GetPictureSize(int *width, int *height);
extern L9BOOL RunGraphics(void);
/* bitmap routines provided by level9 interpreter */
BitmapType DetectBitmaps(char *dir);
Bitmap *DecodeBitmap(char *dir, BitmapType type, int num, int x, int y);
} // End of namespace Level9
} // End of namespace Glk
#endif
|