OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
npc.h
Go to the documentation of this file.
1#pragma once
2
7#include "game/gametime.h"
8#include "game/movealgo.h"
9#include "game/inventory.h"
10#include "game/fightalgo.h"
11#include "game/gamescript.h"
13#include "world/aiqueue.h"
14#include "world/fplock.h"
15#include "world/waypath.h"
16
17#include <cstdint>
18#include <string>
19
20#include <zenkit/addon/daedalus.hh>
21
22class Interactive;
23class WayPoint;
24
25class Npc final {
26 public:
28
39
40 enum HitSound : uint8_t {
42 HS_Dead = 1
43 };
44
67
74
76
77 Npc(World &owner, size_t instance, std::string_view waypoint, NpcProcessPolicy aiPolicy = NpcProcessPolicy::AiNormal);
78 Npc(const Npc&)=delete;
79 ~Npc();
80
81 void save(Serialize& fout, size_t id, std::string_view directory);
82 void load(Serialize& fout, size_t id, std::string_view directory);
83 void postValidate();
84
85 bool setPosition (float x,float y,float z);
86 bool setPosition (const Tempest::Vec3& pos);
87 void setDirection(const Tempest::Vec3& pos);
88 void setDirection(float rotation);
89 void setDirectionY(float rotation);
90 void setRunAngle (float angle);
91
92 auto transform() const -> Tempest::Matrix4x4;
93 auto position() const -> Tempest::Vec3;
94 auto cameraBone(bool isFirstPerson = false) const -> Tempest::Vec3;
95 auto cameraMatrix(bool isFirstPerson = false) const -> Tempest::Matrix4x4;
96 float rotation() const;
97 float rotationRad() const;
98 float rotationY() const;
99 float rotationYRad() const;
100 float runAngle() const { return runAng; }
101 float fatness() const { return bdFatness; }
102 Bounds bounds() const;
103
104 void stopDlgAnim();
105 void clearSpeed();
106 bool resetPositionToTA();
107
109 auto processPolicy() const -> NpcProcessPolicy { return aiPolicy; }
110
111 bool isPlayer() const;
112 void setWalkMode(WalkBit m);
113 auto walkMode() const { return wlkMode; }
114 void tick(uint64_t dt);
115 void tickAnimationTags();
116 bool startClimb(JumpStatus jump);
117
118 auto world() -> World&;
119
120 float translateY() const;
121 auto centerPosition() const -> Tempest::Vec3;
122 Npc* lookAtTarget() const;
123 auto portalName() -> std::string_view;
124 auto formerPortalName() -> std::string_view;
125
126 float qDistTo(const Tempest::Vec3 pos) const;
127 float qDistTo(const WayPoint* p) const;
128 float qDistTo(const Npc& p) const;
129 float qDistTo(const Interactive& p) const;
130 float qDistTo(const Item& p) const;
131
132 void updateAnimation(uint64_t dt, bool force = false);
133 void updateTransform();
134
135 std::string_view displayName() const;
136 auto displayPosition() const -> Tempest::Vec3;
137 void setVisual (std::string_view visual);
138 void setVisual (const Skeleton* visual);
139 bool hasOverlay (std::string_view sk) const;
140 bool hasOverlay (const Skeleton* sk) const;
141 void addOverlay (std::string_view sk, uint64_t time);
142 void addOverlay (const Skeleton* sk, uint64_t time);
143 void delOverlay (std::string_view sk);
144 void delOverlay (const Skeleton* sk);
145
146 bool toggleTorch();
147 void setTorch(bool use);
148 bool isUsingTorch() const;
149
150 void setVisualBody (int32_t headTexNr, int32_t teethTexNr,
151 int32_t bodyVer, int32_t bodyColor,
152 std::string_view body, std::string_view head);
153 void updateArmor ();
154 void setSword (MeshObjects::Mesh&& sword);
155 void setRangedWeapon(MeshObjects::Mesh&& bow);
156 void setShield (MeshObjects::Mesh&& shield);
157 void setMagicWeapon(Effect&& spell);
158 void setSlotItem (MeshObjects::Mesh&& itm, std::string_view slot);
159 void setStateItem (MeshObjects::Mesh&& itm, std::string_view slot);
160 void setAmmoItem (MeshObjects::Mesh&& itm, std::string_view slot);
161 void clearSlotItem (std::string_view slot);
162 void setPhysic (DynamicWorld::NpcItem&& item);
163 void setFatness (float f);
164 void setScale (float x,float y,float z);
165
166 bool setAnim(Anim a);
167 auto setAnimAngGet(Anim a) -> const Animation::Sequence*;
168 auto setAnimAngGet(Anim a, uint8_t comb) -> const Animation::Sequence*;
169 void setAnimRotate(int rot);
170 bool setAnimItem(std::string_view scheme, int state);
171 void stopAnim(std::string_view ani);
172 void startFaceAnim(std::string_view anim, float intensity, uint64_t duration);
173 bool stopItemStateAnim();
174 bool hasAnim(std::string_view scheme) const;
175 bool hasSwimAnimations() const;
176 bool isFinishingMove() const;
177
178 auto animMoveSpeed(uint64_t dt) const -> Tempest::Vec3;
179
180 bool isJumpAnim() const;
181 bool isFlyAnim() const;
182 bool isFalling() const;
183 bool isFallingDeep() const;
184 bool isSlide() const;
185 bool isInAir() const;
186 bool isStanding() const;
187 bool isSwim() const;
188 bool isInWater() const;
189 bool isDive() const;
190 bool isCasting() const;
191
192 void setTalentSkill(Talent t,int32_t lvl);
193 int32_t talentSkill(Talent t) const;
194
197
198 void setTalentValue(Talent t,int32_t lvl);
199 int32_t talentValue(Talent t) const;
200 int32_t hitChance(Talent t) const;
201
202 void setRefuseTalk(uint64_t milis);
203 bool isRefuseTalk() const;
204
205 int32_t mageCycle() const;
206 bool canSneak() const;
207 int32_t attribute (Attribute a) const;
208 void changeAttribute(Attribute a, int32_t val, bool allowUnconscious);
209 int32_t protection(Protection p) const;
210 void changeProtection(Protection p, int32_t val);
211
212 uint32_t instanceSymbol() const;
213 uint32_t guild() const;
214 bool isMonster() const;
215 bool isHuman() const;
216 void setTrueGuild(int32_t g);
217 int32_t trueGuild() const;
218 int32_t magicCyrcle() const;
219 int32_t level() const;
220 int32_t experience() const;
221 int32_t experienceNext() const;
222 int32_t learningPoints() const;
223 int32_t diveTime() const;
224
225 void setAttitude(Attitude att);
226 Attitude attitude() const { return permAttitude; }
227
228 bool isFriend() const;
229
230 void setTempAttitude(Attitude att);
231 Attitude tempAttitude() const { return tmpAttitude; }
232
233 void startDialog(Npc& other);
234 bool startState(ScriptFn id, std::string_view wp);
235 bool startState(ScriptFn id, std::string_view wp, gtime endTime, bool noFinalize);
236 void clearState(bool noFinalize);
237 BodyState bodyState() const;
239 bool hasState(BodyState s) const;
240 bool hasStateFlag(BodyState flg) const;
241
242 void setToFightMode(const size_t item);
243 void setToFistMode();
244
245 void aiPush(AiQueue::AiAction&& a);
246 void resumeAiRoutine();
247
248 bool canSwitchWeapon() const;
249 bool closeWeapon(bool noAnim);
250 bool drawWeaponFist();
251 bool drawWeaponMelee();
252 bool drawWeaponBow();
253 bool drawMage(uint8_t slot);
254 bool drawSpell(int32_t spell);
255 auto weaponState() const -> WeaponState;
256
257 bool canFinish(Npc &oth);
258 void fistShoot();
259 bool blockFist();
260 bool finishingMove();
261 void swingSword();
262 bool swingSwordL();
263 bool swingSwordR();
264 bool blockSword();
266 void endCastSpell(bool playerCtrl = false);
267 void setActiveSpellInfo(int32_t info);
268 int32_t activeSpellLevel() const;
269 bool aimBow();
270 bool shootBow(Interactive* focOverride = nullptr);
271 bool hasAmmunition() const;
272
273 bool isEnemy(const Npc& other) const;
274 bool isDead() const;
275 bool isLie() const;
276 bool isUnconscious() const;
277 bool isDown() const;
278 bool isAttack() const;
279 bool isTalk() const;
280
281 bool isAttackAnim() const;
282 bool isPrehit() const;
283 bool isImmortal() const;
284
285 void setPerceptionTime (uint64_t time);
286 void setPerceptionEnable (PercType t, size_t fn);
288
289 bool perceptionProcess(Npc& pl);
290 bool perceptionProcess(Npc& pl, Npc *victim, float quadDist, PercType perc);
291 bool hasPerc(PercType perc) const;
292 uint64_t percNextTime() const;
293
294 auto interactive() const -> Interactive* { return currentInteract; }
295 bool setInteraction(Interactive* id, bool quick=false);
296 void quitInteraction();
297 void processDefInvTorch();
298
299 auto detectedMob() const -> Interactive*;
300 void setDetectedMob(Interactive* id);
301
302 bool isInState (ScriptFn stateFn) const;
303 bool isInRoutine(ScriptFn stateFn) const;
304 bool wasInState (ScriptFn stateFn) const;
305 uint64_t stateTime() const;
306 void setStateTime(int64_t time);
307
308 void addRoutine(gtime s, gtime e, uint32_t callback, std::string_view point);
309 void excRoutine(size_t callback);
310 void multSpeed(float s);
311
312 bool testMove(const Tempest::Vec3& pos);
313 bool tryMove(const Tempest::Vec3& dp);
314 bool tryMove (const Tempest::Vec3& dp, DynamicWorld::CollisionTest& out);
315 bool tryTranslate(const Tempest::Vec3& to);
316 bool tryTranslate(const Tempest::Vec3& to,
317 DynamicWorld::CollisionTest& out);
318
320 bool hasCollision() const { return physic.hasCollision(); }
321
322 void startDive();
323 void transformBack();
324
325 auto dialogChoices(Npc &player, const std::vector<uint32_t> &except, bool includeImp) -> std::vector<GameScript::DlgChoice>;
326
327 zenkit::INpc& handle() { return *hnpc; }
328 const std::shared_ptr<zenkit::INpc>& handlePtr() const { return hnpc; }
329
330 auto inventory() const -> const Inventory& { return invent; }
331 size_t itemCount (size_t id) const;
333 Item* getItem (size_t id);
334 Item* addItem (size_t id, size_t amount);
335 Item* addItem (std::unique_ptr<Item>&& i);
336 Item* takeItem (Item& i);
337 void onWldItemRemoved(const Item& itm);
338 void delItem (size_t id, uint32_t amount);
339 void useItem (size_t item);
340 void useItem (size_t item, uint8_t slotHint, bool force);
341 void setCurrentItem(size_t item);
342 void unequipItem(size_t item);
343 void addItem (size_t id, Interactive& chest, size_t count=1);
344 void addItem (size_t id, Npc& from, size_t count=1);
345 void moveItem (size_t id, Interactive& to, size_t count=1);
346 void sellItem (size_t id, Npc& to, size_t count=1);
347 void buyItem (size_t id, Npc& from, size_t count=1);
348 void dropItem (size_t id, size_t count=1);
349 void clearInventory();
354 auto mapWeaponBone() const -> Tempest::Vec3;
355 auto mapHeadBone() const -> Tempest::Vec3;
356 auto mapBone(std::string_view bone) const -> Tempest::Vec3;
357
358 bool turnTo (float dx, float dz, bool noAnim, uint64_t dt);
359 bool rotateTo(float dx, float dz, float speed, AnimationSolver::TurnType anim, uint64_t dt);
360 bool whirlTo(float dx, float dz, float step, uint64_t dt);
361 bool isRotationAllowed() const;
362 auto playAnimByName(std::string_view name, BodyState bs) -> const Animation::Sequence*;
363
364 bool checkGoToNpcdistance(const Npc& other);
365
366 bool isAiQueueEmpty() const;
367 bool isAiBusy() const;
368 void clearAiQueue();
369
370 auto currentWayPoint() const -> const WayPoint* { return currentFp; }
371 auto currentTaPoint() const -> const WayPoint*;
372 void attachToPoint(const WayPoint* p);
373 GoToHint moveHint() const { return go2.flag; }
374 void clearGoTo();
375 void stopWalking();
376
377 bool canSeeNpc(const Npc& oth, bool freeLos) const;
378 bool canSeeNpc(const Tempest::Vec3 pos, bool freeLos) const;
379 bool canSeeItem(const Item& it, bool freeLos) const;
380 bool canSeeSource() const;
381 bool canRayHitPoint(const Tempest::Vec3 pos, bool freeLos = true, float extRange=0.f) const;
382
383 auto canSenseNpc(const Npc& oth, bool freeLos, float extRange=0.f) const -> SensesBit;
384 auto canSenseNpc(const Tempest::Vec3 pos, bool freeLos, bool isNoisy, float extRange=0.f) const -> SensesBit;
385
386 void setTarget(Npc* t);
387 Npc* target() const;
388
389 void clearNearestEnemy();
390 int32_t lastHitSpellId() const { return lastHitSpell; }
391
392 void setOther(Npc* ot);
393 void setVictim(Npc* ot);
394
395 bool haveOutput() const;
396 void setAiOutputBarrier(uint64_t dt, bool overlay);
397
398 bool doAttack(Anim anim, BodyState bs);
399 void commitSpell();
400 void takeDamage(Npc& other, const Bullet* b);
401 void takeDamage(Npc& other, const Bullet* b, const VisualFx* vfx, int32_t splId);
402 bool isTargetableBySpell(TargetType t) const;
403
404 void emitSoundEffect(std::string_view sound, float range, bool freeSlot);
405 void emitSoundGround(std::string_view sound, float range, bool freeSlot);
406 void emitSoundSVM (std::string_view sound);
407
408 void startEffect(Npc& to, const VisualFx& vfx);
409 void stopEffect (const VisualFx& vfx);
410 void runEffect (Effect&& e);
411
412 private:
413 struct Routine final {
414 gtime start;
415 gtime end;
416 ScriptFn callback;
417 const WayPoint* point = nullptr;
418 std::string fallbackName;
419
420 std::string_view wayPointName() const;
421 };
422
423 enum TransformBit : uint8_t {
424 TR_Pos =1,
425 TR_Rot =1<<1,
426 TR_Scale=1<<2,
427 };
428
429 struct AiState final {
430 ScriptFn funcIni;
431 ScriptFn funcLoop;
432 ScriptFn funcEnd;
433 uint64_t sTime =0;
434 gtime eTime =gtime::endOfTime();
435 bool started =false;
436 uint64_t loopNextTime=0;
437 const char* hint="";
438 };
439
440 struct Perc final {
441 ScriptFn func;
442 };
443
444 struct GoTo final {
446 Npc* npc = nullptr;
447 const WayPoint* wp = nullptr;
448 Tempest::Vec3 pos = {};
449
450 void save(Serialize& fout) const;
451 void load(Serialize& fin);
452 Tempest::Vec3 target() const;
453 bool isClose(const Npc& self, float dist) const;
454
455 bool empty() const;
456 void clear();
457 void set(Npc* to, GoToHint hnt = GoToHint::GT_Way);
458 void set(const WayPoint* to, GoToHint hnt = GoToHint::GT_Way);
459 void set(const Item* to);
460 void set(const Tempest::Vec3& to);
461 void setFlee();
462 };
463
464 void updateWeaponSkeleton();
465 void tickTimedEvt(Animation::EvCount &ev);
466 void tickRegen(int32_t& v,const int32_t max,const int32_t chg, const uint64_t dt);
467 void setViewPosition(const Tempest::Vec3& pos);
468 bool tickCast(uint64_t dt);
469
470 int aiOutputOrderId() const;
471 bool performOutput(const AiQueue::AiAction &ai);
472
473 auto currentRoutine(bool assertWp = false) const -> const Routine&;
474 gtime endTime(const Routine& r) const;
475
476 bool implPointAt(const Tempest::Vec3& to);
477 bool implLookAtWp(uint64_t dt);
478 bool implLookAtNpc(uint64_t dt);
479 bool implLookAt (float dx, float dy, float dz, uint64_t dt);
480 bool implTurnAway(const Npc& oth, uint64_t dt);
481 bool implTurnTo (const Npc& oth, uint64_t dt);
482 bool implTurnTo (const Npc& oth, AnimationSolver::TurnType anim, uint64_t dt);
483 bool implTurnTo (const WayPoint* wp, AnimationSolver::TurnType anim, uint64_t dt);
484 bool implTurnTo (float dx, float dz, AnimationSolver::TurnType anim, uint64_t dt);
485 bool implWhirlTo(const Npc& oth, uint64_t dt);
486 bool implGoTo (uint64_t dt);
487 bool implGoTo (uint64_t dt, float destDist);
488 bool implAttack (uint64_t dt);
489 void adjustAttackRotation(uint64_t dt);
490 bool implAiTick (uint64_t dt);
491 void implAiWait (uint64_t dt);
492 void implAniWait(uint64_t dt);
493 void implFaiWait(uint64_t dt);
494 void implSetFightMode(const Animation::EvCount& ev);
495 bool implAiFlee(uint64_t dt);
496
497 bool setGoToLadder();
498
499 bool isPlayerEnabledState(const ::AiState& st) const;
500 void tickRoutine();
501 void nextAiAction(AiQueue& queue, uint64_t dt);
502 void commitDamage();
503 Npc* updateNearestEnemy();
504 Npc* updateNearestBody();
505 bool checkHealth(bool onChange, bool forceKill);
506 void onNoHealth(bool death, HitSound sndMask);
507 bool hasAutoroll() const;
508 bool prepareTurn();
509 void stopWalkAnimation();
510 void takeDamage(Npc& other, const Bullet* b, const CollideMask bMask, int32_t splId, bool isSpell);
511 void takeFallDamage(const Tempest::Vec3& fallSpeed);
512 void takeDrownDamage();
513
514 void dropTorch(bool burnout = false);
515
516 void saveAiState(Serialize& fout) const;
517 void loadAiState(Serialize& fin);
518 void saveTrState(Serialize& fout) const;
519 void loadTrState(Serialize& fin);
520
521 static float angleDir(float x,float z);
522
523 uint8_t calcAniComb() const;
524 uint64_t perceptionTimeClampt() const;
525
526 bool isAlignedToGround() const;
527 Tempest::Vec3 groundNormal() const;
528 Tempest::Matrix4x4 mkPositionMatrix() const;
529
530 World& owner;
531 // main props
532 std::shared_ptr<zenkit::INpc> hnpc={};
533 float x=0.f;
534 float y=0.f;
535 float z=0.f;
536 float angle = 0.f;
537 float sz[3]={1.f,1.f,1.f};
538
539 // visual props
540 std::string body,head;
541 int32_t vHead = 0, vTeeth = 0, vColor = 0;
542 int32_t bdColor = 0;
543 float bdFatness = 0;
544 MdlVisual visual;
545
546 // visual props (cache)
547 uint8_t durtyTranform=0;
548 Tempest::Vec3 lastGroundNormal;
549
551
552 WalkBit wlkMode =WalkBit::WM_Run;
553 int32_t trGuild =GIL_NONE;
554 int32_t talentsSk[TALENT_MAX_G2]={};
555 int32_t talentsVl[TALENT_MAX_G2]={};
556 uint64_t refuseTalkMilis =0;
557
558 // attitude
559 Attitude permAttitude=ATT_NULL;
560 Attitude tmpAttitude =ATT_NULL;
561
562 // perception
563 uint64_t perceptionTime =0;
564 uint64_t perceptionNextTime=0;
565 Perc perception[PERC_Count];
566
567 // inventory
568 Inventory invent;
569 bool invTorch = false;
570
571 // last hit
572 Npc* lastHit = nullptr;
573 char lastHitType = 'A';
574 int32_t lastHitSpell = 0;
575
576 // spell cast
577 CastState castLevel = CS_NoCast;
578 int32_t manaInvested = 0;
579 int32_t aiExpectedInvest = 1;
580 size_t currentSpellCast = size_t(-1);
581 uint64_t castNextTime = 0;
582 int32_t spellInfo = 0;
583
584 // transform-backshape
585 struct TransformBack;
586 std::unique_ptr<TransformBack> transformSpl;
587
588 // ai state
589 uint64_t aniWaitTime=0;
590 uint64_t waitTime=0;
591 uint64_t faiWaitTime=0;
592 uint64_t outWaitTime=0;
593
594 uint64_t aiOutputBarrier=0;
596 AiState aiState;
597 ScriptFn aiPrevState;
598 AiQueue aiQueue;
599 AiQueue aiQueueOverlay;
600 std::vector<Routine> routines;
601
602 Interactive* currentInteract=nullptr;
603 Npc* currentOther =nullptr;
604 Npc* currentVictim =nullptr;
605
606 const WayPoint* currentLookAt=nullptr;
607 Npc* currentLookAtNpc=nullptr;
608 Npc* currentTarget =nullptr;
609 Npc* nearestEnemy =nullptr;
610 AiOuputPipe* outputPipe =nullptr;
611
612 Tempest::Vec3 moveMobCacheKey={};
613 Interactive* moveMob =nullptr;
614
615 GoTo go2;
616 const WayPoint* currentFp =nullptr;
617 FpLock currentFpLock;
618 WayPath wayPath;
619
620 MoveAlgo mvAlgo;
621 FightAlgo fghAlgo;
622 uint64_t lastEventTime=0;
623
624 float angleY = 0.f;
625 float runAng = 0.f;
626
627 Sound sfxWeapon;
628
629 friend class MoveAlgo;
630 };
Definition fplock.h:6
Definition item.h:14
Definition npc.h:25
void setFatness(float f)
Definition npc.cpp:925
auto mapHeadBone() const -> Tempest::Vec3
Definition npc.cpp:3378
void resumeAiRoutine()
Definition npc.cpp:3224
auto mapWeaponBone() const -> Tempest::Vec3
Definition npc.cpp:3374
bool startState(ScriptFn id, std::string_view wp)
Definition npc.cpp:2755
bool drawWeaponFist()
Definition npc.cpp:3515
bool drawWeaponBow()
Definition npc.cpp:3565
bool canSeeNpc(const Tempest::Vec3 pos, bool freeLos) const
auto canSenseNpc(const Npc &oth, bool freeLos, float extRange=0.f) const -> SensesBit
Definition npc.cpp:4459
auto cameraBone(bool isFirstPerson=false) const -> Tempest::Vec3
Definition npc.cpp:636
void startDive()
Definition npc.cpp:4333
void setToFightMode(const size_t item)
Definition npc.cpp:3182
void startDialog(Npc &other)
Definition npc.cpp:4016
void setTalentSkill(Talent t, int32_t lvl)
Definition npc.cpp:1125
auto mapBone(std::string_view bone) const -> Tempest::Vec3
Definition npc.cpp:3382
float qDistTo(const Tempest::Vec3 pos) const
bool hasOverlay(std::string_view sk) const
Definition npc.cpp:749
void commitSpell()
Definition npc.cpp:3010
void updateTransform()
Definition npc.cpp:4565
int32_t protection(Protection p) const
Definition npc.cpp:1208
auto displayPosition() const -> Tempest::Vec3
Definition npc.cpp:738
bool resetPositionToTA()
Definition npc.cpp:470
auto weaponState() const -> WeaponState
Definition npc.cpp:3621
void multSpeed(float s)
Definition npc.cpp:4197
bool canSeeSource() const
Definition npc.cpp:4422
bool doAttack(Anim anim, BodyState bs)
Definition npc.cpp:3638
bool startClimb(JumpStatus jump)
Definition npc.cpp:543
void stopAnim(std::string_view ani)
Definition npc.cpp:979
bool isPrehit() const
Definition npc.cpp:3990
GoToHint moveHint() const
Definition npc.h:373
Attitude attitude() const
Definition npc.h:226
bool isLie() const
Definition npc.cpp:3966
~Npc()
Definition npc.cpp:200
auto currentTaPoint() const -> const WayPoint *
Definition npc.cpp:3118
float rotation() const
Definition npc.cpp:658
float translateY() const
Definition npc.cpp:680
void addRoutine(gtime s, gtime e, uint32_t callback, std::string_view point)
Definition npc.cpp:4174
void stopWalking()
Definition npc.cpp:4396
auto walkMode() const
Definition npc.h:113
void setRangedWeapon(MeshObjects::Mesh &&bow)
Definition npc.cpp:883
const std::shared_ptr< zenkit::INpc > & handlePtr() const
Definition npc.h:328
void takeDamage(Npc &other, const Bullet *b)
Definition npc.cpp:1868
bool setAnim(Anim a)
Definition npc.cpp:941
uint32_t guild() const
Definition npc.cpp:1223
void clearAiQueue()
Definition npc.cpp:4369
auto currentWayPoint() const -> const WayPoint *
Definition npc.h:370
auto playAnimByName(std::string_view name, BodyState bs) -> const Animation::Sequence *
Definition npc.cpp:937
bool tryTranslate(const Tempest::Vec3 &to)
bool isInState(ScriptFn stateFn) const
Definition npc.cpp:4153
void invalidateTalentOverlays()
Definition npc.cpp:1049
bool canSeeNpc(const Npc &oth, bool freeLos) const
Definition npc.cpp:4403
bool isInWater() const
Definition npc.cpp:1013
void setActiveSpellInfo(int32_t info)
Definition npc.cpp:3883
bool drawMage(uint8_t slot)
Definition npc.cpp:3588
bool swingSwordR()
Definition npc.cpp:3701
float fatness() const
Definition npc.h:101
int32_t experience() const
Definition npc.cpp:1258
bool isSwim() const
Definition npc.cpp:1009
HitSound
Definition npc.h:40
@ HS_Dead
Definition npc.h:42
@ HS_NoSound
Definition npc.h:41
void clearSpeed()
Definition npc.cpp:523
bool checkGoToNpcdistance(const Npc &other)
Definition npc.cpp:3450
void setWalkMode(WalkBit m)
Definition npc.cpp:535
void setShield(MeshObjects::Mesh &&shield)
Definition npc.cpp:888
void fistShoot()
Definition npc.cpp:3662
bool isSlide() const
Definition npc.cpp:1041
void emitSoundSVM(std::string_view sound)
Definition npc.cpp:2958
Npc * lookAtTarget() const
Definition npc.cpp:690
bool wasInState(ScriptFn stateFn) const
Definition npc.cpp:4162
void setVisualBody(int32_t headTexNr, int32_t teethTexNr, int32_t bodyVer, int32_t bodyColor, std::string_view body, std::string_view head)
Definition npc.cpp:843
void changeProtection(Protection p, int32_t val)
Definition npc.cpp:1214
auto animMoveSpeed(uint64_t dt) const -> Tempest::Vec3
Definition npc.cpp:834
bool isFriend() const
Definition npc.cpp:1278
void tickAnimationTags()
Definition npc.cpp:2168
int32_t hitChance(Talent t) const
Definition npc.cpp:1149
void aiPush(AiQueue::AiAction &&a)
Definition npc.cpp:3218
bool isJumpAnim() const
Definition npc.cpp:1025
size_t itemCount(size_t id) const
Definition npc.cpp:3454
float rotationRad() const
Definition npc.cpp:662
void moveItem(size_t id, Interactive &to, size_t count=1)
Definition npc.cpp:3294
bool blockSword()
Definition npc.cpp:3708
void setRefuseTalk(uint64_t milis)
Definition npc.cpp:1167
bool rotateTo(float dx, float dz, float speed, AnimationSolver::TurnType anim, uint64_t dt)
Definition npc.cpp:3398
void setPerceptionDisable(PercType t)
Definition npc.cpp:4011
Bounds bounds() const
Definition npc.cpp:674
MoveAlgo::JumpStatus JumpStatus
Definition npc.h:27
void setDirection(const Tempest::Vec3 &pos)
Definition npc.cpp:436
void setSlotItem(MeshObjects::Mesh &&itm, std::string_view slot)
Definition npc.cpp:899
auto transform() const -> Tempest::Matrix4x4
Definition npc.cpp:632
void updateAnimation(uint64_t dt, bool force=false)
Definition npc.cpp:4569
float rotationY() const
Definition npc.cpp:666
void setAnimRotate(int rot)
Definition npc.cpp:961
void clearState(bool noFinalize)
Definition npc.cpp:2808
bool isFallingDeep() const
Definition npc.cpp:1037
int32_t talentSkill(Talent t) const
Definition npc.cpp:1132
BodyState bodyState() const
Definition npc.cpp:3147
bool isUsingTorch() const
Definition npc.cpp:802
bool shootBow(Interactive *focOverride=nullptr)
Definition npc.cpp:3905
bool setPosition(float x, float y, float z)
Definition npc.cpp:388
bool hasAnim(std::string_view scheme) const
Definition npc.cpp:991
void setPerceptionEnable(PercType t, size_t fn)
Definition npc.cpp:4006
void setProcessPolicy(NpcProcessPolicy t)
Definition npc.cpp:527
int32_t talentValue(Talent t) const
Definition npc.cpp:1143
int32_t activeSpellLevel() const
Definition npc.cpp:3887
bool hasState(BodyState s) const
Definition npc.cpp:3166
bool canFinish(Npc &oth)
Definition npc.cpp:3625
Item * currentShield()
Definition npc.cpp:3370
bool isInAir() const
Definition npc.cpp:1045
int32_t attribute(Attribute a) const
Definition npc.cpp:1171
GoToHint
Definition npc.h:29
@ GT_EnemyG
Definition npc.h:36
@ GT_NextFp
Definition npc.h:32
@ GT_Way
Definition npc.h:31
@ GT_Point
Definition npc.h:35
@ GT_EnemyA
Definition npc.h:33
@ GT_Item
Definition npc.h:34
@ GT_No
Definition npc.h:30
@ GT_Flee
Definition npc.h:37
auto detectedMob() const -> Interactive *
Definition npc.cpp:4145
bool isDead() const
Definition npc.cpp:3962
bool blockFist()
Definition npc.cpp:3666
void onWldItemRemoved(const Item &itm)
Definition npc.cpp:3281
void unequipItem(size_t item)
Definition npc.cpp:3482
int32_t diveTime() const
Definition npc.cpp:1270
void processDefInvTorch()
Definition npc.cpp:4133
void stopEffect(const VisualFx &vfx)
Definition npc.cpp:2976
void setTorch(bool use)
Definition npc.cpp:789
auto dialogChoices(Npc &player, const std::vector< uint32_t > &except, bool includeImp) -> std::vector< GameScript::DlgChoice >
Definition npc.cpp:4353
bool isAiBusy() const
Definition npc.cpp:4363
int32_t experienceNext() const
Definition npc.cpp:1262
bool testMove(const Tempest::Vec3 &pos)
Definition npc.cpp:4201
auto setAnimAngGet(Anim a) -> const Animation::Sequence *
Definition npc.cpp:945
bool isHuman() const
Definition npc.cpp:1234
void setDirectionY(float rotation)
Definition npc.cpp:446
void stopDlgAnim()
Definition npc.cpp:519
void setVisual(std::string_view visual)
Definition npc.cpp:743
JumpStatus tryJump()
Definition npc.cpp:4235
auto inventory() const -> const Inventory &
Definition npc.h:330
bool isDown() const
Definition npc.cpp:3974
auto interactive() const -> Interactive *
Definition npc.h:294
Item * currentMeleeWeapon()
Definition npc.cpp:3362
void runEffect(Effect &&e)
Definition npc.cpp:2980
void dropItem(size_t id, size_t count=1)
Definition npc.cpp:3325
void clearNearestEnemy()
Definition npc.cpp:2920
auto formerPortalName() -> std::string_view
Definition npc.cpp:698
bool closeWeapon(bool noAnim)
Definition npc.cpp:3490
bool setAnimItem(std::string_view scheme, int state)
Definition npc.cpp:965
void endCastSpell(bool playerCtrl=false)
Definition npc.cpp:3869
AnimationSolver::Anim Anim
Definition npc.h:75
bool isPlayer() const
Definition npc.cpp:539
bool haveOutput() const
Definition npc.cpp:2934
void setVictim(Npc *ot)
Definition npc.cpp:2930
auto centerPosition() const -> Tempest::Vec3
Definition npc.cpp:684
void setTalentValue(Talent t, int32_t lvl)
Definition npc.cpp:1138
Item * activeWeapon()
Definition npc.cpp:3458
void setToFistMode()
Definition npc.cpp:3208
std::string_view displayName() const
Definition npc.cpp:734
bool isFalling() const
Definition npc.cpp:1033
void startFaceAnim(std::string_view anim, float intensity, uint64_t duration)
Definition npc.cpp:983
void setSword(MeshObjects::Mesh &&sword)
Definition npc.cpp:878
auto world() -> World &
Definition npc.cpp:624
auto position() const -> Tempest::Vec3
Definition npc.cpp:628
bool isRotationAllowed() const
Definition npc.cpp:3444
bool hasPerc(PercType perc) const
Definition npc.cpp:4093
void buyItem(size_t id, Npc &from, size_t count=1)
Definition npc.cpp:3306
void setRunAngle(float angle)
Definition npc.cpp:458
bool isUnconscious() const
Definition npc.cpp:3970
bool finishingMove()
Definition npc.cpp:3674
bool isImmortal() const
Definition npc.cpp:3994
void attachToPoint(const WayPoint *p)
Definition npc.cpp:4384
void transformBack()
Definition npc.cpp:4337
bool perceptionProcess(Npc &pl)
Definition npc.cpp:4023
int32_t learningPoints() const
Definition npc.cpp:1266
bool isTalk() const
Definition npc.cpp:3982
bool isAttackAnim() const
Definition npc.cpp:3986
void excRoutine(size_t callback)
Definition npc.cpp:4191
void changeAttribute(Attribute a, int32_t val, bool allowUnconscious)
Definition npc.cpp:1177
void clearInventory()
Definition npc.cpp:3354
void useItem(size_t item)
Definition npc.cpp:3470
bool aimBow()
Definition npc.cpp:3895
void setStateItem(MeshObjects::Mesh &&itm, std::string_view slot)
Definition npc.cpp:903
int32_t magicCyrcle() const
Definition npc.cpp:1250
int32_t mageCycle() const
Definition npc.cpp:1159
void setStateTime(int64_t time)
Definition npc.cpp:4170
bool turnTo(float dx, float dz, bool noAnim, uint64_t dt)
Definition npc.cpp:3394
void setPhysic(DynamicWorld::NpcItem &&item)
Definition npc.cpp:919
bool drawSpell(int32_t spell)
Definition npc.cpp:3599
void load(Serialize &fout, size_t id, std::string_view directory)
Definition npc.cpp:251
bool isCasting() const
Definition npc.cpp:1021
bool canSneak() const
Definition npc.cpp:1163
float rotationYRad() const
Definition npc.cpp:670
void sellItem(size_t id, Npc &to, size_t count=1)
Definition npc.cpp:3298
bool whirlTo(float dx, float dz, float step, uint64_t dt)
void postValidate()
Definition npc.cpp:325
CastState
Definition npc.h:45
@ CS_Invest_4
Definition npc.h:53
@ CS_Cast_2
Definition npc.h:60
@ CS_Invest_6
Definition npc.h:55
@ CS_Emit_Last
Definition npc.h:65
@ CS_Emit_0
Definition npc.h:64
@ CS_Invest_1
Definition npc.h:50
@ CS_Invest_0
Definition npc.h:49
@ CS_Invest_5
Definition npc.h:54
@ CS_NoCast
Definition npc.h:46
@ CS_Cast_3
Definition npc.h:61
@ CS_Cast_1
Definition npc.h:59
@ CS_Invest_2
Definition npc.h:51
@ CS_Finalize
Definition npc.h:47
@ CS_Cast_Last
Definition npc.h:62
@ CS_Invest_Last
Definition npc.h:56
@ CS_Invest_3
Definition npc.h:52
@ CS_Cast_0
Definition npc.h:58
Item * takeItem(Item &i)
Definition npc.cpp:3241
bool drawWeaponMelee()
Definition npc.cpp:3539
zenkit::INpc & handle()
Definition npc.h:327
Npc(const Npc &)=delete
uint32_t instanceSymbol() const
Definition npc.cpp:1219
int32_t lastHitSpellId() const
Definition npc.h:390
bool setInteraction(Interactive *id, bool quick=false)
Definition npc.cpp:4101
bool isAiQueueEmpty() const
Definition npc.cpp:4357
void setAiOutputBarrier(uint64_t dt, bool overlay)
Definition npc.cpp:2940
bool isRefuseTalk() const
Definition npc.cpp:1155
Item * currentArmor()
Definition npc.cpp:3358
bool hasSwimAnimations() const
Definition npc.cpp:995
bool isDive() const
Definition npc.cpp:1017
bool hasAmmunition() const
Definition npc.cpp:3948
bool isStanding() const
Definition npc.cpp:1005
void setAttitude(Attitude att)
Definition npc.cpp:1274
void setCurrentItem(size_t item)
Definition npc.cpp:3478
void delItem(size_t id, uint32_t amount)
Definition npc.cpp:3466
bool tryMove(const Tempest::Vec3 &dp)
void updateArmor()
Definition npc.cpp:860
auto processPolicy() const -> NpcProcessPolicy
Definition npc.h:109
bool isAttack() const
Definition npc.cpp:3978
void setTarget(Npc *t)
Definition npc.cpp:2907
bool isTargetableBySpell(TargetType t) const
Definition npc.cpp:2984
void save(Serialize &fout, size_t id, std::string_view directory)
Definition npc.cpp:205
auto cameraMatrix(bool isFirstPerson=false) const -> Tempest::Matrix4x4
Definition npc.cpp:650
void emitSoundEffect(std::string_view sound, float range, bool freeSlot)
Definition npc.cpp:2946
void setTempAttitude(Attitude att)
Definition npc.cpp:1284
void clearGoTo()
Definition npc.cpp:4389
Item * currentRangedWeapon()
Definition npc.cpp:3366
bool toggleTorch()
Definition npc.cpp:777
Attitude tempAttitude() const
Definition npc.h:231
bool stopItemStateAnim()
Definition npc.cpp:987
bool isInRoutine(ScriptFn stateFn) const
Definition npc.cpp:4157
void setScale(float x, float y, float z)
Definition npc.cpp:930
void addOverlay(std::string_view sk, uint64_t time)
Definition npc.cpp:758
void setDetectedMob(Interactive *id)
Definition npc.cpp:4140
float runAngle() const
Definition npc.h:100
uint64_t percNextTime() const
Definition npc.cpp:4097
bool isMonster() const
Definition npc.cpp:1227
Item * addItem(size_t id, size_t amount)
Definition npc.cpp:3233
uint64_t stateTime() const
Definition npc.cpp:4166
Item * getItem(size_t id)
Definition npc.cpp:3462
bool isEnemy(const Npc &other) const
Definition npc.cpp:3958
void swingSword()
Definition npc.cpp:3687
void setTrueGuild(int32_t g)
Definition npc.cpp:1240
bool canSeeItem(const Item &it, bool freeLos) const
Definition npc.cpp:4487
bool swingSwordL()
Definition npc.cpp:3694
bool hasCollision() const
Definition npc.h:320
Npc * target() const
Definition npc.cpp:2916
bool isFlyAnim() const
Definition npc.cpp:1029
BodyState bodyStateMasked() const
Definition npc.cpp:3161
void delOverlay(std::string_view sk)
Definition npc.cpp:769
void emitSoundGround(std::string_view sound, float range, bool freeSlot)
Definition npc.cpp:2951
void clearSlotItem(std::string_view slot)
Definition npc.cpp:911
void setOther(Npc *ot)
Definition npc.cpp:2924
bool canSwitchWeapon() const
Definition npc.cpp:3486
void setMagicWeapon(Effect &&spell)
Definition npc.cpp:893
BeginCastResult
Definition npc.h:68
@ BC_Cast
Definition npc.h:71
@ BC_NoMana
Definition npc.h:70
@ BC_Invest
Definition npc.h:72
@ BC_No
Definition npc.h:69
void tick(uint64_t dt)
Definition npc.cpp:2186
void quitInteraction()
Definition npc.cpp:4124
void setAmmoItem(MeshObjects::Mesh &&itm, std::string_view slot)
Definition npc.cpp:907
void startEffect(Npc &to, const VisualFx &vfx)
Definition npc.cpp:2969
bool canRayHitPoint(const Tempest::Vec3 pos, bool freeLos=true, float extRange=0.f) const
Definition npc.cpp:4436
bool hasStateFlag(BodyState flg) const
Definition npc.cpp:3174
void setPerceptionTime(uint64_t time)
Definition npc.cpp:3998
auto portalName() -> std::string_view
Definition npc.cpp:694
int32_t trueGuild() const
Definition npc.cpp:1244
bool isFinishingMove() const
Definition npc.cpp:999
int32_t level() const
Definition npc.cpp:1254
auto beginCastSpell() -> BeginCastResult
Definition npc.cpp:3716
Definition sound.h:5
Definition world.h:31
static const gtime endOfTime()
Definition gametime.h:23
static CommandLine * instance
@ GIL_NONE
Definition constants.h:9
CollideMask
Definition constants.h:252
Talent
Definition constants.h:435
@ TALENT_MAX_G2
Definition constants.h:459
WalkBit
Definition constants.h:209
NpcProcessPolicy
Definition constants.h:506
TargetType
Definition constants.h:288
SensesBit
Definition constants.h:297
Attitude
Definition constants.h:234
@ ATT_NULL
Definition constants.h:239
Attribute
Definition constants.h:462
Protection
Definition constants.h:484
BodyState
Definition constants.h:140
WeaponState
Definition constants.h:191
PercType
Definition constants.h:396
@ PERC_Count
Definition constants.h:432