Files
scummvm-cursorfix/engines/bagel/hodjnpodj/riddles/riddles.h
2026-02-02 04:50:13 +01:00

188 lines
5.4 KiB
C++

/* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef HODJNPODJ_RIDDLES_H
#define HODJNPODJ_RIDDLES_H
#include "bagel/afxwin.h"
#include "bagel/hodjnpodj/hnplibs/stdinc.h"
#include "bagel/boflib/error.h"
#include "bagel/boflib/sound.h"
#include "bagel/hodjnpodj/hnplibs/sprite.h"
#include "bagel/hodjnpodj/hnplibs/text.h"
#include "bagel/hodjnpodj/hnplibs/button.h"
namespace Bagel {
namespace HodjNPodj {
namespace Riddles {
// Easter egg parameters
#define FISH_X 13
#define FISH_Y 40
#define NUM_FISH_CELS 25
#define SKIER_X 6
#define SKIER_Y 98
#define NUM_SKIER_CELS 14
#define NESSIE_X 17
#define NESSIE_Y 24
#define NUM_NESSIE_CELS 27
#define ANIM_X 5
#define ANIM_Y 24
#define ANIM_DX 211
#define ANIM_DY 173
#define ANIM_SLEEP 100 // In milliseconds
#define COLUMN_1_X 213
#define COLUMN_1_Y 25
#define COLUMN_1_DX 38
#define COLUMN_1_DY 195
#define COLUMN_2_X 332
#define COLUMN_2_Y 25
#define COLUMN_2_DX 50
#define COLUMN_2_DY 187
#define COLUMN_3_X 397
#define COLUMN_3_Y 25
#define COLUMN_3_DX 40
#define COLUMN_3_DY 197
#define COLUMN_4_X 451
#define COLUMN_4_Y 25
#define COLUMN_4_DX 63
#define COLUMN_4_DY 227
#define COLUMN_5_X 544
#define COLUMN_5_Y 25
#define COLUMN_5_DX 53
#define COLUMN_5_DY 38
#define COLUMN_6_X 560
#define COLUMN_6_Y 63
#define COLUMN_6_DX 63
#define COLUMN_6_DY 59
#define COLUMN_7_X 584
#define COLUMN_7_Y 122
#define COLUMN_7_DX 40
#define COLUMN_7_DY 88
#define COLUMN_WAV ".\\SOUND\\COLUMN.WAV"
#define MAX_RIDDLE_LENGTH 159
#define MIN_RIDDLE_LENGTH 20
#define MAX_ANSWERS 13
#define MAX_ANSWER_LENGTH 23
#define FISH_ANIM ".\\art\\ridfish.bmp"
#define FISH_WAV ".\\sound\\lakefish.wav"
#define NESS_ANIM ".\\art\\nessie.bmp"
#define NESS_WAV ".\\sound\\serpent.wav"
#define SKIER_ANIM ".\\art\\skier.bmp"
#define SKIER_WAV ".\\sound\\jetski.wav"
#include "common/pack-start.h" // START STRUCT PACKING
struct RIDDLE {
uint16 nSoundId;
char text[MAX_RIDDLE_LENGTH + 1];
char answers[MAX_ANSWERS][MAX_ANSWER_LENGTH + 1];
} PACKED_STRUCT;
#include "common/pack-end.h" // END STRUCT PACKING
class CMyEdit: public CEdit {
protected:
void OnChar(unsigned int, unsigned int, unsigned int);
void OnSysChar(unsigned int, unsigned int, unsigned int);
void OnKeyDown(unsigned int, unsigned int, unsigned int);
void OnSysKeyDown(unsigned int, unsigned int, unsigned int);
DECLARE_MESSAGE_MAP()
};
class CRiddlesWindow : public CFrameWnd {
private:
CBrush cBrush;
public:
CRiddlesWindow();
void PlayGame();
void PaintScreen();
void LoadIniSettings();
void ParseAnswer(const char *);
void GamePause();
void GameResume();
private:
void OnSoundNotify(CSound *pSound);
protected:
void FlushInputEvents();
bool CheckUserGuess(const char *);
ERROR_CODE RepaintSpriteList();
ERROR_CODE LoadRiddle();
ERROR_CODE BuildSpriteList();
ERROR_CODE DisplayLine(const char *, int, int, int);
int CharToIndex(char);
ERROR_CODE ValidateRiddle(RIDDLE *);
ERROR_CODE LoadMasterSprites();
void GameReset();
virtual bool OnCommand(WPARAM wParam, LPARAM lParam) override;
void HandleError(ERROR_CODE);
void DeleteSprite(CSprite *);
void OnPaint();
void OnMouseMove(unsigned int, CPoint);
void OnLButtonDown(unsigned int, CPoint);
void OnClose();
void OnSetFocus(CWnd *);
void OnTimer(uintptr);
LRESULT OnMCINotify(WPARAM, LPARAM);
LRESULT OnMMIONotify(WPARAM, LPARAM);
HBRUSH OnCtlColor(CDC *, CWnd *, unsigned int);
DECLARE_MESSAGE_MAP()
CRect m_rNewGameButton;
CMyEdit *m_pEditText = nullptr;
CPalette *m_pGamePalette = nullptr;
CBmpButton *m_pScrollButton = nullptr;
RIDDLE *m_pRiddle = nullptr;
CSprite *m_pSunDial = nullptr;
CSound *m_pSoundTrack = nullptr;
int m_nTimeLimit = 0;
int m_nInitTimeLimit = 0;
int m_nTimer = 0;
int m_nDifficultyLevel = 0;
unsigned int m_nRiddleNumber = 0;
bool m_bGameActive = false;
bool m_bPause = false;
bool m_bIgnoreScrollClick = false;
};
} // namespace Riddles
} // namespace HodjNPodj
} // namespace Bagel
#endif