Initial commit
This commit is contained in:
481
engines/tony/tonychar.h
Normal file
481
engines/tony/tonychar.h
Normal file
@@ -0,0 +1,481 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This code is based on original Tony Tough source code
|
||||
*
|
||||
* Copyright (c) 1997-2003 Nayma Software
|
||||
*/
|
||||
|
||||
#ifndef TONY_TONYCHAR_H
|
||||
#define TONY_TONYCHAR_H
|
||||
|
||||
#include "common/coroutines.h"
|
||||
#include "tony/loc.h"
|
||||
|
||||
namespace Tony {
|
||||
|
||||
class RMTony : public RMCharacter {
|
||||
private:
|
||||
enum CharacterDirection {
|
||||
UP, DOWN, LEFT, RIGHT
|
||||
};
|
||||
|
||||
public:
|
||||
enum CharacterTalkType {
|
||||
TALK_NORMAL,
|
||||
TALK_HIPS,
|
||||
TALK_SING,
|
||||
TALK_LAUGH,
|
||||
TALK_INDICATE,
|
||||
TALK_SCARED,
|
||||
TALK_SCARED2,
|
||||
TALK_WITHGLASSES,
|
||||
TALK_WITHHAMMER,
|
||||
TALK_WITHWORM,
|
||||
TALK_WITHROPE,
|
||||
TALK_WITHRABBIT,
|
||||
TALK_WITHRECIPE,
|
||||
TALK_WITHCARDS,
|
||||
TALK_WITHSNOWMAN,
|
||||
TALK_WITHSNOWMANSTATIC,
|
||||
TALK_WITHRABBITSTATIC,
|
||||
TALK_WITHRECIPESTATIC,
|
||||
TALK_WITHCARDSSTATIC,
|
||||
TALK_WITH_NOTEBOOK,
|
||||
TALK_WITHMEGAPHONESTATIC,
|
||||
TALK_WITHBEARDSTATIC,
|
||||
TALK_LAUGH2,
|
||||
TALK_DISGUSTED,
|
||||
TALK_SARCASTIC,
|
||||
TALK_MACBETH1,
|
||||
TALK_MACBETH2,
|
||||
TALK_MACBETH3,
|
||||
TALK_MACBETH4,
|
||||
TALK_MACBETH5,
|
||||
TALK_MACBETH6,
|
||||
TALK_MACBETH7,
|
||||
TALK_MACBETH8,
|
||||
TALK_MACBETH9,
|
||||
TALK_SCAREDSTATIC,
|
||||
TALK_WITHSECRETARY
|
||||
};
|
||||
|
||||
private:
|
||||
bool _bShow;
|
||||
bool _bShowShadow;
|
||||
bool _bBodyFront;
|
||||
// Useless variable?
|
||||
// RMGfxSourceBuffer8AB _shadow;
|
||||
bool _bActionPending;
|
||||
RMItem *_actionItem;
|
||||
int _action;
|
||||
int _actionParm;
|
||||
static bool _bAction;
|
||||
|
||||
bool _bShepherdess;
|
||||
|
||||
bool _bIsStaticTalk;
|
||||
bool _bIsTalking;
|
||||
int _nPatB4Talking;
|
||||
CharacterTalkType _nTalkType;
|
||||
CharacterDirection _talkDirection;
|
||||
RMPoint _nBodyOffset;
|
||||
|
||||
int _nTimeLastStep;
|
||||
|
||||
RMItem _body;
|
||||
uint32 _hActionThread;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Overload of the allocation allocation of sprites
|
||||
*/
|
||||
RMGfxSourceBuffer *newItemSpriteBuffer(int dimx, int dimy, bool bPreRLE) override;
|
||||
|
||||
/**
|
||||
* Watch thread which waits for the end of an action
|
||||
*/
|
||||
static void waitEndOfAction(CORO_PARAM, const void *param);
|
||||
|
||||
public:
|
||||
enum CharacterPatterns {
|
||||
PAT_TAKEUP_UP1 = 9,
|
||||
PAT_TAKEUP_UP2,
|
||||
PAT_TAKEUP_MID1,
|
||||
PAT_TAKEUP_MID2,
|
||||
PAT_TAKEUP_DOWN1,
|
||||
PAT_TAKEUP_DOWN2,
|
||||
|
||||
PAT_TAKELEFT_UP1,
|
||||
PAT_TAKELEFT_UP2,
|
||||
PAT_TAKELEFT_MID1,
|
||||
PAT_TAKELEFT_MID2,
|
||||
PAT_TAKELEFT_DOWN1,
|
||||
PAT_TAKELEFT_DOWN2,
|
||||
|
||||
PAT_TAKERIGHT_UP1,
|
||||
PAT_TAKERIGHT_UP2,
|
||||
PAT_TAKERIGHT_MID1,
|
||||
PAT_TAKERIGHT_MID2,
|
||||
PAT_TAKERIGHT_DOWN1,
|
||||
PAT_TAKERIGHT_DOWN2,
|
||||
|
||||
PAT_GETUPLEFT,
|
||||
PAT_ONTHEFLOORLEFT,
|
||||
PAT_GETUPRIGHT,
|
||||
PAT_ONTHEFLOORRIGHT,
|
||||
|
||||
// Sheperdess!
|
||||
PAT_PAST_WALKUP,
|
||||
PAT_PAST_WALKDOWN,
|
||||
PAT_PAST_WALKLEFT,
|
||||
PAT_PAST_WALKRIGHT,
|
||||
|
||||
PAT_PAST_STANDUP,
|
||||
PAT_PAST_STANDDOWN,
|
||||
PAT_PAST_STANDLEFT,
|
||||
PAT_PAST_STANDRIGHT,
|
||||
|
||||
// Speech
|
||||
PAT_TALK_UP,
|
||||
PAT_TALK_DOWN,
|
||||
PAT_TALK_LEFT,
|
||||
PAT_TALK_RIGHT,
|
||||
|
||||
// Static head
|
||||
PAT_HEAD_UP,
|
||||
PAT_HEAD_DOWN,
|
||||
PAT_HEAD_LEFT,
|
||||
PAT_HEAD_RIGHT,
|
||||
|
||||
// Laugh
|
||||
PAT_LAUGHLEFT_START,
|
||||
PAT_LAUGHLEFT_LOOP,
|
||||
PAT_LAUGHLEFT_END,
|
||||
PAT_LAUGHRIGHT_START,
|
||||
PAT_LAUGHRIGHT_LOOP,
|
||||
PAT_LAUGHRIGHT_END,
|
||||
|
||||
// Speaking as a shepherdess
|
||||
PAT_PAST_TALKUP,
|
||||
PAT_PAST_TALKDOWN,
|
||||
PAT_PAST_TALKLEFT,
|
||||
PAT_PAST_TALKRIGHT,
|
||||
|
||||
// Fear
|
||||
PAT_SCAREDLEFT_START,
|
||||
PAT_SCAREDLEFT_LOOP,
|
||||
PAT_SCAREDLEFT_END,
|
||||
PAT_SCAREDRIGHT_START,
|
||||
PAT_SCAREDRIGHT_LOOP,
|
||||
PAT_SCAREDRIGHT_END,
|
||||
PAT_SCAREDDOWN_START,
|
||||
PAT_SCAREDDOWN_LOOP,
|
||||
PAT_SCAREDDOWN_END,
|
||||
|
||||
// With objects: full body
|
||||
PAT_WITHGLASSES,
|
||||
PAT_WITHROPE,
|
||||
PAT_WITHWORM,
|
||||
PAT_WITHHAMMER,
|
||||
|
||||
// Sound the whistle
|
||||
PAT_WHISTLERIGHT,
|
||||
|
||||
// Head with beard
|
||||
PAT_TALKBEARD_LEFT,
|
||||
PAT_TALKBEARD_RIGHT,
|
||||
|
||||
// Sniff
|
||||
PAT_SNIFF_LEFT,
|
||||
PAT_SNIFF_RIGHT,
|
||||
|
||||
// Disgusted
|
||||
PAT_DISGUSTEDLEFT_START,
|
||||
PAT_DISGUSTEDLEFT_LOOP,
|
||||
PAT_DISGUSTEDLEFT_END,
|
||||
PAT_DISGUSTEDRIGHT_START,
|
||||
PAT_DISGUSTEDRIGHT_LOOP,
|
||||
PAT_DISGUSTEDRIGHT_END,
|
||||
PAT_SARCASTICLEFT_START,
|
||||
PAT_SARCASTICLEFT_LOOP,
|
||||
PAT_SARCASTICLEFT_END,
|
||||
PAT_SARCASTICRIGHT_START,
|
||||
PAT_SARCASTICRIGHT_LOOP,
|
||||
PAT_SARCASTICRIGHT_END,
|
||||
|
||||
// Stand scared
|
||||
PAT_SCAREDLEFT_STAND,
|
||||
PAT_SCAREDRIGHT_STAND,
|
||||
PAT_SCAREDDOWN_STAND,
|
||||
|
||||
PAT_PUTLEFT_UP1,
|
||||
PAT_PUTLEFT_UP2,
|
||||
PAT_PUTRIGHT_UP1,
|
||||
PAT_PUTRIGHT_UP2,
|
||||
PAT_PUTLEFT_MID1,
|
||||
PAT_PUTLEFT_MID2,
|
||||
PAT_PUTRIGHT_MID1,
|
||||
PAT_PUTRIGHT_MID2,
|
||||
PAT_PUTLEFT_DOWN1,
|
||||
PAT_PUTLEFT_DOWN2,
|
||||
PAT_PUTRIGHT_DOWN1,
|
||||
PAT_PUTRIGHT_DOWN2,
|
||||
PAT_PUTUP_UP1,
|
||||
PAT_PUTUP_UP2,
|
||||
PAT_PUTUP_MID1,
|
||||
PAT_PUTUP_MID2,
|
||||
PAT_PUTUP_DOWN1,
|
||||
PAT_PUTUP_DOWN2,
|
||||
|
||||
PAT_WITHSECRETARY
|
||||
};
|
||||
|
||||
enum CharacterBodyPatterns {
|
||||
BPAT_STANDUP = 1,
|
||||
BPAT_STANDDOWN,
|
||||
BPAT_STANDLEFT,
|
||||
BPAT_STANDRIGHT,
|
||||
|
||||
BPAT_HAMMER,
|
||||
BPAT_SNOWMAN,
|
||||
BPAT_WORM,
|
||||
BPAT_GLASS,
|
||||
|
||||
BPAT_SINGLEFT_START,
|
||||
BPAT_SINGLEFT_LOOP,
|
||||
BPAT_SINGLEFT_END,
|
||||
|
||||
BPAT_HIPSLEFT_START,
|
||||
BPAT_HIPSLEFT_LOOP,
|
||||
BPAT_HIPSLEFT_END,
|
||||
BPAT_HIPSRIGHT_START,
|
||||
BPAT_HIPSRIGHT_LOOP,
|
||||
BPAT_HIPSRIGHT_END,
|
||||
BPAT_HIPSUP_START,
|
||||
BPAT_HIPSUP_LOOP,
|
||||
BPAT_HIPSUP_END,
|
||||
BPAT_HIPSDOWN_START,
|
||||
BPAT_HIPSDOWN_LOOP,
|
||||
BPAT_HIPSDOWN_END,
|
||||
|
||||
BPAT_LAUGHLEFT,
|
||||
BPAT_LAUGHRIGHT,
|
||||
|
||||
BPAT_INDICATELEFT,
|
||||
BPAT_INDICATERIGHT,
|
||||
|
||||
BPAT_SCAREDDOWN_START,
|
||||
BPAT_SCAREDDOWN_LOOP,
|
||||
BPAT_SCAREDDOWN_END,
|
||||
BPAT_SCAREDLEFT_START,
|
||||
BPAT_SCAREDLEFT_LOOP,
|
||||
BPAT_SCAREDLEFT_END,
|
||||
BPAT_SCAREDRIGHT_START,
|
||||
BPAT_SCAREDRIGHT_LOOP,
|
||||
BPAT_SCAREDRIGHT_END,
|
||||
BPAT_SCAREDUP_START,
|
||||
BPAT_SCAREDUP_LOOP,
|
||||
BPAT_SCAREDUP_END,
|
||||
|
||||
BPAT_ROPE,
|
||||
|
||||
BPAT_WITHRABBITLEFT_START,
|
||||
BPAT_WITHRABBITLEFT_LOOP,
|
||||
BPAT_WITHRABBITLEFT_END,
|
||||
BPAT_WITHRABBITRIGHT_START,
|
||||
BPAT_WITHRABBITRIGHT_LOOP,
|
||||
BPAT_WITHRABBITRIGHT_END,
|
||||
|
||||
BPAT_WITHRECIPELEFT_START,
|
||||
BPAT_WITHRECIPELEFT_LOOP,
|
||||
BPAT_WITHRECIPELEFT_END,
|
||||
BPAT_WITHRECIPERIGHT_START,
|
||||
BPAT_WITHRECIPERIGHT_LOOP,
|
||||
BPAT_WITHRECIPERIGHT_END,
|
||||
|
||||
BPAT_WITHCARDSLEFT_START,
|
||||
BPAT_WITHCARDSLEFT_LOOP,
|
||||
BPAT_WITHCARDSLEFT_END,
|
||||
BPAT_WITHCARDSRIGHT_START,
|
||||
BPAT_WITHCARDSRIGHT_LOOP,
|
||||
BPAT_WITHCARDSRIGHT_END,
|
||||
|
||||
BPAT_WITHSNOWMANLEFT_START,
|
||||
BPAT_WITHSNOWMANLEFT_LOOP,
|
||||
BPAT_WITHSNOWMANLEFT_END,
|
||||
BPAT_WITHSNOWMANRIGHT_START,
|
||||
BPAT_WITHSNOWMANRIGHT_LOOP,
|
||||
BPAT_WITHSNOWMANRIGHT_END,
|
||||
|
||||
BPAT_WITHNOTEBOOKLEFT_START,
|
||||
BPAT_WITHNOTEBOOKLEFT_LOOP,
|
||||
BPAT_WITHNOTEBOOKLEFT_END,
|
||||
BPAT_WITHNOTEBOOKRIGHT_START,
|
||||
BPAT_WITHNOTEBOOKRIGHT_LOOP,
|
||||
BPAT_WITHNOTEBOOKRIGHT_END,
|
||||
|
||||
BPAT_WITHMEGAPHONELEFT_START,
|
||||
BPAT_WITHMEGAPHONELEFT_LOOP,
|
||||
BPAT_WITHMEGAPHONELEFT_END,
|
||||
BPAT_WITHMEGAPHONERIGHT_START,
|
||||
BPAT_WITHMEGAPHONERIGHT_LOOP,
|
||||
BPAT_WITHMEGAPHONERIGHT_END,
|
||||
|
||||
BPAT_WITHBEARDLEFT_START,
|
||||
BPAT_WITHBEARDLEFT_END,
|
||||
BPAT_WITHBEARDRIGHT_START,
|
||||
BPAT_WITHBEARDRIGHT_END,
|
||||
BPAT_WITHBEARDLEFT_STATIC,
|
||||
BPAT_WITHBEARDRIGHT_STATIC,
|
||||
|
||||
BPAT_MACBETH1,
|
||||
BPAT_MACBETH2,
|
||||
BPAT_MACBETH3,
|
||||
BPAT_MACBETH4,
|
||||
BPAT_MACBETH5,
|
||||
BPAT_MACBETH6,
|
||||
BPAT_MACBETH7,
|
||||
BPAT_MACBETH8,
|
||||
BPAT_MACBETH9,
|
||||
|
||||
BPAT_WITHSECRETARY
|
||||
};
|
||||
|
||||
public:
|
||||
static void initStatics();
|
||||
RMTony();
|
||||
|
||||
/**
|
||||
* Initialize Tony
|
||||
*/
|
||||
void init();
|
||||
|
||||
/**
|
||||
* Free all memory
|
||||
*/
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Tony makes a frame, updating the movement, etc.
|
||||
*/
|
||||
void doFrame(CORO_PARAM, RMGfxTargetBuffer *bigBuf, int curLoc);
|
||||
|
||||
/**
|
||||
* Draw method, which controls chararacter display
|
||||
*/
|
||||
void draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) override;
|
||||
|
||||
/**
|
||||
* Show or hide
|
||||
*/
|
||||
void show();
|
||||
void hide(bool bShowShadow = false);
|
||||
|
||||
/**
|
||||
* Move and make an action, if necessary
|
||||
*/
|
||||
void moveAndDoAction(CORO_PARAM, RMPoint dst, RMItem *item, int nAction, int nActionParm = 0);
|
||||
|
||||
/**
|
||||
* Tony stops (on the right side with respect to any subject)
|
||||
*/
|
||||
void stop(CORO_PARAM) override;
|
||||
void stopNoAction(CORO_PARAM);
|
||||
|
||||
/**
|
||||
* Set a pattern
|
||||
*/
|
||||
void setPattern(int npatt, bool bPlayP0 = false) override;
|
||||
|
||||
/**
|
||||
* Reads the current pattern
|
||||
*/
|
||||
int getCurPattern() override;
|
||||
|
||||
/**
|
||||
* Waits until the end of a pattern
|
||||
*/
|
||||
void waitForEndPattern(CORO_PARAM, uint32 hCustomSkip = CORO_INVALID_PID_VALUE);
|
||||
|
||||
/**
|
||||
* Check if currently in an action
|
||||
*/
|
||||
bool inAction();
|
||||
|
||||
/**
|
||||
* Check if there needs to be an update for scrolling movement
|
||||
*/
|
||||
bool mustUpdateScrolling();
|
||||
|
||||
/**
|
||||
* Returns Tony's position
|
||||
*/
|
||||
RMPoint position();
|
||||
|
||||
/**
|
||||
* Set the scrolling position
|
||||
*/
|
||||
void setScrollPosition(const RMPoint &pt);
|
||||
|
||||
/**
|
||||
* Set the take animation
|
||||
*/
|
||||
void take(int nWhere, int nPart);
|
||||
void put(int nWhere, int nPart);
|
||||
|
||||
/**
|
||||
* Start or End Talk
|
||||
*/
|
||||
bool startTalkCalculate(CharacterTalkType nTalkType, int &headStartPat, int &bodyStartPat,
|
||||
int &headLoopPat, int &bodyLoopPat);
|
||||
void startTalk(CORO_PARAM, CharacterTalkType nTalkType);
|
||||
bool endTalkCalculate(int &headStandPat, int &headEndPat, int &bodyEndPat, int &finalPat, bool &bStatic);
|
||||
void endTalk(CORO_PARAM);
|
||||
|
||||
/**
|
||||
* Start or End Static
|
||||
*/
|
||||
void startStaticCalculate(CharacterTalkType nTalk, int &headPat, int &headLoopPat,
|
||||
int &bodyStartPat, int &bodyLoopPat);
|
||||
void startStatic(CORO_PARAM, CharacterTalkType nTalkType);
|
||||
void endStaticCalculate(CharacterTalkType nTalk, int &bodyEndPat, int &finalPat, int &headEndPat);
|
||||
void endStatic(CORO_PARAM, CharacterTalkType nTalkType);
|
||||
|
||||
/**
|
||||
* Tony disguises himself!
|
||||
*/
|
||||
void setShepherdess(bool bIsPast);
|
||||
|
||||
int getShepherdess();
|
||||
|
||||
/**
|
||||
* Perform an action
|
||||
*/
|
||||
void executeAction(int nAction, int nActionItem, int nParm);
|
||||
|
||||
void playSfx(int nSfx);
|
||||
};
|
||||
|
||||
} // End of namespace Tony
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user