1 #ifndef __A_MORPH__
2 #define __A_MORPH__
3 
4 #define MORPHTICS (40*TICRATE)
5 #define MAXMORPHHEALTH 30
6 
7 // Morph style states how morphing affects health and
8 // other effects in the game; only valid for players.
9 // Default should be the old Heretic/HeXen behaviour,
10 // so (int) value of MORPH_OLDEFFECTS *must* be zero.
11 enum
12 {
13 	MORPH_OLDEFFECTS		= 0x00000000,	// Default to old Heretic/HeXen behaviour unless flags given
14 	MORPH_ADDSTAMINA		= 0x00000001,	// Player has a "power" instead of a "curse" (add stamina instead of limiting to health)
15 	MORPH_FULLHEALTH		= 0x00000002,	// Player uses new health semantics (!POWER => MaxHealth of animal, POWER => Normal health behaviour)
16 	MORPH_UNDOBYTOMEOFPOWER	= 0x00000004,	// Player unmorphs upon activating a Tome of Power
17 	MORPH_UNDOBYCHAOSDEVICE	= 0x00000008,	// Player unmorphs upon activating a Chaos Device
18 	MORPH_FAILNOTELEFRAG	= 0x00000010,	// Player stays morphed if unmorph by Tome of Power fails
19 	MORPH_FAILNOLAUGH		= 0x00000020,	// Player doesn't laugh if unmorph by Chaos Device fails
20 	MORPH_WHENINVULNERABLE	= 0x00000040,	// Player can morph when invulnerable but ONLY if doing it to themselves
21 	MORPH_LOSEACTUALWEAPON	= 0x00000080,	// Player loses specified morph weapon only (not "whichever they have when unmorphing")
22 	MORPH_NEWTIDBEHAVIOUR	= 0x00000100,	// Actor TID is by default transferred from the old actor to the new actor
23 	MORPH_UNDOBYDEATH		= 0x00000200,	// Actor unmorphs when killed and (unless MORPH_UNDOBYDEATHSAVES) stays dead
24 	MORPH_UNDOBYDEATHFORCED	= 0x00000400,	// Actor (if unmorphed when killed) forces unmorph (not very useful with UNDOBYDEATHSAVES)
25 	MORPH_UNDOBYDEATHSAVES	= 0x00000800,	// Actor (if unmorphed when killed) regains their health and doesn't die
26 	MORPH_UNDOBYTIMEOUT		= 0x00001000,	// Player unmorphs once countdown expires
27 	MORPH_UNDOALWAYS		= 0x00002000,	// Powerups must always unmorph, no matter what.
28 
29 	MORPH_STANDARDUNDOING	= MORPH_UNDOBYTOMEOFPOWER | MORPH_UNDOBYCHAOSDEVICE | MORPH_UNDOBYTIMEOUT,
30 };
31 
32 struct PClass;
33 class AActor;
34 class player_t;
35 class AMorphedMonster;
36 
37 bool P_MorphPlayer (player_t *activator, player_t *player, const PClass *morphclass, int duration = 0, int style = 0,
38 					const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
39 bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag = 0, bool force = false);
40 bool P_MorphMonster (AActor *actor, const PClass *morphclass, int duration = 0, int style = 0,
41 					 const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
42 bool P_UndoMonsterMorph (AMorphedMonster *beast, bool force = false);
43 bool P_UpdateMorphedMonster (AActor *actor);
44 bool P_MorphedDeath(AActor *actor, AActor **morphed, int *morphedstyle, int *morphedhealth);
45 
46 #endif //__A_MORPH__
47