mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-12-11 21:00:53 +00:00
2998 lines
71 KiB
C++
2998 lines
71 KiB
C++
|
#include "actor.h"
|
||
|
#include "gi.h"
|
||
|
#include "m_random.h"
|
||
|
#include "s_sound.h"
|
||
|
#include "d_player.h"
|
||
|
#include "a_action.h"
|
||
|
#include "p_local.h"
|
||
|
#include "a_doomglobal.h"
|
||
|
#include "a_strifeglobal.h"
|
||
|
#include "p_enemy.h"
|
||
|
#include "p_lnspec.h"
|
||
|
#include "c_console.h"
|
||
|
|
||
|
// Notes so I don't forget them:
|
||
|
// Strife does some extra stuff in A_Explode if a player caused the explosion. (probably NoiseAlert)
|
||
|
// See the instructions @ 21249.
|
||
|
//
|
||
|
// Strife's FLOATSPEED is 5 and not 4.
|
||
|
//
|
||
|
// In P_CheckMissileRange, mobjtypes 53,54,55,56,57,58 shift the distance right 4 bits (some, but not all the acolytes)
|
||
|
// mobjtypes 61,63,91 shift it right 1 bit
|
||
|
//
|
||
|
// When shooting missiles at something, if MF_SHADOW is set, the angle is adjusted with the formula:
|
||
|
// angle += pr_spawnmissile.Random2() << 21
|
||
|
// When MF_STRIFEx4000000 is set, the angle is adjusted similarly:
|
||
|
// angle += pr_spawnmissile.Random2() << 22
|
||
|
// Note that these numbers are different from those used by all the other Doom engine games.
|
||
|
|
||
|
// Strife seems to use the mass of armor for something, since it's not the default value.
|
||
|
|
||
|
/* These mobjinfos have been converted:
|
||
|
|
||
|
0 ForceFieldGuard
|
||
|
1 StrifePlayer
|
||
|
2 WeaponSmith
|
||
|
3 BarKeep
|
||
|
4 Armorer
|
||
|
5 Medic
|
||
|
6 Peasant1
|
||
|
7 Peasant2
|
||
|
8 Peasant3
|
||
|
9 Peasant4
|
||
|
10 Peasant5
|
||
|
11 Peasant6
|
||
|
12 Peasant7
|
||
|
13 Peasant8
|
||
|
14 Peasant9
|
||
|
15 Peasant10
|
||
|
16 Peasant11
|
||
|
17 Peasant12
|
||
|
18 Peasant13
|
||
|
19 Peasant14
|
||
|
20 Peasant15
|
||
|
21 Peasant16
|
||
|
22 Peasant17
|
||
|
23 Peasant18
|
||
|
24 Peasant19
|
||
|
25 Peasant20
|
||
|
26 Peasant21
|
||
|
27 Peasant22
|
||
|
28 Zombie
|
||
|
29 AcolyteToBe
|
||
|
30 ZombieSpawner
|
||
|
31 Tank1
|
||
|
32 Tank2
|
||
|
33 Tank3
|
||
|
34 Tank4
|
||
|
35 Tank5
|
||
|
36 Tank6
|
||
|
37 KneelingGuy
|
||
|
38 Beggar1
|
||
|
39 Beggar2
|
||
|
40 Beggar3
|
||
|
41 Beggar4
|
||
|
42 Beggar5
|
||
|
43 Rebel1
|
||
|
44 Rebel2
|
||
|
45 Rebel3
|
||
|
46 Rebel4
|
||
|
47 Rebel5
|
||
|
48 Rebel6
|
||
|
49 Macil1
|
||
|
50 Macil2
|
||
|
51 RocketTrail
|
||
|
52 Reaver
|
||
|
53 AcolyteTan
|
||
|
54 AcolyteRed
|
||
|
55 AcolyteRust
|
||
|
56 AcolyteGray
|
||
|
57 AcolyteDGreen
|
||
|
58 AcolyteGold
|
||
|
59 AcolyteLGreen
|
||
|
60 AcolyteBlue
|
||
|
61 AcolyteShadow
|
||
|
62 Templar
|
||
|
63 Crusader
|
||
|
64 StrifeBishop
|
||
|
65 Oracle
|
||
|
66 Loremaster (aka Priest)
|
||
|
67 AlienSpectre1
|
||
|
68 AlienChunkSmall
|
||
|
69 AlienChunkLarge
|
||
|
70 AlienSpectre2
|
||
|
71 AlienSpectre3
|
||
|
72 AlienSpectre4
|
||
|
73 AlienSpectre5
|
||
|
74 EntityBoss
|
||
|
75 EntitySecond
|
||
|
76 EntityNest
|
||
|
77 EntityPod
|
||
|
78 SpectralLightningH1
|
||
|
79 SpectralLightningH2
|
||
|
80 SpectralLightningBall1
|
||
|
81 SpectralLightningBall2
|
||
|
82 SpectralLightningH3
|
||
|
83 SpectralLightningHTail
|
||
|
84 SpectralLightningBigBall1
|
||
|
85 SpectralLightningBigBall2
|
||
|
86 SpectralLightningV1
|
||
|
87 SpectralLightningV2
|
||
|
88 SpectralLightningSpot
|
||
|
89 SpectralLightningBigV1
|
||
|
90 SpectralLightningBigV2
|
||
|
91 Sentinel
|
||
|
92 Stalker
|
||
|
93 Inquisitor
|
||
|
94 InquisitorArm
|
||
|
95 Programmer
|
||
|
96 ProgrammerBase
|
||
|
97 LoreShot
|
||
|
98 LoreShot2
|
||
|
99 MiniMissile
|
||
|
100 CrusaderMissile
|
||
|
101 BishopMissile
|
||
|
102 ElectricBolt
|
||
|
103 PoisonBolt
|
||
|
104 SentinelFX1
|
||
|
105 SentinelFX2
|
||
|
106 HEGrenade
|
||
|
107 PhosphorousGrenade
|
||
|
108 InquisitorShot
|
||
|
109 PhosphorousFire
|
||
|
110 MaulerTorpedo
|
||
|
111 MaulerTorpedoWave
|
||
|
112 FlameMissile
|
||
|
113 FastFlameMissile
|
||
|
114 MaulerPuff
|
||
|
115 StrifePuff
|
||
|
116 StrifeSpark
|
||
|
117 Blood
|
||
|
118 TeleportFog
|
||
|
119 ItemFog
|
||
|
120 --- Doomednum is 14, which makes it a teleport destination. Don't know why it's in the mobjinfo table.
|
||
|
121 KlaxonWarningLight
|
||
|
122 CeilingTurret
|
||
|
123 Piston
|
||
|
124 Computer
|
||
|
125 MedPatch
|
||
|
126 MedicalKit
|
||
|
127 SurgeryKit
|
||
|
128 DegninOre
|
||
|
129 MetalArmor
|
||
|
130 LeatherArmor
|
||
|
131 WaterBottle
|
||
|
132 Mug
|
||
|
133 BaseKey
|
||
|
134 GovsKey
|
||
|
135 Passcard
|
||
|
136 IDBadge
|
||
|
137 PrisonKey
|
||
|
138 SeveredHand
|
||
|
139 Power1Key
|
||
|
140 Power2Key
|
||
|
141 Power3Key
|
||
|
142 GoldKey
|
||
|
143 IDCard
|
||
|
144 SilverKey
|
||
|
145 OracleKey
|
||
|
146 MilitaryID
|
||
|
147 OrderKey
|
||
|
148 WarehouseKey
|
||
|
149 BrassKey
|
||
|
150 RedCrystalKey
|
||
|
151 BlueCrystalKey
|
||
|
152 ChapelKey
|
||
|
153 CatacombKey
|
||
|
154 SecurityKey
|
||
|
155 CoreKey
|
||
|
156 MaulerKey
|
||
|
157 FactoryKey
|
||
|
158 MineKey
|
||
|
159 NewKey5
|
||
|
160 ShadowArmor
|
||
|
161 EnvironmentalSuit
|
||
|
162 GuardUniform
|
||
|
163 OfficersUniform
|
||
|
164 StrifeMap
|
||
|
165 Scanner
|
||
|
166
|
||
|
167 Targeter
|
||
|
168 Coin
|
||
|
169 Gold10
|
||
|
170 Gold25
|
||
|
171 Gold50
|
||
|
172 Gold300
|
||
|
173 BeldinsRing
|
||
|
174 OfferingChalice
|
||
|
175 Ear
|
||
|
176 Communicator
|
||
|
177 HEGrenadeRounds
|
||
|
178 PhosphorusGrenadeRounds
|
||
|
179 ClipOfBullets
|
||
|
180 BoxOfBullets
|
||
|
181 MiniMissiles
|
||
|
182 CrateOfMissiles
|
||
|
183 EnergyPod
|
||
|
184 EnergyPack
|
||
|
185 PoisonBolts
|
||
|
186 ElectricBolts
|
||
|
187 AmmoSatchel
|
||
|
188 AssaultGun
|
||
|
189 AssaultGunStanding
|
||
|
190 FlameThrower
|
||
|
191 FlameThrowerParts
|
||
|
192 MiniMissileLauncher
|
||
|
193 Mauler
|
||
|
194 StrifeCrossbow
|
||
|
195 StrifeGrenadeLauncher
|
||
|
196 Sigil1
|
||
|
197 Sigil2
|
||
|
198 Sigil3
|
||
|
199 Sigil4
|
||
|
200 Sigil5
|
||
|
201 PowerCrystal
|
||
|
202 RatBuddy
|
||
|
203 WoodenBarrel
|
||
|
204 ExplosiveBarrel2
|
||
|
205 TargetPractice
|
||
|
206 LightSilverFluorescent
|
||
|
207 LightBrownFluorescent
|
||
|
208 LightGoldFluorescent
|
||
|
209 LightGlobe
|
||
|
210 PillarTechno
|
||
|
211 PillarAztec
|
||
|
212 PillarAztecDamaged
|
||
|
213 PillarAztecRuined
|
||
|
214 PillarHugeTech
|
||
|
215 PillarAlienPower
|
||
|
216 SStalactiteBig
|
||
|
217 SStalactiteSmall
|
||
|
218 SStalagmiteBig
|
||
|
219 CavePillarTop
|
||
|
220 CavePillarBottom
|
||
|
221 SStalagmiteSmall
|
||
|
222 Candle
|
||
|
223 StrifeCandelabra
|
||
|
224 WaterDropOnFloor
|
||
|
225 WaterfallSplash
|
||
|
226 WaterDrip
|
||
|
227 WaterFountain
|
||
|
228 HeartsInTank
|
||
|
229 TeleportSwirl
|
||
|
230 DeadCrusader
|
||
|
231 DeadStrifePlayer
|
||
|
232 DeadPeasant
|
||
|
233 DeadAcolyte
|
||
|
234 DeadReaver
|
||
|
235 DeadRebel
|
||
|
236 SacrificedGuy
|
||
|
237 PileOfGuts
|
||
|
238 StrifeBurningBarrel
|
||
|
239 BurningBowl
|
||
|
240 BurningBrazier
|
||
|
241 SmallTorchLit
|
||
|
242 SmallTorchUnlit
|
||
|
243 CeilingChain
|
||
|
244 CageLight
|
||
|
245 Statue
|
||
|
246 StatueRuined
|
||
|
247 MediumTorch
|
||
|
248 OutsideLamp
|
||
|
249 PoleLantern
|
||
|
250 SRock1
|
||
|
251 SRock2
|
||
|
252 SRock3
|
||
|
253 SRock4
|
||
|
254 StickInWater
|
||
|
255 Rubble1
|
||
|
256 Rubble2
|
||
|
257 Rubble3
|
||
|
258 Rubble4
|
||
|
259 Rubble5
|
||
|
260 Rubble6
|
||
|
261 Rubble7
|
||
|
262 Rubble8
|
||
|
263 SurgeryCrab
|
||
|
264 LargeTorch
|
||
|
265 HugeTorch
|
||
|
266 PalmTree
|
||
|
267 BigTree2
|
||
|
268 PottedTree
|
||
|
269 TreeStub
|
||
|
270 ShortBush
|
||
|
271 TallBush
|
||
|
272 ChimneyStack
|
||
|
273 BarricadeColumn
|
||
|
274 Pot
|
||
|
275 Pitcher
|
||
|
276 Stool
|
||
|
277 MetalPot
|
||
|
278 Tub
|
||
|
279 Anvil
|
||
|
280 TechLampSilver
|
||
|
281 TechLampBrass
|
||
|
282 Tray
|
||
|
283 AmmoFiller
|
||
|
284 SigilBanner
|
||
|
285 RebelBoots
|
||
|
286 RebelHelmet
|
||
|
287 RebelShirt
|
||
|
288 PowerCoupling
|
||
|
289 BrokenPowerCoupling
|
||
|
290 AlienBubbleColumn
|
||
|
291 AlienFloorBubble
|
||
|
292 AlienCeilingBubble
|
||
|
293 AlienAspClimber
|
||
|
294 AlienSpiderLight
|
||
|
295 Meat
|
||
|
296 Junk
|
||
|
297 FireDroplet
|
||
|
298 AmmoFillup
|
||
|
299 HealthFillup
|
||
|
300 Info
|
||
|
301 RaiseAlarm
|
||
|
302 OpenDoor222
|
||
|
303 CloseDoor222
|
||
|
304 PrisonPass
|
||
|
305 OpenDoor224
|
||
|
306 UpgradeStamina
|
||
|
307 UpgradeAccuracy
|
||
|
308 InterrogatorReport (seems to be unused)
|
||
|
309 HealthTraining
|
||
|
310 GunTraining
|
||
|
311 OraclePass
|
||
|
312 QuestItem1
|
||
|
313 QuestItem2
|
||
|
314 QuestItem3
|
||
|
315 QuestItem4
|
||
|
316 QuestItem5
|
||
|
317 QuestItem6
|
||
|
318 QuestItem7
|
||
|
319 QuestItem8
|
||
|
320 QuestItem9
|
||
|
321 QuestItem10
|
||
|
322 QuestItem11
|
||
|
323 QuestItem12
|
||
|
324 QuestItem13
|
||
|
325 QuestItem14
|
||
|
326 QuestItem15
|
||
|
327 QuestItem16
|
||
|
328 QuestItem17
|
||
|
329 QuestItem18
|
||
|
330 QuestItem19
|
||
|
331 QuestItem20
|
||
|
332 QuestItem21
|
||
|
333 QuestItem22
|
||
|
334 QuestItem23
|
||
|
335 QuestItem24
|
||
|
336 QuestItem25
|
||
|
337 QuestItem26
|
||
|
338 QuestItem27
|
||
|
339 QuestItem28
|
||
|
340 QuestItem29
|
||
|
341 QuestItem30
|
||
|
342 QuestItem31
|
||
|
343 SlideshowStarter
|
||
|
*/
|
||
|
|
||
|
static FRandom pr_gibtosser ("GibTosser");
|
||
|
|
||
|
void A_TossGib (AActor *);
|
||
|
void A_LoopActiveSound (AActor *);
|
||
|
void A_FLoopActiveSound (AActor *);
|
||
|
void A_Countdown (AActor *);
|
||
|
void A_XXScream (AActor *);
|
||
|
void A_SentinelRefire (AActor *);
|
||
|
|
||
|
// Force Field Guard --------------------------------------------------------
|
||
|
|
||
|
void A_RemoveForceField (AActor *);
|
||
|
|
||
|
class AForceFieldGuard : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AForceFieldGuard, AActor)
|
||
|
public:
|
||
|
int TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype);
|
||
|
};
|
||
|
|
||
|
FState AForceFieldGuard::States[] =
|
||
|
{
|
||
|
S_NORMAL (TOKN, 'A', -1, NULL, NULL),
|
||
|
S_NORMAL (XPRK, 'A', 1, A_RemoveForceField, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AForceFieldGuard, Strife, 25, 0)
|
||
|
PROP_StrifeType (0)
|
||
|
PROP_SpawnHealth (10)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_DeathState (1)
|
||
|
PROP_RadiusFixed (2)
|
||
|
PROP_HeightFixed (1)
|
||
|
PROP_Mass (10000)
|
||
|
PROP_Flags (MF_SHOOTABLE|MF_NOSECTOR)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
int AForceFieldGuard::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype)
|
||
|
{
|
||
|
if (inflictor == NULL || !inflictor->IsKindOf (RUNTIME_CLASS(ADegninOre)))
|
||
|
{
|
||
|
return -1;
|
||
|
}
|
||
|
return health;
|
||
|
}
|
||
|
|
||
|
// Tank 1 (Huge) ------------------------------------------------------------
|
||
|
|
||
|
class ATank1 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank1, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank1::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK1, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK1, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK1, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank1, Strife, 209, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (192)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (31)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tank 2 (Huge) ------------------------------------------------------------
|
||
|
|
||
|
class ATank2 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank2, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank2::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK2, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK2, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK2, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank2, Strife, 210, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (192)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (32)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tank 3 (Huge) ------------------------------------------------------------
|
||
|
|
||
|
class ATank3 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank3, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank3::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK3, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK3, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK3, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank3, Strife, 211, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (192)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (33)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tank 4 -------------------------------------------------------------------
|
||
|
|
||
|
class ATank4 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank4, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank4::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK4, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK4, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK4, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank4, Strife, 213, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (34)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tank 5 -------------------------------------------------------------------
|
||
|
|
||
|
class ATank5 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank5, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank5::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK5, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK5, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK5, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank5, Strife, 214, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (35)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tank 6 -------------------------------------------------------------------
|
||
|
|
||
|
class ATank6 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATank6, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATank6::States[] =
|
||
|
{
|
||
|
S_NORMAL (TNK6, 'A', 15, NULL, &States[1]),
|
||
|
S_NORMAL (TNK6, 'B', 11, NULL, &States[2]),
|
||
|
S_NORMAL (TNK6, 'C', 40, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATank6, Strife, 229, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (36)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Kneeling Guy -------------------------------------------------------------
|
||
|
|
||
|
void A_SetShadow (AActor *self)
|
||
|
{
|
||
|
self->flags |= MF_STRIFEx8000000|MF_SHADOW;
|
||
|
self->RenderStyle = STYLE_Translucent;
|
||
|
self->alpha = HR_SHADOW;
|
||
|
}
|
||
|
|
||
|
void A_ClearShadow (AActor *self)
|
||
|
{
|
||
|
self->flags &= ~(MF_STRIFEx8000000|MF_SHADOW);
|
||
|
self->RenderStyle = STYLE_Normal;
|
||
|
self->alpha = OPAQUE;
|
||
|
}
|
||
|
|
||
|
static FRandom pr_gethurt ("HurtMe!");
|
||
|
|
||
|
void A_GetHurt (AActor *self)
|
||
|
{
|
||
|
self->flags4 |= MF4_INCOMBAT;
|
||
|
if ((pr_gethurt() % 5) == 0)
|
||
|
{
|
||
|
S_SoundID (self, CHAN_VOICE, self->PainSound, 1, ATTN_NORM);
|
||
|
self->health--;
|
||
|
}
|
||
|
if (self->health <= 0)
|
||
|
{
|
||
|
self->Die (self->target, self->target);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class AKneelingGuy : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AKneelingGuy, AActor)
|
||
|
};
|
||
|
|
||
|
FState AKneelingGuy::States[] =
|
||
|
{
|
||
|
#define S_KNEEL 0
|
||
|
S_NORMAL (NEAL, 'A', 15, A_LoopActiveSound, &States[S_KNEEL+1]),
|
||
|
S_NORMAL (NEAL, 'B', 40, A_LoopActiveSound, &States[S_KNEEL]),
|
||
|
|
||
|
#define S_KNEEL_PAIN (S_KNEEL+2)
|
||
|
S_NORMAL (NEAL, 'C', 5, A_SetShadow, &States[S_KNEEL_PAIN+1]),
|
||
|
S_NORMAL (NEAL, 'B', 4, A_Pain, &States[S_KNEEL_PAIN+2]),
|
||
|
S_NORMAL (NEAL, 'C', 5, A_ClearShadow, &States[S_KNEEL]),
|
||
|
|
||
|
#define S_KNEEL_HURT (S_KNEEL_PAIN+3)
|
||
|
S_NORMAL (NEAL, 'B', 6, NULL, &States[S_KNEEL_HURT+1]),
|
||
|
S_NORMAL (NEAL, 'C', 13, A_GetHurt, &States[S_KNEEL_HURT]),
|
||
|
|
||
|
#define S_KNEEL_DIE (S_KNEEL_HURT+2)
|
||
|
S_NORMAL (NEAL, 'D', 5, NULL, &States[S_KNEEL_DIE+1]),
|
||
|
S_NORMAL (NEAL, 'E', 5, A_Scream, &States[S_KNEEL_DIE+2]),
|
||
|
S_NORMAL (NEAL, 'F', 6, NULL, &States[S_KNEEL_DIE+3]),
|
||
|
S_NORMAL (NEAL, 'G', 5, A_NoBlocking, &States[S_KNEEL_DIE+4]),
|
||
|
S_NORMAL (NEAL, 'H', 5, NULL, &States[S_KNEEL_DIE+5]),
|
||
|
S_NORMAL (NEAL, 'I', 6, NULL, &States[S_KNEEL_DIE+6]),
|
||
|
S_NORMAL (NEAL, 'J', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AKneelingGuy, Strife, 204, 0)
|
||
|
PROP_SpawnState (S_KNEEL)
|
||
|
PROP_SeeState (S_KNEEL)
|
||
|
PROP_PainState (S_KNEEL_PAIN)
|
||
|
PROP_WoundState (S_KNEEL_HURT)
|
||
|
PROP_DeathState (S_KNEEL_DIE)
|
||
|
|
||
|
PROP_SpawnHealth (51)
|
||
|
PROP_PainChance (255)
|
||
|
PROP_RadiusFixed (6)
|
||
|
PROP_HeightFixed (17)
|
||
|
PROP_MassLong (50000)
|
||
|
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
|
||
|
PROP_Flags3 (MF3_ISMONSTER)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
PROP_MinMissileChance (150)
|
||
|
PROP_StrifeType (37)
|
||
|
|
||
|
PROP_PainSound ("misc/static")
|
||
|
PROP_DeathSound ("misc/static")
|
||
|
PROP_ActiveSound ("misc/chant")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Klaxon Warning Light -----------------------------------------------------
|
||
|
|
||
|
void A_TurretLook (AActor *self)
|
||
|
{
|
||
|
AActor *target;
|
||
|
|
||
|
self->threshold = 0;
|
||
|
target = self->LastHeard;
|
||
|
if (target != NULL &&
|
||
|
target->health > 0 &&
|
||
|
target->flags & MF_SHOOTABLE &&
|
||
|
(self->flags & MF_FRIENDLY) != (target->flags & MF_FRIENDLY))
|
||
|
{
|
||
|
self->target = target;
|
||
|
if ((self->flags & MF_AMBUSH) && !P_CheckSight (self, target))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (self->SeeSound != 0)
|
||
|
{
|
||
|
S_SoundID (self, CHAN_VOICE, self->SeeSound, 1, ATTN_NORM);
|
||
|
}
|
||
|
self->LastHeard = NULL;
|
||
|
self->threshold = 10;
|
||
|
self->SetState (self->SeeState);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_KlaxonBlare (AActor *self)
|
||
|
{
|
||
|
if (--self->reactiontime < 0)
|
||
|
{
|
||
|
self->target = NULL;
|
||
|
self->reactiontime = self->GetDefault()->reactiontime;
|
||
|
A_TurretLook (self);
|
||
|
if (self->target == NULL)
|
||
|
{
|
||
|
self->SetState (self->SpawnState);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
self->reactiontime = 50;
|
||
|
}
|
||
|
}
|
||
|
if (self->reactiontime == 2)
|
||
|
{
|
||
|
// [RH] Unalert monsters near the alarm and not just those in the same sector as it.
|
||
|
P_NoiseAlert (NULL, self, false);
|
||
|
}
|
||
|
else if (self->reactiontime > 50)
|
||
|
{
|
||
|
S_Sound (self, CHAN_VOICE, "misc/alarm", 1, ATTN_NORM);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class AKlaxonWarningLight : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AKlaxonWarningLight, AActor)
|
||
|
};
|
||
|
|
||
|
FState AKlaxonWarningLight::States[] =
|
||
|
{
|
||
|
S_NORMAL (KLAX, 'A', 5, A_TurretLook, &States[0]),
|
||
|
|
||
|
S_NORMAL (KLAX, 'B', 6, A_KlaxonBlare, &States[2]),
|
||
|
S_NORMAL (KLAX, 'C', 60, NULL, &States[1])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AKlaxonWarningLight, Strife, 24, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SeeState (1)
|
||
|
PROP_ReactionTime (60)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_AMBUSH|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS|MF4_NOSPLASHALERT|MF4_SYNCHRONIZED)
|
||
|
PROP_StrifeType (121)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// CeilingTurret ------------------------------------------------------------
|
||
|
|
||
|
void A_ShootGun (AActor *);
|
||
|
|
||
|
class ACeilingTurret : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACeilingTurret, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACeilingTurret::States[] =
|
||
|
{
|
||
|
S_NORMAL (TURT, 'A', 5, A_TurretLook, &States[0]),
|
||
|
|
||
|
S_NORMAL (TURT, 'A', 2, A_Chase, &States[1]),
|
||
|
|
||
|
S_NORMAL (TURT, 'B', 4, A_ShootGun, &States[3]),
|
||
|
S_NORMAL (TURT, 'D', 3, A_SentinelRefire, &States[4]),
|
||
|
S_NORMAL (TURT, 'A', 4, A_SentinelRefire, &States[2]),
|
||
|
|
||
|
S_BRIGHT (BALL, 'A', 6, A_Scream, &States[6]),
|
||
|
S_BRIGHT (BALL, 'B', 6, NULL, &States[7]),
|
||
|
S_BRIGHT (BALL, 'C', 6, NULL, &States[8]),
|
||
|
S_BRIGHT (BALL, 'D', 6, NULL, &States[9]),
|
||
|
S_BRIGHT (BALL, 'E', 6, NULL, &States[10]),
|
||
|
S_NORMAL (TURT, 'C', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACeilingTurret, Strife, 27, 0)
|
||
|
PROP_StrifeType (122)
|
||
|
PROP_SpawnHealth (125)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SeeState (1)
|
||
|
PROP_PainState (2)
|
||
|
PROP_MissileState (2)
|
||
|
PROP_DeathState (5)
|
||
|
PROP_SpeedFixed (0)
|
||
|
PROP_PainChance (0)
|
||
|
PROP_MassLong (10000000)
|
||
|
PROP_Flags (MF_SHOOTABLE|MF_AMBUSH|MF_SPAWNCEILING|MF_NOGRAVITY|
|
||
|
MF_NOBLOOD|MF_COUNTKILL)
|
||
|
PROP_Flags4 (MF4_NOSPLASHALERT|MF4_DONTFALL)
|
||
|
PROP_MinMissileChance (150)
|
||
|
PROP_DeathSound ("turret/death")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Water Bottle -------------------------------------------------------------
|
||
|
|
||
|
class AWaterBottle : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWaterBottle, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWaterBottle::States[] =
|
||
|
{
|
||
|
S_NORMAL (WATR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWaterBottle, Strife, 2014, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (131)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Mug ----------------------------------------------------------------------
|
||
|
|
||
|
class AMug : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AMug, AActor)
|
||
|
};
|
||
|
|
||
|
FState AMug::States[] =
|
||
|
{
|
||
|
S_NORMAL (MUGG, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AMug, Strife, 164, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (132)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Wooden Barrel ------------------------------------------------------------
|
||
|
|
||
|
class AWoodenBarrel : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWoodenBarrel, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWoodenBarrel::States[] =
|
||
|
{
|
||
|
S_NORMAL (BARW, 'A', -1, NULL, NULL),
|
||
|
|
||
|
S_NORMAL (BARW, 'B', 2, A_Scream, &States[2]),
|
||
|
S_NORMAL (BARW, 'C', 2, NULL, &States[3]),
|
||
|
S_NORMAL (BARW, 'D', 2, A_NoBlocking, &States[4]),
|
||
|
S_NORMAL (BARW, 'E', 2, NULL, &States[5]),
|
||
|
S_NORMAL (BARW, 'F', 2, NULL, &States[6]),
|
||
|
S_NORMAL (BARW, 'G', 2, NULL, &States[7]),
|
||
|
S_NORMAL (BARW, 'H', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWoodenBarrel, Strife, 82, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SpawnHealth (10)
|
||
|
PROP_DeathState (1)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (32)
|
||
|
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
PROP_StrifeType (203)
|
||
|
PROP_DeathSound ("woodenbarrel/death")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Strife's explosive barrel ------------------------------------------------
|
||
|
|
||
|
class AExplosiveBarrel2 : public AExplosiveBarrel
|
||
|
{
|
||
|
DECLARE_ACTOR (AExplosiveBarrel2, AExplosiveBarrel)
|
||
|
public:
|
||
|
void GetExplodeParms (int &damage, int &dist, bool &hurtSource)
|
||
|
{
|
||
|
damage = dist = 64;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
FState AExplosiveBarrel2::States[] =
|
||
|
{
|
||
|
S_NORMAL (BART, 'A', -1, NULL, NULL),
|
||
|
|
||
|
S_BRIGHT (BART, 'B', 2, A_Scream, &States[2]),
|
||
|
S_BRIGHT (BART, 'C', 2, NULL, &States[3]),
|
||
|
S_BRIGHT (BART, 'D', 2, NULL, &States[4]),
|
||
|
S_BRIGHT (BART, 'E', 2, A_NoBlocking, &States[5]),
|
||
|
S_BRIGHT (BART, 'F', 2, A_ExplodeAndAlert, &States[6]),
|
||
|
S_BRIGHT (BART, 'G', 2, NULL, &States[7]),
|
||
|
S_BRIGHT (BART, 'H', 2, NULL, &States[8]),
|
||
|
S_BRIGHT (BART, 'I', 2, NULL, &States[9]),
|
||
|
S_BRIGHT (BART, 'J', 2, NULL, &States[10]),
|
||
|
S_BRIGHT (BART, 'K', 3, NULL, &States[11]),
|
||
|
S_NORMAL (BART, 'L', -1, NULL, NULL),
|
||
|
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AExplosiveBarrel2, Strife, 94, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SpawnHealth (30)
|
||
|
PROP_DeathState (1)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (32)
|
||
|
PROP_StrifeType (204)
|
||
|
//PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Target Practice -----------------------------------------------------------
|
||
|
|
||
|
class ATargetPractice : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATargetPractice, AActor)
|
||
|
};
|
||
|
|
||
|
void A_20e10 (AActor *self)
|
||
|
{
|
||
|
sector_t *sec = self->Sector;
|
||
|
|
||
|
if (self->z == sec->floorplane.ZatPoint (self->x, self->y))
|
||
|
{
|
||
|
if ((sec->special & 0xFF) == Damage_InstantDeath)
|
||
|
{
|
||
|
P_DamageMobj (self, NULL, NULL, 999, MOD_UNKNOWN);
|
||
|
}
|
||
|
else if ((sec->special & 0xFF) == Scroll_StrifeCurrent)
|
||
|
{
|
||
|
int anglespeed = sec->tag - 100;
|
||
|
fixed_t speed = (anglespeed % 10) << (FRACBITS - 4);
|
||
|
angle_t finean = (anglespeed / 10) << (32-3);
|
||
|
finean >>= ANGLETOFINESHIFT;
|
||
|
self->momx += FixedMul (speed, finecosine[finean]);
|
||
|
self->momy += FixedMul (speed, finesine[finean]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
FState ATargetPractice::States[] =
|
||
|
{
|
||
|
S_NORMAL (HOGN, 'A', 2, A_20e10, &States[0]),
|
||
|
|
||
|
S_NORMAL (HOGN, 'B', 1, A_20e10, &States[2]),
|
||
|
S_NORMAL (HOGN, 'C', 1, A_Pain, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATargetPractice, Strife, 208, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SpawnHealthLong (99999999)
|
||
|
PROP_PainState (1)
|
||
|
PROP_PainChance (255)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (72)
|
||
|
PROP_MassLong (9999999)
|
||
|
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
PROP_StrifeType (205)
|
||
|
PROP_PainSound ("misc/metalhit")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Light (Silver, Fluorescent) ----------------------------------------------
|
||
|
|
||
|
class ALightSilverFluorescent : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ALightSilverFluorescent, AActor)
|
||
|
};
|
||
|
|
||
|
FState ALightSilverFluorescent::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LITS, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ALightSilverFluorescent, Strife, 95, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (4)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
|
||
|
PROP_StrifeType (206)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Light (Brown, Fluorescent) -----------------------------------------------
|
||
|
|
||
|
class ALightBrownFluorescent : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ALightBrownFluorescent, AActor)
|
||
|
};
|
||
|
|
||
|
FState ALightBrownFluorescent::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LITB, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ALightBrownFluorescent, Strife, 96, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (4)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
|
||
|
PROP_StrifeType (207)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Light (Gold, Fluorescent) ------------------------------------------------
|
||
|
|
||
|
class ALightGoldFluorescent : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ALightGoldFluorescent, AActor)
|
||
|
};
|
||
|
|
||
|
FState ALightGoldFluorescent::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LITG, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ALightGoldFluorescent, Strife, 97, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (4)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
|
||
|
PROP_StrifeType (208)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Light Globe --------------------------------------------------------------
|
||
|
|
||
|
class ALightGlobe : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ALightGlobe, AActor)
|
||
|
};
|
||
|
|
||
|
FState ALightGlobe::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LITE, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ALightGlobe, Strife, 2028, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (209)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Techno Pillar ------------------------------------------------------------
|
||
|
|
||
|
class APillarTechno : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarTechno, AActor)
|
||
|
};
|
||
|
|
||
|
FState APillarTechno::States[] =
|
||
|
{
|
||
|
S_NORMAL (MONI, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarTechno, Strife, 48, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (210)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Aztec Pillar -------------------------------------------------------------
|
||
|
|
||
|
class APillarAztec : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarAztec, AActor)
|
||
|
};
|
||
|
|
||
|
FState APillarAztec::States[] =
|
||
|
{
|
||
|
S_NORMAL (STEL, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarAztec, Strife, 54, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (211)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Damaged Aztec Pillar -----------------------------------------------------
|
||
|
|
||
|
class APillarAztecDamaged : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarAztecDamaged, AActor)
|
||
|
};
|
||
|
|
||
|
FState APillarAztecDamaged::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLA, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarAztecDamaged, Strife, 55, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (80)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (212)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Ruined Aztec Pillar ------------------------------------------------------
|
||
|
|
||
|
class APillarAztecRuined : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarAztecRuined, AActor)
|
||
|
};
|
||
|
|
||
|
FState APillarAztecRuined::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLE, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarAztecRuined, Strife, 56, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (213)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Huge Tech Pillar ---------------------------------------------------------
|
||
|
|
||
|
class APillarHugeTech : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarHugeTech, AActor)
|
||
|
};
|
||
|
|
||
|
// This was defined while compiling on Linux.
|
||
|
// I don't know where it came from.
|
||
|
#ifdef HUGE
|
||
|
#undef HUGE
|
||
|
#endif
|
||
|
|
||
|
FState APillarHugeTech::States[] =
|
||
|
{
|
||
|
S_NORMAL (HUGE, 'A', 4, NULL, &States[1]),
|
||
|
S_NORMAL (HUGE, 'B', 4, NULL, &States[2]),
|
||
|
S_NORMAL (HUGE, 'C', 4, NULL, &States[3]),
|
||
|
S_NORMAL (HUGE, 'D', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarHugeTech, Strife, 57, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (24)
|
||
|
PROP_HeightFixed (192)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (214)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Alien Power Crystal in a Pillar ------------------------------------------
|
||
|
|
||
|
class APillarAlienPower : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APillarAlienPower, AActor)
|
||
|
};
|
||
|
|
||
|
FState APillarAlienPower::States[] =
|
||
|
{
|
||
|
S_NORMAL (APOW, 'A', 4, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APillarAlienPower, Strife, 227, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (24)
|
||
|
PROP_HeightFixed (192)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (215)
|
||
|
PROP_ActiveSound ("ambient/alien2")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// SStalactiteBig -----------------------------------------------------------
|
||
|
|
||
|
class ASStalactiteBig : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASStalactiteBig, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASStalactiteBig::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'C', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASStalactiteBig, Strife, 98, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (54)
|
||
|
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (216)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// SStalactiteSmall ---------------------------------------------------------
|
||
|
|
||
|
class ASStalactiteSmall : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASStalactiteSmall, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASStalactiteSmall::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASStalactiteSmall, Strife, 161, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (217)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// SStalagmiteBig -----------------------------------------------------------
|
||
|
|
||
|
class ASStalagmiteBig : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASStalagmiteBig, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASStalagmiteBig::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'B', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASStalagmiteBig, Strife, 160, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (218)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Cave Pillar Top ----------------------------------------------------------
|
||
|
|
||
|
class ACavePillarTop : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACavePillarTop, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACavePillarTop::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'D', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACavePillarTop, Strife, 159, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (219)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Cave Pillar Bottom -------------------------------------------------------
|
||
|
|
||
|
class ACavePillarBottom : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACavePillarBottom, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACavePillarBottom::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'E', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACavePillarBottom, Strife, 162, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (220)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// SStalagmiteSmall ---------------------------------------------------------
|
||
|
|
||
|
class ASStalagmiteSmall : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASStalagmiteSmall, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASStalagmiteSmall::States[] =
|
||
|
{
|
||
|
S_NORMAL (STLG, 'F', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASStalagmiteSmall, Strife, 163, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (25)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (221)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Candle -------------------------------------------------------------------
|
||
|
|
||
|
class ACandle : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACandle, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACandle::States[] =
|
||
|
{
|
||
|
S_BRIGHT (KNDL, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACandle, Strife, 34, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (222)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// StrifeCandelabra ---------------------------------------------------------
|
||
|
|
||
|
class AStrifeCandelabra : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStrifeCandelabra, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStrifeCandelabra::States[] =
|
||
|
{
|
||
|
S_BRIGHT (CLBR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStrifeCandelabra, Strife, 35, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (223)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Floor Water Drop ---------------------------------------------------------
|
||
|
|
||
|
class AWaterDropOnFloor : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWaterDropOnFloor, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWaterDropOnFloor::States[] =
|
||
|
{
|
||
|
S_NORMAL (DRIP, 'A', 6, A_FLoopActiveSound, &States[1]),
|
||
|
S_NORMAL (DRIP, 'B', 4, NULL, &States[2]),
|
||
|
S_NORMAL (DRIP, 'C', 4, NULL, &States[3]),
|
||
|
S_NORMAL (DRIP, 'D', 4, A_FLoopActiveSound, &States[4]),
|
||
|
S_NORMAL (DRIP, 'E', 4, NULL, &States[5]),
|
||
|
S_NORMAL (DRIP, 'F', 4, NULL, &States[6]),
|
||
|
S_NORMAL (DRIP, 'G', 4, A_FLoopActiveSound, &States[7]),
|
||
|
S_NORMAL (DRIP, 'H', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWaterDropOnFloor, Strife, 103, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (224)
|
||
|
PROP_ActiveSound ("world/waterdrips")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Waterfall Splash ---------------------------------------------------------
|
||
|
// Why is this not visible in Strife?
|
||
|
|
||
|
class AWaterfallSplash : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWaterfallSplash, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWaterfallSplash::States[] =
|
||
|
{
|
||
|
S_NORMAL (SPLH, 'A', 4, NULL, &States[1]),
|
||
|
S_NORMAL (SPLH, 'B', 4, NULL, &States[2]),
|
||
|
S_NORMAL (SPLH, 'C', 4, NULL, &States[3]),
|
||
|
S_NORMAL (SPLH, 'D', 8, NULL, &States[4]),
|
||
|
S_NORMAL (SPLH, 'E', 4, NULL, &States[5]),
|
||
|
S_NORMAL (SPLH, 'F', 4, NULL, &States[6]),
|
||
|
S_NORMAL (SPLH, 'G', 4, NULL, &States[7]),
|
||
|
S_NORMAL (SPLH, 'H', 4, A_LoopActiveSound, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWaterfallSplash, Strife, 104, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (225)
|
||
|
PROP_ActiveSound ("world/waterfall")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Ceiling Water Drip -------------------------------------------------------
|
||
|
|
||
|
class AWaterDrip : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWaterDrip, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWaterDrip::States[] =
|
||
|
{
|
||
|
S_NORMAL (CDRP, 'A', 10, NULL, &States[1]),
|
||
|
S_NORMAL (CDRP, 'B', 8, NULL, &States[2]),
|
||
|
S_NORMAL (CDRP, 'C', 8, NULL, &States[3]),
|
||
|
S_NORMAL (CDRP, 'D', 8, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWaterDrip, Strife, 53, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_HeightFixed (1)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (226)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// WaterFountain ------------------------------------------------------------
|
||
|
|
||
|
class AWaterFountain : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AWaterFountain, AActor)
|
||
|
};
|
||
|
|
||
|
FState AWaterFountain::States[] =
|
||
|
{
|
||
|
S_NORMAL (WTFT, 'A', 4, NULL, &States[1]),
|
||
|
S_NORMAL (WTFT, 'B', 4, NULL, &States[2]),
|
||
|
S_NORMAL (WTFT, 'C', 4, NULL, &States[3]),
|
||
|
S_NORMAL (WTFT, 'D', 4, A_LoopActiveSound, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AWaterFountain, Strife, 112, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (227)
|
||
|
PROP_ActiveSound ("world/watersplash")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Hearts in Tank -----------------------------------------------------------
|
||
|
|
||
|
class AHeartsInTank : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AHeartsInTank, AActor)
|
||
|
};
|
||
|
|
||
|
FState AHeartsInTank::States[] =
|
||
|
{
|
||
|
S_BRIGHT (HERT, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (HERT, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (HERT, 'C', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AHeartsInTank, Strife, 113, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (228)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Teleport Swirl -----------------------------------------------------------
|
||
|
|
||
|
class ATeleportSwirl : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATeleportSwirl, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATeleportSwirl::States[] =
|
||
|
{
|
||
|
S_BRIGHT (TELP, 'A', 3, NULL, &States[1]),
|
||
|
S_BRIGHT (TELP, 'B', 3, NULL, &States[2]),
|
||
|
S_BRIGHT (TELP, 'C', 3, NULL, &States[3]),
|
||
|
S_BRIGHT (TELP, 'D', 3, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATeleportSwirl, Strife, 23, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_RenderStyle (STYLE_Add)
|
||
|
PROP_Alpha (TRANSLUC25)
|
||
|
PROP_StrifeType (229)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Dead Player --------------------------------------------------------------
|
||
|
// Strife's disappeared. This one doesn't.
|
||
|
|
||
|
class ADeadStrifePlayer : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ADeadStrifePlayer, AActor)
|
||
|
};
|
||
|
|
||
|
FState ADeadStrifePlayer::States[] =
|
||
|
{
|
||
|
S_NORMAL (PLAY, 'P', 700, NULL, &States[1]),
|
||
|
S_NORMAL (RGIB, 'H', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ADeadStrifePlayer, Strife, 15, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (231)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Dead Peasant -------------------------------------------------------------
|
||
|
// Unlike Strife's, this one does not turn into gibs and disappear.
|
||
|
|
||
|
class ADeadPeasant : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ADeadPeasant, AActor)
|
||
|
};
|
||
|
|
||
|
FState ADeadPeasant::States[] =
|
||
|
{
|
||
|
S_NORMAL (PEAS, 'N', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ADeadPeasant, Strife, 18, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (232)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Dead Acolyte -------------------------------------------------------------
|
||
|
// Unlike Strife's, this one does not turn into gibs and disappear.
|
||
|
|
||
|
class ADeadAcolyte : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ADeadAcolyte, AActor)
|
||
|
};
|
||
|
|
||
|
FState ADeadAcolyte::States[] =
|
||
|
{
|
||
|
S_NORMAL (AGRD, 'N', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ADeadAcolyte, Strife, 21, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (233)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Dead Reaver --------------------------------------------------------------
|
||
|
|
||
|
class ADeadReaver : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ADeadReaver, AActor)
|
||
|
};
|
||
|
|
||
|
FState ADeadReaver::States[] =
|
||
|
{
|
||
|
S_NORMAL (ROB1, 'R', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ADeadReaver, Strife, 20, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (234)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Dead Rebel ---------------------------------------------------------------
|
||
|
|
||
|
class ADeadRebel : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ADeadRebel, AActor)
|
||
|
};
|
||
|
|
||
|
FState ADeadRebel::States[] =
|
||
|
{
|
||
|
S_NORMAL (HMN1, 'N', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ADeadRebel, Strife, 19, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (235)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Sacrificed Guy -----------------------------------------------------------
|
||
|
|
||
|
class ASacrificedGuy : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASacrificedGuy, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASacrificedGuy::States[] =
|
||
|
{
|
||
|
S_NORMAL (SACR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASacrificedGuy, Strife, 212, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (236)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Pile of Guts -------------------------------------------------------------
|
||
|
|
||
|
class APileOfGuts : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APileOfGuts, AActor)
|
||
|
};
|
||
|
|
||
|
FState APileOfGuts::States[] =
|
||
|
{
|
||
|
S_NORMAL (DEAD, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
// Strife used a doomednum, which is the same as the Aztec Pillar. Since
|
||
|
// the pillar came first in the mobjinfo list, you could not spawn this
|
||
|
// in a map. Pity.
|
||
|
IMPLEMENT_ACTOR (APileOfGuts, Strife, -1, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_StrifeType (237)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Burning Barrel -----------------------------------------------------------
|
||
|
|
||
|
class AStrifeBurningBarrel : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStrifeBurningBarrel, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStrifeBurningBarrel::States[] =
|
||
|
{
|
||
|
S_BRIGHT (BBAR, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (BBAR, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (BBAR, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (BBAR, 'D', 4, NULL, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStrifeBurningBarrel, Strife, 70, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (48)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (238)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Burning Bowl -----------------------------------------------------------
|
||
|
|
||
|
class ABurningBowl : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ABurningBowl, AActor)
|
||
|
};
|
||
|
|
||
|
FState ABurningBowl::States[] =
|
||
|
{
|
||
|
S_BRIGHT (BOWL, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (BOWL, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (BOWL, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (BOWL, 'D', 4, NULL, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ABurningBowl, Strife, 105, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (239)
|
||
|
PROP_ActiveSound ("world/smallfire")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Burning Brazier -----------------------------------------------------------
|
||
|
|
||
|
class ABurningBrazier : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ABurningBrazier, AActor)
|
||
|
};
|
||
|
|
||
|
FState ABurningBrazier::States[] =
|
||
|
{
|
||
|
S_BRIGHT (BRAZ, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (BRAZ, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (BRAZ, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (BRAZ, 'D', 4, NULL, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ABurningBrazier, Strife, 106, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (32)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (240)
|
||
|
PROP_ActiveSound ("world/smallfire")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Small Torch (Lit) --------------------------------------------------------
|
||
|
|
||
|
class ASmallTorchLit : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASmallTorchLit, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASmallTorchLit::States[] =
|
||
|
{
|
||
|
S_BRIGHT (TRHL, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (TRHL, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (TRHL, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (TRHL, 'D', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASmallTorchLit, Strife, 107, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Radius (4) // This is intentionally not PROP_RadiusFixed
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
|
||
|
PROP_StrifeType (241)
|
||
|
|
||
|
// It doesn't have any action functions, so how does it use this sound?
|
||
|
PROP_ActiveSound ("world/smallfire")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Small Torch (Unlit) --------------------------------------------------------
|
||
|
|
||
|
class ASmallTorchUnlit : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASmallTorchUnlit, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASmallTorchUnlit::States[] =
|
||
|
{
|
||
|
S_NORMAL (TRHO, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASmallTorchUnlit, Strife, 108, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Radius (4) // This is intentionally not PROP_RadiusFixed
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
|
||
|
PROP_StrifeType (242)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Ceiling Chain ------------------------------------------------------------
|
||
|
|
||
|
class ACeilingChain : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACeilingChain, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACeilingChain::States[] =
|
||
|
{
|
||
|
S_NORMAL (CHAN, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACeilingChain, Strife, 109, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (93)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (243)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Cage Light ---------------------------------------------------------------
|
||
|
|
||
|
class ACageLight : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ACageLight, AActor)
|
||
|
};
|
||
|
|
||
|
FState ACageLight::States[] =
|
||
|
{
|
||
|
// No, it's not bright even though it's a light.
|
||
|
S_NORMAL (CAGE, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ACageLight, Strife, 28, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_HeightFixed (3)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (244)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Statue -------------------------------------------------------------------
|
||
|
|
||
|
class AStatue : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStatue, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStatue::States[] =
|
||
|
{
|
||
|
S_NORMAL (STAT, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStatue, Strife, 110, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (245)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Ruined Statue ------------------------------------------------------------
|
||
|
|
||
|
class AStatueRuined : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStatueRuined, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStatueRuined::States[] =
|
||
|
{
|
||
|
S_NORMAL (DSTA, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStatueRuined, Strife, 44, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (246)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Medium Torch -------------------------------------------------------------
|
||
|
|
||
|
class AMediumTorch : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AMediumTorch, AActor)
|
||
|
};
|
||
|
|
||
|
FState AMediumTorch::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LTRH, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (LTRH, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (LTRH, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (LTRH, 'D', 4, NULL, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AMediumTorch, Strife, 111, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (4)
|
||
|
PROP_HeightFixed (72)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (247)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Outside Lamp -------------------------------------------------------------
|
||
|
|
||
|
class AOutsideLamp : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AOutsideLamp, AActor)
|
||
|
};
|
||
|
|
||
|
FState AOutsideLamp::States[] =
|
||
|
{
|
||
|
// No, it's not bright.
|
||
|
S_NORMAL (LAMP, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AOutsideLamp, Strife, 43, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (3)
|
||
|
PROP_HeightFixed (80)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (248)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Pole Lantern -------------------------------------------------------------
|
||
|
|
||
|
class APoleLantern : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APoleLantern, AActor)
|
||
|
};
|
||
|
|
||
|
FState APoleLantern::States[] =
|
||
|
{
|
||
|
// No, it's not bright.
|
||
|
S_NORMAL (LANT, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APoleLantern, Strife, 46, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (3)
|
||
|
PROP_HeightFixed (80)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (249)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rock 1 -------------------------------------------------------------------
|
||
|
|
||
|
class ASRock1 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASRock1, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASRock1::States[] =
|
||
|
{
|
||
|
S_NORMAL (ROK1, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASRock1, Strife, 99, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (250)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rock 2 -------------------------------------------------------------------
|
||
|
|
||
|
class ASRock2 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASRock2, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASRock2::States[] =
|
||
|
{
|
||
|
S_NORMAL (ROK2, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASRock2, Strife, 100, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (251)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rock 3 -------------------------------------------------------------------
|
||
|
|
||
|
class ASRock3 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASRock3, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASRock3::States[] =
|
||
|
{
|
||
|
S_NORMAL (ROK3, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASRock3, Strife, 101, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (252)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rock 4 -------------------------------------------------------------------
|
||
|
|
||
|
class ASRock4 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASRock4, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASRock4::States[] =
|
||
|
{
|
||
|
S_NORMAL (ROK4, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASRock4, Strife, 102, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (253)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Stick in Water -----------------------------------------------------------
|
||
|
|
||
|
class AStickInWater : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStickInWater, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStickInWater::States[] =
|
||
|
{
|
||
|
S_NORMAL (LOGW, 'A', 5, A_LoopActiveSound, &States[1]),
|
||
|
S_NORMAL (LOGW, 'B', 5, A_LoopActiveSound, &States[2]),
|
||
|
S_NORMAL (LOGW, 'C', 5, A_LoopActiveSound, &States[3]),
|
||
|
S_NORMAL (LOGW, 'D', 5, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStickInWater, Strife, 215, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_Flags2 (MF2_FLOORCLIP)
|
||
|
PROP_StrifeType (254)
|
||
|
PROP_ActiveSound ("world/river")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 1 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble1 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble1, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble1::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB1, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble1, Strife, 29, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (255)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 2 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble2 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble2, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble2::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB2, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble2, Strife, 30, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (256)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 3 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble3 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble3, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble3::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB3, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble3, Strife, 31, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (257)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 4 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble4 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble4, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble4::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB4, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble4, Strife, 32, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (258)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 5 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble5 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble5, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble5::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB5, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble5, Strife, 36, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (259)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 6 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble6 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble6, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble6::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB6, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble6, Strife, 37, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (260)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 7 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble7 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble7, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble7::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB7, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble7, Strife, 41, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (261)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Rubble 8 -----------------------------------------------------------------
|
||
|
|
||
|
class ARubble8 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARubble8, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARubble8::States[] =
|
||
|
{
|
||
|
S_NORMAL (RUB8, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARubble8, Strife, 42, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
PROP_StrifeType (262)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Surgery Crab -------------------------------------------------------------
|
||
|
|
||
|
class ASurgeryCrab : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASurgeryCrab, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASurgeryCrab::States[] =
|
||
|
{
|
||
|
S_NORMAL (CRAB, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASurgeryCrab, Strife, 117, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (16)
|
||
|
PROP_StrifeType (263)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Large Torch --------------------------------------------------------------
|
||
|
|
||
|
class ALargeTorch : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ALargeTorch, AActor)
|
||
|
};
|
||
|
|
||
|
FState ALargeTorch::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LMPC, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (LMPC, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (LMPC, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (LMPC, 'D', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ALargeTorch, Strife, 47, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (72)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (264)
|
||
|
PROP_ActiveSound ("world/smallfire")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Huge Torch --------------------------------------------------------------
|
||
|
|
||
|
class AHugeTorch : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AHugeTorch, AActor)
|
||
|
};
|
||
|
|
||
|
FState AHugeTorch::States[] =
|
||
|
{
|
||
|
S_BRIGHT (LOGS, 'A', 4, NULL, &States[1]),
|
||
|
S_BRIGHT (LOGS, 'B', 4, NULL, &States[2]),
|
||
|
S_BRIGHT (LOGS, 'C', 4, NULL, &States[3]),
|
||
|
S_BRIGHT (LOGS, 'D', 4, NULL, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AHugeTorch, Strife, 50, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (10)
|
||
|
PROP_HeightFixed (80)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (265)
|
||
|
PROP_ActiveSound ("world/smallfire")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Palm Tree ----------------------------------------------------------------
|
||
|
|
||
|
class APalmTree : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APalmTree, AActor)
|
||
|
};
|
||
|
|
||
|
FState APalmTree::States[] =
|
||
|
{
|
||
|
S_NORMAL (TREE, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APalmTree, Strife, 51, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (15)
|
||
|
PROP_HeightFixed (109)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (266)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Big Tree ----------------------------------------------------------------
|
||
|
|
||
|
class ABigTree2 : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ABigTree2, AActor)
|
||
|
};
|
||
|
|
||
|
FState ABigTree2::States[] =
|
||
|
{
|
||
|
S_NORMAL (TREE, 'B', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ABigTree2, Strife, 202, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (15)
|
||
|
PROP_HeightFixed (109)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (267)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Potted Tree ----------------------------------------------------------------
|
||
|
|
||
|
class APottedTree : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APottedTree, AActor)
|
||
|
};
|
||
|
|
||
|
FState APottedTree::States[] =
|
||
|
{
|
||
|
S_NORMAL (TREE, 'C', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APottedTree, Strife, 203, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (15)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (268)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tree Stub ----------------------------------------------------------------
|
||
|
|
||
|
class ATreeStub : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATreeStub, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATreeStub::States[] =
|
||
|
{
|
||
|
S_NORMAL (TRET, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATreeStub, Strife, 33, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (15)
|
||
|
PROP_HeightFixed (80)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (269)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Short Bush ---------------------------------------------------------------
|
||
|
|
||
|
class AShortBush : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AShortBush, AActor)
|
||
|
};
|
||
|
|
||
|
FState AShortBush::States[] =
|
||
|
{
|
||
|
S_NORMAL (BUSH, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AShortBush, Strife, 60, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (15)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (270)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tall Bush ---------------------------------------------------------------
|
||
|
|
||
|
class ATallBush : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATallBush, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATallBush::States[] =
|
||
|
{
|
||
|
S_NORMAL (SHRB, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATallBush, Strife, 62, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (271)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Chimney Stack ------------------------------------------------------------
|
||
|
|
||
|
class AChimneyStack : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AChimneyStack, AActor)
|
||
|
};
|
||
|
|
||
|
FState AChimneyStack::States[] =
|
||
|
{
|
||
|
S_NORMAL (STAK, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AChimneyStack, Strife, 63, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (20)
|
||
|
PROP_HeightFixed (64) // This height does not fit the sprite
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (272)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Barricade Column ---------------------------------------------------------
|
||
|
|
||
|
class ABarricadeColumn : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ABarricadeColumn, AActor)
|
||
|
};
|
||
|
|
||
|
FState ABarricadeColumn::States[] =
|
||
|
{
|
||
|
S_NORMAL (BARC, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ABarricadeColumn, Strife, 69, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (273)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Pot ----------------------------------------------------------------------
|
||
|
|
||
|
class APot : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APot, AActor)
|
||
|
};
|
||
|
|
||
|
FState APot::States[] =
|
||
|
{
|
||
|
S_NORMAL (VAZE, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APot, Strife, 165, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (12)
|
||
|
PROP_HeightFixed (24)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (274)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Pitcher ------------------------------------------------------------------
|
||
|
|
||
|
class APitcher : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APitcher, AActor)
|
||
|
};
|
||
|
|
||
|
FState APitcher::States[] =
|
||
|
{
|
||
|
S_NORMAL (VAZE, 'B', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APitcher, Strife, 188, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (12)
|
||
|
PROP_HeightFixed (32)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (275)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Stool --------------------------------------------------------------------
|
||
|
|
||
|
class AStool : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AStool, AActor)
|
||
|
};
|
||
|
|
||
|
FState AStool::States[] =
|
||
|
{
|
||
|
S_NORMAL (STOL, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStool, Strife, 189, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (6)
|
||
|
PROP_HeightFixed (24)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (276)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Metal Pot ----------------------------------------------------------------
|
||
|
|
||
|
class AMetalPot : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AMetalPot, AActor)
|
||
|
};
|
||
|
|
||
|
FState AMetalPot::States[] =
|
||
|
{
|
||
|
S_NORMAL (MPOT, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AMetalPot, Strife, 190, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (277)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tub ----------------------------------------------------------------------
|
||
|
|
||
|
class ATub : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATub, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATub::States[] =
|
||
|
{
|
||
|
S_NORMAL (TUB1, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATub, Strife, 191, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (278)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Anvil --------------------------------------------------------------------
|
||
|
|
||
|
class AAnvil : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAnvil, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAnvil::States[] =
|
||
|
{
|
||
|
S_NORMAL (ANVL, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAnvil, Strife, 194, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (32)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (279)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Silver Tech Lamp ----------------------------------------------------------
|
||
|
|
||
|
class ATechLampSilver : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATechLampSilver, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATechLampSilver::States[] =
|
||
|
{
|
||
|
S_NORMAL (TECH, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATechLampSilver, Strife, 196, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (11)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (280)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Brass Tech Lamp ----------------------------------------------------------
|
||
|
|
||
|
class ATechLampBrass : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATechLampBrass, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATechLampBrass::States[] =
|
||
|
{
|
||
|
S_NORMAL (TECH, 'B', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATechLampBrass, Strife, 197, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (8)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (281)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Tray --------------------------------------------------------------------
|
||
|
|
||
|
class ATray : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ATray, AActor)
|
||
|
};
|
||
|
|
||
|
FState ATray::States[] =
|
||
|
{
|
||
|
S_NORMAL (TRAY, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ATray, Strife, 68, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (24)
|
||
|
PROP_HeightFixed (40)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (282)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// AmmoFiller ---------------------------------------------------------------
|
||
|
|
||
|
class AAmmoFiller : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAmmoFiller, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAmmoFiller::States[] =
|
||
|
{
|
||
|
S_NORMAL (AFED, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAmmoFiller, Strife, 228, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (12)
|
||
|
PROP_HeightFixed (24)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (283)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Sigil Banner -------------------------------------------------------------
|
||
|
|
||
|
class ASigilBanner : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ASigilBanner, AActor)
|
||
|
};
|
||
|
|
||
|
FState ASigilBanner::States[] =
|
||
|
{
|
||
|
S_NORMAL (SBAN, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ASigilBanner, Strife, 216, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (24)
|
||
|
PROP_HeightFixed (96)
|
||
|
PROP_Flags (MF_NOBLOCKMAP) // I take it this was once solid, yes?
|
||
|
PROP_StrifeType (284)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// RebelBoots ---------------------------------------------------------------
|
||
|
|
||
|
class ARebelBoots : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARebelBoots, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARebelBoots::States[] =
|
||
|
{
|
||
|
S_NORMAL (BOTR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARebelBoots, Strife, 217, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (285)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// RebelHelmet --------------------------------------------------------------
|
||
|
|
||
|
class ARebelHelmet : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARebelHelmet, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARebelHelmet::States[] =
|
||
|
{
|
||
|
S_NORMAL (HATR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARebelHelmet, Strife, 218, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (286)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// RebelShirt ---------------------------------------------------------------
|
||
|
|
||
|
class ARebelShirt : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (ARebelShirt, AActor)
|
||
|
};
|
||
|
|
||
|
FState ARebelShirt::States[] =
|
||
|
{
|
||
|
S_NORMAL (TOPR, 'A', -1, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (ARebelShirt, Strife, 219, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP)
|
||
|
PROP_StrifeType (287)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Power Coupling -----------------------------------------------------------
|
||
|
|
||
|
class APowerCoupling : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (APowerCoupling, AActor)
|
||
|
public:
|
||
|
void Die (AActor *source, AActor *inflictor);
|
||
|
};
|
||
|
|
||
|
FState APowerCoupling::States[] =
|
||
|
{
|
||
|
S_NORMAL (COUP, 'A', 5, NULL, &States[1]),
|
||
|
S_NORMAL (COUP, 'B', 5, NULL, &States[0]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (APowerCoupling, Strife, 220, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_SpawnHealth (40)
|
||
|
PROP_RadiusFixed (17)
|
||
|
PROP_HeightFixed (64)
|
||
|
PROP_MassLong (999999)
|
||
|
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPPED|MF_NOBLOOD|MF_NOTDMATCH)
|
||
|
PROP_Flags4 (MF4_INCOMBAT)
|
||
|
PROP_StrifeType (288)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
void APowerCoupling::Die (AActor *source, AActor *inflictor)
|
||
|
{
|
||
|
Super::Die (source, inflictor);
|
||
|
|
||
|
int i;
|
||
|
|
||
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||
|
if (playeringame[i] && players[i].health > 0)
|
||
|
break;
|
||
|
|
||
|
if (i == MAXPLAYERS)
|
||
|
return;
|
||
|
|
||
|
// [RH] In case the player broke it with the dagger, alert the guards now.
|
||
|
if (LastHeard != source)
|
||
|
{
|
||
|
P_NoiseAlert (source, this);
|
||
|
}
|
||
|
EV_DoDoor (DDoor::doorClose, NULL, players[i].mo, 225, 2*FRACUNIT, 0, 0, 0);
|
||
|
EV_DoFloor (DFloor::floorLowerToHighest, NULL, 44, FRACUNIT, 0, 0, 0);
|
||
|
players[i].mo->GiveInventoryType (QuestItemClasses[5]);
|
||
|
S_Sound (CHAN_VOICE, "svox/voc13", 1, ATTN_NORM);
|
||
|
players[i].SetLogNumber (13);
|
||
|
P_DropItem (this, "BrokenPowerCoupling", -1, 256);
|
||
|
Destroy ();
|
||
|
}
|
||
|
|
||
|
// Alien Bubble Column ------------------------------------------------------
|
||
|
|
||
|
class AAlienBubbleColumn : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAlienBubbleColumn, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAlienBubbleColumn::States[] =
|
||
|
{
|
||
|
S_NORMAL (BUBB, 'A', 4, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAlienBubbleColumn, Strife, 221, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (290)
|
||
|
PROP_ActiveSound ("ambient/alien5")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Alien Floor Bubble -------------------------------------------------------
|
||
|
|
||
|
class AAlienFloorBubble : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAlienFloorBubble, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAlienFloorBubble::States[] =
|
||
|
{
|
||
|
S_NORMAL (BUBF, 'A', 4, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAlienFloorBubble, Strife, 222, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (72)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (291)
|
||
|
PROP_ActiveSound ("ambient/alien6")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Alien Ceiling Bubble -----------------------------------------------------
|
||
|
|
||
|
class AAlienCeilingBubble : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAlienCeilingBubble, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAlienCeilingBubble::States[] =
|
||
|
{
|
||
|
S_NORMAL (BUBC, 'A', 4, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAlienCeilingBubble, Strife, 223, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (72)
|
||
|
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
|
||
|
PROP_StrifeType (292)
|
||
|
PROP_ActiveSound ("ambient/alien4")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Alien Asp Climber --------------------------------------------------------
|
||
|
|
||
|
class AAlienAspClimber : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAlienAspClimber, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAlienAspClimber::States[] =
|
||
|
{
|
||
|
S_NORMAL (ASPR, 'A', 4, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAlienAspClimber, Strife, 224, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (16)
|
||
|
PROP_HeightFixed (128)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (293)
|
||
|
PROP_ActiveSound ("ambient/alien3")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Alien Spider Light -------------------------------------------------------
|
||
|
|
||
|
class AAlienSpiderLight : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AAlienSpiderLight, AActor)
|
||
|
};
|
||
|
|
||
|
FState AAlienSpiderLight::States[] =
|
||
|
{
|
||
|
S_NORMAL (SPDL, 'A', 5, A_LoopActiveSound, &States[1]),
|
||
|
S_NORMAL (SPDL, 'B', 5, A_LoopActiveSound, &States[2]),
|
||
|
S_NORMAL (SPDL, 'C', 5, A_LoopActiveSound, &States[0])
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AAlienSpiderLight, Strife, 225, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_RadiusFixed (32)
|
||
|
PROP_HeightFixed (56)
|
||
|
PROP_Flags (MF_SOLID)
|
||
|
PROP_StrifeType (294)
|
||
|
PROP_ActiveSound ("ambient/alien1")
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Gibs for things that bleed -----------------------------------------------
|
||
|
|
||
|
class AMeat : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AMeat, AActor)
|
||
|
public:
|
||
|
void BeginPlay ()
|
||
|
{
|
||
|
// Strife used mod 19, but there are 20 states. Hmm.
|
||
|
SetState (SpawnState + pr_gibtosser() % 20);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
FState AMeat::States[] =
|
||
|
{
|
||
|
S_NORMAL (MEAT, 'A', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'B', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'C', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'D', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'E', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'F', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'G', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'H', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'I', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'J', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'K', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'L', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'M', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'N', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'O', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'P', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'Q', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'R', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'S', 700, NULL, NULL),
|
||
|
S_NORMAL (MEAT, 'T', 700, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AMeat, Any, -1, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOCLIP)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Gibs for things that don't bleed -----------------------------------------
|
||
|
|
||
|
class AJunk : public AMeat
|
||
|
{
|
||
|
DECLARE_ACTOR (AJunk, AMeat)
|
||
|
};
|
||
|
|
||
|
FState AJunk::States[] =
|
||
|
{
|
||
|
S_NORMAL (JUNK, 'A', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'B', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'C', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'D', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'E', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'F', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'G', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'H', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'I', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'J', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'K', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'L', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'M', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'N', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'O', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'P', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'Q', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'R', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'S', 700, NULL, NULL),
|
||
|
S_NORMAL (JUNK, 'T', 700, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AJunk, Any, -1, 0)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOCLIP)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
//==========================================================================
|
||
|
//
|
||
|
// A_TossGib
|
||
|
//
|
||
|
//==========================================================================
|
||
|
|
||
|
void A_TossGib (AActor *self)
|
||
|
{
|
||
|
const TypeInfo *gibtype = (self->flags & MF_NOBLOOD) ? RUNTIME_CLASS(AJunk) : RUNTIME_CLASS(AMeat);
|
||
|
AActor *gib = Spawn (gibtype, self->x, self->y, self->z + 24*FRACUNIT);
|
||
|
angle_t an;
|
||
|
int speed;
|
||
|
|
||
|
if (gib == NULL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
an = pr_gibtosser() << 24;
|
||
|
gib->angle = an;
|
||
|
speed = pr_gibtosser() & 15;
|
||
|
gib->momx = speed * finecosine[an >> ANGLETOFINESHIFT];
|
||
|
gib->momy = speed * finesine[an >> ANGLETOFINESHIFT];
|
||
|
gib->momz = (pr_gibtosser() & 15) << FRACBITS;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
|
||
|
void A_FLoopActiveSound (AActor *self)
|
||
|
{
|
||
|
if (self->ActiveSound != 0 && !(level.time & 7))
|
||
|
{
|
||
|
S_SoundID (self, CHAN_VOICE, self->ActiveSound, 1, ATTN_NORM);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_Countdown (AActor *self)
|
||
|
{
|
||
|
if (--self->reactiontime <= 0)
|
||
|
{
|
||
|
P_ExplodeMissile (self, NULL);
|
||
|
self->flags &= ~MF_SKULLFLY;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_LoopActiveSound (AActor *self)
|
||
|
{
|
||
|
if (self->ActiveSound != 0 && !S_IsActorPlayingSomething (self, CHAN_VOICE))
|
||
|
{
|
||
|
S_LoopedSoundID (self, CHAN_VOICE, self->ActiveSound, 1, ATTN_NORM);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Fire Droplet -------------------------------------------------------------
|
||
|
|
||
|
class AFireDroplet : public AActor
|
||
|
{
|
||
|
DECLARE_ACTOR (AFireDroplet, AActor)
|
||
|
};
|
||
|
|
||
|
// [RH] I think these should be bright, even though they weren't in Strife.
|
||
|
FState AFireDroplet::States[] =
|
||
|
{
|
||
|
S_BRIGHT (FFOT, 'A', 9, NULL, &States[1]),
|
||
|
S_BRIGHT (FFOT, 'B', 9, NULL, &States[2]),
|
||
|
S_BRIGHT (FFOT, 'C', 9, NULL, &States[3]),
|
||
|
S_BRIGHT (FFOT, 'D', 9, NULL, NULL)
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AFireDroplet, Strife, -1, 0)
|
||
|
PROP_StrifeType (297)
|
||
|
PROP_SpawnState (0)
|
||
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
// Humanoid Base Class ------------------------------------------------------
|
||
|
|
||
|
void A_ItBurnsItBurns (AActor *);
|
||
|
void A_DropFire (AActor *);
|
||
|
void A_CrispyPlayer (AActor *);
|
||
|
void A_HandLower (AActor *);
|
||
|
void A_Yeargh (AActor *);
|
||
|
|
||
|
FState AStrifeHumanoid::States[] =
|
||
|
{
|
||
|
#define S_FIREHANDS 0
|
||
|
S_BRIGHT (WAVE, 'A', 3, NULL, &States[S_FIREHANDS+1]),
|
||
|
S_BRIGHT (WAVE, 'B', 3, NULL, &States[S_FIREHANDS+2]),
|
||
|
S_BRIGHT (WAVE, 'C', 3, NULL, &States[S_FIREHANDS+3]),
|
||
|
S_BRIGHT (WAVE, 'D', 3, NULL, &States[S_FIREHANDS]),
|
||
|
|
||
|
// [RH] These weren't bright in Strife, but I think they should be.
|
||
|
// (After all, they are now a light source.)
|
||
|
#define S_HUMAN_BURNDEATH (S_FIREHANDS+4)
|
||
|
S_BRIGHT (BURN, 'A', 3, A_ItBurnsItBurns, &States[S_HUMAN_BURNDEATH+1]),
|
||
|
S_BRIGHT (BURN, 'B', 3, A_DropFire, &States[S_HUMAN_BURNDEATH+2]),
|
||
|
S_BRIGHT (BURN, 'C', 3, A_Wander, &States[S_HUMAN_BURNDEATH+3]),
|
||
|
S_BRIGHT (BURN, 'D', 3, A_NoBlocking, &States[S_HUMAN_BURNDEATH+4]),
|
||
|
S_BRIGHT (BURN, 'E', 5, A_DropFire, &States[S_HUMAN_BURNDEATH+5]),
|
||
|
S_BRIGHT (BURN, 'F', 5, A_Wander, &States[S_HUMAN_BURNDEATH+6]),
|
||
|
S_BRIGHT (BURN, 'G', 5, A_Wander, &States[S_HUMAN_BURNDEATH+7]),
|
||
|
S_BRIGHT (BURN, 'H', 5, A_Wander, &States[S_HUMAN_BURNDEATH+8]),
|
||
|
S_BRIGHT (BURN, 'I', 5, A_DropFire, &States[S_HUMAN_BURNDEATH+9]),
|
||
|
S_BRIGHT (BURN, 'J', 5, A_Wander, &States[S_HUMAN_BURNDEATH+10]),
|
||
|
S_BRIGHT (BURN, 'K', 5, A_Wander, &States[S_HUMAN_BURNDEATH+11]),
|
||
|
S_BRIGHT (BURN, 'L', 5, A_Wander, &States[S_HUMAN_BURNDEATH+12]),
|
||
|
S_BRIGHT (BURN, 'M', 3, A_DropFire, &States[S_HUMAN_BURNDEATH+13]),
|
||
|
S_BRIGHT (BURN, 'N', 3, NULL, &States[S_HUMAN_BURNDEATH+14]),
|
||
|
S_BRIGHT (BURN, 'O', 5, NULL, &States[S_HUMAN_BURNDEATH+15]),
|
||
|
S_BRIGHT (BURN, 'P', 5, NULL, &States[S_HUMAN_BURNDEATH+16]),
|
||
|
S_BRIGHT (BURN, 'Q', 5, NULL, &States[S_HUMAN_BURNDEATH+17]),
|
||
|
S_BRIGHT (BURN, 'P', 5, NULL, &States[S_HUMAN_BURNDEATH+18]),
|
||
|
S_BRIGHT (BURN, 'Q', 5, NULL, &States[S_HUMAN_BURNDEATH+19]),
|
||
|
S_BRIGHT (BURN, 'R', 7, NULL, &States[S_HUMAN_BURNDEATH+20]),
|
||
|
S_BRIGHT (BURN, 'S', 7, NULL, &States[S_HUMAN_BURNDEATH+21]),
|
||
|
S_BRIGHT (BURN, 'T', 7, NULL, &States[S_HUMAN_BURNDEATH+22]),
|
||
|
S_BRIGHT (BURN, 'U', 7, NULL, &States[S_HUMAN_BURNDEATH+23]),
|
||
|
S_BRIGHT (BURN, 'V',700,NULL, NULL),
|
||
|
|
||
|
#define S_HUMAN_ZAPDEATH (S_HUMAN_BURNDEATH+24)
|
||
|
S_NORMAL (DISR, 'A', 5, A_Yeargh, &States[S_HUMAN_ZAPDEATH+1]),
|
||
|
S_NORMAL (DISR, 'B', 5, NULL, &States[S_HUMAN_ZAPDEATH+2]),
|
||
|
S_NORMAL (DISR, 'C', 5, NULL, &States[S_HUMAN_ZAPDEATH+3]),
|
||
|
S_NORMAL (DISR, 'D', 5, A_NoBlocking, &States[S_HUMAN_ZAPDEATH+4]),
|
||
|
S_NORMAL (DISR, 'E', 5, NULL, &States[S_HUMAN_ZAPDEATH+5]),
|
||
|
S_NORMAL (DISR, 'F', 5, NULL, &States[S_HUMAN_ZAPDEATH+6]),
|
||
|
S_NORMAL (DISR, 'G', 4, NULL, &States[S_HUMAN_ZAPDEATH+7]),
|
||
|
S_NORMAL (DISR, 'H', 4, NULL, &States[S_HUMAN_ZAPDEATH+8]),
|
||
|
S_NORMAL (DISR, 'I', 4, NULL, &States[S_HUMAN_ZAPDEATH+9]),
|
||
|
S_NORMAL (DISR, 'J', 4, NULL, &States[S_HUMAN_ZAPDEATH+10]),
|
||
|
S_NORMAL (MEAT, 'D',700,NULL, NULL),
|
||
|
|
||
|
#define S_FIREHANDS2 (S_HUMAN_ZAPDEATH+11)
|
||
|
S_BRIGHT (WAVE, 'A', 3, A_HandLower, &States[S_FIREHANDS2+1]),
|
||
|
S_BRIGHT (WAVE, 'B', 3, A_HandLower, &States[S_FIREHANDS2+2]),
|
||
|
S_BRIGHT (WAVE, 'C', 3, A_HandLower, &States[S_FIREHANDS2+3]),
|
||
|
S_BRIGHT (WAVE, 'D', 3, A_HandLower, &States[S_FIREHANDS2]),
|
||
|
};
|
||
|
|
||
|
IMPLEMENT_ACTOR (AStrifeHumanoid, Any, -1, 0)
|
||
|
PROP_BDeathState (S_HUMAN_BURNDEATH)
|
||
|
PROP_EDeathState (S_HUMAN_ZAPDEATH)
|
||
|
PROP_MaxStepHeight (16)
|
||
|
PROP_MaxDropOffHeight (32)
|
||
|
END_DEFAULTS
|
||
|
|
||
|
void A_ItBurnsItBurns (AActor *self)
|
||
|
{
|
||
|
int burnsound = S_FindSound ("human/imonfire");
|
||
|
if (burnsound != 0)
|
||
|
{
|
||
|
self->DeathSound = burnsound;
|
||
|
}
|
||
|
A_Scream (self);
|
||
|
if (self->player != NULL && self->player->mo == self)
|
||
|
{
|
||
|
P_SetPsprite (self->player, ps_weapon, &AStrifeHumanoid::States[S_FIREHANDS]);
|
||
|
P_SetPsprite (self->player, ps_flash, NULL);
|
||
|
self->player->ReadyWeapon = NULL;
|
||
|
self->player->PendingWeapon = WP_NOCHANGE;
|
||
|
self->player->playerstate = PST_LIVE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_DropFire (AActor *self)
|
||
|
{
|
||
|
AActor *drop = Spawn<AFireDroplet> (self->x, self->y, self->z + 24*FRACUNIT);
|
||
|
drop->momz = -FRACUNIT;
|
||
|
P_RadiusAttack (self, self, 64, 64, MOD_FIRE, false);
|
||
|
}
|
||
|
|
||
|
void A_CrispyPlayer (AActor *self)
|
||
|
{
|
||
|
if (self->player != NULL && self->player->mo == self)
|
||
|
{
|
||
|
self->player->playerstate = PST_DEAD;
|
||
|
P_SetPsprite (self->player, ps_weapon, &AStrifeHumanoid::States[S_FIREHANDS2 +
|
||
|
(self->player->psprites[ps_weapon].state - &AStrifeHumanoid::States[S_FIREHANDS])]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_HandLower (AActor *self)
|
||
|
{
|
||
|
if (self->player != NULL)
|
||
|
{
|
||
|
pspdef_t *psp = &self->player->psprites[ps_weapon];
|
||
|
psp->sy += FRACUNIT*9;
|
||
|
if (psp->sy > WEAPONBOTTOM*2)
|
||
|
{
|
||
|
P_SetPsprite (self->player, ps_weapon, NULL);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void A_Yeargh (AActor *self)
|
||
|
{
|
||
|
S_Sound (self, CHAN_VOICE, "misc/disruptordeath", 1, ATTN_NORM);
|
||
|
}
|