25 #include "common/error.h" 26 #include "common/fs.h" 27 #include "common/keyboard.h" 28 #include "common/random.h" 29 #include "common/scummsys.h" 30 #include "common/serializer.h" 31 #include "common/system.h" 32 #include "common/util.h" 33 #include "engines/engine.h" 34 #include "graphics/screen.h" 36 #include "darkseed/animation.h" 37 #include "darkseed/console.h" 38 #include "darkseed/cursor.h" 39 #include "darkseed/cutscene.h" 40 #include "darkseed/detection.h" 41 #include "darkseed/inventory.h" 42 #include "darkseed/menu.h" 43 #include "darkseed/nsp.h" 44 #include "darkseed/objects.h" 45 #include "darkseed/player.h" 46 #include "darkseed/room.h" 47 #include "darkseed/sound.h" 48 #include "darkseed/sprites.h" 49 #include "darkseed/tostext.h" 50 #include "darkseed/usecode.h" 54 struct DarkseedGameDescription;
58 kDarkseedActionSelect,
59 kDarkseedActionChangeCommand,
60 kDarkseedActionTimeAdvance,
62 kDarkseedActionSkipCutscene
65 enum ActionMode : uint8 {
70 kUseHammerAction = 27,
73 enum class FadeDirection : uint8 {
82 Pic *_fullscreenPic =
nullptr;
83 bool _timeAdvanceEventSelected =
false;
84 uint8 _delbertspeech = 0;
86 bool _normalWorldSpritesLoaded =
true;
87 bool _redrawFrame =
true;
88 bool _restartGame =
false;
89 bool _canSaveGame =
false;
91 FadeDirection _fadeDirection = FadeDirection::NONE;
92 uint8 _fadeStepCounter = 0;
94 Pal _fadeTargetPalette;
102 bool _ct_voice_status =
false;
103 bool _isRightMouseClicked =
false;
104 bool _isLeftMouseClicked =
false;
105 Common::KeyCode _lastKeyPressed = Common::KeyCode::KEYCODE_INVALID;
107 Sound *_sound =
nullptr;
113 Room *_room =
nullptr;
114 int _actionMode = kPointerAction;
115 Player *_player =
nullptr;
122 Menu *_menu =
nullptr;
124 uint8 _currentDay = 1;
125 int _currentTimeInSeconds = 0x7e8e;
128 uint8 _previousRoomNumber = 0;
129 uint16 _targetRoomNumber = 0;
131 uint16 _headAcheMessageCounter = 0;
132 uint8 _headacheMessageIdx = 0;
134 int _sprite_y_scaling_threshold_maybe = 0xf0;
135 int _scaledWalkSpeed_maybe = 0;
136 uint16 _scaledSpriteWidth = 0;
137 uint16 _scaledSpriteHeight = 0;
139 int _frameBottom = 0;
142 bool _doorEnabled =
false;
143 bool _useDoorTarget =
false;
145 int16 _counter_2c85_888b = 0;
147 uint8 _targetPlayerDirection = 0;
149 uint8 _systemTimerCounter = 0;
151 bool _debugShowWalkPath =
false;
152 int _phoneStatus = 0;
154 int16 _soundTimer = 0;
155 bool _printedcomeheredawson =
false;
156 void zeroMouseButtons();
159 void gotoNextMorning();
161 void playDayChangeCutscene();
163 void removeFullscreenPic();
167 void waitForSpeech();
168 void waitForSpeechOrSfx();
170 void syncSoundSettings()
override;
171 void pauseEngineIntern(
bool pause)
override;
176 uint32 getFeatures()
const;
194 bool isDosVersion()
const {
195 return _gameDescription->
platform == Common::kPlatformDOS;
198 bool isCdVersion()
const {
199 return getFeatures() &
ADGF_CD;
202 bool isDosFloppy()
const {
203 return isDosVersion() && !isCdVersion();
206 bool isDosDemo()
const {
207 return isDosVersion() && getFeatures() &
ADGF_DEMO;
212 (f == kSupportsLoadingDuringRuntime) ||
213 (f == kSupportsSavingDuringRuntime) ||
214 (f == kSupportsReturnToLauncher);
218 return !isDosDemo() && !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying();
222 return _canSaveGame && !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying() && !_menu->isOpen();
240 changeToRoom(_room->_roomNumber);
249 void fadeIn(
const Pal &palette);
256 void updateDisplay();
257 void debugTeleportToRoom(
int newRoomNumber,
int entranceNumber);
259 void drawFullscreenPic();
260 void lookCode(
int objNum);
261 void handleObjCollision(
int targetObjNum);
262 void playSound(uint8 sfxId, uint8 priority, int16 unk2);
263 void nextFrame(
int nspAminIdx);
265 void throwmikeinjail();
267 void getPackageObj(
int packageType);
269 void changeToRoom(
int newRoomNumber,
bool placeDirectly =
false);
270 void waitxticks(
int ticks);
275 void updateBaseSprites();
279 void handlePointerAction();
280 void loadRoom(
int roomNumber);
282 void gotoSleepInJail();
284 void updateHeadache();
286 void initDelbertAtSide();
287 void movePlayerToDelbert();
288 void delbertThrowStick(int16 spriteNum);
294 #define SHOULD_QUIT ::Darkseed::g_engine->shouldQuit()
EngineFeature
Definition: engine.h:258
ErrorCode getCode() const
Definition: error.h:112
Definition: advancedDetector.h:164
No error occurred.
Definition: error.h:48
uint getRandomNumber(uint max)
Definition: serializer.h:79
uint32 getRandomNumber(uint maxNum)
Definition: darkseed.h:190
Common::Language language
Definition: advancedDetector.h:194
Definition: darkseed.h:79
bool hasFeature(EngineFeature f) const override
Definition: darkseed.h:210
Add "-cd" to gameid.
Definition: advancedDetector.h:155
Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave=false) override
Definition: darkseed.h:231
Definition: cutscene.h:34
bool canLoadGameStateCurrently(Common::U32String *msg) override
Definition: darkseed.h:217
Definition: animation.h:28
Add "-demo" to gameid.
Definition: advancedDetector.h:157
Common::Platform platform
Definition: advancedDetector.h:199
Definition: inventory.h:27
Definition: adlib_dsf.h:27
bool canSaveGameStateCurrently(Common::U32String *msg) override
Definition: darkseed.h:221
Common::Error loadGameStream(Common::SeekableReadStream *stream) override
Definition: darkseed.h:236
Language
Definition: language.h:45