Serious-Engine/Sources/EntitiesMP/Summoner.cpp
2016-03-11 15:57:17 +02:00

2123 lines
96 KiB
C++

/*
* This file is generated by Entity Class Compiler, (c) CroTeam 1997-98
*/
#line 4 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
#include "StdH.h"
#include "EntitiesMP/BackgroundViewer.h"
#include "EntitiesMP/WorldSettingsController.h"
#include "ModelsMP/Enemies/Summoner/Summoner.h"
#include "ModelsMP/Enemies/Summoner/Staff.h"
#include "EntitiesMP/Effector.h"
#include <EntitiesMP/Summoner.h>
#include <EntitiesMP/Summoner_tables.h>
CEntityEvent *ESummonerTeleport::MakeCopy(void) { CEntityEvent *peeCopy = new ESummonerTeleport(*this); return peeCopy;}
ESummonerTeleport::ESummonerTeleport() : CEntityEvent(EVENTCODE_ESummonerTeleport) {;
ClearToDefault(fWait);
};
#line 23 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
#define RAND_05 (FLOAT(rand())/RAND_MAX-0.5f)
#define SUMMONER_SIZE 7.0f
#define TM_WAIT_BEFORE_FIRE 1.9f
#define SUMMONER_HEALTH 15000.0f
// info structure
static EntityInfo eiSummoner = {
EIBT_FLESH, 1500.0f,
0.0f, 1.7f*SUMMONER_SIZE, 0.0f,
0.0f, 1.0f*SUMMONER_SIZE, 0.0f,
};
//#define FIREPOS_ARMS FLOAT3D(-0.22f, 1.63f, 0.96f)
#define FIREPOS_ARMS FLOAT3D(0.131292f, 1.61069f, -0.314068f)
#define SUMMONER_MAX_SS 6
// hlth grp1 grp2 grp3
INDEX aiSpawnScheme[SUMMONER_MAX_SS][7] = {100, 4,7, 0,0, 0,0,
90, 3,5, 2,4, 0,0,
70, 3,4, 3,4, 0,0,
50, 1,3, 3,5, 1,1,
30, 1,2, 2,3, 2,2,
15, 1,1, 2,4, 2,3 };
#define SUMMONER_TEMP_PER_GROUP 6
void CSummoner::SetDefaultProperties(void) {
m_bInvulnerable = FALSE ;
m_penBeginDeathTarget = NULL;
m_penEndDeathTarget = NULL;
m_penExplodeDeathTarget = NULL;
m_bShouldTeleport = FALSE ;
m_fFirePeriod = 3.0f;
m_fImmaterialDuration = 5.0f;
m_fCorporealDuration = 5.0f;
m_tmMaterializationTime = 0.0f;
m_fStretch = SUMMONER_SIZE ;
m_iSize = 1;
m_penControlArea = NULL;
m_iGroup01Count = 0;
m_penGroup01Template01 = NULL;
m_penGroup01Template02 = NULL;
m_penGroup01Template03 = NULL;
m_penGroup01Template04 = NULL;
m_penGroup01Template05 = NULL;
m_penGroup01Template06 = NULL;
m_iGroup02Count = 0;
m_penGroup02Template01 = NULL;
m_penGroup02Template02 = NULL;
m_penGroup02Template03 = NULL;
m_penGroup02Template04 = NULL;
m_penGroup02Template05 = NULL;
m_penGroup02Template06 = NULL;
m_iGroup03Count = 0;
m_penGroup03Template01 = NULL;
m_penGroup03Template02 = NULL;
m_penGroup03Template03 = NULL;
m_penGroup03Template04 = NULL;
m_penGroup03Template05 = NULL;
m_penGroup03Template06 = NULL;
m_penTeleportMarker = NULL;
m_iTeleportMarkers = 0;
m_penSpawnMarker = NULL;
m_iSpawnMarkers = 0;
m_fTeleportWaitTime = 0.0f;
m_fFuss = 0.0f;
m_iEnemyCount = 0;
m_fMaxCurrentFuss = 0.0f;
m_fMaxBeginFuss = 10000.0f;
m_fMaxEndFuss = 60000.0f;
m_iSpawnScheme = 0;
m_bFireOK = TRUE ;
m_bFiredThisTurn = FALSE ;
m_fDamageSinceLastSpawn = 0.0f;
m_bExploded = FALSE ;
m_bDying = FALSE ;
m_tmDeathBegin = 0.0f;
m_fDeathDuration = 0.0f;
m_penDeathInflictor = NULL;
m_penKiller = NULL;
m_vDeathPosition = FLOAT3D(0.0f , 0.0f , 0.0f);
m_penDeathMarker = NULL;
m_iIndex = 0;
m_iTaunt = 0;
m_tmParticlesDisappearStart = -1e6;
m_tmLastAnimation = 0.0f;
m_soExplosion.SetOwner(this);
m_soExplosion.Stop_internal();
m_soSound.SetOwner(this);
m_soSound.Stop_internal();
m_soChant.SetOwner(this);
m_soChant.Stop_internal();
m_soTeleport.SetOwner(this);
m_soTeleport.Stop_internal();
CEnemyBase::SetDefaultProperties();
}
#line 183 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::Read_t(CTStream * istr)
#line 184 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 185 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase :: Read_t (istr );
#line 186 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . Read_t (* istr );
#line 187 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 189 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::Write_t(CTStream * istr)
#line 190 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 191 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase :: Write_t (istr );
#line 192 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . Write_t (* istr );
#line 193 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 195 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
BOOL CSummoner::IsTargetValid(SLONG slPropertyOffset,CEntity * penTarget)
#line 196 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 197 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(slPropertyOffset >= offsetof (CSummoner , m_penGroup01Template01 ) &&
#line 198 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
slPropertyOffset <= offsetof (CSummoner , m_penGroup03Template06 ))
#line 199 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 200 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (penTarget , "Enemy Base")){
#line 201 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(((CEnemyBase &) * penTarget ) . m_bTemplate ){
#line 202 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 203 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 204 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 205 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 206 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 207 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 208 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 209 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 210 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(slPropertyOffset == offsetof (CSummoner , m_penControlArea ))
#line 211 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 212 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (penTarget , "AreaMarker")){
#line 213 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 214 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 215 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 216 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 217 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 218 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(slPropertyOffset == offsetof (CSummoner , m_penSpawnMarker ))
#line 219 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 220 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (penTarget , "Enemy Marker")){
#line 221 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 222 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 223 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 224 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 225 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 226 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(slPropertyOffset == offsetof (CSummoner , m_penTeleportMarker ) ||
#line 227 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
slPropertyOffset == offsetof (CSummoner , m_penDeathMarker ))
#line 228 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 229 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (penTarget , "SummonerMarker")){
#line 230 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 231 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 232 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 233 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 234 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 235 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return CEntity :: IsTargetValid (slPropertyOffset , penTarget );
#line 236 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 239 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
BOOL CSummoner::DoSafetyChecks(void) {
#line 241 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penSpawnMarker == NULL ){
#line 242 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WarningMessage ("No valid Spawn Marker for Summoner boss! Destroying boss...");
#line 243 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 244 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 245 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penTeleportMarker == NULL ){
#line 246 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WarningMessage ("No valid Teleport Marker for Summoner boss! Destroying boss...");
#line 247 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 248 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 249 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penDeathMarker == NULL ){
#line 250 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WarningMessage ("No valid Death Marker for Summoner boss! Destroying boss...");
#line 251 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 252 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 253 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penControlArea == NULL ){
#line 254 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WarningMessage ("No valid Area Marker for Summoner boss! Destroying boss...");
#line 255 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 256 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 257 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_iGroup01Count < 1 || m_iGroup02Count < 1 || m_iGroup03Count < 1)
#line 258 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 259 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WarningMessage ("At least one template in each group required! Destroying boss...");
#line 260 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 261 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 262 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 263 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
CTString CSummoner::GetPlayerKillDescription(const CTString & strPlayerName,const EDeath & eDeath)
#line 267 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 268 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CTString str ;
#line 269 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
str . PrintF (TRANS ("The Summoner unsummoned %s") , strPlayerName );
#line 270 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return str ;
#line 271 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
const CTFileName & CSummoner::GetComputerMessageName(void)const {
#line 274 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
static DECLARE_CTFILENAME (fnm , "DataMP\\Messages\\Enemies\\Summoner.txt");
#line 275 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return fnm ;
#line 276 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 278 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::Precache(void)
#line 279 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 280 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase :: Precache ();
#line 282 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheClass (CLASS_BLOOD_SPRAY );
#line 283 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheClass (CLASS_SPAWNER_PROJECTILE );
#line 285 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheClass (CLASS_BASIC_EFFECT , BET_CANNON );
#line 287 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_SUMMONER );
#line 288 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_STAFF );
#line 289 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheTexture (TEXTURE_SUMMONER );
#line 290 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheTexture (TEXTURE_STAFF );
#line 292 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_DEBRIS01 );
#line 293 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_DEBRIS02 );
#line 294 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_DEBRIS03 );
#line 295 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheModel (MODEL_DEBRIS_FLESH );
#line 296 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheTexture (TEXTURE_DEBRIS_FLESH );
#line 298 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_LAUGH );
#line 299 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_EXPLODE );
#line 300 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_TREMORS );
#line 301 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_DEATH );
#line 302 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_LASTWORDS );
#line 303 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_FIRE );
#line 304 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_CHIMES );
#line 305 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_MATERIALIZE );
#line 306 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (SOUND_TELEPORT );
#line 308 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = SOUND_TAUNT01 ;i <= SOUND_TAUNTLAST ;i ++){
#line 309 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrecacheSound (i );
#line 310 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 312 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 316 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void * CSummoner::GetEntityInfo(void) {
#line 317 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return & eiSummoner ;
#line 318 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 320 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CMusicHolder * CSummoner::GetMusicHolder()
#line 321 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 322 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntity * penMusicHolder ;
#line 323 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penMusicHolder = _pNetwork -> GetEntityWithName ("MusicHolder" , 0);
#line 324 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return (CMusicHolder *) & * penMusicHolder ;
#line 325 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 327 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
BOOL CSummoner::DistanceToAllPlayersGreaterThen(FLOAT fDistance)
#line 328 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 330 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX ctMaxPlayers = GetMaxPlayers ();
#line 331 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntity * penPlayer ;
#line 333 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < ctMaxPlayers ;i ++){
#line 334 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penPlayer = GetPlayerEntity (i );
#line 335 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penPlayer ){
#line 336 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(DistanceTo (this , penPlayer ) < fDistance ){
#line 337 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE ;
#line 338 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 339 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 340 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 341 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE ;
#line 342 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 345 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::ShakeItBaby(FLOAT tmShaketime,FLOAT fPower,BOOL bFadeIn)
#line 346 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 347 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CWorldSettingsController * pwsc = GetWSC (this );
#line 348 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(pwsc != NULL ){
#line 349 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_tmShakeStarted = tmShaketime ;
#line 350 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_vShakePos = GetPlacement () . pl_PositionVector ;
#line 351 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_fShakeFalloff = 450.0f;
#line 352 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_fShakeFade = 3.0f;
#line 354 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_fShakeIntensityZ = 0;
#line 355 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_tmShakeFrequencyZ = 5.0f;
#line 356 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_fShakeIntensityY = 0.1f * fPower ;
#line 357 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_tmShakeFrequencyY = 5.0f;
#line 358 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_fShakeIntensityB = 2.5f * fPower ;
#line 359 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_tmShakeFrequencyB = 7.2f;
#line 361 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pwsc -> m_bShakeFadeIn = bFadeIn ;
#line 362 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 363 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 365 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::ChangeEnemyNumberForAllPlayers(INDEX iDelta)
#line 366 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 368 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX ctMaxPlayers = GetMaxPlayers ();
#line 369 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntity * penPlayer ;
#line 371 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < ctMaxPlayers ;i ++){
#line 372 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penPlayer = GetPlayerEntity (i );
#line 373 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penPlayer ){
#line 375 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CPlayer &) * penPlayer ) . m_psLevelTotal . ps_iKills += iDelta ;
#line 376 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CPlayer &) * penPlayer ) . m_psGameTotal . ps_iKills += iDelta ;
#line 377 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 378 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 379 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 382 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::ReceiveDamage(CEntity * penInflictor,enum DamageType dmtType,
#line 383 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fDamageAmmount,const FLOAT3D & vHitPoint,const FLOAT3D & vDirection)
#line 384 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 387 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_bInvulnerable ){
#line 388 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return ;
#line 389 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 392 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! IsOfClass (penInflictor , "Player")){
#line 393 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return ;
#line 394 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 397 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(dmtType == DMT_TELEPORT )
#line 398 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 399 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return ;
#line 400 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 403 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(dmtType == DMT_CANNONBALL )
#line 404 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 405 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fDamageAmmount *= 0.5f;
#line 406 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 408 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fOldHealth = GetHealth ();
#line 409 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase :: ReceiveDamage (penInflictor , dmtType , fDamageAmmount , vHitPoint , vDirection );
#line 410 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fNewHealth = GetHealth ();
#line 413 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fDamageSinceLastSpawn += fOldHealth - fNewHealth ;
#line 416 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < SUMMONER_MAX_SS ;i ++){
#line 417 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fHealth = (FLOAT) aiSpawnScheme [ i ] [ 0 ] * m_fMaxHealth / 100.0f;
#line 418 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(fHealth <= fOldHealth && fHealth > fNewHealth )
#line 419 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 420 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iSpawnScheme = i ;
#line 421 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 422 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 425 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fMaxCurrentFuss = (1.0f - (GetHealth () / m_fMaxHealth )) * (m_fMaxEndFuss - m_fMaxBeginFuss ) + m_fMaxBeginFuss ;
#line 428 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_colBurning = COLOR (C_WHITE | CT_OPAQUE );
#line 430 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 441 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::StandingAnimFight(void) {
#line 442 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_IDLE , AOF_LOOPING | AOF_NORESTART );
#line 443 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 446 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::StandingAnim(void) {
#line 447 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_IDLE , AOF_LOOPING | AOF_NORESTART );
#line 448 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 450 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::WalkingAnim(void) {
#line 451 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_IDLE , AOF_LOOPING | AOF_NORESTART );
#line 452 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 454 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::RunningAnim(void) {
#line 455 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WalkingAnim ();
#line 456 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 458 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::RotatingAnim(void) {
#line 459 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
WalkingAnim ();
#line 460 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 470 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::IdleSound(void) {
#line 472 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 474 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D CSummoner::AcquireTarget()
#line 475 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 476 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyMarker * marker ;
#line 477 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
marker = & ((CEnemyMarker &) * m_penSpawnMarker );
#line 479 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iMarker = IRnd () % m_iSpawnMarkers ;
#line 481 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(iMarker > 0)
#line 482 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 483 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
marker = & ((CEnemyMarker &) * marker -> m_penTarget );
#line 484 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iMarker --;
#line 485 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 486 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vTarget = marker -> GetPlacement () . pl_PositionVector ;
#line 487 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fR = FRnd () * marker -> m_fMarkerRange ;
#line 488 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fA = FRnd () * 360.0f;
#line 489 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vTarget += FLOAT3D (CosFast (fA ) * fR , 0.05f , SinFast (fA ) * fR );
#line 490 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return vTarget ;
#line 491 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 493 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::LaunchMonster(FLOAT3D vTarget,CEntity * penTemplate)
#line 494 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 495 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ASSERT (penTemplate != NULL );
#line 497 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vFirePos = FIREPOS_ARMS * m_fStretch ;
#line 498 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vShooting = GetPlacement () . pl_PositionVector + vFirePos * GetRotationMatrix ();
#line 499 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fLaunchSpeed ;
#line 500 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fRelativeHdg ;
#line 502 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fPitch = FRnd () * 10.0f + 25.0f;
#line 504 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D pl ;
#line 505 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CalculateAngularLaunchParams (vShooting , 0.0f , vTarget ,
#line 506 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D (0.0f , 0.0f , 0.0f) , fPitch , fLaunchSpeed , fRelativeHdg );
#line 508 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PrepareFreeFlyingProjectile (pl , vTarget , vFirePos , ANGLE3D (fRelativeHdg , fPitch , 0.0f));
#line 510 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnerProjectile esp ;
#line 511 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penSProjectile = CreateEntity (pl , CLASS_SPAWNER_PROJECTILE );
#line 512 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
esp . penOwner = this ;
#line 513 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
esp . penTemplate = penTemplate ;
#line 514 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penSProjectile -> Initialize (esp );
#line 516 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CMovableEntity &) * penSProjectile ) . LaunchAsFreeProjectile (FLOAT3D (0.0f , 0.0f , - fLaunchSpeed ) , (CMovableEntity *) (CEntity *) this );
#line 517 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 519 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT CSummoner::FussModifier(INDEX iEnemyCount) {
#line 520 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return (0.995 + 0.005 * pow (m_iEnemyCount , 2.8));
#line 521 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 523 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::RecalculateFuss(void)
#line 524 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 526 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOATaabbox3D box ;
#line 527 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CAreaMarker &) * m_penControlArea ) . GetAreaBox (box );
#line 529 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
static CStaticStackArray < CEntity * > apenNearEntities ;
#line 530 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
GetWorld () -> FindEntitiesNearBox (box , apenNearEntities );
#line 532 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX m_iEnemyCount = 0;
#line 533 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fFuss = 0.0f;
#line 535 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < apenNearEntities . Count ();i ++)
#line 536 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 537 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (apenNearEntities [ i ] , "Enemy Base") &&
#line 538 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
! IsOfClass (apenNearEntities [ i ] , "Summoner")){
#line 539 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! ((CEnemyBase &) * apenNearEntities [ i ]) . m_bTemplate &&
#line 540 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
apenNearEntities [ i ] -> GetFlags () & ENF_ALIVE ){
#line 541 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fFuss += ((CEnemyBase &) * apenNearEntities [ i ]) . m_iScore ;
#line 542 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iEnemyCount ++;
#line 543 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 544 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 545 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 547 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fFuss *= FussModifier (m_iEnemyCount );
#line 550 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_fFuss > m_fMaxCurrentFuss ){
#line 552 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bFireOK = FALSE ;
#line 554 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(m_fFuss < 0.4 * m_fMaxCurrentFuss ){
#line 556 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bFireOK = TRUE ;
#line 558 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(m_fDamageSinceLastSpawn > 0.07f * m_fMaxHealth ){
#line 560 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bFireOK = TRUE ;
#line 561 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 565 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return ;
#line 566 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 568 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::CountEnemiesAndScoreValue(INDEX & iEnemies,FLOAT & fScore)
#line 569 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 571 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOATaabbox3D box ;
#line 572 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CAreaMarker &) * m_penControlArea ) . GetAreaBox (box );
#line 574 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
static CStaticStackArray < CEntity * > apenNearEntities ;
#line 575 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
GetWorld () -> FindEntitiesNearBox (box , apenNearEntities );
#line 577 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iEnemies = 0;
#line 578 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fScore = 0.0f;
#line 580 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < apenNearEntities . Count ();i ++)
#line 581 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 582 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (apenNearEntities [ i ] , "Enemy Base") &&
#line 583 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
! IsOfClass (apenNearEntities [ i ] , "Summoner")){
#line 584 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! ((CEnemyBase &) * apenNearEntities [ i ]) . m_bTemplate &&
#line 585 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
apenNearEntities [ i ] -> GetFlags () & ENF_ALIVE ){
#line 586 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fScore += ((CEnemyBase &) * apenNearEntities [ i ]) . m_iScore ;
#line 587 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iEnemies ++;
#line 588 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 589 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 590 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 591 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return ;
#line 592 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 594 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase * CSummoner::GetRandomTemplate(INDEX iGroup)
#line 595 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 596 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer * pen ;
#line 597 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iCount ;
#line 598 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(iGroup == 0){
#line 599 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup01Template01 ;
#line 600 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iCount = IRnd () % m_iGroup01Count + 1;
#line 601 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(iGroup == 1){
#line 602 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup02Template01 ;
#line 603 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iCount = IRnd () % m_iGroup02Count + 1;
#line 604 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(iGroup == 2){
#line 605 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup03Template01 ;
#line 606 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iCount = IRnd () % m_iGroup03Count + 1;
#line 607 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 608 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ASSERT ("Invalid group!");
#line 609 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 610 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ASSERT (iCount > 0);
#line 612 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX i = - 1;
#line 613 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(iCount > 0)
#line 614 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 615 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
i ++;
#line 616 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(& * pen [ i ] == NULL ){
#line 617 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
i ++;
#line 618 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 619 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iCount --;
#line 620 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 621 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ASSERT (& (CEnemyBase &) * pen [ i ] != NULL );
#line 622 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return & (CEnemyBase &) * pen [ i ];
#line 623 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 625 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::DisappearEffect(void)
#line 626 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 627 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plFX = GetPlacement ();
#line 628 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffect ese ;
#line 629 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . colMuliplier = C_WHITE | CT_OPAQUE ;
#line 630 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . vStretch = FLOAT3D (3 , 3 , 3);
#line 631 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . vNormal = FLOAT3D (0 , 1 , 0);
#line 632 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . betType = BET_DUST_FALL ;
#line 633 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX iSmoke = 0;iSmoke < 3;iSmoke ++)
#line 634 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 635 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plSmoke = plFX ;
#line 636 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plSmoke . pl_PositionVector += FLOAT3D (0 , iSmoke * 4 + 4.0f , 0);
#line 637 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFX = CreateEntity (plSmoke , CLASS_BASIC_EFFECT );
#line 638 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFX -> Initialize (ese );
#line 639 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 647 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 649 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::SpawnTeleportEffect(void)
#line 650 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 651 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffect ese ;
#line 652 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . colMuliplier = C_lMAGENTA | CT_OPAQUE ;
#line 653 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . vStretch = FLOAT3D (5 , 5 , 5);
#line 654 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . vNormal = FLOAT3D (0 , 1 , 0);
#line 657 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . betType = BET_EXPLOSION_DEBRIS ;
#line 658 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plFX = GetPlacement ();
#line 659 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFX = CreateEntity (plFX , CLASS_BASIC_EFFECT );
#line 660 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFX -> Initialize (ese );
#line 661 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . colMuliplier = C_MAGENTA | CT_OPAQUE ;
#line 662 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFX2 = CreateEntity (plFX , CLASS_BASIC_EFFECT );
#line 663 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFX2 -> Initialize (ese );
#line 664 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . colMuliplier = C_lCYAN | CT_OPAQUE ;
#line 665 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFX3 = CreateEntity (plFX , CLASS_BASIC_EFFECT );
#line 666 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFX3 -> Initialize (ese );
#line 667 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . betType = BET_CANNON ;
#line 668 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ese . colMuliplier = C_CYAN | CT_OPAQUE ;
#line 669 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFX4 = CreateEntity (plFX , CLASS_BASIC_EFFECT );
#line 670 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFX4 -> Initialize (ese );
#line 679 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffector eLightning ;
#line 680 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eLightning . eetType = ET_LIGHTNING ;
#line 681 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eLightning . tmLifeTime = 0.5f;
#line 682 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eLightning . fSize = 24;
#line 683 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eLightning . ctCount = 32;
#line 685 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntity * penLightning = CreateEntity (plFX , CLASS_EFFECTOR );
#line 686 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ANGLE3D angRnd = ANGLE3D (
#line 687 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
0.0f ,
#line 688 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
90.0f + (FRnd () - 0.5f) * 30.0f ,
#line 689 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
(FRnd () - 0.5f) * 30.0f);
#line 691 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vRndDir ;
#line 692 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
AnglesToDirectionVector (angRnd , vRndDir );
#line 693 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vDest = plFX . pl_PositionVector ;
#line 694 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vDest += vRndDir * 512.0f;
#line 695 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eLightning . vDestination = vDest ;
#line 696 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penLightning -> Initialize (eLightning );
#line 697 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 699 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::KillAllEnemiesInArea(EDeath eDeath)
#line 700 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 701 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
EDeath eDeath2 ;
#line 702 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOATaabbox3D box ;
#line 703 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
((CAreaMarker &) * m_penControlArea ) . GetAreaBox (box );
#line 705 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
static CStaticStackArray < CEntity * > apenNearEntities ;
#line 706 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
GetWorld () -> FindEntitiesNearBox (box , apenNearEntities );
#line 708 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < apenNearEntities . Count ();i ++)
#line 709 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 710 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsDerivedFromClass (apenNearEntities [ i ] , "Enemy Base") &&
#line 711 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
! IsOfClass (apenNearEntities [ i ] , "Summoner")){
#line 712 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! ((CEnemyBase &) * apenNearEntities [ i ]) . m_bTemplate &&
#line 713 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
apenNearEntities [ i ] -> GetFlags () & ENF_ALIVE ){
#line 714 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath2 . eLastDamage . penInflictor = eDeath . eLastDamage . penInflictor ;
#line 715 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath2 . eLastDamage . vDirection = apenNearEntities [ i ] -> GetPlacement () . pl_PositionVector ;
#line 716 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath2 . eLastDamage . vHitPoint = eDeath2 . eLastDamage . vDirection ;
#line 717 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath2 . eLastDamage . fAmount = 10000.0f;
#line 718 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath2 . eLastDamage . dmtType = DMT_CLOSERANGE ;
#line 719 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
apenNearEntities [ i ] -> SendEvent (eDeath );
#line 720 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 721 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 723 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CMusicHolder * penMusicHolder = GetMusicHolder ();
#line 724 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(IsOfClass (apenNearEntities [ i ] , "SpawnerProjectile")){
#line 725 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D pl ;
#line 726 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pl . pl_OrientationAngle = ANGLE3D (0.0f , 0.0f , 0.0f);
#line 727 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pl . pl_PositionVector = apenNearEntities [ i ] -> GetPlacement () . pl_PositionVector ;
#line 728 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penExplosion = CreateEntity (pl , CLASS_BASIC_EFFECT );
#line 729 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffect eSpawnEffect ;
#line 730 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . colMuliplier = C_WHITE | CT_OPAQUE ;
#line 731 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . betType = BET_CANNON ;
#line 732 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . vStretch = FLOAT3D (2.0f , 2.0f , 2.0f);
#line 733 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penExplosion -> Initialize (eSpawnEffect );
#line 734 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
apenNearEntities [ i ] -> Destroy ();
#line 736 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penMusicHolder != NULL ){
#line 737 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penMusicHolder -> m_ctEnemiesInWorld --;
#line 738 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 739 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ChangeEnemyNumberForAllPlayers (- 1);
#line 740 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 741 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 742 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 744 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
void CSummoner::RenderParticles(void)
#line 745 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 746 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT tmNow = _pTimer -> CurrentTick ();
#line 747 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(tmNow > m_tmParticlesDisappearStart && tmNow < m_tmParticlesDisappearStart + 4.0f)
#line 748 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 749 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Particles_SummonerDisappear (this , m_tmParticlesDisappearStart );
#line 750 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 752 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(tmNow > m_tmLastAnimation )
#line 753 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 754 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX ctInterpolations = 2;
#line 756 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! m_bInvulnerable && ! m_bExploded && GetHealth () > 0)
#line 757 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 758 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX iInter = 0;iInter < ctInterpolations ;iInter ++)
#line 759 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 761 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOATmatrix3D mEn = GetRotationMatrix ();
#line 762 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOATmatrix3D mRot ;
#line 763 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vPos ;
#line 764 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT tmBirth = tmNow + iInter * _pTimer -> TickQuantum / ctInterpolations ;
#line 766 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fLife = 2.5f;
#line 767 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fCone = 360.0f;
#line 768 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fStretch = 1.0f;
#line 769 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fRotSpeed = 360.0f;
#line 770 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
COLOR col = C_lYELLOW | CT_OPAQUE ;
#line 772 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
MakeRotationMatrixFast (mRot , ANGLE3D (0.0f , 0.0f , 0.0f));
#line 773 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vPos = FLOAT3D (0.0f , 0.0f , 0.0f);
#line 774 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
GetModelObject () -> GetAttachmentTransformations (SUMMONER_ATTACHMENT_STAFF , mRot , vPos , FALSE );
#line 776 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CAttachmentModelObject * pamo = GetModelObject () -> GetAttachmentModel (SUMMONER_ATTACHMENT_STAFF );
#line 777 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pamo -> amo_moModelObject . GetAttachmentTransformations (STAFF_ATTACHMENT_PARTICLES , mRot , vPos , TRUE );
#line 778 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vPos = GetPlacement () . pl_PositionVector + vPos * GetRotationMatrix ();
#line 780 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vSpeed = FLOAT3D (0.1f + RAND_05 , 0.1f + RAND_05 , - 1.0f - RAND_05 );
#line 781 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vSpeed = vSpeed . Normalize () * 8.0f;
#line 782 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . AddParticle (vPos , vSpeed * mRot * mEn , RAND_05 * 360.0f , fRotSpeed , tmBirth , fLife , fStretch , col );
#line 783 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 784 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 786 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . em_vG = m_emEmiter . GetGravity (this );
#line 787 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . em_vG /= 2.0f;
#line 788 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . AnimateParticles ();
#line 789 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmLastAnimation = tmNow ;
#line 790 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 791 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . RenderParticles ();
#line 792 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
BOOL CSummoner::
#line 797 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
InitiateTeleport(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_InitiateTeleport
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::InitiateTeleport expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 799 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = TRUE ;
#line 800 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_VANISHING , 0);
#line 803 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT tmNow = _pTimer -> CurrentTick ();
#line 804 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmParticlesDisappearStart = tmNow ;
#line 806 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soSound , SOUND_TELEPORT , SOF_3D );
#line 808 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_VANISHING ) - 0.2f);
Jump(STATE_CURRENT, 0x015b0002, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0002_InitiateTeleport_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0002
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0003, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0003_InitiateTeleport_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0003
;
#line 809 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Jump(STATE_CURRENT, STATE_CSummoner_Immaterial, TRUE, EVoid());return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 812 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Fire(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_Fire
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::Fire expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 815 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(!(! m_bFiredThisTurn )){ Jump(STATE_CURRENT,0x015b0012, FALSE, EInternal());return TRUE;}
#line 817 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(!(m_bFireOK )){ Jump(STATE_CURRENT,0x015b0011, FALSE, EInternal());return TRUE;}
#line 819 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iTaunt = SOUND_TAUNT01 + m_iTaunt % (SOUND_TAUNTLAST - SOUND_TAUNT01 + 1);
#line 820 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soChant , iTaunt , SOF_3D );
#line 821 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iTaunt ++;
#line 823 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_MAGICATTACK , SOF_SMOOTHCHANGE );
#line 826 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(TM_WAIT_BEFORE_FIRE );
Jump(STATE_CURRENT, 0x015b0005, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0005_Fire_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0005
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0006, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0006_Fire_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0006
;
#line 827 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soSound , SOUND_FIRE , SOF_3D );
#line 829 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX i , j ;
#line 830 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vTarget ;
#line 831 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fTotalSpawnedScore = 0.0f;
#line 832 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iTotalSpawnedCount = 0;
#line 833 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iEnemyCount ;
#line 834 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fScore ;
#line 835 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CountEnemiesAndScoreValue (iEnemyCount , fScore );
#line 837 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CMusicHolder * penMusicHolder = GetMusicHolder ();
#line 839 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fTmpFuss = 0.0f;
#line 842 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(i = 0;i < 3;i ++){
#line 843 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iMin = aiSpawnScheme [ m_iSpawnScheme ] [ i * 2 + 1 ];
#line 844 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iMax = aiSpawnScheme [ m_iSpawnScheme ] [ i * 2 + 2 ];
#line 845 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ASSERT (iMin <= iMax );
#line 846 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iToSpawn ;
#line 847 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iToSpawn = iMin + IRnd () % (iMax - iMin + 1);
#line 848 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(j = 0;j < iToSpawn ;j ++){
#line 849 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase * penTemplate = GetRandomTemplate (i );
#line 850 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vTarget = AcquireTarget ();
#line 851 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
LaunchMonster (vTarget , penTemplate );
#line 852 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fTotalSpawnedScore += penTemplate -> m_iScore ;
#line 853 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iTotalSpawnedCount ++;
#line 855 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penMusicHolder != NULL ){
#line 856 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penMusicHolder -> m_ctEnemiesInWorld ++;
#line 857 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 858 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ChangeEnemyNumberForAllPlayers (+ 1);
#line 860 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fTmpFuss = (fTotalSpawnedScore + fScore ) * FussModifier (iTotalSpawnedCount + iEnemyCount );
#line 861 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(fTmpFuss > m_fMaxCurrentFuss ){
#line 862 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
break ;
#line 863 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 864 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 865 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 867 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fDamageSinceLastSpawn = 0.0f;
#line 870 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_MAGICATTACK ) - TM_WAIT_BEFORE_FIRE );
Jump(STATE_CURRENT, 0x015b0007, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0007_Fire_03(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0007
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0008, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0008_Fire_04(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0008
;
#line 873 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_IDLE , SOF_SMOOTHCHANGE );
#line 876 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESummonerTeleport est ;
#line 877 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
est . fWait = FRnd () * 1.0f + 3.0f;
#line 878 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendEvent (est );Jump(STATE_CURRENT,0x015b0010, FALSE, EInternal());return TRUE;}BOOL CSummoner::H0x015b0011_Fire_13(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0011
if(!(TRUE )){ Jump(STATE_CURRENT,0x015b000f, FALSE, EInternal());return TRUE;}
#line 882 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soExplosion , SOUND_LAUGH , SOF_3D );
#line 883 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(1.0f);
Jump(STATE_CURRENT, 0x015b0009, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0009_Fire_05(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0009
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b000a, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b000a_Fire_06(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000a
;
#line 884 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_MAGICATTACK , SOF_SMOOTHCHANGE );
#line 886 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iTaunt = SOUND_TAUNT01 + m_iTaunt % (SOUND_TAUNTLAST - SOUND_TAUNT01 + 1);
#line 887 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soChant , iTaunt , SOF_3D );
#line 888 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iTaunt ++;
#line 891 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(TM_WAIT_BEFORE_FIRE );
Jump(STATE_CURRENT, 0x015b000b, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b000b_Fire_07(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000b
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b000c, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b000c_Fire_08(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000c
;
#line 892 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soSound , SOUND_FIRE , SOF_3D );
#line 894 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iEnemyCount ;
#line 895 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fScore ;
#line 896 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CountEnemiesAndScoreValue (iEnemyCount , fScore );
#line 897 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fToSpawn ;
#line 899 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iScheme ;
#line 901 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < 3;i ++){
#line 902 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(aiSpawnScheme [ m_iSpawnScheme ] [ i * 2 + 2 ] > 0){
#line 903 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iScheme = i ;
#line 904 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 905 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 907 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_iSpawnScheme > 3){
#line 908 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iEnemyCount += (m_iSpawnScheme - 3);
#line 909 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 911 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(iEnemyCount < 6){
#line 912 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fToSpawn = (6.0 - (FLOAT) iEnemyCount ) / 2.0f;
#line 913 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 914 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
fToSpawn = 1.0f;
#line 915 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 916 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iToSpawn = ceilf (fToSpawn );
#line 918 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CMusicHolder * penMusicHolder = GetMusicHolder ();
#line 921 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX j = 0;j < iToSpawn ;j ++){
#line 922 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyBase * penTemplate = GetRandomTemplate (iScheme );
#line 923 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vTarget = AcquireTarget ();
#line 924 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
LaunchMonster (vTarget , penTemplate );
#line 926 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penMusicHolder != NULL ){
#line 927 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penMusicHolder -> m_ctEnemiesInWorld ++;
#line 928 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 929 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ChangeEnemyNumberForAllPlayers (+ 1);
#line 930 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 933 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESummonerTeleport est ;
#line 934 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
est . fWait = FRnd () * 1.0f + 3.0f;
#line 935 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendEvent (est );
#line 937 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(1.0f);
Jump(STATE_CURRENT, 0x015b000d, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b000d_Fire_09(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000d
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b000e, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b000e_Fire_10(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000e
;Jump(STATE_CURRENT,0x015b000f, FALSE, EInternal());return TRUE;}BOOL CSummoner::H0x015b000f_Fire_11(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b000f
Jump(STATE_CURRENT,0x015b0010, FALSE, EInternal());return TRUE;}
BOOL CSummoner::H0x015b0010_Fire_12(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0010
#line 941 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bFiredThisTurn = TRUE ;Jump(STATE_CURRENT,0x015b0012, FALSE, EInternal());return TRUE;}BOOL CSummoner::H0x015b0012_Fire_14(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0012
#line 944 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 944 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 947 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Hit(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_Hit
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::Hit expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 948 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Jump(STATE_CURRENT, STATE_CSummoner_Fire, TRUE, EVoid());return TRUE;
#line 949 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 949 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 956 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Die(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_Die
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EDeath, "CSummoner::Die expects 'EDeath' as input!"); const EDeath &eDeath = (const EDeath &)__eeInput;
#line 959 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bDying = TRUE ;
#line 961 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_penDeathInflictor = eDeath . eLastDamage . penInflictor ;
#line 964 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_penKiller = m_penDeathInflictor ;
#line 965 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penKiller == NULL || ! IsOfClass (m_penKiller , "Player")){
#line 966 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_penKiller = m_penEnemy ;
#line 967 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 969 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penKiller == NULL || ! IsOfClass (m_penKiller , "Player")){
#line 970 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_penKiller = FixupCausedToPlayer (this , m_penKiller , FALSE );
#line 971 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 974 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetDesiredRotation (ANGLE3D (0.0f , 0.0f , 0.0f));
#line 976 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
KillAllEnemiesInArea (eDeath );
#line 978 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_CHANTING , SOF_SMOOTHCHANGE );
#line 979 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soExplosion , SOUND_LASTWORDS , SOF_3D );
#line 980 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(4.0f);
Jump(STATE_CURRENT, 0x015b0015, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0015_Die_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0015
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0016, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0016_Die_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0016
;
#line 982 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
STATE_CSummoner_TeleportToDeathMarker, TRUE;
Jump(STATE_CURRENT, 0x015b0017, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0017_Die_03(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0017
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: Call(STATE_CURRENT, STATE_CSummoner_TeleportToDeathMarker, TRUE, EVoid());return TRUE;case EVENTCODE_EReturn: Jump(STATE_CURRENT,0x015b0018, FALSE, __eeInput); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0018_Die_04(const CEntityEvent &__eeInput){
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0018
const EReturn&__e= (EReturn&)__eeInput;
;
#line 985 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
EDeath eDeath ;
#line 986 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath . eLastDamage . penInflictor = m_penDeathInflictor ;
#line 987 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
KillAllEnemiesInArea (eDeath );
#line 990 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ShakeItBaby (_pTimer -> CurrentTick () , 0.25f , TRUE );
#line 991 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soExplosion , SOUND_TREMORS , SOF_3D );
#line 993 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_vDeathPosition = GetPlacement () . pl_PositionVector ;
#line 996 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penBeginDeathTarget != NULL ){
#line 997 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendToTarget (m_penBeginDeathTarget , EET_TRIGGER , m_penKiller );
#line 998 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1000 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soSound , SOUND_DEATH , SOF_3D );
#line 1001 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_DEATHBLOW , SOF_SMOOTHCHANGE );
#line 1002 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_DEATHBLOW ) - 0.25f);
Jump(STATE_CURRENT, 0x015b0019, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0019_Die_05(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0019
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b001a, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b001a_Die_06(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001a
;
#line 1005 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToEditorModel ();
#line 1008 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plStars ;
#line 1009 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plStars = GetPlacement ();
#line 1010 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffect eSpawnEffect ;
#line 1011 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . betType = BET_SUMMONERSTAREXPLOSION ;
#line 1012 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . colMuliplier = C_WHITE | CT_OPAQUE ;
#line 1013 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penStars = CreateEntity (plStars , CLASS_BASIC_EFFECT );
#line 1014 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penStars -> Initialize (eSpawnEffect );
#line 1016 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmDeathBegin = _pTimer -> CurrentTick ();
#line 1017 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fDeathDuration = 12.0f;
#line 1018 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bExploded = TRUE ;
#line 1019 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ShakeItBaby (_pTimer -> CurrentTick () , 5.0f , FALSE );
#line 1021 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soExplosion , SOUND_EXPLODE , SOF_3D );
#line 1024 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Begin (EIBT_FLESH , DPT_BLOODTRAIL , BET_BLOODSTAIN , 1.0f ,
#line 1025 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D (0.0f , 10.0f , 0.0f) , FLOAT3D (0.0f , 0.0f , 0.0f) , 5.0f , 2.0f);
#line 1026 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(INDEX i = 0;i < 15;i ++){
#line 1028 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vSpeed = FLOAT3D (0.3f + FRnd () * 0.1f , 1.0f + FRnd () * 0.5f , 0.3f + FRnd () * 0.1f) * 1.5f * m_fStretch ;
#line 1029 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vPos = vSpeed + GetPlacement () . pl_PositionVector ;
#line 1030 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ANGLE3D aAng = ANGLE3D (FRnd () * 360.0f , FRnd () * 360.0f , FRnd () * 360.0f);
#line 1032 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vSpeed . Normalize ();
#line 1033 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vSpeed (2) *= vSpeed (2);
#line 1035 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plPos = CPlacement3D (vPos , aAng );
#line 1037 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
switch(i % 3){
#line 1038 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
case 0:
#line 1039 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS01 , TEXTURE_SUMMONER , 0 , 0 , 0 , 0 , m_fStretch ,
#line 1040 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1041 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS_FLESH , TEXTURE_DEBRIS_FLESH , 0 , 0 , 0 , 0 , m_fStretch * 0.33f ,
#line 1042 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1043 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
break ;
#line 1044 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
case 1:
#line 1045 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS02 , TEXTURE_SUMMONER , 0 , 0 , 0 , 0 , m_fStretch ,
#line 1046 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1047 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS_FLESH , TEXTURE_DEBRIS_FLESH , 0 , 0 , 0 , 0 , m_fStretch * 0.33f ,
#line 1048 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1049 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
break ;
#line 1050 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
case 2:
#line 1051 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS03 , TEXTURE_SUMMONER , 0 , 0 , 0 , 0 , m_fStretch ,
#line 1052 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1053 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Debris_Spawn_Independent (this , this , MODEL_DEBRIS_FLESH , TEXTURE_DEBRIS_FLESH , 0 , 0 , 0 , 0 , m_fStretch * 0.33f ,
#line 1054 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plPos , vSpeed * 70.0f , aAng );
#line 1055 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
break ;
#line 1056 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1057 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1060 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penExplodeDeathTarget != NULL ){
#line 1061 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendToTarget (m_penExplodeDeathTarget , EET_TRIGGER , m_penKiller );
#line 1062 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1068 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soSound , SOUND_CHIMES , SOF_3D );
#line 1070 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iIndex = 20;
#line 1071 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Jump(STATE_CURRENT,0x015b001d, FALSE, EInternal());return TRUE;}BOOL CSummoner::H0x015b001d_Die_09(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001d
if(!((m_iIndex --) > 1)){ Jump(STATE_CURRENT,0x015b001e, FALSE, EInternal());return TRUE;}
#line 1072 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D plExplosion ;
#line 1073 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plExplosion . pl_OrientationAngle = ANGLE3D (0.0f , 0.0f , 0.0f);
#line 1074 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plExplosion . pl_PositionVector = FLOAT3D (0.3f + FRnd () * 0.1f , 1.0f + FRnd () * 0.5f , 0.3f + FRnd () * 0.1f) * m_fStretch ;
#line 1075 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
plExplosion . pl_PositionVector += GetPlacement () . pl_PositionVector ;
#line 1076 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ESpawnEffect eSpawnEffect ;
#line 1077 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . colMuliplier = C_WHITE | CT_OPAQUE ;
#line 1078 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . betType = BET_CANNON ;
#line 1079 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fSize = (m_fStretch * m_iIndex ) * 0.333f;
#line 1080 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eSpawnEffect . vStretch = FLOAT3D (fSize , fSize , fSize );
#line 1081 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penExplosion = CreateEntity (plExplosion , CLASS_BASIC_EFFECT );
#line 1082 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penExplosion -> Initialize (eSpawnEffect );
#line 1084 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ShakeItBaby (_pTimer -> CurrentTick () , m_iIndex / 4.0f , FALSE );
#line 1086 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(0.05f + FRnd () * 0.2f);
Jump(STATE_CURRENT, 0x015b001b, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b001b_Die_07(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001b
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b001c, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b001c_Die_08(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001c
;Jump(STATE_CURRENT,0x015b001d, FALSE, EInternal());return TRUE;
#line 1087 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}BOOL CSummoner::H0x015b001e_Die_10(const CEntityEvent &__eeInput) {
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001e
#line 1089 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(m_fDeathDuration );
Jump(STATE_CURRENT, 0x015b001f, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b001f_Die_11(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b001f
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0020, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0020_Die_12(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0020
;
#line 1092 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penEndDeathTarget != NULL ){
#line 1093 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendToTarget (m_penEndDeathTarget , EET_TRIGGER , m_penKiller );
#line 1094 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1096 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
EDeath eDeath ;
#line 1097 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
eDeath . eLastDamage . penInflictor = m_penDeathInflictor ;
#line 1098 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Jump(STATE_CURRENT, STATE_CEnemyBase_Die, FALSE, eDeath );return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1101 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
TeleportToDeathMarker(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_TeleportToDeathMarker
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::TeleportToDeathMarker expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1104 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = TRUE ;
#line 1106 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_VANISHING , SOF_SMOOTHCHANGE );
#line 1107 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_VANISHING ));
Jump(STATE_CURRENT, 0x015b0022, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0022_TeleportToDeathMarker_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0022
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0023, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0023_TeleportToDeathMarker_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0023
;
#line 1110 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
DisappearEffect ();
#line 1111 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToEditorModel ();
#line 1112 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_IMMATERIAL );
#line 1115 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFlame = GetChildOfClass ("Flame");
#line 1116 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penFlame != NULL ){
#line 1117 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFlame -> Destroy ();
#line 1118 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1121 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(2.0f);
Jump(STATE_CURRENT, 0x015b0024, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0024_TeleportToDeathMarker_03(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0024
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0025, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0025_TeleportToDeathMarker_04(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0025
;
#line 1123 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D pl ;
#line 1124 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pl . pl_PositionVector = m_penDeathMarker -> GetPlacement () . pl_PositionVector ;
#line 1125 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vToPlayer ;
#line 1126 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penEnemy != NULL ){
#line 1127 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer = m_penEnemy -> GetPlacement () . pl_PositionVector - pl . pl_PositionVector ;
#line 1128 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 1129 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer = m_vPlayerSpotted - pl . pl_PositionVector ;
#line 1130 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1131 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer . Normalize ();
#line 1132 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
DirectionVectorToAngles (vToPlayer , pl . pl_OrientationAngle );
#line 1133 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Teleport (pl );
#line 1136 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnTeleportEffect ();
#line 1138 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(0.5f);
Jump(STATE_CURRENT, 0x015b0026, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0026_TeleportToDeathMarker_05(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0026
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0027, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0027_TeleportToDeathMarker_06(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0027
;
#line 1139 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToModel ();
#line 1140 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_MODEL );
#line 1142 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = FALSE ;
#line 1144 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_APPEARING , SOF_SMOOTHCHANGE );
#line 1145 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_APPEARING ));
Jump(STATE_CURRENT, 0x015b0028, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0028_TeleportToDeathMarker_07(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0028
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0029, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0029_TeleportToDeathMarker_08(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0029
;
#line 1147 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 1147 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1150 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
BossAppear(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_BossAppear
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::BossAppear expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1152 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 1152 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1156 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PreMainLoop(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_PreMainLoop
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::PreMainLoop expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1158 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
STATE_CSummoner_BossAppear, TRUE;
Jump(STATE_CURRENT, 0x015b002c, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b002c_PreMainLoop_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b002c
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: Call(STATE_CURRENT, STATE_CSummoner_BossAppear, TRUE, EVoid());return TRUE;case EVENTCODE_EReturn: Jump(STATE_CURRENT,0x015b002d, FALSE, __eeInput); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b002d_PreMainLoop_02(const CEntityEvent &__eeInput){
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b002d
const EReturn&__e= (EReturn&)__eeInput;
;
#line 1159 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 1159 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1162 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Immaterial(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_Immaterial
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::Immaterial expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1165 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
DisappearEffect ();
#line 1166 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToEditorModel ();
#line 1167 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_IMMATERIAL );
#line 1170 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer penFlame = GetChildOfClass ("Flame");
#line 1171 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(penFlame != NULL ){
#line 1172 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
penFlame -> Destroy ();
#line 1173 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1176 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(m_fImmaterialDuration + FRnd () * 2.0f - 1.0f);
Jump(STATE_CURRENT, 0x015b002f, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b002f_Immaterial_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b002f
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0030, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0030_Immaterial_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0030
;
#line 1178 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iMaxTries = 10;
#line 1179 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vTarget ;
#line 1181 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
do{
#line 1182 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CSummonerMarker * marker = & ((CSummonerMarker &) * m_penTeleportMarker );
#line 1183 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX iMarker = IRnd () % m_iTeleportMarkers ;
#line 1184 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(iMarker > 0){
#line 1185 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
marker = & ((CSummonerMarker &) * marker -> m_penTarget );
#line 1186 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
iMarker --;
#line 1187 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1188 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vTarget = marker -> GetPlacement () . pl_PositionVector ;
#line 1189 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fR = FRnd () * marker -> m_fMarkerRange ;
#line 1190 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT fA = FRnd () * 360.0f;
#line 1191 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vTarget += FLOAT3D (CosFast (fA ) * fR , 0.05f , SinFast (fA ) * fR );
#line 1192 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}while(! DistanceToAllPlayersGreaterThen (1.0f) || (iMaxTries --) < 1);
#line 1194 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CPlacement3D pl ;
#line 1195 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pl . pl_PositionVector = vTarget ;
#line 1196 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
FLOAT3D vToPlayer ;
#line 1197 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(m_penEnemy != NULL ){
#line 1198 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer = m_penEnemy -> GetPlacement () . pl_PositionVector - vTarget ;
#line 1199 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else {
#line 1200 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer = m_vPlayerSpotted - vTarget ;
#line 1201 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1202 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
vToPlayer . Normalize ();
#line 1203 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
DirectionVectorToAngles (vToPlayer , pl . pl_OrientationAngle );
#line 1204 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Teleport (pl );
#line 1207 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnTeleportEffect ();
#line 1208 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToModel ();
#line 1209 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_MODEL );
#line 1211 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bShouldTeleport = FALSE ;
#line 1212 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmMaterializationTime = _pTimer -> CurrentTick ();
#line 1213 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bFiredThisTurn = FALSE ;
#line 1215 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = FALSE ;
#line 1217 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soTeleport , SOUND_MATERIALIZE , SOF_3D );
#line 1219 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_APPEARING , SOF_SMOOTHCHANGE );
#line 1220 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_APPEARING ));
Jump(STATE_CURRENT, 0x015b0031, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0031_Immaterial_03(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0031
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0032, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0032_Immaterial_04(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0032
;
#line 1222 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SendEvent (EBegin ());
#line 1223 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EReturn ());
#line 1223 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE; ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1227 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SummonerLoop(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_SummonerLoop
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::SummonerLoop expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1229 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnReminder (this , 1.0f , 128);
#line 1230 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAt(THINKTIME_NEVER);
Jump(STATE_CURRENT, 0x015b0034, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0034_SummonerLoop_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0034
switch(__eeInput.ee_slEvent){case(EVENTCODE_EBegin):
#line 1232 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{const EBegin&e= (EBegin&)__eeInput;
#line 1233 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Call(STATE_CURRENT, STATE_CEnemyBase_MainLoop, FALSE, EVoid());return TRUE;
#line 1234 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}ASSERT(FALSE);break;case(EVENTCODE_EReminder):
#line 1236 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{const EReminder&er= (EReminder&)__eeInput;
#line 1238 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(er . iValue == 128){
#line 1239 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
RecalculateFuss ();
#line 1241 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(_pTimer -> CurrentTick () > m_tmMaterializationTime + m_fCorporealDuration ){
#line 1242 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bShouldTeleport = TRUE ;
#line 1243 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1245 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnReminder (this , 1.0f , 128);
#line 1246 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(er . iValue == 129 && ! m_bDying ){
#line 1247 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Call(STATE_CURRENT, STATE_CSummoner_InitiateTeleport, TRUE, EVoid());return TRUE;
#line 1248 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}else if(TRUE ){
#line 1249 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return FALSE;
#line 1250 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1251 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE;
#line 1252 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}ASSERT(FALSE);break;case(EVENTCODE_ESummonerTeleport):
#line 1255 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{const ESummonerTeleport&est= (ESummonerTeleport&)__eeInput;
#line 1257 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnReminder (this , est . fWait , 129);
#line 1258 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE;
#line 1259 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}ASSERT(FALSE);break;default:{
#line 1261 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE;
#line 1262 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}ASSERT(FALSE);break;
#line 1263 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}return TRUE;}BOOL CSummoner::H0x015b0035_SummonerLoop_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0035
ASSERT(FALSE); return TRUE;};BOOL CSummoner::
#line 1269 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Main(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CSummoner_Main
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EVoid, "CSummoner::Main expects 'EVoid' as input!"); const EVoid &e = (const EVoid &)__eeInput;
#line 1272 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
InitAsEditorModel ();
#line 1274 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetPhysicsFlags (EPF_MODEL_WALKING );
#line 1275 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_IMMATERIAL );
#line 1276 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetFlags (GetFlags () | ENF_ALIVE );
#line 1278 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
en_fDensity = 10000.0f;
#line 1279 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fDamageWounded = 1e6f;
#line 1281 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_sptType = SPT_BLOOD ;
#line 1282 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bBoss = TRUE ;
#line 1283 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetHealth (SUMMONER_HEALTH );
#line 1284 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fMaxHealth = SUMMONER_HEALTH ;
#line 1285 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fBodyParts = 0;
#line 1287 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fWalkSpeed = 0.0f;
#line 1288 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_aWalkRotateSpeed = AngleDeg (270.0f);
#line 1289 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fAttackRunSpeed = 0.0f;
#line 1290 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_aAttackRotateSpeed = AngleDeg (270.0f);
#line 1291 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fCloseRunSpeed = 0.0f;
#line 1292 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_aCloseRotateSpeed = AngleDeg (270.0f);
#line 1294 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fAttackDistance = 500.0f;
#line 1295 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fCloseDistance = 50.0f;
#line 1296 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fStopDistance = 500.0f;
#line 1297 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fIgnoreRange = 600.0f;
#line 1298 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iScore = 1000000;
#line 1300 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fAttackFireTime = m_fFirePeriod ;
#line 1301 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fCloseFireTime = m_fFirePeriod ;
#line 1303 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetPhysicsFlags (EPF_MODEL_WALKING );
#line 1304 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StandingAnim ();
#line 1308 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetComponents (this , * GetModelObject () , MODEL_SUMMONER , TEXTURE_SUMMONER , 0 , 0 , 0);
#line 1309 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
AddAttachmentToModel (this , * GetModelObject () , SUMMONER_ATTACHMENT_STAFF , MODEL_STAFF , TEXTURE_STAFF , 0 , 0 , 0);
#line 1310 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
GetModelObject () -> StretchModel (FLOAT3D (m_fStretch , m_fStretch , m_fStretch ));
#line 1311 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
ModelChangeNotify ();
#line 1313 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
AddToMovers ();
#line 1315 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(_pTimer -> TickQuantum );
Jump(STATE_CURRENT, 0x015b0036, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0036_Main_01(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0036
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b0037, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b0037_Main_02(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0037
;
#line 1317 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . Initialize (this );
#line 1318 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_emEmiter . em_etType = ET_SUMMONER_STAFF ;
#line 1321 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
INDEX i ;
#line 1322 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEntityPointer * pen ;
#line 1323 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iGroup01Count = 0;
#line 1324 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup01Template01 ;
#line 1325 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(i = 0;i < SUMMONER_TEMP_PER_GROUP ;i ++){
#line 1326 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(& * pen [ i ] != NULL ){m_iGroup01Count ++;}
#line 1327 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1328 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iGroup02Count = 0;
#line 1329 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup02Template01 ;
#line 1330 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(i = 0;i < SUMMONER_TEMP_PER_GROUP ;i ++){
#line 1331 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(& * pen [ i ] != NULL ){m_iGroup02Count ++;}
#line 1332 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1333 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iGroup03Count = 0;
#line 1334 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
pen = & m_penGroup03Template01 ;
#line 1335 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
for(i = 0;i < SUMMONER_TEMP_PER_GROUP ;i ++){
#line 1336 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(& * pen [ i ] != NULL ){m_iGroup03Count ++;}
#line 1337 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1339 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
if(! DoSafetyChecks ()){
#line 1340 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Destroy ();
#line 1341 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Return(STATE_CURRENT,EVoid());
#line 1341 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
return TRUE;
#line 1342 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1345 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
CEnemyMarker * it ;
#line 1346 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iSpawnMarkers = 1;
#line 1347 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
it = & ((CEnemyMarker &) * m_penSpawnMarker );
#line 1348 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(it -> m_penTarget != NULL )
#line 1349 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 1350 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
it = & ((CEnemyMarker &) * it -> m_penTarget );
#line 1351 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iSpawnMarkers ++;
#line 1352 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1355 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iTeleportMarkers = 1;
#line 1356 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
it = & ((CEnemyMarker &) * m_penTeleportMarker );
#line 1357 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
while(it -> m_penTarget != NULL )
#line 1358 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
{
#line 1359 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
it = & ((CEnemyMarker &) * it -> m_penTarget );
#line 1360 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iTeleportMarkers ++;
#line 1361 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}
#line 1363 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iSpawnScheme = 0;
#line 1364 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fMaxCurrentFuss = m_fMaxBeginFuss ;
#line 1365 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bDying = FALSE ;
#line 1366 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmDeathBegin = 0.0f;
#line 1367 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_fDeathDuration = 0.0f;
#line 1368 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = TRUE ;
#line 1369 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bExploded = FALSE ;
#line 1372 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAt(THINKTIME_NEVER);
Jump(STATE_CURRENT, 0x015b0038, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b0038_Main_03(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0038
switch(__eeInput.ee_slEvent){case(EVENTCODE_EBegin):{const EBegin&e= (EBegin&)__eeInput;
return TRUE;}ASSERT(FALSE);break;case(EVENTCODE_ETrigger):{const ETrigger&e= (ETrigger&)__eeInput;
UnsetTimer();Jump(STATE_CURRENT,0x015b0039, FALSE, EInternal());return TRUE;}ASSERT(FALSE);break;default:{return TRUE;}ASSERT(FALSE);break;
#line 1376 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
}return TRUE;}BOOL CSummoner::H0x015b0039_Main_04(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b0039
#line 1378 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_soExplosion . Set3DParameters (1500.0f , 1000.0f , 2.0f , 1.0f);
#line 1379 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_soSound . Set3DParameters (1500.0f , 1000.0f , 2.0f , 1.0f);
#line 1380 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_soChant . Set3DParameters (1500.0f , 1000.0f , 2.0f , 1.0f);
#line 1381 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_soTeleport . Set3DParameters (1500.0f , 1000.0f , 3.0f , 1.0f);
#line 1382 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_iTaunt = 0;
#line 1386 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SpawnTeleportEffect ();
#line 1387 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SwitchToModel ();
#line 1388 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_bInvulnerable = FALSE ;
#line 1389 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetCollisionFlags (ECF_MODEL );
#line 1391 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
PlaySound (m_soTeleport , SOUND_MATERIALIZE , SOF_3D );
#line 1393 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
StartModelAnim (SUMMONER_ANIM_APPEARING , SOF_SMOOTHCHANGE );
#line 1394 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
SetTimerAfter(GetModelObject () -> GetAnimLength (SUMMONER_ANIM_APPEARING ));
Jump(STATE_CURRENT, 0x015b003a, FALSE, EBegin());return TRUE;}BOOL CSummoner::H0x015b003a_Main_05(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b003a
switch(__eeInput.ee_slEvent) {case EVENTCODE_EBegin: return TRUE;case EVENTCODE_ETimer: Jump(STATE_CURRENT,0x015b003b, FALSE, EInternal()); return TRUE;default: return FALSE; }}BOOL CSummoner::H0x015b003b_Main_06(const CEntityEvent &__eeInput){
ASSERT(__eeInput.ee_slEvent==EVENTCODE_EInternal);
#undef STATE_CURRENT
#define STATE_CURRENT 0x015b003b
;
#line 1396 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
m_tmMaterializationTime = _pTimer -> CurrentTick ();
#line 1399 "D:/SE1_GPL/Sources/EntitiesMP/Summoner.es"
Jump(STATE_CURRENT, STATE_CSummoner_SummonerLoop, TRUE, EVoid());return TRUE; ASSERT(FALSE); return TRUE;};