ScummVM API documentation
fool_game.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef FOOL_GAME_H
23#define FOOL_GAME_H
24
25#include "common/rect.h"
26#include "common/str.h"
27#include "common/ustr.h"
28#include "graphics/mactoolbox/toolbox.h"
29
30#include "fool/fool.h"
31
32namespace Fool {
33
34class ZBasic;
35
43using Graphics::MacToolbox::OSErr;
44using Graphics::MacToolbox::OSType;
46using Graphics::MacToolbox::PatternMode;
51using Graphics::MacToolbox::SourceMode;
54
55enum FoolStateBits : uint16 {
56 kStateNull = 0x00,
57 kStateReturn = 0x01,
58 kStateUndo = 0x02,
59 kStateSaveGame = 0x04,
60 kStateNewGame = 0x08,
61 kStateOpenGame = 0x10,
62 kStateQuit = 0x20,
63 kStateChapterSelect = 0x40,
64 kStatePuzzleSelect = 0x80,
65 kStateMetapuzzleSelect = 0x100,
66 kStatePrintStory = 0x400,
67 kStateMetapuzzleComplete = 0x800,
68};
69
70enum FoolPuzzleFlags : uint16 {
71 kFlagMenuDisabled = 0x00,
72 kFlagMenuEnabled = 0x01,
73 kFlagMenuDiamond = 0x02,
74 kFlagMapTile = 0x08,
75};
76
77enum FoolZStrOffset : uint16 {
78 kOffsetVersion = 0,
79 kOffsetAbout,
80 kOffsetThreeShips,
81 kOffsetWordSearch,
82 kOffsetJigsaw,
83 kOffsetPolyomino,
84 kOffsetReveal,
85 kOffsetSentence,
86 kOffsetMaze,
87 kOffsetMetapuzzle,
88 kOffsetCards,
89 kOffsetThoth,
90 kOffsetHumbug,
91 kOffsetHermit,
92 kOffsetJustice,
93 kOffsetPrologue,
94 kOffsetFinale,
95 kOffsetPrologueMemory,
96 kOffsetPrologueClick,
97 kOffsetDemoInstructions,
98 kOffsetDemoPuzzleComplete,
99};
100
101enum FoolFontID : uint16 {
102 kFontFool = 250,
103 kFontPuzzle = 251,
104 kFontSmall = 252,
105 kFontLarge = 254,
106 kFontChicago = 255,
107};
108
109class FoolGame {
110public:
111 FoolGame(FoolVersion version, const Common::String &saveFileName): _version(version), _startSaveFileName(saveFileName) {}
112 ~FoolGame() {}
113
114 void run();
115
116 void foolRun(); // sub_128_004
117 void copyScreen(int16 put, BitMap &bmp); // sub_128_0a2
118 void openSaveFileDialog(const Common::U32String &title, const Common::U32String &filename); // sub_128_11c
119 void sub_128_1e4(const Common::String &osType);
120 void getGridFromMouse(int16 &gridX, int16 &gridY); // sub_128_2be
121 void sub_128_342(int16 unk2, int16 unk1);
122 void delay(int16 numTicks); // sub_128_3da
123 void delayFromMarker(int16 numTicks); // sub_128_406
124 int16 puzzlesReadByte(); // sub_128_428
125 int16 puzzlesReadShort(); // sub_128_446
126 int32 puzzlesReadLong(); // sub_128_462
127 Common::String puzzlesReadString(); // sub_128_49a
128 void toggleMouseCursor(bool visible); // sub_128_4da
129 void playTone(int16 freq, int16 duration, bool wait);
130 void drawPuzzleButton(const Common::U32String &symbol); // sub_128_55c
131 int16 getVolRefNum(); // sub_128_5fe
132 OSErr setVolRefNum(int16 volRefNum); // sub_128_64c
133 void fillRect(int16 patternID, PatternMode mode, int16 top, int16 left, int16 bottom, int16 right); // sub_128_69c
134 void drawTarotCard(int16 rectID, int16 deckPos, int16 type); // sub_128_712
135 void fillRect(int16 top, int16 left, int16 bottom, int16 right, int16 patternID); // sub_128_8b4
136 void drawTextCenter(const Common::U32String &str, int16 yPos); // sub_128_918
137 void zoomRect(int16 startTop, int16 startLeft, int16 startBottom, int16 startRight, int16 endTop, int16 endLeft, int16 endBottom, int16 endRight, int16 patternID, PatternMode mode, int16 steps); // sub_128_962
138 void screenZap(int16 unk6, int16 unk5, int16 unk4, int16 unk3, int16 unk2, int16 unk1); // sub_128_bde
139 void getNextEvent(int32 mask); // sub_128_c6a
140 void flashRect(int16 top, int16 left, int16 bottom, int16 right, int16 millis); // sub_128_d34
141 void showChoiceModal(uint16 font, int16 lineCount, int16 buttonCount, bool beep, bool dark); // sub_128_dfe
142
143 void showBehold(int16 unk2, int16 unk1, const Common::U32String &message); // sub_128_178a
144 void setStateBits(uint16 bits); // sub_128_1c2c
145 void clearStateBits(uint16 bits); // sub_128_1c4a
146 void sub_128_1ef8();
147 void sub_128_1f1e();
148 void sub_128_1f44();
149 void sub_128_1f76();
150 void sub_128_2078();
151 void sub_128_20d0();
152 void menuChapterSelect(); // sub_128_2126
153 void sub_128_21c8();
154 void storyRenderPage(); // sub_128_2202
155 void menuClickMessage(); // sub_128_2664
156 void sub_128_26f6();
157 void fetchPuzzleData(); // sub_128_271a
158 void menuNewGame(); // sub_128_27d6
159 void writeSaveFile(); // sub_128_2808
160 void menuOpenGame(); // sub_128_2988
161 void menuSaveGame(); // sub_128_2a06
162 void saveGameAs(); // sub_128_2a0e
163 void menuSaveGameAs(); // sub_128_2a92
164 void menuQuit(); // sub_128_2ab6
165 void menuPrintStory(); // sub_128_2ae8
166 void printStory(); // sub_128_2b0a
167 void newGame(); // sub_128_2bc6
168 void openGame(); // sub_128_2e3e
169
170 void menuSetup(); // sub_128_3032
171 void menuToggleSound(); // sub_128_32c8
172 void savePrompt(); // sub_128_32fa
173 void autoSaveGame();
174 void saveGame(); // sub_128_3536
175 void sub_128_3744();
176 void cursorWatch(); // sub_128_3774
177 void cursorExplodingWatch(); // sub_128_378a
178 void cursorExplodingWatchShort(); // sub_128_37ce
179 void sub_128_388a();
180 void puzzleRun(); // sub_128_39a0
181 void storyUnlockChapter(); // sub_128_3de6
182 void puzzleSetupMenu(); // sub_128_3fb6
183
184 void puzzleLoadContext(); // sub_128_4168
185 void puzzleSaveContext(); // sub_128_41aa
186 void sub_128_41d8();
187 void storyDrawZoom(); // sub_128_4472
188 void menuAbout(); // sub_128_4a92
189 void menuPrologue();
190 void menuFinale();
191
192 // fool_threeships.cpp
193 void shipsRun(); // sub_128_5140
194 void sub_128_55ac();
195 void sub_128_57a2();
196 void sub_128_5a6c();
197
198 void onClickMenu(); // sub_128_5b30
199 void onMenuKey(); // sub_128_5baa
200 void onMenuSelect(); // sub_128_5c20
201 void thothHidePlayfield(); // sub_128_5ef0
202 void thothShowPlayfield(); // sub_128_5f16
203 void sub_128_5f9e();
204 void onUpdateEvent(); // sub_128_5fb4
205 void sub_128_5fea();
206 void onDiskEvent(); // sub_128_6154
207 void waitForMouseUp(); // sub_128_6186
208 void waitForClick(); // sub_128_61c2
209 void sub_128_61ec(); // sub_128_61ec
210 void sub_128_6244();
211
212 void sub_129_004();
213 void sub_129_068();
214 void menuLoadingMessage(int16 percent); // sub_129_123a
215
216 void menuDemoAbout();
217 void menuDemoInstructions();
218 void demoPuzzleComplete();
219
220 // fool_jumble.cpp:
221 void jumbleRun();
222 void jumbleSave(); // sub_130_c56
223 void jumbleStoreState(); // sub_130_c66
224 void jumbleRunRearrange(); // sub_130_d2e
225 void jumbleRunSubstitution(); // sub_130_d90
226 void sub_130_1004();
227 void jumbleRunWordSquare(); // sub_130_10a6
228 void jumbleRunHiddenMessage(); // sub_130_1282
229 void sub_130_1426();
230 void jumbleOnClick(); // sub_130_1476
231 void jumbleOnKey(); // sub_130_15da
232 void sub_130_172c();
233 void sub_130_19ac();
234 void jumbleClickFixedSquare(); // sub_130_19da
235 void sub_130_1a16();
236 void sub_130_1c1a();
237 void jumbleSelectSquare(); // sub_130_1c52
238 void sub_130_1c6c();
239 void jumbleDrawLetter(); // sub_130_1dcc
240 void sub_130_1e5c();
241 void sub_130_1e76();
242 void sub_130_201a();
243 void jumbleNextPosition(); // sub_130_2078
244 void jumblePreviousPosition(); // sub_130_2094
245 void sub_130_20aa();
246 void sub_130_20d2();
247 Common::Point jumbleGetGridPos(); // sub_130_20fe
248 void sub_130_2178();
249 void jumbleDrawHint(); // sub_130_2226
250 void jumbleDrawHintBoat(); // sub_130_22ee
251 void jumbleDrawHintBlacksmith(); // sub_130_23cc
252 void jumbleDrawHintSentry(); // sub_130_24aa
253 void jumbleDrawHintMetapuzzle(); // sub_130_2548
254 void sub_130_25d8();
255 void sub_130_2790();
256
257 // fool_wordsearch.cpp
258 void wordSearchRun(); // sub_131_004
259 void wordSearchOnClick(); // sub_131_8aa
260 void wordSearchBadSelect(); // sub_131_cbe
261 void wordSearchDrawFooter(); // sub_131_d22
262 void wordSearchStoreState(); // sub_131_d66
263 void wordSearchSuccess(); // sub_131_f42
264
265 // fool_jigsaw.cpp
266 void jigsawRun(); // sub_132_004
267 void jigsawOnClick(); // sub_132_518
268 void jigsawDragSelect(); // sub_132_67a
269 void jigsawMoveSelected(); // sub_132_962
270 void jigsawCancelSelect(); // sub_132_e5a
271 void jigsawDropSelected(); // sub_132_ed8
272 void jigsawStoreState(); // sub_132_1384
273 void jigsawCheckIfSolved(); // sub_132_13ea
274 void jigsawSuccess(); // sub_132_1444
275
276 // fool_polyomino.cpp
277 void polyominoRun(); // sub_133_004
278 void polyominoOnClick(); // sub_133_87c
279 void polyominoCancelMove(); // sub_133_eb2
280 void polyominoMove(int16 x, int16 y); // sub_133_f04
281 void polyominoOnClickFixed(); // sub_133_10a0
282 void polyominoReset(); // sub_133_11cc
283 void polyominoDrawFrame(); // sub_133_12d4
284 void polyominoCheckIfSolved(); // sub_133_12f2
285 void polyominoSuccess(); // sub_133_13e2
286 void polyominoStoreState(); // sub_133_1452
287
288 // fool_reveal.cpp
289 void revealRun(); // sub_134_004
290 void revealOnClick(); // sub_134_67c
291 void revealSelectButton(); // sub_134_74a
292 void revealReset(); // sub_134_7bc
293 void revealSuccess(); // sub_134_872
294
295 // fool_sentence.cpp
296 void sentenceRun(); // sub_135_004
297 void sentenceOnClick(); // sub_135_5b6
298 void sentenceAddLeft(int16 index); // sub_135_7d6
299 void sentenceAddRight(int16 index); // sub_135_7fa
300 void sentenceAddLeftRight(int16 index); // sub_135_81e
301 void sentenceReplace(int16 index); // sub_135_86a
302 void sentenceReverse(); // sub_135_94c
303 void sentenceUndo(); // sub_135_9ba
304 void sentenceDrawButton(int16 gridIndex); // sub_135_a34
305 void sentenceDrawBuffer(); // sub_135_b16
306 void sentenceStoreState(); // sub_135_c1c
307 void sentenceSuccess(); // sub_135_cee
308
309 // fool_maze.cpp
310 void mazeRun(); // sub_136_004
311 void mazeOnClick(); // sub_136_79e
312 void mazeFlashWall(); // sub_136_994
313 void mazeMovePlayer(); // sub_136_a22
314 void sub_136_ade();
315 void mazeHotspot(); // sub_136_b00
316 void mazePrintMessage(); // sub_136_d64
317 void mazePickUpItem(); // sub_136_e4c
318 void mazeUseItem(); // sub_136_ed8
319 void mazeWanderingWinds(); // sub_136_f74
320 void mazeDrawLetter(); // sub_136_115a
321 void sub_136_137c();
322 void sub_136_163c();
323 void sub_136_1650();
324 void mazeHiddenDoorOpen(); // sub_136_1756
325 void mazeHiddenDoorShut(); // sub_136_17a4
326 void sub_136_1806(const Common::String &unk1);
327 void mazeSetTrigger(); // sub_136_185a
328 void mazeClearTrigger(); // sub_136_1898
329 void mazePickUpTone(); // sub_136_18f4
330 void mazeFireDemon(); // sub_136_1932
331 void sub_136_19d2();
332 void mazeNoisySprite(); // sub_136_1cf4
333 void mazeDelay(); // sub_136_1ddc
334 void mazeYeetObject(); // sub_136_1df4
335 void mazeThornsGetScroll(); // sub_136_1e4c
336 void mazeWaitForMouseUp(); // sub_136_21fa
337 void mazeClearText(); // sub_136_2200
338 void mazeMovementTrail(); // sub_136_2208
339
340 void mazeLoadTone(int16 offset); // sub_136_24ae
341 void mazePlayTone(); // sub_136_2538
342
343 void sub_136_2582(const Common::String &unk1); // sub_136_2582
344 void mazeDrawPlayer(); // sub_136_2664
345 void mazeSetupMenu(); // sub_136_274e
346 void mazeAddWallLeft(); // sub_136_2a7c
347 void mazeAddWallTop(); // sub_136_2b30
348 void mazeAddWallRight(); // sub_136_2be2
349 void mazeAddWallBottom(); // sub_136_2c96
350 void mazeDrawWallLeft(); // sub_136_2d4c
351 void mazeDrawWallTop(); // sub_136_2dd0
352 void mazeDrawWallRight(); // sub_136_2e52
353 void mazeDrawWallBottom(); // sub_136_2ed6
354 void mazeStoreState(); // sub_136_2f5c
355 void sub_136_3408();
356 void sub_136_342a();
357 void mazeLoadState(); // sub_136_3466
358 void sub_136_3a30();
359 void sub_136_3a70();
360
361 // fool_sun.cpp
362 void sunMapRun(); // sub_137_004
363 void sunMapOnClick(); // sub_137_3e2
364 void sunMapDragSelect(); // sub_137_598
365 void sunMapMoveSelected(); // sub_137_880
366 void sunMapUndoMove(); // sub_137_d60
367 void sunMapDropSelected(); // sub_137_dde
368 void sunMapCheckIfSolved(); // sub_137_124e
369 void sunMapRevealPiece(); // sub_137_131a
370
371 // fool_metapuzzle.cpp
372 void metapuzzleRun(); // sub_138_004
373 void metapuzzleOnClick(); // sub_138_1b4
374 void sub_138_21e();
375 void metapuzzleSetupMenu(); // sub_138_3e0
376 void metapuzzleWheel(); // sub_138_49e
377 void metapuzzleSecretCode(); // sub_138_550
378 void metapuzzleSecretCodeDrawText(); // sub_138_864
379 void sub_138_9c4();
380 void sub_138_a06();
381 void metapuzzleSecretCodeReset(); // sub_138_a22
382 void sub_138_a90();
383 void metapuzzleOnOption(); // sub_138_b06
384 void metapuzzleOnShift(); // sub_138_b6a
385
386 // fool_cards.cpp
387 void cardsRun(); // sub_139_004
388 void cardsReset(); // sub_139_4de
389 void sub_139_50e();
390 void cardsShuffleDeck(); // sub_139_51e
391 void cardsDrawTable(); // sub_139_582
392 void cardsOnClick(); // sub_139_6b0
393 void sub_139_a22();
394 void cardsOpponentYields(); // sub_139_da8
395 void cardsRevealHands(); // sub_139_dee
396 void sub_139_17fc();
397 void sub_139_191c();
398 void sub_139_19da();
399 void cardsDrawScores(); // sub_139_1b12
400 void cardsStoreState(); // sub_139_1cba
401 void sub_139_1d3e();
402
403 // fool_thoth.cpp
404 void highPriestessRun(); // sub_140_004
405 void thoth99Enchantments(); // sub_140_458
406 void thothMoveEnchantment(); // sub_140_9f0
407 void thothDrawEnchantment(); // sub_140_b2c
408 void sub_140_c4c();
409 void thothScrambleScreen(); // sub_140_dd4
410 void sub_140_e3c();
411 void sub_140_f84();
412 void thothKey1st(); // sub_140_12fc
413 void sub_140_15fc();
414 void thothKey2nd(); // sub_140_1486
415 void thothKey3rd(); // sub_140_18fa
416 void thothKey3rdOnClick(); // sub_140_1bc4
417 void sub_140_1f68();
418 void sub_140_205e();
419 void thothKeyLast(); // sub_140_206a
420 void thothKeyLastOnClick(); // sub_140_22b8
421 void thothBadSelect(); // sub_140_24ae
422 void hermitNextStage(); // sub_140_25e4
423 void hermitScreenFlash(); // sub_140_2662
424 void hermitScreenZoom(); // sub_140_26ca
425 void hermitScreenBehold(); // sub_140_28bc
426 void sub_140_2968();
427 void sub_140_2978();
428 void thothKeyLastSetup(); // sub_140_2998
429 void thothSetupMenu(); // sub_140_2f92
430 Common::Rect thothRandomSquare(); // sub_140_3050
431 Common::Rect thothRandomHRect(); // sub_140_30da
432 Common::Rect thothRandomVRect(); // sub_140_3148
433 void sub_140_3296();
434 void sub_140_32ac();
435 void thothAdjustPuzzleData(); // sub_140_3372
436 void sub_140_3412();
437
438 // fool_death.cpp
439 void deathRun(); // sub_141_004
440 void deathMoveBlackEye(); // sub_141_3ca
441 void deathDrawWhiteEye(); // sub_141_882
442 void deathCaught(); // sub_141_8b8
443 void deathDrawZoom(); // sub_141_934
444
445 // fool_humbug.cpp
446 void humbugRun(); // sub_142_004
447 void humbugPlayTrail(); // sub_142_0e6
448 void humbugMoveMouse(); // sub_142_370
449 void humbugSuccess(); // sub_142_5f2
450 void humbugShowThoth(); // sub_142_630
451
452 // fool_justice.cpp
453 void justiceRun(); // sub_142_852
454 void justiceSetup(); // sub_142_9be
455 void justiceOnClick(); // sub_142_cb2
456 void justiceZoom(); // sub_142_f58
457 void justiceDrawBlock(int16 gridIndex); // sub_142_f96
458 void justiceRemoveBlock(int16 gridIndex); // sub_142_10bc
459 void justiceStoreState(); // sub_142_111e
460 void justiceResetGrid(); // sub_142_11fe
461
462 // fool_hermit.cpp
463 void hermitRun(); // sub_142_12ac
464
465 // fool_straightpath.cpp
466 void straightPathRun(); // sub_143_004
467 void straightPathOnClick(); // sub_143_5c0
468 void straightPathReset(); // sub_143_784
469 void straightPathDrawText(); // sub_143_864
470 void straightPathClearText(); // sub_143_890
471 void straightPathSuccess(); // sub_143_8b0
472
473 void metapuzzleComplete(); // sub_144_004
474
475
476private:
477 FoolVersion _version;
478 Common::U32String _puzzlesPath;
479 bool _isDemo;
480 int _cardsMaxScore;
481 const int *_zstrOffset;
482 Toolbox *_toolbox;
483 ZBasic *_zbasic;
484 Common::String _startSaveFileName;
485 bool _quit = false;
486
487 GrafPtr var_i32_0;
488 GrafPtr var_i32_4;
489 GrafPtr var_i32_8;
490 GrafPtr var_i32_8_thoth;
491 Handle var_i32_c;
492 int16 var_i16_30;
493 int16 var_i16_32;
494 int16 var_i16_34;
495 int16 var_i16_36;
496 int16 var_i16_38;
497 int16 var_i16_42;
498 int16 var_i16_44;
499 EventRecord _event; // var_ev_46
500 int16 var_i16_56; // var_i16_56
501 int16 var_i16_58; // var_i16_58
502 int16 _windowWidth; // var_i16_5a
503 int16 _windowHeight; // var_i16_5c
504 SFReply var_sfr_5e; // -> aa
505 Common::U32String var_str_172;
506 Common::U32String var_str_272;
507 RGBColor var_i16_372;
508 bool _soundEnabled; // var_i16_378
509 bool _screenOversized; // var_i16_37a
510 uint32 var_i32_37c;
511 Common::U32String var_str_384;
512 int16 var_i16_484;
513 Common::U32String var_str_486;
514 int16 var_i16_586;
515 Common::U32String var_str_588;
516 int16 var_i16_688;
517 Common::Point _jumbleGridPos; // var_i16_68a
518 int16 var_i16_68a;
519 int16 var_i16_68c;
520 uint32 var_i32_692;
521 // this is normally a raw pointer to some memory,
522 // instead we track it as a handle + offset
523 uint32 _puzzleDataPtr; // var_ptr_696
524 Handle _puzzleDataBuffer; // var_bytes_696
525 int16 var_i16_78a;
526 int16 var_i16_79e;
527 bool _mouseVisible; // var_i16_7a0
528 int16 var_i16_7a8;
529 int16 var_i16_7aa;
530 int16 var_i16_7b0;
531 int16 var_i16_7b2;
532 int16 var_i16_7b4;
533 int16 var_i16_7b6;
534 int16 var_i16_7b8;
535 int16 var_i16_7ba;
536 int16 var_i16_7bc;
537 // this was reused, I don't know why
538 int16 _savePromptChoice; // var_i16_7be
539 int16 var_i16_7be;
540 int16 _keyLastPressed; // var_i16_7c0
541 PicHandle var_pic_7c2;
542 uint16 _stateFlags; // var_i16_7c6
543 uint32 var_i32_7c8;
544 int16 var_i16_7cc;
545 int16 var_i16_7ce;
546 int16 _storyCurrentChapter; // var_i16_7d0
547 int16 _sunMapRestored; // var_i16_7d2
548 int16 _storyCurrentPage; // var_i16_7d4
549 int16 var_i16_7d6;
550 int16 _storyNextPage; // var_i16_7d8
551 int16 _storyPageCount; // var_i16_7da
552 int16 _selectedMenuChapter; // var_i16_7dc
553 int16 var_i16_7de;
554 int16 var_i16_7e0;
555 int16 _activePuzzle; // var_i16_7e2
556 int16 var_i16_7e4;
557 int16 var_i16_7e6;
558 Common::U32String var_str_7e8;
559 int16 var_i16_8e8;
560 Common::U32String _saveFileName; // var_str_8ec
561 bool _isAutoSaving;
562 int16 var_i16_9ec;
563 int16 var_i16_9f2;
564 Common::U32String var_str_9f4;
565
566 Common::U32String var_str_af4;
567
568 int16 var_i16_bfc;
569 int16 var_i16_c00;
570 int16 var_i16_c02;
571 int16 _activePuzzleStatus; // var_i16_c04
572 Common::String _activePuzzleBuffer; // var_str_c06
573
574 int16 var_i16_d08;
575 int16 var_i16_d0a;
576 bool _activePuzzleSolved; // var_i16_d0c
577 int16 var_i16_d0e;
578 int16 var_i16_d10;
579 Common::U32String var_str_d12;
580 bool _menuDisabled; // var_i16_e12
581 bool _menuHidesPlayfield; // var_i16_e14
582 int16 _selectedMenuID; // var_i16_e16
583 int16 _selectedMenuItem; // var_i16_e18
584 int16 var_i16_e1a;
585 int16 var_i16_e1c;
586 int16 var_i16_e1e;
587 int16 var_i16_e20;
588 Common::U32String var_str_e22;
589 int16 var_i16_f22;
590 GrafPtr var_i32_f24;
591 OSType var_i32_f28;
592 int16 var_i16_f2c;
593 int16 var_i16_f2e;
594 Common::U32String var_str_f30;
595 int16 var_i16_1030;
596 PicHandle _metapuzzleWheelPic; // var_pic_1032
597 int32 var_i32_1036;
598 int16 var_i16_103a;
599 int16 var_i16_103c;
600 int16 var_i16_103e;
601 int16 var_i16_1040;
602 int16 _jumbleSubPuzzleCount; // var_i16_1056
603 int16 _jumbleCurrentSubPuzzle; // var_i16_1058
604 int16 var_i16_105a;
605 int16 var_i16_105c;
606 int16 var_i16_105e;
607 int16 var_i16_1060;
608 int16 _polyominoPosX; // var_i16_1062
609 int16 _polyominoPosY; // var_i16_1064
610 int16 _jumbleGameType; // var_i16_1068
611 int16 var_i16_106a;
612 SourceMode var_i16_106c;
613 int16 var_i16_106e;
614 int16 _jumblePosition; // var_i16_106e
615 Common::U32String var_str_1070;
616 Common::U32String _sentenceBuffer; // var_str_1070
617 Common::U32String _metapuzzleSecretGoal; // var_str_1170
618 Common::U32String var_str_1170;
619 int16 var_i16_1270;
620 Common::U32String _metapuzzleSecretBuffer;
621 Common::String _straightPathGoal; // var_str_1272
622 Common::U32String _sentenceGoal; // var_str_1272
623 int16 var_i16_1372;
624
625 Common::U32String var_str_1374;
626 Common::U32String var_str_1474;
627 int16 var_i16_1574;
628 int16 _straightPathSelected; // var_i16_1574
629 int16 _jumbleSelected; // var_i16_1574
630 int16 var_i16_1576;
631
632 Common::U32String var_str_1578;
633
634 int16 var_i16_1678;
635 int16 var_i16_167a;
636 Common::U32String var_str_167c;
637 Common::U32String var_str_177c;
638
639 int16 var_i16_187c;
640 int16 var_i16_187e;
641 int16 var_i16_1880;
642 int16 var_i16_1882;
643 int16 var_i16_1884;
644 int16 var_i16_1886;
645 int16 var_i16_1888;
646 int16 var_i16_188a;
647 int16 var_i16_188c;
648
649 Common::U32String var_str_188e;
650
651 int16 var_i16_198e;
652 int16 var_i16_1990;
653 int16 var_i16_1992;
654 Common::U32String var_str_1994;
655
656 int16 var_i16_19ae;
657
658 int16 var_i16_1a94;
659 int16 var_i16_1a96;
660 int16 var_i16_1a98;
661 int16 var_i16_1a9a;
662 uint16 var_i16_1a9c;
663 int16 _jigsawPieceCount; // var_i16_1a9e
664 int16 var_i16_1aa0;
665 int16 _metapuzzleSecretCodeSpaceOffset; // var_i16_1aa2
666 int16 var_i16_1aa4;
667 int16 var_i16_1aa6;
668 int16 var_i16_1aa8;
669 int16 var_i16_1aaa;
670
671 int16 var_i16_1ab0; // var_i16_1ab0
672 int16 var_i16_1ab2;
673 int16 var_i16_1ab4;
674 int16 var_i16_1ab6;
675 int16 var_i16_1ab8;
676 int16 var_i16_1aba;
677 int16 var_i16_1abc;
678 int16 var_i16_1abe;
679 PicHandle var_i32_1ac0;
680 int16 var_i16_1ac4;
681 Common::String var_str_1ac8;
682 int16 var_i16_1bc8;
683
684 int16 _mazePlayerX; // var_i16_1bcc
685 int16 _mazePlayerY; // var_i16_1bce
686 int16 var_i16_1bd0;
687
688 int16 _mazePlayerDirection; // var_i16_1bd2
689 int16 var_i16_1bd4;
690 int16 var_i16_1bd6;
691 int16 var_i16_1bd8;
692 int16 var_i16_1bda;
693 bool _mazeClearText; // var_i16_1bdc
694 Common::String var_str_1bde;
695
696 int16 var_i16_1cde;
697 int16 var_i16_1ce0;
698 Common::String var_str_1ce2;
699
700 int16 var_i16_1de2;
701 int16 var_i16_1de4;
702
703 int16 var_i16_1de6;
704
705 int16 var_i16_1de8;
706 int16 var_i16_1dea;
707 int16 var_i16_1dec;
708
709 int16 var_i16_1df0;
710
711 PatternMode var_i16_1dee;
712 SourceMode var_src_1dee;
713
714 int16 var_i16_1df2;
715 int16 mazeToneFreq; // var_i16_1df4
716 int16 var_i16_1df6;
717 int16 var_i16_1df8;
718 int16 var_i16_1dfa;
719 int16 var_i16_1dfc;
720 int16 var_i16_1dfe;
721
722 int16 var_i16_1e00;
723 int16 mazeToneFreqStep; // var_i16_1e02
724 int16 var_i16_1e04;
725
726 int16 var_i16_1e06;
727
728 uint16 var_i16_1f08;
729 int16 var_i16_1f0a;
730 Common::U32String _metapuzzleSecretCodeCipher; // var_str_1f0c
731
732 int16 _metapuzzleSecretCodeCount; // var_i16_200c
733 int16 var_i16_200e;
734 int16 var_i16_2010;
735 int16 var_i16_2012;
736 int16 var_i16_2014;
737 int16 var_i16_2016;
738 int16 var_i16_2018;
739 Common::U32String var_str_201a;
740 int16 var_i16_211a;
741 Common::U32String var_str_211c;
742
743
744 int16 var_i16_221c;
745 int16 var_i16_221e;
746 Common::U32String var_str_2222;
747 int16 var_i16_2322;
748 int16 _hermitPathStage; // var_i16_2324
749 int16 var_i16_2326;
750 int16 var_i16_2328;
751 uint32 var_ptr_232a;
752 Handle var_bytes_232a;
753 int16 var_i16_232e;
754
755 int16 var_i16_2330;
756 int16 var_i16_2332;
757
758 int16 var_i16_2338;
759 bool _deathWhiteEyeNeedsDraw; // var_i16_233a
760 int16 _justiceFirstMove; // var_i16_233e
761 int16 _humbugTrailIndex; // var_i16_233c
762
763 // FIXME: bounds on the following are guessed! need to trace index range
764 int16 _pageLineRanges[202]; // arr_i16_0
765 int16 _pageLineFace[1301]; // arr_i16_194
766 int16 _pageLineBreak[1301]; // arr_i16_bbe
767 int16 arr_i16_15e8[101];
768 int16 arr_i16_16b2[0x100];
769 int16 _puzzleType[101]; // arr_i16_18b2
770 int16 _puzzleUnlockChapter[101]; // arr_i16_197c
771 int16 _pageToChapter[101]; // arr_i16_1a46
772 int16 _puzzleMenuInstructions[0x40]; // arr_i16_1b10
773 int16 _pageVisible[101]; // arr_i16_1b90
774 int16 _puzzleCompletionStatus[101]; // arr_i16_1c5a
775 uint16 _puzzleFlags[101]; // arr_i16_1d24
776 int16 _pageLines[202]; // arr_i16_1dee
777 int16 arr_i16_1eb8[0x29];
778 // used just for death?
779 Common::Rect _deathBlackEye; // arr_rect_1eb8
780 Common::Rect _screenGrid[0x200]; // arr_rect_1f38
781 int16 arr_i16_2f38[0x400]; // arr_i16_2f38, 96x32?
782 int16 arr_i16_3738[0x200];
783 int16 arr_i16_3b38[0x400]; // 96x32?
784 Common::Rect arr_rect_4338;
785 // general-purpose puzzle buffer
786 int16 arr_i16_4338[0x200];
787 uint16 _bitLUT[16]; // arr_i16_4738
788 int16 arr_i16_4758[15];
789 Common::Rect arr_rect_4776;
790 int16 arr_i16_47d8[0x100];
791 PicHandle _polyominoPics[0x80]; // arr_pic_49d8
792 int16 _sunMapTileID[0x52]; // arr_i16_4bd8
793 int16 arr_i16_4c7c[0x52];
794 int16 arr_i16_4d20[52];
795 Common::SharedPtr<Cursor> _cursors[0x2b]; // arr_curs_4d88, 0x44
796 Pattern _patterns[0x51]; // arr_pat_58f4
797 int16 arr_i16_5bbc[128];
798 int16 arr_i16_5cbc[128];
799 int16 _mazeInvItemCount[128]; // arr_i16_5cbc
800 float arr_bcd_5dbc[8];
801 BitMap _scrollPage; // arr_bmp_5dfc 22000, close to a screen page
802 BitMap _jigsawPieces[128];
803 Common::Point _humbugTrail[0xa43];
804 BitMap arr_bmp_b3ec;
805 BitMap arr_bmp_bbbc; // used by death
806 BitMap arr_bmp_c38c; // used by death
807 BitMap arr_bmp_fa3c;
808 Handle arr_bytes_109dc; // used for data buffering
809 BitMap arr_bmp_109dc;
810 BitMap arr_bmp_138bc;
811 GrafPort arr_grafport_18eae;
812 GrafPort arr_grafport_18f78;
813 GrafPort arr_grafport_19042;
814 GrafPort arr_grafport_19042_thoth;
815 // Also 109dc and 15fcc
816 Common::Rect arr_rect_1910c;
817 Common::Rect arr_rect_19114;
818 PicHandle _sunMapTilePic[0x54]; // arr_i32_1912c
819 PicHandle arr_i32_192c0[101];
820 PolyHandle _revealPoly[101]; // arr_poly_192c0
821 int32 _puzzleDataOffsets[101]; // arr_i32_19454
822 Common::U32String _puzzleName[101]; // arr_str_195e8, 0x20 each
823
824 Common::U32String _pageNumberText[101]; // arr_str_1a288, 0x10 each
825
826 Common::U32String _modalText[13]; // arr_str_1a8d8, 0x66 each
827 Common::Rect _screenClipRect; // arr_rect_1ae06
828
829 // demo only
830 int16 _demoChapters[101]; // arr_i16_18f04
831};
832
833}
834
835#endif // FOOL_GAME_H
Definition: str.h:59
Definition: ustr.h:57
Definition: fool_game.h:109
Definition: zbasic.h:203
Definition: toolbox.h:313
Definition: toolbox.h:573
Definition: rect.h:144
Definition: rect.h:536
Definition: toolbox.h:486
Definition: toolbox.h:452
Definition: toolbox.h:98
Definition: toolbox.h:48
Definition: toolbox.h:537
Definition: toolbox.h:481