Devilution
Diablo devolved - magic behind the 1996 computer game
monster.h
Go to the documentation of this file.
1 
6 #ifndef __MONSTER_H__
7 #define __MONSTER_H__
8 
9 extern int MissileFileFlag;
10 extern int monstkills[MAXMONSTERS];
11 extern int monstactive[MAXMONSTERS];
12 extern int nummonsters;
13 extern BOOLEAN sgbSaveSoundOn;
15 extern int totalmonsters;
17 extern int monstimgtot;
18 extern int uniquetrans;
19 extern int nummtypes;
20 
21 void InitMonsterTRN(int monst, BOOL special);
22 void InitLevelMonsters();
23 int AddMonsterType(int type, int placeflag);
24 void GetLevelMTypes();
25 void InitMonsterGFX(int monst);
26 void ClearMVars(int i);
27 void InitMonster(int i, int rd, int mtype, int x, int y);
28 void ClrAllMonsters();
29 BOOL MonstPlace(int xp, int yp);
30 void PlaceMonster(int i, int mtype, int x, int y);
31 void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize);
32 void PlaceQuestMonsters();
33 void PlaceGroup(int mtype, int num, int leaderf, int leader);
34 void LoadDiabMonsts();
35 void InitMonsters();
36 void PlaceUniques();
37 void SetMapMonsters(BYTE *pMap, int startx, int starty);
38 void DeleteMonster(int i);
39 int AddMonster(int x, int y, int dir, int mtype, BOOL InMap);
40 void NewMonsterAnim(int i, AnimStruct *anim, int md);
41 BOOL M_Ranged(int i);
42 BOOL M_Talker(int i);
43 void M_Enemy(int i);
44 int M_GetDir(int i);
45 void M_CheckEFlag(int i);
46 void M_StartStand(int i, int md);
47 void M_StartDelay(int i, int len);
48 void M_StartSpStand(int i, int md);
49 void M_StartWalk(int i, int xvel, int yvel, int xadd, int yadd, int EndDir);
50 void M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int EndDir);
51 void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int mapx, int mapy, int EndDir);
52 void M_StartAttack(int i);
53 void M_StartRAttack(int i, int missile_type, int dam);
54 void M_StartRSpAttack(int i, int missile_type, int dam);
55 void M_StartSpAttack(int i);
56 void M_StartEat(int i);
57 void M_ClearSquares(int i);
58 void M_GetKnockback(int i);
59 void M_StartHit(int i, int pnum, int dam);
60 void M_DiabloDeath(int i, BOOL sendmsg);
61 void M2MStartHit(int mid, int i, int dam);
62 void MonstStartKill(int i, int pnum, BOOL sendmsg);
63 void M2MStartKill(int i, int mid);
64 void M_StartKill(int i, int pnum);
65 void M_SyncStartKill(int i, int x, int y, int pnum);
66 void M_StartFadein(int i, int md, BOOL backwards);
67 void M_StartFadeout(int i, int md, BOOL backwards);
68 void M_StartHeal(int i);
69 void M_ChangeLightOffset(int monst);
70 BOOL M_DoStand(int i);
71 BOOL M_DoWalk(int i);
72 BOOL M_DoWalk2(int i);
73 BOOL M_DoWalk3(int i);
74 void M_TryM2MHit(int i, int mid, int hper, int mind, int maxd);
75 void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam);
76 BOOL M_DoAttack(int i);
77 BOOL M_DoRAttack(int i);
78 int M_DoRSpAttack(int i);
79 BOOL M_DoSAttack(int i);
80 BOOL M_DoFadein(int i);
81 BOOL M_DoFadeout(int i);
82 int M_DoHeal(int i);
83 int M_DoTalk(int i);
84 void M_Teleport(int i);
85 BOOL M_DoGotHit(int i);
86 void M_UpdateLeader(int i);
87 void DoEnding();
88 void PrepDoEnding();
89 BOOL M_DoDeath(int i);
90 BOOL M_DoSpStand(int i);
91 BOOL M_DoDelay(int i);
92 BOOL M_DoStone(int i);
93 void M_WalkDir(int i, int md);
94 void GroupUnity(int i);
95 BOOL M_CallWalk(int i, int md);
96 BOOL M_PathWalk(int i);
97 BOOL M_CallWalk2(int i, int md);
98 BOOL M_DumbWalk(int i, int md);
99 BOOL M_RoundWalk(int i, int md, int *dir);
100 void MAI_Zombie(int i);
101 void MAI_SkelSd(int i);
102 BOOL MAI_Path(int i);
103 void MAI_Snake(int i);
104 void MAI_Bat(int i);
105 void MAI_SkelBow(int i);
106 void MAI_Fat(int i);
107 void MAI_Sneak(int i);
108 void MAI_Fireman(int i);
109 void MAI_Fallen(int i);
110 void MAI_Cleaver(int i);
111 void MAI_Round(int i, BOOL special);
112 void MAI_GoatMc(int i);
113 void MAI_Ranged(int i, int missile_type, BOOL special);
114 void MAI_GoatBow(int i);
115 void MAI_Succ(int i);
116 void MAI_AcidUniq(int i);
117 void MAI_Scav(int i);
118 void MAI_Garg(int i);
119 void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int lessmissiles);
120 void MAI_Magma(int i);
121 void MAI_Storm(int i);
122 void MAI_Acid(int i);
123 void MAI_Diablo(int i);
124 void MAI_RR2(int i, int mistype, int dam);
125 void MAI_Mega(int i);
126 void MAI_Golum(int i);
127 void MAI_SkelKing(int i);
128 void MAI_Rhino(int i);
129 void MAI_Counselor(int i);
130 void MAI_Garbud(int i);
131 void MAI_Zhar(int i);
132 void MAI_SnotSpil(int i);
133 void MAI_Lazurus(int i);
134 void MAI_Lazhelp(int i);
135 void MAI_Lachdanan(int i);
136 void MAI_Warlord(int i);
137 void DeleteMonsterList();
138 void ProcessMonsters();
139 void FreeMonsters();
140 BOOL DirOK(int i, int mdir);
141 BOOL PosOkMissile(int x, int y);
142 BOOL CheckNoSolid(int x, int y);
143 BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2);
144 BOOL LineClear(int x1, int y1, int x2, int y2);
145 BOOL LineClearF1(BOOL (*Clear)(int, int, int), int monst, int x1, int y1, int x2, int y2);
146 void SyncMonsterAnim(int i);
147 void M_FallenFear(int x, int y);
148 void PrintMonstHistory(int mt);
149 void PrintUniqueHistory();
150 void MissToMonst(int i, int x, int y);
151 BOOL PosOkMonst(int i, int x, int y);
152 BOOL PosOkMonst2(int i, int x, int y);
153 BOOL PosOkMonst3(int i, int x, int y);
154 BOOL IsSkel(int mt);
155 BOOL IsGoat(int mt);
156 int M_SpawnSkel(int x, int y, int dir);
157 void ActivateSpawn(int i, int x, int y, int dir);
158 BOOL SpawnSkeleton(int ii, int x, int y);
159 int PreSpawnSkeleton();
160 void TalktoMonster(int i);
161 void SpawnGolum(int i, int x, int y, int mi);
162 BOOL CanTalkToMonst(int m);
163 BOOL CheckMonsterHit(int m, BOOL *ret);
164 int encode_enemy(int m);
165 void decode_enemy(int m, int enemy);
166 
167 /* rdata */
168 
169 extern const char plr2monst[9];
170 extern const BYTE counsmiss[4];
171 
172 /* data */
173 
174 extern int MWVel[24][3];
175 extern char animletter[7];
176 extern int left[8];
177 extern int right[8];
178 extern int opposite[8];
179 extern int offset_x[8];
180 extern int offset_y[8];
181 
183 extern int rnd5[4];
184 extern int rnd10[4];
185 extern int rnd20[4];
186 extern int rnd60[4];
187 //
188 
189 extern void (*AiProc[])(int i);
190 
191 #endif /* __MONSTER_H__ */
MAI_Ranged
void MAI_Ranged(int i, int missile_type, BOOL special)
Definition: monster.cpp:3495
M_GetDir
int M_GetDir(int i)
Definition: monster.cpp:1202
MAI_RR2
void MAI_RR2(int i, int mistype, int dam)
Definition: monster.cpp:3769
M_RoundWalk
BOOL M_RoundWalk(int i, int md, int *dir)
Definition: monster.cpp:2823
MAI_Diablo
void MAI_Diablo(int i)
Definition: monster.cpp:3764
M_DoFadeout
BOOL M_DoFadeout(int i)
Definition: monster.cpp:2281
nummonsters
int nummonsters
Definition: monster.cpp:17
M_StartEat
void M_StartEat(int i)
Definition: monster.cpp:1400
DeleteMonsterList
void DeleteMonsterList()
Definition: monster.cpp:4446
M2MStartHit
void M2MStartHit(int mid, int i, int dam)
Definition: monster.cpp:1548
MAI_SnotSpil
void MAI_SnotSpil(int i)
Definition: monster.cpp:4232
M_DoDelay
BOOL M_DoDelay(int i)
Definition: monster.cpp:2610
FreeMonsters
void FreeMonsters()
Definition: monster.cpp:4617
M_SpawnSkel
int M_SpawnSkel(int x, int y, int dir)
Definition: monster.cpp:5266
MAI_SkelKing
void MAI_SkelKing(int i)
Definition: monster.cpp:3928
MAI_Mega
void MAI_Mega(int i)
Definition: monster.cpp:3844
MAI_Fireman
void MAI_Fireman(int i)
Definition: monster.cpp:3268
AddMonsterType
int AddMonsterType(int type, int placeflag)
Definition: monster.cpp:154
AddMonster
int AddMonster(int x, int y, int dir, int mtype, BOOL InMap)
Definition: monster.cpp:1080
M_DoGotHit
BOOL M_DoGotHit(int i)
Definition: monster.cpp:2444
GroupUnity
void GroupUnity(int i)
Definition: monster.cpp:2688
M_DumbWalk
BOOL M_DumbWalk(int i, int md)
Definition: monster.cpp:2813
MAI_GoatMc
void MAI_GoatMc(int i)
Definition: monster.cpp:3490
SyncMonsterAnim
void SyncMonsterAnim(int i)
Definition: monster.cpp:4870
MAI_Zombie
void MAI_Zombie(int i)
Definition: monster.cpp:2852
PlaceUniques
void PlaceUniques()
Definition: monster.cpp:999
IsSkel
BOOL IsSkel(int mt)
Definition: monster.cpp:5253
SetMapMonsters
void SetMapMonsters(BYTE *pMap, int startx, int starty)
Definition: monster.cpp:1029
MAI_Lachdanan
void MAI_Lachdanan(int i)
Definition: monster.cpp:4370
MAI_SkelSd
void MAI_SkelSd(int i)
Definition: monster.cpp:2897
plr2monst
const char plr2monst[9]
Definition: monster.cpp:26
MAI_Lazhelp
void MAI_Lazhelp(int i)
Definition: monster.cpp:4336
PlaceMonster
void PlaceMonster(int i, int mtype, int x, int y)
Definition: monster.cpp:545
encode_enemy
int encode_enemy(int m)
Definition: monster.cpp:5484
M_DoDeath
BOOL M_DoDeath(int i)
Definition: monster.cpp:2548
M_UpdateLeader
void M_UpdateLeader(int i)
Definition: monster.cpp:2460
MAI_Lazurus
void MAI_Lazurus(int i)
Definition: monster.cpp:4284
M_Ranged
BOOL M_Ranged(int i)
Definition: monster.cpp:1105
M_DoSpStand
BOOL M_DoSpStand(int i)
Definition: monster.cpp:2592
PrintMonstHistory
void PrintMonstHistory(int mt)
Definition: monster.cpp:4977
M_DiabloDeath
void M_DiabloDeath(int i, BOOL sendmsg)
Definition: monster.cpp:1496
InitMonsters
void InitMonsters()
Definition: monster.cpp:924
NewMonsterAnim
void NewMonsterAnim(int i, AnimStruct *anim, int md)
Definition: monster.cpp:1093
MAI_Garg
void MAI_Garg(int i)
Definition: monster.cpp:3645
MAX_LVLMTYPES
#define MAX_LVLMTYPES
Definition: defs.h:19
CMonster
Definition: structs.h:520
uniquetrans
int uniquetrans
Definition: monster.cpp:23
M_StartWalk3
void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int mapx, int mapy, int EndDir)
Definition: monster.cpp:1305
MissToMonst
void MissToMonst(int i, int x, int y)
Definition: monster.cpp:5067
M_ChangeLightOffset
void M_ChangeLightOffset(int monst)
Definition: monster.cpp:1803
M_TryM2MHit
void M_TryM2MHit(int i, int mid, int hper, int mind, int maxd)
Definition: monster.cpp:1954
M_CallWalk2
BOOL M_CallWalk2(int i, int md)
Definition: monster.cpp:2794
MAI_Fallen
void MAI_Fallen(int i)
Definition: monster.cpp:3329
right
int right[8]
Definition: monster.cpp:59
M_StartFadeout
void M_StartFadeout(int i, int md, BOOL backwards)
Definition: monster.cpp:1764
rnd5
int rnd5[4]
unused
Definition: monster.cpp:65
rnd20
int rnd20[4]
Definition: monster.cpp:67
M_DoHeal
int M_DoHeal(int i)
Definition: monster.cpp:2306
M2MStartKill
void M2MStartKill(int i, int mid)
Definition: monster.cpp:1643
M_StartDelay
void M_StartDelay(int i, int len)
Definition: monster.cpp:1227
LineClearF1
BOOL LineClearF1(BOOL(*Clear)(int, int, int), int monst, int x1, int y1, int x2, int y2)
Definition: monster.cpp:4788
ActivateSpawn
void ActivateSpawn(int i, int x, int y, int dir)
Definition: monster.cpp:5293
InitLevelMonsters
void InitLevelMonsters()
Definition: monster.cpp:131
opposite
int opposite[8]
Definition: monster.cpp:60
M_Talker
BOOL M_Talker(int i)
Definition: monster.cpp:1111
monster
MonsterStruct monster[MAXMONSTERS]
Definition: monster.cpp:19
MAI_Acid
void MAI_Acid(int i)
Definition: monster.cpp:3759
PreSpawnSkeleton
int PreSpawnSkeleton()
Definition: monster.cpp:5360
CheckMonsterHit
BOOL CheckMonsterHit(int m, BOOL *ret)
Definition: monster.cpp:5462
offset_x
int offset_x[8]
Definition: monster.cpp:61
MAI_Cleaver
void MAI_Cleaver(int i)
Definition: monster.cpp:3401
M_DoSAttack
BOOL M_DoSAttack(int i)
Definition: monster.cpp:2245
PrintUniqueHistory
void PrintUniqueHistory()
Definition: monster.cpp:5042
LineClear
BOOL LineClear(int x1, int y1, int x2, int y2)
Definition: monster.cpp:4783
MAI_GoatBow
void MAI_GoatBow(int i)
Definition: monster.cpp:3542
M_StartHeal
void M_StartHeal(int i)
Definition: monster.cpp:1786
Monsters
CMonster Monsters[MAX_LVLMTYPES]
Definition: monster.cpp:21
MissileFileFlag
int MissileFileFlag
Tracks which missile files are already loaded.
Definition: monster.cpp:12
M_StartSpAttack
void M_StartSpAttack(int i)
Definition: monster.cpp:1386
M_DoWalk
BOOL M_DoWalk(int i)
Definition: monster.cpp:1855
totalmonsters
int totalmonsters
Definition: monster.cpp:20
M_StartStand
void M_StartStand(int i, int md)
Definition: monster.cpp:1207
M_DoRSpAttack
int M_DoRSpAttack(int i)
Definition: monster.cpp:2203
MWVel
int MWVel[24][3]
Definition: monster.cpp:31
MAI_Magma
void MAI_Magma(int i)
Definition: monster.cpp:3749
InitMonsterGFX
void InitMonsterGFX(int monst)
Definition: monster.cpp:283
MAI_Warlord
void MAI_Warlord(int i)
Definition: monster.cpp:4409
M_DoTalk
int M_DoTalk(int i)
Definition: monster.cpp:2333
M_TryH2HHit
void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam)
Definition: monster.cpp:1989
SpawnSkeleton
BOOL SpawnSkeleton(int ii, int x, int y)
Definition: monster.cpp:5305
CheckNoSolid
BOOL CheckNoSolid(int x, int y)
Definition: monster.cpp:4696
ClearMVars
void ClearMVars(int i)
Definition: monster.cpp:372
PlaceGroup
void PlaceGroup(int mtype, int num, int leaderf, int leader)
Definition: monster.cpp:832
M_DoWalk3
BOOL M_DoWalk3(int i)
Definition: monster.cpp:1919
ClrAllMonsters
void ClrAllMonsters()
Definition: monster.cpp:486
monstimgtot
int monstimgtot
Definition: monster.cpp:22
MAI_Snake
void MAI_Snake(int i)
Definition: monster.cpp:2977
MAI_Sneak
void MAI_Sneak(int i)
Definition: monster.cpp:3203
sgbSaveSoundOn
BOOLEAN sgbSaveSoundOn
Definition: monster.cpp:18
MAI_Fat
void MAI_Fat(int i)
Definition: monster.cpp:3168
MAI_RoundRanged
void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int lessmissiles)
Definition: monster.cpp:3684
MAI_Scav
void MAI_Scav(int i)
Definition: monster.cpp:3557
TalktoMonster
void TalktoMonster(int i)
Definition: monster.cpp:5388
PrepDoEnding
void PrepDoEnding()
Definition: monster.cpp:2520
MAI_Golum
void MAI_Golum(int i)
Definition: monster.cpp:3849
GetLevelMTypes
void GetLevelMTypes()
Definition: monster.cpp:178
nummtypes
int nummtypes
Definition: monster.cpp:24
MAI_Bat
void MAI_Bat(int i)
Definition: monster.cpp:3060
M_Teleport
void M_Teleport(int i)
Definition: monster.cpp:2402
PlaceQuestMonsters
void PlaceQuestMonsters()
Definition: monster.cpp:761
animletter
char animletter[7]
Definition: monster.cpp:57
M_CheckEFlag
void M_CheckEFlag(int i)
MAI_Path
BOOL MAI_Path(int i)
Definition: monster.cpp:2934
M_StartRSpAttack
void M_StartRSpAttack(int i, int missile_type, int dam)
Definition: monster.cpp:1369
M_Enemy
void M_Enemy(int i)
Definition: monster.cpp:1123
M_DoAttack
BOOL M_DoAttack(int i)
Definition: monster.cpp:2125
M_StartRAttack
void M_StartRAttack(int i, int missile_type, int dam)
Definition: monster.cpp:1353
left
int left[8]
Definition: monster.cpp:58
M_DoWalk2
BOOL M_DoWalk2(int i)
Definition: monster.cpp:1888
ProcessMonsters
void ProcessMonsters()
Definition: monster.cpp:4472
M_DoFadein
BOOL M_DoFadein(int i)
Definition: monster.cpp:2265
LoadDiabMonsts
void LoadDiabMonsts()
Definition: monster.cpp:905
M_StartSpStand
void M_StartSpStand(int i, int md)
Definition: monster.cpp:1239
M_DoRAttack
BOOL M_DoRAttack(int i)
Definition: monster.cpp:2161
MAI_Storm
void MAI_Storm(int i)
Definition: monster.cpp:3754
MonsterStruct
Definition: structs.h:539
M_DoStand
BOOL M_DoStand(int i)
Definition: monster.cpp:1832
rnd10
int rnd10[4]
Definition: monster.cpp:66
MAI_Garbud
void MAI_Garbud(int i)
Definition: monster.cpp:4138
MAI_Succ
void MAI_Succ(int i)
Definition: monster.cpp:3547
M_ClearSquares
void M_ClearSquares(int i)
Definition: monster.cpp:1412
offset_y
int offset_y[8]
Definition: monster.cpp:62
MAI_AcidUniq
void MAI_AcidUniq(int i)
Definition: monster.cpp:3552
M_PathWalk
BOOL M_PathWalk(int i)
Definition: monster.cpp:2773
SpawnGolum
void SpawnGolum(int i, int x, int y, int mi)
Definition: monster.cpp:5416
M_DoStone
BOOL M_DoStone(int i)
Definition: monster.cpp:2639
InitMonsterTRN
void InitMonsterTRN(int monst, BOOL special)
Definition: monster.cpp:105
AnimStruct
Definition: structs.h:476
InitMonster
void InitMonster(int i, int rd, int mtype, int x, int y)
Definition: monster.cpp:384
M_WalkDir
void M_WalkDir(int i, int md)
Definition: monster.cpp:2652
IsGoat
BOOL IsGoat(int mt)
Definition: monster.cpp:5260
MAI_Zhar
void MAI_Zhar(int i)
Definition: monster.cpp:4184
M_StartWalk
void M_StartWalk(int i, int xvel, int yvel, int xadd, int yadd, int EndDir)
Definition: monster.cpp:1252
MAI_Rhino
void MAI_Rhino(int i)
Definition: monster.cpp:3996
MAI_Counselor
void MAI_Counselor(int i)
Definition: monster.cpp:4066
MAI_Round
void MAI_Round(int i, BOOL special)
Definition: monster.cpp:3431
PosOkMonst3
BOOL PosOkMonst3(int i, int x, int y)
Definition: monster.cpp:5209
M_GetKnockback
void M_GetKnockback(int i)
Definition: monster.cpp:1436
M_FallenFear
void M_FallenFear(int x, int y)
Definition: monster.cpp:4938
M_StartHit
void M_StartHit(int i, int pnum, int dam)
Definition: monster.cpp:1459
rnd60
int rnd60[4]
Definition: monster.cpp:68
monstkills
int monstkills[MAXMONSTERS]
Definition: monster.cpp:15
counsmiss
const BYTE counsmiss[4]
Definition: monster.cpp:27
PosOkMissile
BOOL PosOkMissile(int x, int y)
Definition: monster.cpp:4691
decode_enemy
void decode_enemy(int m, int enemy)
Definition: monster.cpp:5492
M_StartFadein
void M_StartFadein(int i, int md, BOOL backwards)
Definition: monster.cpp:1741
PlaceUniqueMonst
void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize)
Definition: monster.cpp:556
M_CallWalk
BOOL M_CallWalk(int i, int md)
Definition: monster.cpp:2749
CanTalkToMonst
BOOL CanTalkToMonst(int m)
Definition: monster.cpp:5449
M_StartAttack
void M_StartAttack(int i)
Definition: monster.cpp:1339
AiProc
void(* AiProc[])(int i)
Definition: monster.cpp:70
M_StartWalk2
void M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int EndDir)
Definition: monster.cpp:1275
monstactive
int monstactive[MAXMONSTERS]
Definition: monster.cpp:16
MonstPlace
BOOL MonstPlace(int xp, int yp)
Definition: monster.cpp:521
PosOkMonst
BOOL PosOkMonst(int i, int x, int y)
Definition: monster.cpp:5145
MAXMONSTERS
#define MAXMONSTERS
Definition: defs.h:31
DeleteMonster
void DeleteMonster(int i)
Definition: monster.cpp:1070
MonstStartKill
void MonstStartKill(int i, int pnum, BOOL sendmsg)
Definition: monster.cpp:1593
DirOK
BOOL DirOK(int i, int mdir)
Definition: monster.cpp:4634
M_StartKill
void M_StartKill(int i, int pnum)
Definition: monster.cpp:1698
PosOkMonst2
BOOL PosOkMonst2(int i, int x, int y)
Definition: monster.cpp:5177
DoEnding
void DoEnding()
Definition: monster.cpp:2478
MAI_SkelBow
void MAI_SkelBow(int i)
Definition: monster.cpp:3124
LineClearF
BOOL LineClearF(BOOL(*Clear)(int, int), int x1, int y1, int x2, int y2)
Definition: monster.cpp:4701
M_SyncStartKill
void M_SyncStartKill(int i, int x, int y, int pnum)
Definition: monster.cpp:1716