22 #ifndef MADS_NEBULAR_ROOMS_THUNKS_H 23 #define MADS_NEBULAR_ROOMS_THUNKS_H 25 #include "common/rect.h" 26 #include "mads/core/config.h" 27 #include "mads/core/game.h" 28 #include "mads/core/inter.h" 29 #include "mads/core/kernel.h" 30 #include "mads/core/mcga.h" 31 #include "mads/core/object.h" 32 #include "mads/core/player.h" 33 #include "mads/core/sprite.h" 34 #include "mads/core/text.h" 35 #include "mads/nebular/global.h" 38 namespace RexNebular {
41 #define CURSOR_ARROW CURSOR_NORMAL 42 #define CURSOR_GO_DOWN CURSOR_DOWN 43 #define CURSOR_GO_UP CURSOR_UP 44 #define CURSOR_GO_LEFT CURSOR_LEFT 45 #define CURSOR_GO_RIGHT CURSOR_RIGHT 48 EXT_NONE = -1, EXT_SS = 1, EXT_AA = 2, EXT_DAT = 3, EXT_HH = 4,
49 EXT_ART = 5, EXT_INT = 6
53 kInputBuildingSentences = INTER_BUILDING_SENTENCES,
54 kInputConversation = INTER_CONVERSATION,
55 kInputLimitedSentences = INTER_LIMITED_SENTENCES
58 enum SequenceTrigger {
59 SEQUENCE_TRIGGER_EXPIRE = KERNEL_TRIGGER_EXPIRE,
60 SEQUENCE_TRIGGER_LOOP = KERNEL_TRIGGER_LOOP,
61 SEQUENCE_TRIGGER_SPRITE = KERNEL_TRIGGER_SPRITE
65 SEQUENCE_TRIGGER_NONE = -1,
66 SEQUENCE_TRIGGER_PARSER = KERNEL_TRIGGER_PARSER,
67 SEQUENCE_TRIGGER_DAEMON = KERNEL_TRIGGER_DAEMON,
68 SEQUENCE_TRIGGER_PREPARE = KERNEL_TRIGGER_PREPARSE
73 ANIMTYPE_CYCLED = AA_LINEAR,
74 ANIMTYPE_PING_PONG = AA_PINGPONG,
75 ANIMTYPE_STAMP = AA_STAMP
79 CAT_NONE = 0, CAT_COMMAND = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3,
80 CAT_HOTSPOT = 4, CAT_INV_ANIM = 5, CAT_TALK_ENTRY = 6, CAT_INV_SCROLLER = 7,
84 enum ScreenTransition {
88 kTransitionBoxInBottomLeft,
89 kTransitionBoxInBottomRight,
90 kTransitionBoxInTopLeft,
91 kTransitionBoxInTopRight,
92 kTransitionPanLeftToRight,
93 kTransitionPanRightToLeft,
109 STORYMODE_NAUGHTY = NAUGHTY, STORYMODE_NICE = NICE
114 #define kernel_animation kernel_anim[0].anim 115 #define kernel_animation_cycled kernel_anim[0].cycled 116 #define kernel_repeat_animation kernel_anim[0].repeat 117 #define kernel_animation_sprite_loaded kernel_anim[0].sprite_loaded 118 #define kernel_animation_buffer_id kernel_anim[0].buffer_id 119 #define kernel_animation_buffer kernel_anim[0].buffer 120 #define kernel_animation_frame kernel_anim[0].frame 121 #define kernel_animation_image kernel_anim[0].image 122 #define kernel_animation_doomed kernel_anim[0].doomed 123 #define kernel_animation_trigger_code kernel_anim[0].trigger_code 124 #define kernel_animation_trigger_mode kernel_anim[0].trigger_mode 125 #define kernel_animation_trigger_words kernel_anim[0].trigger_words 126 #define kernel_animation_next_clock kernel_anim[0].next_clock 131 int &_verbId = player2.words[0];
132 int &_objectNameId = player2.words[1];
133 int &_indirectObjectId = player2.words[2];
138 int &_lookFlag = player.look_around;
139 int &_mainObjectSource = player.main_object_source;
143 int &_mainObjectSource = player.main_object_source;
144 int &_lookFlag = player.look_around;
145 int &_inProgress = player.command_ready;
146 int &_commandSource = player.command_source;
151 int16 _spriteIndexes[30];
152 int16 _sequenceIndexes[30];
154 int16 &operator[](
int idx);
159 Scene *operator->() {
162 const Scene *operator->()
const {
170 int *
const _spriteListIndexes;
172 uint16 &_frameEntriesCount;
173 Image *
const _frameEntries;
184 bool operator!()
const {
185 return kernel_anim[_id].anim ==
nullptr;
187 bool operator!=(std::nullptr_t)
const {
188 return kernel_anim[_id].anim !=
nullptr;
190 bool operator==(std::nullptr_t)
const {
191 return kernel_anim[_id].anim ==
nullptr;
193 explicit operator bool()
const {
194 return kernel_anim[_id].anim !=
nullptr;
198 int getCurrentFrame()
const;
199 void setNextFrameTimer(
long time);
200 long getNextFrameTimer();
201 void setCurrentFrame(
int frameNum);
202 void resetSpriteSetsCount();
212 int &x = inter_point_x;
213 int &y = inter_point_y;
218 byte &_articleNumber;
224 int add(
int vocab_id,
int verb_id,
int auto_sequence,
const Common::Rect &r);
225 void remove(
int dyn_id);
226 int setPosition(
int id,
const Common::Point &pt,
int facing);
227 int setCursor(
int id,
int cursor);
234 void activate(
int hotspot,
int active);
243 const TalkFont *operator->()
const {
262 int add(
const Common::Point &pt, uint fontColor, uint8 flags,
int endTrigger,
263 uint32 timeout,
const char *msg);
264 int addQuote(
int quoteId,
int endTrigger, uint32 timeout);
265 void remove(
int msgIndex);
267 void setQuoted(
int msgIndex,
int numTicks,
bool quoted);
268 void setSeqIndex(
int msgIndex,
int seqIndex);
270 void initRandomMessages(
int maxSimultaneousMessages,
271 const Common::Rect &bounds,
int minYSpacing,
int scrollRate,
272 int color,
int duration,
int quoteId, ...);
275 bool generateRandom(
int major,
int minor);
305 int16 addSpriteCycle(
int series_id,
int mirror, word ticks, word expire = 0,
306 word start_ticks = 0,
int interval_ticks = 0);
307 int16 addReverseSpriteCycle(
int series_id,
int mirror, word ticks, word expire = 0,
308 word start_ticks = 0,
int interval_ticks = 0);
309 int startPingPongCycle(
int series_id,
int mirror, word ticks, word expire = 0,
310 word start_ticks = 0,
int interval_ticks = 0);
312 void remove(
int sequence_id);
315 int16 addSubEntry(
int sequence_id,
int trigger_type,
int trigger_sprite,
int trigger_code);
316 void setDepth(
int sequence_id,
int depth);
317 void setScale(
int sequence_id,
int scale);
318 void setAnimRange(
int sequence_id,
int first,
int last);
319 void addTimer(
int ticks,
int trigger_code);
320 void setMsgLayout(
int sequence_id);
322 void setMotion(
int sequence_id,
int flags,
int delta_x_times_100,
int delta_y_times_100);
323 void updateTimeout(
int new_sequence_id,
int old_sequence_id);
325 int startCycle(
int srcSpriteIdx,
bool flipped,
int cycleIndex);
326 void setDone(
int sequence_id);
327 int findByTrigger(
int trigger);
336 const CharInfo *operator->()
const {
352 const Sprite *operator->()
const {
358 int16 addSprites(
const char *name,
int load_flags = 0);
359 void remove(
int sprite_id);
360 Sprite operator[](
int idx);
371 int &_selectedInvIndex = active_inven;
372 void emptyConversationList();
373 void setup(
int inputMode);
374 void selectObject(
int item_id);
378 int16 &_priorSceneId = previous_room;
379 int16 &_nextSceneId = new_room;
380 long &_frameStartTime = kernel.clock;
381 byte &_reloadSceneFlag = kernel.force_restart;
382 byte &_roomChanged = kernel.teleported_in;
383 int &_currentSceneId = room_id;
384 int &_textSpacing = kernel_message_spacing;
386 int loadAnimation(
const char *name,
int trigger_code = 0);
387 void freeAnimation();
388 void changeVariant(
int num);
389 void drawElements(
int transitionType,
bool surfaceFlag);
391 void clearSequenceList();
392 void addActiveVocab(
int vocab_id);
400 const Game *operator->()
const {
404 Globals &_globals = Rooms::_globals;
411 int getQuality(
int quality_id);
412 void setQuality(
int quality_id,
long quality_value);
413 bool hasQuality(
int quality_id);
419 return inven_num_objects;
421 int &operator[](
int index) {
427 void addToInventory(
int object_id);
428 bool isInRoom(
int object_id)
const;
429 bool isInInventory(
int object_id)
const;
430 int getIdFromDesc(
int desc_id)
const;
431 void setRoom(
int object_id,
int roomNum);
432 void removeFromInventory(
int objectId,
int newScene);
435 Object operator[](
int idx);
454 return x == rhs.
x && y == rhs.
y;
457 return x != rhs.
x || y != rhs.
y;
463 int &x = player.prepare_walk_x;
464 int &y = player.prepare_walk_y;
476 return x == rhs.
x && y == rhs.
y;
482 int &x = player.target_x;
483 int &y = player.target_y;
495 return x == rhs.
x && y == rhs.
y;
500 int &_facing = player.facing;
501 int &_prepareFacing = player.prepare_walk_facing;
502 bool &_visible = player.walker_visible;
503 bool &_stepEnabled = player.commands_allowed;
504 int &_turnToFacing = player.turn_to_facing;
505 char *
const q = &player.series_name[0];
506 byte &_spritesChanged = player.walker_must_reload;
507 bool &_beenVisible = player.walker_been_visible;
508 byte &_loadsFirst = player.walker_loads_first;
509 int &_needToWalk = player.need_to_walk;
510 int &_readyToWalk = player.ready_to_walk;
511 int &_special = player.special_code;
512 long &_priorTimer = player.clock;
513 int &_ticksAmount = player.frame_delay;
514 char *
const _spritesPrefix = &player.series_name[0];
515 int &_moving = player.walking;
516 int &_walkOffScreenSceneId = player.walk_off_edge_to_room;
517 int &_prepareWalkFacing = player.prepare_walk_facing;
518 int &_spritesStart = player.series_base;
519 int &_frameNumber = player.sprite;
520 int &_forceRefresh = player.sprite_changed;
521 int &_walkAnywhere = player.walk_anywhere;
525 void cancelCommand();
527 void removePlayerSprites();
532 Scene &_scene = Rooms::_scene;
535 int &_inputMode = inter_input_mode;
540 byte &_sceneRevisited = player.been_here_before;
542 void add(
int roomNum);
543 bool exists(
int roomNum)
const;
548 int &_trigger = kernel.trigger;
549 int &_triggerSetupMode = kernel.trigger_setup_mode;
550 char *
const _aaName = kernel.interface;
551 int8 &_difficulty = game.difficulty;
552 byte &_widepipeCtr = kernel.cheating;
553 int &_storyMode = config_file.naughtiness;
554 int &_winStatus = win_status;
556 void loadQuoteSet(
int quote1, ...);
557 char *getQuote(
int quote_id);
558 void splitQuote(
const char *source,
char *line1,
char *line2);
563 static char *formatName(
int my_room,
char type,
int num,
int ext,
const char *text);
564 static char *formatAAName(
int num);
571 const VM *operator->()
const {
577 int &x = text_default_x;
578 int &y = text_default_y;
590 return x == rhs.
x && y == rhs.
y;
598 const Dialogs *operator->()
const {
603 void show(
int object_id,
int id);
604 void showItem(
int object_id,
int message,
int speech = 0);
612 const Events *operator->()
const {
616 void setCursor2(
int cursorNum);
619 int32 getFrameCounter();
624 Game &_game = Rooms::_game;
634 void setEntry(
int color,
int r,
int g,
int b);
635 void refreshSceneColors();
637 void setColorFlags(byte r, byte g, byte b);
638 void setColorValues(byte r, byte g, byte b);
639 void fadeOut(
Palette palette, byte *paletteMap,
int baseColor,
int numColors,
640 int baseGrey,
int numGreys,
int tickDelay,
int steps);
648 const Screen *operator->()
const {
652 word &_shakeCountdown = mcga_shakes;
657 Sound *operator->() {
660 const Sound *operator->()
const {
664 void command(
int num,
int distance = 0);
668 int &_musicFlag = config_file.music_flag;
670 int getRandomNumber(
int min,
int max);
671 int getRandomNumber(
int max);
675 extern char *formAnimName(
char type,
int num);
678 RETURNING_FROM_DIALOG = KERNEL_RESTORING_GAME,
679 RETURNING_FROM_LOADING = KERNEL_STARTING_GAME
Definition: anim_timer.h:27
Definition: movie_decoder.h:32
Definition: atari-screen.h:42