mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-29 14:17:57 +03:00
479 lines
14 KiB
C++
479 lines
14 KiB
C++
/*
|
|
===========================================================================
|
|
Copyright (C) 2023 the OpenMoHAA team
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
OpenMoHAA source code 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.
|
|
|
|
OpenMoHAA source code 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 OpenMoHAA source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "entity.h"
|
|
#include "animate.h"
|
|
|
|
typedef enum {
|
|
CONTROLLER_ALLIES,
|
|
CONTROLLER_AXIS,
|
|
CONTROLLER_DRAW
|
|
} eController;
|
|
|
|
#define PT_SPAWNFLAG_PLAY_FIRE_SOUND 1
|
|
#define PT_SPAWNFLAG_PLAY_MOTION_SOUND 2
|
|
#define PT_SPAWNFLAG_TARGET_RANDOM 4
|
|
#define PT_SPAWNFLAG_TURN_ON 8
|
|
#define PT_SPAWNFLAG_ROTATE_YAW 16
|
|
#define PT_SPAWNFLAG_ROTATE_ROLL 32
|
|
#define PT_SPAWNFLAG_TARGET_PLAYER 64
|
|
#define PT_SPAWNFLAG_HIDDEN 128
|
|
|
|
void ClearProjectileTargets();
|
|
|
|
class ProjectileTarget : public Entity
|
|
{
|
|
private:
|
|
int m_iTarget;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ProjectileTarget);
|
|
|
|
ProjectileTarget();
|
|
|
|
void EventSetId(Event *ev);
|
|
int GetTarget() const;
|
|
};
|
|
|
|
#define MAX_PROJECTILE_GENERATOR_TARGETS 16
|
|
|
|
class ProjectileGenerator : public Animate
|
|
{
|
|
protected:
|
|
int m_iId;
|
|
int m_iCycles;
|
|
float m_fMinDuration;
|
|
float m_fMaxDuration;
|
|
int m_iMinNumShots;
|
|
int m_iMaxNumShots;
|
|
float m_fMinDelay;
|
|
float m_fMaxDelay;
|
|
float m_fAccuracy;
|
|
str m_sLaunchSound;
|
|
bool m_bFireOnStartUp;
|
|
qboolean m_bIsDonut;
|
|
float m_fArcDonut;
|
|
float m_fMinDonut;
|
|
float m_fMaxDonut;
|
|
float m_fCycleTime;
|
|
float m_fShotsPerSec;
|
|
float m_fCurrentTime;
|
|
int m_iTargetIndex;
|
|
float m_fLastShotTime;
|
|
int m_iAnimSlot;
|
|
bool m_bIsTurnedOn;
|
|
int m_iCurrentCycle;
|
|
Entity *m_pTarget;
|
|
Container<ProjectileTarget *> m_projectileTargets;
|
|
Entity *m_pCurrent;
|
|
Vector m_vTargetOrg;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ProjectileGenerator);
|
|
|
|
ProjectileGenerator();
|
|
|
|
virtual void SetupNextCycle();
|
|
virtual void BeginCycle(Event *ev);
|
|
virtual void TickCycle(Event *ev);
|
|
virtual void EndCycle(Event *ev);
|
|
|
|
bool ShouldStartOn() const;
|
|
bool ShouldHideModel() const;
|
|
bool ShouldPlayFireSound() const;
|
|
bool ShouldPlayMotionSound() const;
|
|
bool ShouldRotateYaw() const;
|
|
bool ShouldRotateRoll() const;
|
|
|
|
void EventIsTurnedOn(Event *ev);
|
|
void EventGetTargetEntity(Event *ev);
|
|
void EventLaunchSound(Event *ev);
|
|
void SetTarget(Event *ev);
|
|
void SetTarget(Entity *ent);
|
|
void OnInitialize(Event *ev);
|
|
void TurnOff(Event *ev);
|
|
void TurnOn(Event *ev);
|
|
bool ShouldTargetRandom() const;
|
|
Entity *ChooseTarget();
|
|
|
|
void GetLocalTargets();
|
|
bool ShouldTargetPlayer() const;
|
|
Vector GetTargetPos(Entity *target);
|
|
void GetMuzzlePos(Vector& pos);
|
|
void Fire();
|
|
void TryLaunchSound();
|
|
void SetWeaponAnim(const char *name, Event *ev);
|
|
void EventAccuracy(Event *ev);
|
|
void EventMaxDelay(Event *ev);
|
|
void EventMinDelay(Event *ev);
|
|
void EventFireOnStartUp(Event *ev);
|
|
void EventMaxNumShots(Event *ev);
|
|
void EventMinNumShots(Event *ev);
|
|
void EventCycles(Event *ev);
|
|
void EventMaxDuration(Event *ev);
|
|
void EventMinDuration(Event *ev);
|
|
void SetWeaponModel(Event *ev);
|
|
void EventSetId(Event *ev);
|
|
void EventmaxDonut(Event *ev);
|
|
void EventminDonut(Event *ev);
|
|
void EventarcDonut(Event *ev);
|
|
void EventisDonut(Event *ev);
|
|
virtual bool Attack(int count);
|
|
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
class ProjectileGenerator_Projectile : public ProjectileGenerator
|
|
{
|
|
private:
|
|
str m_sProjectileModel;
|
|
str m_sPreImpactSound;
|
|
float m_fImpactSoundTime;
|
|
float m_fImpactSoundProbability;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ProjectileGenerator_Projectile);
|
|
|
|
ProjectileGenerator_Projectile();
|
|
|
|
void SetPreImpactSoundProbability(Event *ev);
|
|
void SetPreImpactSoundTime(Event *ev);
|
|
void SetPreImpactSound(Event *ev);
|
|
void PlayPreImpactSound(Event *ev);
|
|
void SetProjectileModel(Event *ev);
|
|
|
|
float EstimateImpactTime(const Vector& targetOrigin, const Vector& fromOrigin, float speed) const;
|
|
bool Attack(int count) override;
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
class ProjectileGenerator_Gun : public ProjectileGenerator
|
|
{
|
|
private:
|
|
float m_fBulletRange;
|
|
float m_fBulletDamage;
|
|
int m_iBulletCount;
|
|
Vector m_vBulletSpread;
|
|
int m_iTracerFrequency;
|
|
int m_iBulletLarge;
|
|
qboolean m_bFakeBullets;
|
|
int m_iMeansOfDeath;
|
|
float m_fBulletThroughWood;
|
|
float m_fBulletThroughMetal;
|
|
float m_iBulletKnockback;
|
|
int m_iAttackCount;
|
|
float m_fFireDelay;
|
|
float m_fTracerSpeed;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ProjectileGenerator_Gun);
|
|
|
|
ProjectileGenerator_Gun();
|
|
|
|
void SetFireDelay(Event *ev);
|
|
void SetMeansOfDeath(Event *ev);
|
|
void SetBulletThroughWood(Event *ev);
|
|
void SetBulletThroughMetal(Event *ev);
|
|
void SetBulletKnockback(Event *ev);
|
|
void SetTracerSpeed(Event *ev);
|
|
void SetBulletLarge(Event *ev);
|
|
void SetFakeBullets(Event *ev);
|
|
void SetBulletCount(Event *ev);
|
|
void SetBulletDamage(Event *ev);
|
|
void SetTracerFrequency(Event *ev);
|
|
void SetBulletSpread(Event *ev);
|
|
void SetBulletRange(Event *ev);
|
|
|
|
bool Attack(int count) override;
|
|
bool TickWeaponAnim();
|
|
void TickCycle(Event *ev) override;
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
class ProjectileGenerator_Heavy : public ProjectileGenerator
|
|
{
|
|
private:
|
|
str m_sProjectileModel;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ProjectileGenerator_Heavy);
|
|
|
|
ProjectileGenerator_Heavy();
|
|
|
|
void SetProjectileModel(Event *ev);
|
|
|
|
bool Attack(int count) override;
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
class ThrobbingBox_Explosive : public Animate
|
|
{
|
|
protected:
|
|
str m_sUsedModel;
|
|
str m_sSound;
|
|
bool m_bUsed;
|
|
float m_fExplosionDamage;
|
|
float m_fRadius;
|
|
float m_fStopwatchDuration;
|
|
str m_sActivateSound;
|
|
str m_sTickSound;
|
|
str m_sDestroyedModel;
|
|
ScriptThreadLabel m_thread;
|
|
ScriptThreadLabel m_useThread;
|
|
str m_sEffect;
|
|
Vector m_vOffset;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_Explosive);
|
|
|
|
ThrobbingBox_Explosive();
|
|
|
|
bool ShouldDoExplosion();
|
|
|
|
void SetExplosionOffset(Event *ev);
|
|
void SetExplosionEffect(Event *ev);
|
|
void SetTriggered(Event *ev);
|
|
void DoExplosion(Event *ev);
|
|
void SetUseThread(Event *ev);
|
|
void SetThread(Event *ev);
|
|
void SetStopWatchDuration(Event *ev);
|
|
void SetRadius(Event *ev);
|
|
void SetDamage(Event *ev);
|
|
void TickSound(Event *ev);
|
|
void ActivateSound(Event *ev);
|
|
void ExplosionSound(Event *ev);
|
|
void UsedModel(Event *ev);
|
|
void SetDestroyModel(Event *ev);
|
|
void OnBlowUp(Event *ev);
|
|
void OnUse(Event *ev);
|
|
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
class ThrobbingBox_ExplodePlayerFlak88 : public ThrobbingBox_Explosive
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_ExplodePlayerFlak88);
|
|
};
|
|
|
|
class ThrobbingBox_ExplodeFlak88 : public ThrobbingBox_Explosive
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_ExplodeFlak88);
|
|
};
|
|
|
|
class ThrobbingBox_ExplodeNebelwerfer : public ThrobbingBox_Explosive
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_ExplodeNebelwerfer);
|
|
};
|
|
|
|
class ThrobbingBox_ExplodePlayerNebelwerfer : public ThrobbingBox_Explosive
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_ExplodePlayerNebelwerfer);
|
|
};
|
|
|
|
#define TBE_SPAWNFLAG_DESTROYED_MODEL 1
|
|
#define TBE_SPAWNFLAG_MAKE_WET 2
|
|
|
|
class ThrobbingBox_Stickybomb : public ThrobbingBox_Explosive
|
|
{
|
|
private:
|
|
float m_fStopwatchStartTime;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(ThrobbingBox_Stickybomb);
|
|
|
|
ThrobbingBox_Stickybomb();
|
|
|
|
void OnStickyBombWet(Event *ev);
|
|
void OnStickyBombUse(Event *ev);
|
|
|
|
void Archive(Archiver& arc) override;
|
|
};
|
|
|
|
#define OBJECTIVE_SPAWNFLAG_TURN_ON 1
|
|
|
|
class Objective : public Entity
|
|
{
|
|
private:
|
|
str m_sText;
|
|
int m_iObjectiveIndex;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(Objective);
|
|
|
|
Objective();
|
|
|
|
void Archive(Archiver& arc) override;
|
|
void TurnOn(Event *ev);
|
|
void TurnOff(Event *ev);
|
|
void Complete(Event *ev);
|
|
void SetCurrent(Event *ev);
|
|
Vector GetOrigin() const;
|
|
void SetObjectiveNbr(Event *ev);
|
|
void SetText(Event *ev);
|
|
int GetObjectiveIndex() const;
|
|
};
|
|
|
|
class FencePost : public Entity
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE(FencePost);
|
|
|
|
FencePost();
|
|
|
|
void Killed(Event* ev) override;
|
|
};
|
|
|
|
class AISpawnPoint : public SimpleArchivedEntity
|
|
{
|
|
private:
|
|
str m_sModel;
|
|
int m_iHealth;
|
|
str m_sEnemyName;
|
|
float m_iAccuracy;
|
|
int m_iAmmoGrenade;
|
|
float m_iBalconyHeight;
|
|
int m_iDisguiseLevel;
|
|
float m_fDisguisePeriod;
|
|
float m_fDisguiseRange;
|
|
float m_fEnemyShareRange;
|
|
float m_fFixedLeash;
|
|
float m_fGrenadeAwareness;
|
|
str m_sGun;
|
|
float m_fMaxNoticeTimeScale;
|
|
float m_fSoundAwareness;
|
|
str m_sTypeAttack;
|
|
str m_sTypeDisguise;
|
|
str m_sTypeGrenade;
|
|
str m_sTypeIdle;
|
|
bool m_bPatrolWaitTrigger;
|
|
float m_fHearing;
|
|
float m_fSight;
|
|
float m_fFov;
|
|
float m_fLeash;
|
|
float m_fMinDist;
|
|
float m_fMaxDist;
|
|
float m_fInterval;
|
|
bool m_bDontDropWeapons;
|
|
bool m_bDontDropHealth;
|
|
str m_sFavoriteEnemy;
|
|
bool m_bNoSurprise;
|
|
str m_sPatrolPath;
|
|
str m_sTurret;
|
|
str m_sAlarmNode;
|
|
str m_sWeapon;
|
|
str m_sTarget;
|
|
str m_sVoiceType;
|
|
bool m_bForceDropWeapon;
|
|
bool m_bForceDropHealth;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE(AISpawnPoint);
|
|
|
|
AISpawnPoint();
|
|
|
|
void GetForceDropHealth(Event *ev);
|
|
void SetForceDropHealth(Event *ev);
|
|
void GetForceDropWeapon(Event *ev);
|
|
void SetForceDropWeapon(Event *ev);
|
|
void GetVoiceType(Event *ev);
|
|
void SetVoiceType(Event *ev);
|
|
void GetTarget(Event *ev);
|
|
void SetTarget(Event *ev);
|
|
void GetWeapon(Event *ev);
|
|
void SetWeapon(Event *ev);
|
|
void GetAlarmNode(Event *ev);
|
|
void SetAlarmNode(Event *ev);
|
|
void GetTurret(Event *ev);
|
|
void SetTurret(Event *ev);
|
|
void GetPatrolPath(Event *ev);
|
|
void SetPatrolPath(Event *ev);
|
|
void GetNoSurprise(Event *ev);
|
|
void SetNoSurprise(Event *ev);
|
|
void SetFavoriteEnemy(Event *ev);
|
|
void GetFavoriteEnemy(Event *ev);
|
|
void GetDontDropHealth(Event *ev);
|
|
void SetDontDropHealth(Event *ev);
|
|
void GetDontDropWeapons(Event *ev);
|
|
void SetDontDropWeapons(Event *ev);
|
|
void GetInterval(Event *ev);
|
|
void SetInterval(Event *ev);
|
|
void GetMaxDistance(Event *ev);
|
|
void SetMaxDistance(Event *ev);
|
|
void GetMinDistance(Event *ev);
|
|
void SetMinDistance(Event *ev);
|
|
void GetLeash(Event *ev);
|
|
void SetLeash(Event *ev);
|
|
void GetFov(Event *ev);
|
|
void SetFov(Event *ev);
|
|
void SetSight(Event *ev);
|
|
void GetSight(Event *ev);
|
|
void GetHearing(Event *ev);
|
|
void SetHearing(Event *ev);
|
|
void GetPatrolWaitTrigger(Event *ev);
|
|
void SetPatrolWaitTrigger(Event *ev);
|
|
void GetTypeIdle(Event *ev);
|
|
void SetTypeIdle(Event *ev);
|
|
void GetTypeGrenade(Event *ev);
|
|
void SetTypeGrenade(Event *ev);
|
|
void GetTypeDisguise(Event *ev);
|
|
void SetTypeDisguise(Event *ev);
|
|
void GetTypeAttack(Event *ev);
|
|
void SetTypeAttack(Event *ev);
|
|
void SetSoundAwareness(Event *ev);
|
|
void GetSoundAwareness(Event *ev);
|
|
void SetMaxNoticeTimeScale(Event *ev);
|
|
void GetMaxNoticeTimeScale(Event *ev);
|
|
void GetGun(Event *ev);
|
|
void SetGun(Event *ev);
|
|
void GetGrenadeAwareness(Event *ev);
|
|
void SetGrenadeAwareness(Event *ev);
|
|
void SetFixedLeash(Event *ev);
|
|
void GetFixedLeash(Event *ev);
|
|
void GetEnemyShareRange(Event *ev);
|
|
void SetEnemyShareRange(Event *ev);
|
|
void GetDisguiseRange(Event *ev);
|
|
void SetDisguiseRange(Event *ev);
|
|
void GetDisguisePeriod(Event *ev);
|
|
void SetDisguisePeriod(Event *ev);
|
|
void GetDisguiseLevel(Event *ev);
|
|
void SetDisguiseLevel(Event *ev);
|
|
void GetBalconyHeight(Event *ev);
|
|
void SetBalconyHeight(Event *ev);
|
|
void GetAmmoGrenade(Event *ev);
|
|
void SetAmmoGrenade(Event *ev);
|
|
void GetAccuracy(Event *ev);
|
|
void SetAccuracy(Event *ev);
|
|
void GetEnemyName(Event *ev);
|
|
void SetEnemyName(Event *ev);
|
|
void GetHealth(Event *ev);
|
|
void SetHealth(Event *ev);
|
|
void GetModel(Event *ev);
|
|
void SetModel(Event *ev);
|
|
|
|
void Archive(Archiver& arc) override;
|
|
};
|