ScummVM API documentation
eden.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 CRYO_EDEN_H
23#define CRYO_EDEN_H
24
25#include "common/file.h"
26#include "common/savefile.h"
27#include "common/serializer.h"
28
29#include "cryo/sound.h"
30#include "cryo/defs.h"
31
32enum Direction {
33 kCryoNorth = 0,
34 kCryoEast = 1,
35 kCryoSouth = 2,
36 kCryoWest = 3
37};
38
39namespace Cryo {
40
41class CryoEngine;
42class EdenGraphics;
43
44class EdenGame {
45private:
46
47 EdenGraphics *_graphics;
48
49public:
51 ~EdenGame();
52
53 void run();
54 object_t *getObjectPtr(int16 id);
55 void showObjects();
56 void saveFriezes();
57 void useBank(int16 bank);
58 void musicspy();
59 void fademusica0(int16 delay);
60 void wait(int howlong);
61 bool isObjectHere(int16 id);
62 void display();
63
64 void setMouseCenterX(uint16 xpos);
65 void setMouseCenterY(uint16 ypos);
66
67 void stopMusic();
68
69 uint16 getMouseCenterX();
70 uint16 getMouseCenterY();
71
72 bool dialoscansvmas(Dialog *dial);
73 void musique();
74 void preloadDialogs(int16 vid);
75 Common::SeekableReadStream *loadSubStream(uint16 num);
76 bool personIsTalking();
77 bool animationIsActive();
78 byte *getImageDesc();
79 byte *getPlaceRawBuf();
80 byte getActionCursor(byte value);
81 int16 getNumTextLines();
82 int16 getScrollPos();
83 /*
84 * Identify person based on current video number
85 */
86 perso_t *personSubtitles();
87
88 int16 getGameIconY(int16 index);
89 int16 getGameIconX(int16 index);
90
91 byte *getGameDialogs();
92
93 bool getSpecialTextMode();
94 void setSpecialTextMode(bool value);
95
96 void setCursorSaved(bool cursorSaved);
97 bool getCursorSaved();
98 bool getNoPalette();
99 int16 getCurBankNum();
100 byte *getCurKeepBuf();
101 byte *getBankData();
102 int16 getCurPosX();
103 void setCurPosX(int16 xpos);
104 int16 getCurPosY();
105 void setCurPosY(int16 ypos);
106 byte *getGlowBuffer();
107 void setMusicFade(byte value);
108 bool isMouseHeld();
109 void setMouseHeld();
110 void setMouseNotHeld();
111
112 global_t *_globals; // TODO: Make private and use getters
113 CryoEngine *_vm;
114
115private:
116 void removeConsole();
117 void scroll();
118 void resetScroll();
119 void scrollFrescoes();
120 void displayFrescoes();
121 void gametofresques();
122 void doFrescoes();
123 void actionEndFrescoes();
124 void scrollMirror();
125 void scrollPanel();
126 void displayFollower(Follower *follower, int16 x, int16 y);
127 void characterInMirror();
128 void gameToMirror(byte arg1);
129 void flipMode();
130 void quitMirror();
131 void clictimbre();
132 void actionClickValleyPlan();
133 void gotoPlace(Goto *go);
134 void deplaval(uint16 roomNum);
135 void move(Direction dir);
136 void move2(Direction dir);
137 void actionDinoBlow();
138 void actionPlateMonk();
139 void actionGraaFrescoe();
140 void actionLascFrescoe();
141 void actionPushStone();
142 void actionMummyHead();
143 void actionSkelettonHead();
144 void actionSkelettonMoorkong();
145 void actionChoose();
146 void handleDinaDialog();
147 void handleKingDialog();
148 void actionKingDialog1();
149 void actionKingDialog2();
150 void actionKingDialog3();
151 void actionGetKnife();
152 void actionGetPrism();
153 void actionGetMushroom();
154 void actionGetBadMushroom();
155 void actionGetGold();
156 void actionGetFullNest();
157 void actionGetEmptyNest();
158 void actionGetHorn();
159 void actionGetSunStone();
160 void actionGetEgg();
161 void actionGetTablet();
162 void actionLookLake();
163 void actionGotoHall();
164 void actionLabyrinthTurnAround();
165 void actionGotoFullNest();
166 void actionGotoVal();
167 void actionVisit();
168 void actionFinal();
169 void actionMoveNorth();
170 void actionMoveEast();
171 void actionMoveSouth();
172 void actionMoveWest();
173
174 void afficher128();
175
176
177 void restoreFriezes();
178
179 void useMainBank();
180 void useCharacterBank();
181
182 void drawTopScreen();
183 void displayValleyMap();
184 void displayMapMark(int16 index, int16 location);
185 void displayAdamMapMark(int16 location);
186 void restoreAdamMapMark();
187 void saveAdamMapMark(int16 x, int16 y);
188 bool istrice(int16 roomNum);
189 bool istyran(int16 roomNum);
190 void istyranval(Area *area);
191 char getDirection(perso_t *perso);
192 bool canMoveThere(char loc, perso_t *perso);
193 void scramble1(uint8 elem[4]);
194 void scramble2(uint8 elem[4]);
195 void scrambleDirections();
196 bool naitredino(char persoType);
197 void newCitadel(char area, int16 level, Room *room);
198 void evolveCitadel(int16 level);
199 void destroyCitadelRoom(int16 roomNum);
200 void narratorBuildCitadel();
201 void citadelFalls(char level);
202 void buildCitadel();
203 void moveDino(perso_t *perso);
204 void moveAllDino();
205 void newValley();
206 char whereIsCita();
207 bool isCita(int16 loc);
208 void placeVava(Area *area);
209 void vivredino();
210 void vivreval(int16 areaNum);
211 void handleDay();
212 void addTime(int16 t);
213 void animCharacter();
214 void getanimrnd();
215 void addanim();
216 void removeMouthSprite();
217 void AnimEndCharacter();
218 void setCharacterSprite(byte *spr);
219 void displayCharacter1();
220 void displayCharacter();
221 void ef_perso();
222 void loadCharacter(perso_t *perso);
223 void loadCurrCharacter();
224 void fin_perso();
225 void no_perso();
226 void closeCharacterScreen();
227 void displayBackgroundFollower();
228 void displayNoFollower(int16 bank);
229 void displayCharacterBackground1();
230 void displayCharacterBackground();
231 void setCharacterIcon();
232 void showCharacter();
233 void displayCharacterPanel();
234 void getDataSync();
235 int16 readFrameNumber();
236 void waitEndSpeak();
237 void my_bulle();
238 void my_pr_bulle();
239 void drawSubtitleChar(byte c, byte color, int16 width);
240
241 void patchSentence();
242 void vavapers();
243 void citadelle();
244 void selectZone();
245 void showEvents1();
246 void showEvents();
247 void parle_mfin();
248 void parlemoi_normal();
249 void parle_moi();
250 void initCharacterPointers(perso_t *perso);
251 void perso1(perso_t *perso);
252 void perso_normal(perso_t *perso);
253 void handleCharacterDialog(int16 pers);
254 void actionKing();
255 void actionDina();
256 void actionThoo();
257 void actionMonk();
258 void actionTormentor();
259 void actionMessenger();
260 void actionMango();
261 void actionEve();
262 void actionAzia();
263 void actionMammi();
264 void actionGuards();
265 void actionBamboo();
266 void actionKabuka();
267 void actionFisher();
268 void actionDino();
269 void actionTyran();
270 void actionMorkus();
271 void comment();
272 void actionAdam();
273 void setChoiceYes();
274 void setChoiceNo();
275 bool isAnswerYes();
276 void specialMushroom(perso_t *perso);
277 void specialEmptyNest(perso_t *perso);
278 void specialNestWithEggs(perso_t *perso);
279 void specialApple(perso_t *perso);
280 void specialGold(perso_t *perso);
281 void specialPrism(perso_t *perso);
282 void specialTalisman(perso_t *perso);
283 void specialMask(perso_t *perso);
284 void specialBag(perso_t *perso);
285 void specialTrumpet(perso_t *perso);
286 void specialWeapons(perso_t *perso);
287 void specialInstrument(perso_t *perso);
288 void specialEgg(perso_t *perso);
289 void tyranDies(perso_t *perso);
290 void specialObjects(perso_t *perso, char objid);
291 void dialautoon();
292 void dialautooff();
293 void follow();
294 void dialonfollow();
295 void abortDialogue();
296 void subHandleNarrator();
297 void handleNarrator();
298 void checkPhraseFile();
299 byte *getPhrase(int16 id);
300 void actionGotoMap();
301 void record();
302 bool dial_scan(Dialog *dial);
303
304 bool dialogEvent(perso_t *perso);
305 void characterStayHere();
306 void endDeath(int16 vid);
307 void chronoEvent();
308 void setChrono(int16 t);
309
310
311 void verifh(byte *ptr);
312 void openbigfile();
313 void closebigfile();
314 void loadRawFile(uint16 num, byte *buffer);
315 void loadIconFile(uint16 num, Icon *buffer);
316 void loadRoomFile(uint16 num, Room *buffer);
317 int loadSound(uint16 num);
318 void convertMacToPC();
319 void loadpermfiles();
320 bool ReadDataSyncVOC(unsigned int num);
321 bool ReadDataSync(uint16 num);
322 void loadpartoffile(uint16 num, void *buffer, int32 pos, int32 len);
323 void expandHSQ(byte *input, byte *output);
324 void addInfo(byte info);
325 void unlockInfo();
326 void nextInfo();
327 void removeInfo(byte info);
328 void updateInfoList();
329 void initGlobals();
330
331 void closeRoom();
332 void displayPlace();
333 void loadPlace(int16 num);
334 void specialoutside();
335 void specialout();
336 void specialin();
337 void animpiece();
338 void getdino(Room *room);
339 Room *getRoom(int16 loc);
340 void initPlace(int16 roomNum);
341 void maj2();
342 void updateRoom1(int16 roomNum);
343 void updateRoom(uint16 roomNum);
344 void allocateBuffers();
345 void freebuf();
346 void EmergencyExit();
347 void edmain();
348 void intro();
349 void enterGame();
350 void signon(const char *s);
351 void FRDevents();
352 Icon *scan_icon_list(int16 x, int16 y, int16 index);
353 void updateCursor();
354 void mouse();
355
356 void startmusique(byte num);
357
358 int loadmusicfile(int16 num);
359 void persovox();
360 void endCharacterSpeech();
361 void fademusicup();
362
363 void countObjects();
364 void winObject(int16 id);
365 void loseObject(int16 id);
366 void lostObject();
367
368 void objectmain(int16 id);
369 void getObject(int16 id);
370 void putObject();
371 void newObject(int16 id, int16 arg2);
372 void giveobjectal(int16 id);
373 void giveObject();
374 void actionTakeObject();
375 void newMushroom();
376 void newEmptyNest();
377 void newNestWithEggs();
378 void newGold();
379 void gotoPanel();
380 void noclicpanel();
381 void generique();
382 void cancel2();
383 void testvoice();
384 void load();
385 void initafterload();
386 void save();
387 void desktopcolors();
388 void panelrestart();
389 void reallyquit();
390 void confirmer(char mode, char yesId);
391 void confirmYes();
392 void confirmNo();
393 void restart();
394 void edenQuit();
395 void choseSubtitleOption();
396 void changeVolume();
397 void changervol();
398 void newvol(byte *volptr, int16 delta);
399 void playtape();
400 void rewindtape();
401 void moveTapeCursor();
402 void displayTapeCursor();
403 void forwardTape();
404 void stopTape();
405 void clickTapeCursor();
406 void displayPanel();
407 void displayLanguage();
408 void displayVolCursor(int16 x, int16 vol1, int16 vol2);
409 void displayCursors();
410 void selectCursor(int itemId);
411 void displayTopPanel();
412 void displayResult();
413 void restrictCursorArea(int16 xmin, int16 xmax, int16 ymin, int16 ymax);
414 void edenShudown();
415 void habitants(perso_t *perso);
416 void suiveurs(perso_t *perso);
417 void evenements(perso_t *perso);
418 void followme(perso_t *perso);
419 void rangermammi(perso_t *perso, Room *room);
420 void perso_ici(int16 action);
421 void setCharacterHere();
422 void faire_suivre(int16 roomNum);
423 void AddCharacterToParty();
424 void addToParty(int16 index);
425 void removeCharacterFromParty();
426 void removeFromParty(int16 index);
427 void handleEloiDeparture();
428 bool checkEloiReturn();
429 void handleEloiReturn();
430 void incPhase();
431 void phase113();
432 void phase130();
433 void phase161();
434 void phase226();
435 void phase257();
436 void phase353();
437 void phase369();
438 void phase371();
439 void phase385();
440 void phase418();
441 void phase433();
442 void phase434();
443 void phase513();
444 void phase514();
445 void phase529();
446 void phase545();
447 void phase561();
448 void bigphase1();
449 void bigphase();
450 void phase16();
451 void phase32();
452 void phase48();
453 void phase64();
454 void phase80();
455 void phase96();
456 void phase112();
457 void phase128();
458 void phase144();
459 void phase160();
460 void phase176();
461 void phase192();
462 void phase208();
463 void phase224();
464 void phase240();
465 void phase256();
466 void phase272();
467 void phase288();
468 void phase304();
469 void phase320();
470 void phase336();
471 void phase352();
472 void phase368();
473 void phase384();
474 void phase400();
475 void phase416();
476 void phase432();
477 void phase448();
478 void phase464();
479 void phase480();
480 void phase496();
481 void phase512();
482 void phase528();
483 void phase544();
484 void phase560();
485 void saveGame(char *name);
486 void loadrestart();
487 void loadgame(char *name);
488 void syncGame(Common::Serializer s);
489 void syncGlobalPointers(Common::Serializer s);
490 void syncGlobalValues(Common::Serializer s);
491 void syncCitadelRoomPointers(Common::Serializer s);
492 void syncTapePointers(Common::Serializer s);
493 char testCondition(int16 index);
494 uint16 operAdd(uint16 v1, uint16 v2);
495 uint16 operSub(uint16 v1, uint16 v2);
496 uint16 operLogicalAnd(uint16 v1, uint16 v2);
497 uint16 operLogicalOr(uint16 v1, uint16 v2);
498 uint16 operIsEqual(uint16 v1, uint16 v2);
499 uint16 operIsSmaller(uint16 v1, uint16 v2);
500 uint16 operIsGreater(uint16 v1, uint16 v2);
501 uint16 operIsDifferent(uint16 v1, uint16 v2);
502 uint16 operIsSmallerOrEqual(uint16 v1, uint16 v2);
503 uint16 operIsGreaterOrEqual(uint16 v1, uint16 v2);
504 uint16 operFalse(uint16 v1, uint16 v2);
505 uint16 operation(byte op, uint16 v1, uint16 v2);
506 uint16 fetchValue();
507 uint8 getByteVar(uint16 offset);
508 uint16 getWordVar(uint16 offset);
509 void actionNop();
510 void initSinCosTable();
511 void makeMatriceFix();
512 void projectionFix(Cube *cube, int n);
513 void initCubeMac();
514 void engineMac();
515 void displayObject(Cube *cube);
516 void loadMap(int file_id, byte *buffer);
517 void NEWcharge_objet_mob(Cube *cube, int fileNum, byte *texturePtr);
518 void DELETEcharge_objet_mob(Cube *cubep);
519 static int nextVal(char **ptr, char *error);
520 void selectMap(int16 num);
521 void Eden_dep_and_rot();
522 void restoreZDEP();
523 void displayPolygoneMapping(Cube *cube, CubeFace *face);
524 void drawMappingLine(int16 r3, int16 r4, int16 r5, int16 r6, int16 r7, int16 r8, int16 r9, int16 r10, int16 *lines);
525 void displayMappingLine(int16 r3, int16 r4, byte *target, byte *texture);
526 void LostEdenMac_InitPrefs();
527
528 void initCubePC();
529 void enginePC();
530 void selectPCMap(int16 num);
531
532 void makeTables();
533 void getSinCosTables(unsigned short angle, signed char **cos_table, signed char **sin_table);
534 void rotatePoint(XYZ *point, XYZ *rpoint);
535 void mapPoint(XYZ *point, short *x, short *y);
536 short calcFaceArea(XYZ *face);
537 void paintPixel(XYZ *point, unsigned char pixel);
538 void paintFace0(XYZ *point);
539 void paintFace1(XYZ *point);
540 void paintFace2(XYZ *point);
541 void paintFace3(XYZ *point);
542 void paintFace4(XYZ *point);
543 void paintFace5(XYZ *point);
544 void paintFaces();
545 void renderCube();
546
547 void incAngleX(int step);
548 void decAngleX();
549 void incAngleY(int step);
550 void decAngleY();
551 void incZoom();
552 void decZoom();
553
554 CubeCursor *_pcCursor;
555
556 int16 tab1[30];
557 int16 tab2[30];
558 int8 tab3[36][71];
559 int16 _angleX, _angleY, _angleZ, _zoomZ, _zoomZStep;
560
561 int8 *_cosX, *_sinX;
562 int8 *_cosY, *_sinY;
563 int8 *_cosZ, *_sinZ;
564
565 uint8 *_face[6], *_newface[6];
566 int16 _faceSkip;
567
568 uint8 _cursor[40 * 40];
569 uint8 *_cursorCenter;
570
571 byte _ownObjects[128];
572
573private:
574 int16 _scrollPos;
575 int16 _oldScrollPos;
576 bool _frescoTalk;
577 byte _oldPix[8];
578 Common::Point _adamMapMarkPos;
579 byte _cursKeepBuf[2500];
580 bool _torchCursor;
581 int16 _curBankNum;
582 bool _paletteUpdateRequired;
583 bool _cursorSaved;
584 bool _backgroundSaved;
585 byte *_bankData;
586 perso_t *_tyranPtr;
587 int _lastAnimFrameNumb;
588 int _curAnimFrameNumb;
589 int _lastAnimTicks;
590 int16 _numAnimFrames;
591 int16 _maxPersoDesc;
592 int16 _numImgDesc;
593 bool _restartAnimation;
594 bool _animationActive;
595 byte _animationDelay;
596 byte _animationIndex;
597 byte _lastAnimationIndex;
598
599 byte *dword_30724;
600 byte *dword_30728; //TODO: rename - something amim-related
601 byte *_mouthAnimations;
602 byte *_animationTable;
603 byte _imageDesc[512];
604 byte *_characterBankData;
605 int16 _numTextLines;
606 byte _sentenceBuffer[400];
607 byte phraseIconsBuffer[10];
608 byte _sentenceCoordsBuffer[22];
609 byte *_textOutPtr;
610 byte *textout;
611 object_t *_curSpecialObject;
612 bool _lastDialogChoice;
613 bool parlemoiNormalFlag;
614
615 bool _closeCharacterDialog;
616 int dword_30B04;
617
618 char _lastPhrasesFile;
619 byte _dialogSkipFlags;
620
621 byte *_voiceSamplesBuffer; //TODO: sound sample buffer
622 Common::File _bigfile;
623 byte _infoList[16];
624 byte *_mainBankBuf;
625 byte *_musicBuf;
626 byte *_gameLipsync;
627 byte *_gamePhrases;
628 byte *_gameDialogs; //TODO: rename to dialogs?
629 byte *_gameConditions;
630 byte *_placeRawBuf; //TODO: fixme
631 byte *_bankDataBuf;
632 Icon *_gameIcons;
633 Room *_gameRooms;
634 PakHeaderNode *_bigfileHeader;
635 byte *_glowBuffer;
636
637 byte *_gameFont; //TODO: rename to font?
638
639 uint16 _mouseCenterX;
640 uint16 _mouseCenterY;
641 bool _bufferAllocationErrorFl;
642 bool _quitFlag2;
643 bool _quitFlag3;
644 bool _gameStarted;
645 bool _soundAllocated;
646
647 CSoundChannel *_musicChannel;
648 CSoundChannel *_voiceChannel;
649
650 int _demoCurrentTicks;
651 int _demoStartTicks;
652 int _currentTime;
653 int16 _cirsorPanX;
654 int16 _inventoryScrollDelay;
655 int16 _cursorPosX;
656 int16 _cursorPosY;
657 int16 _currCursor;
658 Icon *_currSpot;
659 Icon *_curSpot2;
660 bool _mouseHeld;
661 bool _normalCursor;
662
663 bool _specialTextMode;
664 int _voiceSamplesSize; //TODO: perso vox sample data len
665 int16 _musicRightVol;
666 int16 _musicLeftVol;
667
668 bool _animateTalking;
669 bool _personTalking;
670 byte _musicFadeFlag;
671
672 char _musicSequencePos;
673 bool _musicPlayingFlag;
674
675 byte *_musicSamplesPtr;
676 byte *_musicPatternsPtr; //TODO: sndblock_t ?
677 byte *_musSequencePtr;
678 bool _musicEnabledFlag;
679 uint16 *_currentObjectLocation;
680 bool byte_31D64;
681
682 bool _noPalette;
683 bool _gameLoaded;
684#define MAX_TAPES 16
685 tape_t _tapes[MAX_TAPES];
686 byte _confirmMode;
687 byte *_curSliderValuePtr;
688 byte _lastMenuItemIdLo;
689 int16 _lastTapeRoomNum;
690 int16 _curSliderX;
691 int16 _curSliderY;
692 int16 _destinationRoom;
693 int16 word_31E7A; // CHECKME: Unused?
694
695 int16 word_378CC; // TODO: set by CLComputer_Init to 0
696 int16 word_378CE; // CHECKME: Unused
697
698 int _invIconsCount;
699 int _invIconsBase;
700 int _roomIconsBase;
701
703 int16 _cosTable[361];
704 int16 _sinTable[361];
705 int _passMat31, _passMat21, _passMat11;
706 int _passMat32, _passMat22, _passMat12;
707 int _passMat33, _passMat23, _passMat13;
708 int16 _rotationAngleY; // CHECKME: USeless?
709 int16 _rotationAngleX, _rotationAngleZ;
710 float _translationY, _translationX; // CHECKME: Useless?
711 Cube _cube;
712 int16 _cursCurPCMap;
713 int16 _lines[200 * 8];
714 byte _cubeTexture[0x4000];
715 int _cubeFaces;
716 uint32 _cursorOldTick, _cursorNewTick;
717 byte *_codePtr;
718
719 uint8 tab_2CB1E[8][4];
720
721 const unsigned int kMaxMusicSize; // largest .mus file size
722
723 // Loaded from cryo.dat
724 Follower _followerList[15];
725 byte _labyrinthPath[70];
726 char _dinoSpeedForCitadelLevel[16];
727 char _tabletView[12];
728 char _personRoomBankTable[84]; // special character backgrounds for specific rooms
729
730 // Loaded from cryo.dat - Area transition descriptors
731 Goto _gotos[130];
732 object_t _objects[42];
733 uint16 _objectLocations[45];
734 perso_t _persons[58];
735 Citadel _citadelList[7];
736
737 // Loaded from cryo.dat
738 Common::Rect _characterRects[19];
739 byte _characterArray[20][5];
740 Area _areasTable[12];
741 int16 tab_2CEF0[64];
742 int16 tab_2CF70[64];
743 byte _actionCursors[299];
744 byte _mapMode[12];
745 byte _cubeTextureCoords[3][6 * 2 * 3 * 2];
746
747 int32 _translationZ;
748 int8 _zDirection; // 1 (up) or -1 (down)
749
750 // Torch/glow related
751 int16 _torchTick;
752 int16 _glowIndex;
753 int16 _torchCurIndex;
754
755 int _cursCenter;
756};
757
758}
759
760#endif
Definition: file.h:47
Definition: stream.h:745
Definition: serializer.h:80
Definition: sound.h:34
Definition: cryo.h:53
Definition: eden.h:44
Definition: eden_graphics.h:32
Definition: defs.h:768
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
Definition: rect.h:144
Definition: rect.h:536
Definition: defs.h:473
Definition: defs.h:777
Definition: defs.h:832
Definition: defs.h:805
Definition: defs.h:821
Definition: defs.h:376
Definition: defs.h:392
Definition: defs.h:414
Definition: defs.h:404
Definition: defs.h:435
Definition: defs.h:828
Definition: defs.h:597
Definition: defs.h:340
Definition: defs.h:309
Definition: defs.h:383