1//**************************************************************************
2//**
3//**    ##   ##    ##    ##   ##   ####     ####   ###     ###
4//**    ##   ##  ##  ##  ##   ##  ##  ##   ##  ##  ####   ####
5//**     ## ##  ##    ##  ## ##  ##    ## ##    ## ## ## ## ##
6//**     ## ##  ########  ## ##  ##    ## ##    ## ##  ###  ##
7//**      ###   ##    ##   ###    ##  ##   ##  ##  ##       ##
8//**       #    ##    ##    #      ####     ####   ##       ##
9//**
10//**    $Id: Heresiarch.vc 3794 2008-09-21 20:42:02Z dj_jl $
11//**
12//**    Copyright (C) 1999-2006 Jānis Legzdiņš
13//**
14//**    This program is free software; you can redistribute it and/or
15//**  modify it under the terms of the GNU General Public License
16//**  as published by the Free Software Foundation; either version 2
17//**  of the License, or (at your option) any later version.
18//**
19//**    This program is distributed in the hope that it will be useful,
20//**  but WITHOUT ANY WARRANTY; without even the implied warranty of
21//**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22//**  GNU General Public License for more details.
23//**
24//**************************************************************************
25
26class Heresiarch : Actor
27	game(GAME_Hexen)
28	__mobjinfo__(10080);
29
30//
31// Sorcerer Variables
32//
33
34//      Special1f       Angle of ball 1 (all others relative to that)
35//      SpecialCID      which ball to stop at in stop mode (MT_???)
36//      Args[0]         Defense time
37//      Args[1]         Number of full rotations since stopping mode
38//      Args[2]         Target orbit speed for acceleration/deceleration
39//      Args[3]         Movement mode (see SORC_ macros)
40//      Args[4]         Current ball orbit speed
41
42//==========================================================================
43//
44//  Died
45//
46//==========================================================================
47
48void Died(EntityEx source, EntityEx inflictor)
49{
50	//	For Heresiarch special is actually the script to be executed.
51	int Script = Special;
52	Special = 0;
53
54	::Died(source, inflictor);
55
56	if (Script)
57	{
58		XLevel.StartACS(Script, 0, 0, 0, 0, self, NULL, 0, false, false);
59	}
60}
61
62states
63{
64Spawn:
65	SORC A 3
66	SORC A 2 A_SorcSpinBalls
67	SORC A 10 A_Look
68	Wait
69See:
70	SORC ABCD 5 A_Chase
71	Loop
72Pain:
73	SORC G 8
74	SORC G 8 A_Pain
75	Goto See
76Missile:
77	SORC F 6 Bright A_FaceTarget
78	SORC F 6 Bright A_SpeedBalls
79	SORC F 6 Bright A_FaceTarget
80	Wait
81Attack1:
82	SORC E 6 Bright
83	SORC E 6 Bright A_SpawnFizzle
84	SORC E 5 Bright A_FaceTarget
85	Goto Attack1+1
86Attack2:
87	SORC E 2 Bright
88	SORC E 2 Bright A_SorcBossAttack
89	Goto See
90Death:
91	SORC H 5 Bright
92	SORC I 5 Bright A_FaceTarget
93	SORC J 5 Bright A_Scream
94	SORC KLMNOPQRST 5 Bright
95	SORC U 5 Bright A_NoBlocking
96	SORC VWXY 5 Bright
97	SORC Z -1 Bright
98	Stop
99}
100
101defaultproperties
102{
103	Health = 5000;
104	Radius = 40.0;
105	Height = 110.0;
106	Mass = 500.0;
107	Speed = 16.0 * 35.0;
108	PainChance = 0.0390625;
109	MissileDamage = 9;
110	bSolid = true;
111	bShootable = true;
112	bCountKill = true;
113	bMonster = true;
114	bActivatePushWall = true;
115	bActivateMCross = true;
116	bPassMobj = true;
117	bCanUseWalls = true;
118	bFloorClip = true;
119	bNoBlood = true;
120	bBoss = true;
121	bNeverTarget = true;
122	bFullVolActive = true;
123	bNoIceDeath = true;
124	bDeflect = true;
125	SightSound = 'SorcererSight';
126	ActiveSound = 'SorcererActive';
127	PainSound = 'SorcererPain';
128	DeathSound = 'SorcererDeathScream';
129	Obituary = "$ob_heresiarch";
130}
131