mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 01:39:57 +00:00
bfcc4339c1
svn-id: r33280
210 lines
5.2 KiB
C++
210 lines
5.2 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 2
|
|
* 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, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*
|
|
* Should really be called "moving actors.h"
|
|
*/
|
|
|
|
#ifndef TINSEL_RINCE_H // prevent multiple includes
|
|
#define TINSEL_RINCE_H
|
|
|
|
#include "tinsel/anim.h" // for ANIM
|
|
#include "tinsel/scene.h" // for TFTYPE
|
|
|
|
namespace Tinsel {
|
|
|
|
struct OBJECT;
|
|
struct PROCESS;
|
|
|
|
enum NPS {NOT_IN, GOING_UP, GOING_DOWN, LEAVING, ENTERING};
|
|
|
|
enum IND {NO_PROB, TRY_CENTRE, TRY_CORNER, TRY_NEXTCORNER};
|
|
|
|
enum MAS {NO_MACTOR, NORM_MACTOR};
|
|
|
|
enum DIRREEL{ LEFTREEL, RIGHTREEL, FORWARD, AWAY };
|
|
|
|
enum {
|
|
NUM_MAINSCALES = 5,
|
|
NUM_AUXSCALES = 5,
|
|
TOTAL_SCALES = NUM_MAINSCALES + NUM_AUXSCALES
|
|
};
|
|
|
|
struct MACTOR {
|
|
|
|
int objx; /* Co-ordinates object */
|
|
int objy;
|
|
|
|
int targetX, targetY;
|
|
int ItargetX, ItargetY; /* Intermediate destination */
|
|
HPOLYGON hIpath;
|
|
int UtargetX, UtargetY; /* Ultimate destination */
|
|
HPOLYGON hUpath;
|
|
|
|
HPOLYGON hCpath;
|
|
|
|
bool over;
|
|
int ticket;
|
|
|
|
IND InDifficulty;
|
|
|
|
/* For use in 'follow nodes' polygons */
|
|
HPOLYGON hFnpath;
|
|
NPS npstatus;
|
|
int line;
|
|
|
|
int Tline; // NEW
|
|
|
|
bool TagReelRunning;
|
|
|
|
|
|
/* Used internally */
|
|
DIRREEL dirn; // Current reel
|
|
int scale; // Current scale
|
|
int scount; // Step count for walking reel synchronisation
|
|
|
|
unsigned fromx;
|
|
unsigned fromy;
|
|
|
|
bool bMoving; // Set this to TRUE during a walk
|
|
|
|
bool bNoPath;
|
|
bool bIgPath;
|
|
bool walkReel;
|
|
|
|
OBJECT *actorObj; // Actor's object
|
|
ANIM actorAnim; // Actor's animation script
|
|
|
|
SCNHANDLE lastfilm; // } Used by AlterActor()
|
|
SCNHANDLE pushedfilm; // }
|
|
|
|
int actorID;
|
|
int actorToken;
|
|
|
|
SCNHANDLE WalkReels[TOTAL_SCALES][4];
|
|
SCNHANDLE StandReels[TOTAL_SCALES][4];
|
|
SCNHANDLE TalkReels[TOTAL_SCALES][4];
|
|
|
|
MAS MActorState;
|
|
|
|
bool aHidden;
|
|
int SlowFactor; // Slow down movement while hidden
|
|
|
|
bool stop;
|
|
|
|
/* NOTE: If effect polys can overlap, this needs improving */
|
|
bool InEffect;
|
|
|
|
PROCESS *pProc;
|
|
};
|
|
typedef MACTOR *PMACTOR;
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
void MActorProcessCreate(int X, int Y, int id, MACTOR *pActor);
|
|
|
|
|
|
enum AR_FUNCTION { AR_NORMAL, AR_PUSHREEL, AR_POPREEL, AR_WALKREEL };
|
|
|
|
|
|
MACTOR *GetMover(int ano);
|
|
MACTOR *SetMover(int ano);
|
|
void KillMActor(MACTOR *pActor);
|
|
MACTOR *GetLiveMover(int index);
|
|
|
|
MAS getMActorState(MACTOR *psActor);
|
|
|
|
void hideMActor(MACTOR *pActor, int sf);
|
|
bool getMActorHideState(MACTOR *pActor);
|
|
void unhideMActor(MACTOR *pActor);
|
|
void DropMActors(void);
|
|
void MoveMActor(MACTOR *pActor, int x, int y);
|
|
|
|
void GetMActorPosition(MACTOR *pActor, int *aniX, int *aniY);
|
|
void GetMActorMidTopPosition(MACTOR *pActor, int *aniX, int *aniY);
|
|
int GetMActorLeft(MACTOR *pActor);
|
|
int GetMActorRight(MACTOR *pActor);
|
|
|
|
bool MActorIsInPolygon(MACTOR *pActor, HPOLYGON hPoly);
|
|
void AlterMActor(MACTOR *actor, SCNHANDLE film, AR_FUNCTION fn);
|
|
DIRREEL GetMActorDirection(MACTOR *pActor);
|
|
int GetMActorScale(MACTOR *pActor);
|
|
void SetMActorDirection(MACTOR *pActor, DIRREEL dirn);
|
|
void SetMActorStanding(MACTOR *actor);
|
|
void SetMActorWalkReel(MACTOR *actor, DIRREEL reel, int scale, bool force);
|
|
|
|
MACTOR *InMActorBlock(MACTOR *pActor, int x, int y);
|
|
|
|
void RebootMovers(void);
|
|
|
|
bool IsMAinEffectPoly(int index);
|
|
void SetMAinEffectPoly(int index, bool tf);
|
|
|
|
bool MAmoving(MACTOR *pActor);
|
|
|
|
int GetActorTicket(MACTOR *pActor);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
struct SAVED_MOVER {
|
|
|
|
MAS MActorState;
|
|
int actorID;
|
|
int objx;
|
|
int objy;
|
|
SCNHANDLE lastfilm;
|
|
|
|
SCNHANDLE WalkReels[TOTAL_SCALES][4];
|
|
SCNHANDLE StandReels[TOTAL_SCALES][4];
|
|
SCNHANDLE TalkReels[TOTAL_SCALES][4];
|
|
|
|
};
|
|
|
|
void SaveMovers(SAVED_MOVER *sMoverInfo);
|
|
void RestoreAuxScales(SAVED_MOVER *sMoverInfo);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Dodgy bit...
|
|
* These functions are now in MAREELS.C, but I can't be bothered to
|
|
* create a new header file.
|
|
*/
|
|
SCNHANDLE GetMactorTalkReel(MACTOR *pAactor, TFTYPE dirn);
|
|
|
|
void setscalingreels(int actor, int scale, int direction,
|
|
SCNHANDLE left, SCNHANDLE right, SCNHANDLE forward, SCNHANDLE away);
|
|
SCNHANDLE ScalingReel(int ano, int scale1, int scale2, DIRREEL reel);
|
|
void RebootScalingReels(void);
|
|
|
|
enum {
|
|
MAGICX = -101,
|
|
MAGICY = -102
|
|
};
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
} // end of namespace Tinsel
|
|
|
|
#endif /* TINSEL_RINCE_H */
|