mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
May 6, 2006 (Changes by Graf Zahl)
- Converted a_zombie.cpp and most of a_strifestuff.cpp to DECORATE. - Converted a_strifekeys.cpp to DECORATE and moved the pickup messages to the string table. - Removed the WIF_HITS_GHOSTS weapon flag and replaced it with MF2_THRUGHOST. There is no need to keep two flags around with virtually the same meaning. - Changed the ShadowArmor to use the VISIBILITYPULSE flag to change its translucency. It looks much better now than the cheap code pointer based blinking it used before. - Converted most of a_strifeitems.cpp to DECORATE and moved the pickup messages to the string table. - Converted a_strifearmor.cpp to DECORATE and moved the pickup messages to the string table. - Moved the messages for killing spectres to the string table. - Converted the quest items to DECORATE. Also changed A_GiveQuestItem to get the messages it prints from the string table instead of the quest item's tag string. May 5, 2006 (Changes by Graf Zahl) - Removed the hopelessly outdated thingdef_doc.txt file from the repository. - Converted a_peasant.cpp and a_ratbuddy.cpp to DECORATE. - Fixed: C_DoKey didn't treat an empty string as 'no binding' when checking for valid double bindings. - Converted a_merchants.cpp to DECORATE. - Added MF5_NODAMAGE flag to generalize the behavior of Strife's merchants which can be shot but take no damage from getting hurt. - Converted a_beggars.cpp to DECORATE. - Added an Inventory.GiveQuest property. This makes it possible to define all of Strife's original items that also give a quest item in DECORATE but it is also useful to define items like the ones in Day of the Acolyte without ugly workarounds. - Added a Tag property and Strife teaser conversation IDs to DECORATE so now it is possible to define many of Strife's items. - Added a FastSpeed property to DECORATE so that projectiles can finally be assigned a higher speed for fast mode. - Added a ACS_LockedExecuteDoor special. It is basically the same as the existing ACS_LockedExecute but it uses the 'door' message instead of 'remote'. This cannot be integrated into ACS_LockedExecute because all its arguments are already in use. - Added a fully customizable A_CustomMeleeAttack function for DECORATE. SVN r83 (trunk)
This commit is contained in:
parent
abed04ab23
commit
605a9a7715
51 changed files with 3909 additions and 5844 deletions
14
default.cbd
14
default.cbd
|
@ -176,17 +176,17 @@ ${COMPILER} "autostart.cpp a.nas blocks.nas misc.nas tmap.nas tmap2.nas tmap3.na
|
|||
a_heresiarch.cpp \
|
||||
a_hexenspecialdecs.cpp a_iceguy.cpp a_korax.cpp a_mageboss.cpp a_magecone.cpp \
|
||||
a_magelightning.cpp a_mageplayer.cpp a_magestaff.cpp a_magewand.cpp a_mana.cpp \
|
||||
a_pig.cpp a_puzzleitems.cpp a_scriptprojectiles.cpp a_serpent.cpp \
|
||||
a_pig.cpp a_puzzleitems.cpp a_serpent.cpp \
|
||||
a_spike.cpp a_summon.cpp a_teleportother.cpp a_weaponpieces.cpp a_wraith.cpp \
|
||||
hexen_sbar.cpp a_artiegg.cpp a_artitele.cpp a_minotaur.cpp a_ravenambient.cpp \
|
||||
a_acolyte.cpp a_alienspectres.cpp \
|
||||
a_beggars.cpp a_coin.cpp a_crusader.cpp a_entityboss.cpp a_inquisitor.cpp \
|
||||
a_loremaster.cpp a_macil.cpp a_merchants.cpp a_oracle.cpp a_peasant.cpp \
|
||||
a_programmer.cpp a_questitems.cpp a_ratbuddy.cpp a_reaver.cpp a_rebels.cpp \
|
||||
a_sentinel.cpp a_spectral.cpp a_stalker.cpp a_strifeammo.cpp a_strifearmor.cpp \
|
||||
a_strifebishop.cpp a_strifeitems.cpp a_strifekeys.cpp a_strifeplayer.cpp \
|
||||
a_coin.cpp a_crusader.cpp a_entityboss.cpp a_inquisitor.cpp \
|
||||
a_loremaster.cpp a_macil.cpp a_oracle.cpp \
|
||||
a_programmer.cpp a_reaver.cpp a_rebels.cpp \
|
||||
a_sentinel.cpp a_spectral.cpp a_stalker.cpp a_strifeammo.cpp \
|
||||
a_strifebishop.cpp a_strifeitems.cpp a_strifeplayer.cpp \
|
||||
a_strifestuff.cpp a_strifeweapons.cpp a_templar.cpp a_thingstoblowup.cpp \
|
||||
a_zombie.cpp strife_sbar.cpp a_action.cpp a_artifacts.cpp a_bridge.cpp \
|
||||
strife_sbar.cpp a_action.cpp a_artifacts.cpp a_bridge.cpp \
|
||||
a_camera.cpp a_debris.cpp a_decals.cpp a_flashfader.cpp a_fountain.cpp \
|
||||
a_hatetarget.cpp a_keys.cpp a_lightning.cpp a_movingcamera.cpp a_pickups.cpp \
|
||||
a_quake.cpp a_secrettrigger.cpp a_sectoraction.cpp a_sharedmisc.cpp a_skies.cpp \
|
||||
|
|
|
@ -18,6 +18,45 @@ May 6, 2006
|
|||
This could also have been used to fix FName, but I consider the current
|
||||
implementation to be better than the old one, so I'm leaving it as-is.
|
||||
|
||||
May 6, 2006 (Changes by Graf Zahl)
|
||||
- Converted a_zombie.cpp and most of a_strifestuff.cpp to DECORATE.
|
||||
- Converted a_strifekeys.cpp to DECORATE and moved the pickup messages to the
|
||||
string table.
|
||||
- Removed the WIF_HITS_GHOSTS weapon flag and replaced it with MF2_THRUGHOST.
|
||||
There is no need to keep two flags around with virtually the same meaning.
|
||||
- Changed the ShadowArmor to use the VISIBILITYPULSE flag to change its translucency.
|
||||
It looks much better now than the cheap code pointer based blinking it used before.
|
||||
- Converted most of a_strifeitems.cpp to DECORATE and moved the pickup messages
|
||||
to the string table.
|
||||
- Converted a_strifearmor.cpp to DECORATE and moved the pickup messages to the
|
||||
string table.
|
||||
- Moved the messages for killing spectres to the string table.
|
||||
- Converted the quest items to DECORATE. Also changed A_GiveQuestItem to get
|
||||
the messages it prints from the string table instead of the quest item's tag
|
||||
string.
|
||||
|
||||
May 5, 2006 (Changes by Graf Zahl)
|
||||
- Removed the hopelessly outdated thingdef_doc.txt file from the repository.
|
||||
- Converted a_peasant.cpp and a_ratbuddy.cpp to DECORATE.
|
||||
- Fixed: C_DoKey didn't treat an empty string as 'no binding' when checking for
|
||||
valid double bindings.
|
||||
- Converted a_merchants.cpp to DECORATE.
|
||||
- Added MF5_NODAMAGE flag to generalize the behavior of Strife's merchants which
|
||||
can be shot but take no damage from getting hurt.
|
||||
- Converted a_beggars.cpp to DECORATE.
|
||||
- Added an Inventory.GiveQuest property. This makes it possible to define all of
|
||||
Strife's original items that also give a quest item in DECORATE but it is also
|
||||
useful to define items like the ones in Day of the Acolyte without ugly workarounds.
|
||||
- Added a Tag property and Strife teaser conversation IDs to DECORATE so now it is
|
||||
possible to define many of Strife's items.
|
||||
- Added a FastSpeed property to DECORATE so that projectiles can finally be
|
||||
assigned a higher speed for fast mode.
|
||||
- Added a ACS_LockedExecuteDoor special. It is basically the same as the existing
|
||||
ACS_LockedExecute but it uses the 'door' message instead of 'remote'. This
|
||||
cannot be integrated into ACS_LockedExecute because all its arguments are already
|
||||
in use.
|
||||
- Added a fully customizable A_CustomMeleeAttack function for DECORATE.
|
||||
|
||||
May 5, 2006
|
||||
- Fixed: Scanned IWAD paths were not freed if you exited without selecting one.
|
||||
- Fixed: Dynamically allocated cvars were not freed on exit.
|
||||
|
@ -40,6 +79,8 @@ May 4, 2006
|
|||
were missing game filters.
|
||||
|
||||
May 4, 2006 (Changes by Graf Zahl)
|
||||
- Added Poisondamage property for DECORATE. I first did this for one of the first
|
||||
DECORATE updates but the code seems to have gotten lost.
|
||||
- Converted A_Puzzleitems.cpp and parts of A_HexenSpecialdecs.cpp to DECORATE.
|
||||
- Converted A_Hexendecorations.cpp to DECORATE.
|
||||
- Changed the lower decal spawning code to transfer the main decal's color if
|
||||
|
@ -439,7 +480,7 @@ April 13, 2006 (Changes by Graf Zahl)
|
|||
- Added checks for sectors without lines to all Find* functions in p_sector.cpp
|
||||
- Fixed: Dehacked patches weren't loaded when not playing Doom.
|
||||
- Fixed: Thing_Remove must not remove living players from the map.
|
||||
- Fixed: Using $MAP in SNDINFO overrides music definitions in MAPINFO. This
|
||||
- Fixed: Using $MAP in SNDINFO overrode music definitions in MAPINFO. This
|
||||
made it impossible to define music in MAPINFO for Hexen.
|
||||
- Fixed: Resurrecting a morphed player must first restore the unmorphed
|
||||
version.
|
||||
|
@ -534,7 +575,7 @@ April 11, 2006 (Changes by Graf Zahl)
|
|||
- Fixed: Strife's dialogs don't give weapons to the player he already has.
|
||||
- Fixed: The INDIANA cheat in Hexen gives 25 of each item, not just 1.
|
||||
- Fixed: The stair builder's compatibility mode must do a linear search
|
||||
for sectors. Searching the hasch chain doesn't work here.
|
||||
for sectors. Searching the hash chain doesn't work here.
|
||||
- Fixed: Any monster with a TakeSpecialDamage method should call the
|
||||
super class's method instead of simply returning the damage amount.
|
||||
- Fixed: Hexen's mash monsters cannot be frozen. No matter how you kill
|
||||
|
|
|
@ -1,597 +0,0 @@
|
|||
|
||||
|
||||
Examples for actor definitions
|
||||
------------------------------
|
||||
|
||||
1) a complete definition from scratch:
|
||||
|
||||
ACTOR ZombieMan 3004
|
||||
{
|
||||
Health 20
|
||||
Radius 20
|
||||
Height 56
|
||||
Speed 8
|
||||
PainChance 200
|
||||
MONSTER
|
||||
+FLOORCLIP
|
||||
SeeSound grunt/sight
|
||||
AttackSound grunt/attack
|
||||
PainSound grunt/pain
|
||||
DeathSound grunt/death
|
||||
ActiveSound grunt/active
|
||||
Obituary "%o was killed by a zombieman."
|
||||
DropItem Clip
|
||||
Damage 4
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
POSS AB 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
POSS AABBCCDD 4 A_Chase
|
||||
Loop
|
||||
Missile:
|
||||
POSS E 10 A_FaceTarget
|
||||
POSS F 8 A_BulletAttack
|
||||
POSS E 8
|
||||
Goto See
|
||||
Pain:
|
||||
POSS G 3
|
||||
POSS G 3 A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
POSS H 5
|
||||
POSS I 5 A_Scream
|
||||
POSS J 5 A_Fall
|
||||
POSS K 5
|
||||
POSS L -1
|
||||
Stop
|
||||
XDeath:
|
||||
POSS M 5
|
||||
POSS N 5 A_XScream
|
||||
POSS O 5 A_Fall
|
||||
POSS PQRST 5
|
||||
POSS U -1
|
||||
Stop
|
||||
Raise:
|
||||
POSS KJIH 5
|
||||
Goto See
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2) an actor which inherits from an existing one:
|
||||
|
||||
|
||||
ACTOR PlasmaZombie : ZombieMan 9600
|
||||
{
|
||||
Health 40
|
||||
DropItem Cell
|
||||
MissileType PlasmaBall
|
||||
States
|
||||
{
|
||||
Missile:
|
||||
POSS E 10 A_FaceTarget
|
||||
POSS F 5 A_MissileAttack
|
||||
POSS E 5 A_FaceTarget
|
||||
POSS F 5 A_MissileAttack
|
||||
POSS E 5 A_FaceTarget
|
||||
POSS F 5 A_MissileAttack
|
||||
Goto See
|
||||
}
|
||||
}
|
||||
|
||||
(this is a zombie which fires 3 plasma bullets when attacking)
|
||||
|
||||
|
||||
3) an actor which uses SKIP_SUPER
|
||||
|
||||
ACTOR DeadZombieMan : ZombieMan 18
|
||||
{
|
||||
SKIP_SUPER
|
||||
Spawn Parent Death+4
|
||||
}
|
||||
|
||||
(this actor doesn't inherit anything from its parent - it just uses
|
||||
some of its states.)
|
||||
|
||||
|
||||
Syntax:
|
||||
-------
|
||||
|
||||
ACTOR classname [ : parentclassname] [doomednum]
|
||||
{
|
||||
properties
|
||||
flags
|
||||
...
|
||||
}
|
||||
|
||||
classname: The name this new actor is referenced by in the game
|
||||
parentclassname: (optional) The name of a parent class this new actor
|
||||
inherits its attributes from.
|
||||
doomednum: Editor number for this actor (optional)
|
||||
|
||||
|
||||
List of properties:
|
||||
===================
|
||||
|
||||
SKIP_SUPER reinitializes the actor as if it has no parent
|
||||
This can be used to have access to the parent's
|
||||
states without inheriting its attributes. See
|
||||
3) above for an example.
|
||||
SPAWNID value defines the spawn ID to be used with Thing_Spawn
|
||||
and its derivates.
|
||||
HEALTH value defines the health a monster starts with
|
||||
Default is 1000
|
||||
REACTIONTIME value Time in tics (1/35 seconds) a monster needs
|
||||
to attack back. There is normally no need to
|
||||
change this value.
|
||||
Default is 8
|
||||
PAINCHANCE value Probability of entering the pain state.
|
||||
255=always, 0=never
|
||||
Default is 0
|
||||
DAMAGE value For a projectile defines the damage it inflicts
|
||||
upon impact. The formula is random(1,8)*damage
|
||||
or (random(1,4)*damage if STRIFEDAMAGE is set.
|
||||
This also defines the damage for actors which
|
||||
attack like the Lost Soul. The formula for this
|
||||
is random(1,8)*damage.
|
||||
DAMAGE is also used to define how many bullets
|
||||
are fired by the generic hitscan attack function
|
||||
A_Bulletattack.
|
||||
Default is 0
|
||||
SPEED value Defines how fast an actor moves. For projectiles
|
||||
this is the distance it moves. For monsters it
|
||||
defines the size of one step done in A_Chase.
|
||||
Default is 0.
|
||||
RADIUS value Defines the radius of this actor.
|
||||
Default is 20.
|
||||
HEIGHT value Defines the height of this actor
|
||||
Default is 16.
|
||||
MASS value Defines the mass of this actor.
|
||||
The larger the mass the less an actor moves when
|
||||
being thrust by damage.
|
||||
Default is 100.
|
||||
XSCALE value Defines the X-scaling for this actor.
|
||||
Range is [0.0, 4.0].
|
||||
Default is 1.0
|
||||
YSCALE value Defines the Y-scaling for this actor.
|
||||
Range is [0.0, 4.0].
|
||||
Default is 1.0
|
||||
SCALE value Combines XScale and YScale
|
||||
Range is [0.0, 4.0].
|
||||
Default is 1.0
|
||||
SEESOUND name Defines the sound the actor makes when it sees
|
||||
the player (for monsters) or when a projectile
|
||||
is spawned.
|
||||
ATTACKSOUND name Defines the sound the actor makes when attacking.
|
||||
PAINSOUND name Defines the sound the actor makes when in pain.
|
||||
To hear this sound A_Pain has to be called.
|
||||
DEATHSOUND name Defines the sound the actor makes when dying
|
||||
or when a projectile explodes.
|
||||
ACTIVESOUND name Defines the sound the actor makes when active.
|
||||
MELEESOUND name Defines the sound the actor makes when doing
|
||||
a melee attack in A_MeleeAttack. Note that
|
||||
several original attack functions which have
|
||||
such a sound use a hard coded reference (e.g.
|
||||
A_TroopAttack uses imp/melee)
|
||||
RENDERSTYLE type Defines how this actor is rendered. Useful values are:
|
||||
NONE - actor is invisible
|
||||
NORMAL - actor is visible and not translucent
|
||||
FUZZY - like the Spectre in Doom
|
||||
TRANSLUCENT - actor is translucent.
|
||||
ADD - actor uses additive translucency.
|
||||
Default is NORMAL
|
||||
ALPHA value defines the opacity/intensity for render styles
|
||||
TRANSLUCENT and ADD.
|
||||
Range is [0.0, 1.0]
|
||||
Default is 1.0
|
||||
DEATHHEIGHT value Defines the height this actor has after dying.
|
||||
Default is 1/4 of the original height
|
||||
BURNHEIGHT value Defines the height this actor has after dying by fire.
|
||||
Default is 1/4 of the original height
|
||||
*OBITUARY string Defines the obituary string for this actor. This string
|
||||
uses a few placeholders:
|
||||
%o: victim's name
|
||||
%k: killer's name
|
||||
%g: he/she/it
|
||||
%h: him/her/it
|
||||
%p: his/her/its
|
||||
*HITOBITUARY string Defines the obituary string for a melee attack by this
|
||||
actor. If not present OBITUARY is used. The same format
|
||||
as for OBITUARY appplies.
|
||||
*DONTHURTSHOOTER If this actor deals explosive damage and is a projectile
|
||||
it does not hurt the shooter.
|
||||
*EXPLOSIONRADIUS value Defines the radius of explosive damage
|
||||
Default is 128
|
||||
*EXPLOSIONDAMAGE value Defines the amount of explosive damage
|
||||
Default is 128
|
||||
MELEEDAMAGE value Defines the amount of damage this monste will inflict
|
||||
when using A_MeleeAttack. The formula is random(1,8)*damage.
|
||||
MISSILETYPE name Defines the projectile type this monster is firing when
|
||||
using A_MissileAttack. Any valid projectile present in the
|
||||
game can be specified.
|
||||
MISSILEHEIGHT value Defines the height at which the projectile is spawned.
|
||||
Default is 32.
|
||||
MONSTER Sets all appropriate flags to make this actor act as a regular
|
||||
monster. The following flags are being set:
|
||||
SHOOTABLE, COUNTKILL, SOLID, CANPUSHWALLS, ACTIVATEMCROSS, CANPASS, ISMONSTER.
|
||||
PROJECTILE Sets all appropriate flags to make this actor act as a regular
|
||||
projectile. The following flags are being set:
|
||||
NOBLOCKMAP, NOGRAVITY, DROPOFF, MISSILE, ACTIVATEIMPACT, ACTIVATEPCROSS, NOTELEPORT.
|
||||
CLEARFLAGS clears all flags
|
||||
*DROPITEM name [probability [amount]]
|
||||
Drops an item of type 'name' when dying. Optionally the probability
|
||||
can be specified. A probability of 255 means the item is always dropped,
|
||||
a probability of 0 means it is never dropped.
|
||||
amount is only applicable for Heretic ammuniton. It specifies how much
|
||||
ammo the dropped item contains.
|
||||
There can be more than one DROPITEM definitions for an actor. The
|
||||
amount is unlimited.
|
||||
DROPITEM works differently with inherited actors. An actor can inherit
|
||||
a list of DROPITEM definitions from its parent but if it defines one
|
||||
of its own the entire parent's list is discarded.
|
||||
SPAWN
|
||||
SEE
|
||||
MELEE
|
||||
MISSILE
|
||||
PAIN
|
||||
DEATH
|
||||
XDEATH
|
||||
BURN
|
||||
ICE
|
||||
RAISE
|
||||
CRASH With these keywords a specific state in the actor can be either cleared
|
||||
or set to one of the parent's states. The syntax is:
|
||||
SPAWN 0 to clear a state or
|
||||
SPAWN PARENT DEATH[+offset] to set a parent's state. See 3) above for an
|
||||
example
|
||||
|
||||
STATES Defines an actor's states. See the separate block STATES for more information
|
||||
|
||||
|
||||
Properties prefixed with a '*' cannot be inherited from predefined actors due to the
|
||||
implementation.
|
||||
|
||||
|
||||
List of flags
|
||||
=============
|
||||
|
||||
|
||||
Flags are special properties that can be either set or cleared
|
||||
+flagname sets a flag
|
||||
-flagname clears a flag
|
||||
|
||||
The following flags exist. If applicable the name is identical with the one used
|
||||
in regular DECORATE items.
|
||||
|
||||
SOLID set when the object should be solid (blocking)
|
||||
SHOOTABLE object can be damaged. If health goes below 0 it dies
|
||||
NOSECTOR Object is not linked into the sector. This makes it invisible
|
||||
and excludes it from certain physics checks.
|
||||
NOBLOCKMAP This object is excluded from passive collision detection. Nothing else
|
||||
can run into a NOBLOCKMAP object but the object itself can run
|
||||
into others. All projectiles have this set.
|
||||
AMBUSH Monster is 'deaf'. Normally this is set in an editor on a per-
|
||||
object basis.
|
||||
JUSTHIT try to attack right back (used in monster AI, probably not
|
||||
particularly useful in actor definitions)
|
||||
JUSTATTACKED take at least one step before attacking
|
||||
SPAWNCEILING spawned hanging from the ceiling as opposed to standing on the
|
||||
floor.
|
||||
NOGRAVITY Actor is not subject to gravity
|
||||
DROPOFF Monster can walk over ledges/taller steps.
|
||||
NOCLIP Actor is totally excluded from collision detection and
|
||||
can walk through walls etc.
|
||||
FLOAT Floating monster - can change height at will.
|
||||
TELEPORT Although implemented there isn't a single actor which
|
||||
uses this flag. I can't say what it does precisely but
|
||||
it excludes an actor that has it set from certain parts
|
||||
of the collision detection logic.
|
||||
MISSILE Actor is a projectile.
|
||||
SHADOW Actor is nearly invisible. Unlike regular Doom this does
|
||||
not automatically imply fuzziness. For that you have to
|
||||
specify RenderStyle Fuzzy.
|
||||
NOBLOOD Actor does not bleed when hurt.
|
||||
CORPSE Actor is a corpse. For normal actors there is no need to
|
||||
set this but in combination with the crashstate it might
|
||||
be useful.
|
||||
COUNTKILL Counts toward kill percentage
|
||||
COUNTITEM Counts toward item percentage
|
||||
NOTDMATCH Is not being spawned in Deathmatch games.
|
||||
NOLIFTDROP Does not drop when a lift under it lowers
|
||||
STEALTH Stealth monster
|
||||
ICECORPSE Actor is a frozen corpse
|
||||
LOWGRAVITY Actor is subject to low gravity
|
||||
WINDTHRUST Actor is thrust by the Heretic wind specials. I hope its
|
||||
functionality is some day expanded to the Boom wind specials
|
||||
HERETICBOUNCE Heretic style bouncing (objects only bounce off the floor)
|
||||
HEXENBOUNCE Hexen style bouncing (objects bounce off floors and walls)
|
||||
DOOMBOUNCE ZDoom style bouncing (like hexen but stops when losing a certain
|
||||
amount of momentum)
|
||||
The 3 bounce types are mutually exclusive
|
||||
FLOORCLIP Actor's lower part is clipped when standing in a sector
|
||||
with a liquid texture (defined in the TERRAIN lump)
|
||||
SPAWNFLOAT Actor is spawned hat a random height in the sector.
|
||||
NOTELEPORT Actor cannot teleport
|
||||
RIPPER For projectiles that can rip through monsters and players.
|
||||
PUSHABLE Actor can be pushed.
|
||||
SLIDESONWALLS Actor can slide along walls
|
||||
CANPASS Actor uses height sensitive collision detection. Use with care!
|
||||
This only makes sense on actors that can move by themselves.
|
||||
CANNOTPUSH This actor cannot push pushable objects.
|
||||
THRUGHOST This actor passes through ghosts (set with the GHOST flag.)
|
||||
BOSS Actor is a boss. Bosses have a few special properties
|
||||
(like playing some sounds at full volume.)
|
||||
FIREDAMAGE Actor inflicts fire damage.
|
||||
ICEDAMAGE Actor inflicts ice damage.
|
||||
NODAMAGETHRUST Upon hitting another actor the victim is not thrust when damaged.
|
||||
TELESTOMP This actor can telefrag others.
|
||||
FLOATBOB use float bobbing z movement like Heretic/Hexen's powerups
|
||||
ACTIVATEIMPACT Upon hitting a wall this actor can activate G1/GR lines
|
||||
CANPUSHWALLS Upon hitting a wall this actor can activate P1/PR lines
|
||||
ACTIVATEMCROSS This actor can activate 'Monster crosses' lines.
|
||||
ACTIVATEPCROSS This actor can activate 'Projectile crosses' lines.
|
||||
CANTLEAVEFLOORPIC This actor cannot cross into a sector with a different floor
|
||||
texture.
|
||||
NONSHOOTABLE Actor cannot be hit (projectiles pass through.)
|
||||
INVULNERABLE Actor cannot be hurt.
|
||||
DORMANT Actor is dormant and has to be activated with Thing_Activate.
|
||||
SEEKERMISSILE Actor is a homing missile. This is only used as a hint to the
|
||||
game. For a homing missile to be effective it has to use
|
||||
one of the seeker missile code pointers in its moving states.
|
||||
REFLECTIVE Actor reflects missiles shot at it.
|
||||
FLOORHUGGER defines a projectile that is moving along the floor.
|
||||
CEILINGHUGGER defines a projectile that is moving along the ceiling.
|
||||
NORADIUSDMG Actor cannot be hurt by radius (explosive) damage.
|
||||
GHOST Actor is a ghost. This does not imply translucency etc.
|
||||
DONTSPLASH Actor does not create any terrain splashes
|
||||
DONTOVERLAP Two actors with this flag cannot overlap at the same x/y-position
|
||||
but different heights
|
||||
DONTMORPH Cannot be morphed into a chicken or pig.
|
||||
DONTSQUASH This actor cannot be instantly killed by Heretic's powered up Mace.
|
||||
FULLVOLACTIVE Plays its active sound at full volume
|
||||
ISMONSTER Actor is a monster
|
||||
SKYEXPLODE Projectile explodes when hitting a sky instead of vanishing
|
||||
STAYMORPHED If morphed this actor cannot revert to its original form.
|
||||
DONTBLAST Cannot be blasted by Hexen's Disc of Repulsion.
|
||||
CANBLAST Can be blasted by Hexen's Disc of Repulsion. For monsters this is
|
||||
implicit.
|
||||
NOTARGET cannot be targeted by other monsters.
|
||||
DONTGIB cannot be crushed to a pile of blood.
|
||||
NOBLOCKMONST can walk through monster blocking lines.
|
||||
FULLVOLDEATH Plays its death sound at full volume
|
||||
CANBOUNCEWATER Can bounce on water. Normally an object is destroyed in this case.
|
||||
NOWALLBOUNCESND Does not play a sound when bouncing off a wall. Normally the
|
||||
Seesound is played in this case.
|
||||
FOILINVUL Can hurt invulnerable monsters (but not players.)
|
||||
NOTELEOTHER Cannot be teleported by Hexen's banishment device.
|
||||
QUICKTORETALIATE Immediately switches targets when being attacked.
|
||||
NOICEDEATH Monster cannot be frozen, used to prevent the generic ice death.
|
||||
RANDOMIZE Randomizes the duration for its first frame. Most of Doom's projectiles
|
||||
use this.
|
||||
FIXMAPTHINGPOS Move thing out of walls. For torches and similar things that tend to be
|
||||
placed directly on a wall.
|
||||
ACTLIKEBRIDGE Uses the special collision logic for bridge things.
|
||||
STRIFEDAMAGE Strife uses a different damage calculation for its projectiles.
|
||||
|
||||
|
||||
States (a.k.a. Frames)
|
||||
======================
|
||||
|
||||
States define the behavior of an actor. For any regular actor there are the following
|
||||
labels:
|
||||
|
||||
SPAWN defines the state that is displayed when an actor is spawned
|
||||
For monsters this is normally also the idle loop.
|
||||
SEE defines the walking animation for a monster.
|
||||
MELEE defines the melee (near) attack.
|
||||
MISSILE defines the missile (far) attack.
|
||||
PAIN defines the pain action
|
||||
DEATH defines the normal death sequence
|
||||
XDEATH defines the extreme (splatter) death sequence
|
||||
BURN defines the burn (fire) death sequence
|
||||
ICE defines the freeze (ice) death sequence
|
||||
RAISE defines the resurrection sequence (for the Arch Vile)
|
||||
CRASH defines the crash sequence. This is entered when the actor
|
||||
is a corpse and hits the floor.
|
||||
|
||||
|
||||
|
||||
|
||||
A state definition is started with the 'STATES' keyword and enclosed
|
||||
by braces '{', '}'.
|
||||
|
||||
A state definition consists of the following:
|
||||
|
||||
1) State labels. This is one of the keywords listed above followed by a ':'.
|
||||
Example
|
||||
Spawn:
|
||||
defines the entry point for the spawn state.
|
||||
|
||||
2) State definitions. These consist of a sprite name, a frame sequence,
|
||||
the duration in tics (1/35 seconds) and optionally the 'BRIGHT'
|
||||
keyword to indicate a fullbright display and an action function name
|
||||
(code pointer)
|
||||
Example
|
||||
POSS AABBCCDD 4 A_Chase
|
||||
This defines 8 states. Each one of them uses the sprite POSS, has a duration
|
||||
of 4 and uses the code pointer A_Chase which is the standard walk function
|
||||
for monsters. Of these 8 states the first 2 will use the sprite frame 'A',
|
||||
the next 2 the frame 'B' and so on. The length of theframe sequence can be
|
||||
up to 256 characters. Valid frames are 'A'-'Z', '[', '\' and ']'.
|
||||
Different sprites can be freely mixed in an actor definition each separate
|
||||
state definition is limited to one sprite only.
|
||||
|
||||
3) Jump instructions
|
||||
There are 4 different jump instructions:
|
||||
|
||||
-Loop jumps to the most recently defined state label. This is
|
||||
used for a looping animation
|
||||
-Stop Stops animating this actor. Normally this is used at the
|
||||
end of the death sequences.
|
||||
-Wait Loops the last defined state. This is only useful if a
|
||||
code pointer is used that waits a given time or for a
|
||||
certain event. Currently the only usable code pointer
|
||||
for this is A_FreezeDeathChunks which is normally used
|
||||
at the end of a freeze death sequence.
|
||||
-Goto label+offset
|
||||
Jumps to an arbitrary state in the current actor.
|
||||
With this you can also jump to a state that was
|
||||
inherited by a parent. See Example 2) above for this
|
||||
The 'Goto see' jumps to the walking animation that
|
||||
has been inherited.
|
||||
|
||||
Important note:
|
||||
---------------
|
||||
This format has been designed for maximum flexibility. As a result no assumptions
|
||||
are made what the designer wants. No states are ever implicitly created.
|
||||
|
||||
|
||||
Action functions:
|
||||
=================
|
||||
|
||||
This information is kept rather brief. For normal purposes in-depth information
|
||||
is not necessary. All action functions names are preceded by 'A_'.
|
||||
|
||||
A_BFGSpray Starts the effect when a BFG projectile hits something
|
||||
A_Pain Plays the pain sound (that's all it does, it can also be used outside the pain sequence!)
|
||||
A_NoBlocking Sets the actor to non-blocking and drops items.
|
||||
A_XScream Plays the sound 'misc/gibbed'
|
||||
A_Look Look for players - used in the idle sequence of monsters
|
||||
A_Chase Standard walking function - used in the walk sequence of monsters
|
||||
A_FaceTarget Change angle to face target
|
||||
A_PosAttack Zombie attack (one bullet)
|
||||
A_Scream Plays the death sound (that's all it does, it can also be used outside the death sequence!)
|
||||
A_SPosAttack Shotgunner attack (3 bullets)
|
||||
A_VileChase Arch Vile: look for corpses and walk.
|
||||
A_VileStart Plays sound 'vile/start'
|
||||
A_VileTarget Spawns the Arch Vile fire.
|
||||
A_VileAttack Arch Vile attack function. Inflicts some damage and thrusts victim in the air.
|
||||
A_Fire Keeps Arch Vile's fire in front of target
|
||||
A_StartFire Plays sound 'vile/firestrt' and calls A_Fire
|
||||
A_FireCrackle Plays sound 'vile/firecrkl' and calls A_Fire
|
||||
A_Tracer Homing routine for Revenant's missile
|
||||
A_SkelWhoosh Calls A_FaceTarget and plays sound 'skeleton/swing'.
|
||||
A_SkelFist Revenant's melee attack.
|
||||
A_SkelMissile Revenant's missile attack
|
||||
A_FatRaise Calls A_FaceTarget and plays sound 'fatso/raiseguns'.
|
||||
A_FatAttack1 Mancubus attack 1
|
||||
A_FatAttack2 Mancubus attack 2
|
||||
A_FatAttack3 Mancubus attack 3
|
||||
A_BossDeath Boss death specials. Has no effect for custom monsters
|
||||
A_CPosAttack Chaingunner attack
|
||||
A_CPosRefire Chaingunner refiring
|
||||
A_TroopAttack Imp attack
|
||||
A_SargAttack Demon attack
|
||||
A_HeadAttack Cacodemon attack
|
||||
A_BruisAttack Baron attack
|
||||
A_SkullAttack Lost Soul attack
|
||||
A_Metal Plays 'spider/metal' and calls A_Chase
|
||||
A_SpidRefire Spider refiring
|
||||
A_BabyMetal Plays 'baby/walk' and calls A_Chase
|
||||
A_BspiAttack Arachnotron attack
|
||||
A_Hoof Plays 'cyber/hoof' and calls A_Chase
|
||||
A_CyberAttack Cyberdemon attack
|
||||
A_PainAttack Pain Elemental attack
|
||||
A_PainDie Pain Elemental death
|
||||
A_KeenDie Keen death - opens door with tag 666 if all monsters of the calling kind are dead.
|
||||
A_BrainPain Plays 'brain/pain' at full volume.
|
||||
A_BrainScream Starts brain explosion
|
||||
A_BrainDie Ends level if not in deathmatch
|
||||
A_BrainAwake Plays 'brain/sight' at full volume.
|
||||
A_BrainSpit Spits one brain cube
|
||||
A_SpawnFly Brain cube handling incl. monster creation
|
||||
A_SpawnSound plays 'brain/cube' and calls A_SpawnFly
|
||||
A_BrainExplode Brain explosion
|
||||
A_Die Kills actor
|
||||
A_Detonate Inflicts explosive damage - amount specified by DAMAGE in the actor
|
||||
A_Mushroom Shoots a lot of mancubus fireballs high in the air
|
||||
|
||||
A_SetFloorClip Sets the FLOORCLIP flag
|
||||
A_UnSetFloorClip Clears the FLOORCLIP flag
|
||||
A_HideThing Makes actor invisible
|
||||
A_UnHideThing Makes actor visible
|
||||
A_SetInvulnerable Makes actor invulnerable
|
||||
A_UnSetInvulnerable Makes actor vulnerable
|
||||
A_SetReflective Sets the REFLECTIVE flag
|
||||
A_UnSetReflective Clears the REFLECTIVE flag
|
||||
A_SetReflectiveInvulnerable A_SetInvulnerable + A_SetReflective
|
||||
A_UnSetReflectiveInvulnerable A_UnSetInvulnerable + A_UnSetReflective
|
||||
A_SetShootable Makes actor shootable
|
||||
A_UnSetShootable Makes actor non shootable
|
||||
A_NoGravity makes Actor not subject to gravity
|
||||
A_Gravity makes Actor subject to gravity
|
||||
A_LowGravity makes Actor subject to low gravity
|
||||
A_ScreamAndUnblock combines A_Scream and A_NoBlocking
|
||||
A_ActiveSound plays actor's active sound
|
||||
A_ActiveAndUnblock combines A_ActiveSound and A_NoBlocking
|
||||
A_FastChase A_Chase variation used by Hexen's class bosses
|
||||
A_FreezeDeath Starts the freeze death sequence.
|
||||
A_GenericFreezeDeath Starts the generic freeze death sequence. Calls A_FreezeDeath and sets the ice palette translation.
|
||||
A_FreezeDeathChunks Burst the actor into chunks. The state with this function has to be looped because it waits until all movement has stopped.
|
||||
A_IceGuyDie Stops all movement and bursts the actor into ice chunks immediately.
|
||||
|
||||
|
||||
The following functions use some actor properties to determine their behavior
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
A_Explode Inflicts explosive damage.
|
||||
Uses:
|
||||
ExplosionDamage Amount of damage being inflicted
|
||||
ExplosionRadius Radius of damage
|
||||
DontHurtShooter If a projectile, don't hurt the guy who shot it.
|
||||
|
||||
A_MeleeAttack performs a melee attack
|
||||
Uses:
|
||||
MeleeDamage Amount of damage, The formula is random(1,8)*MeleeDamage
|
||||
MeleeSound Sound being played if the actual attack happens.
|
||||
|
||||
A_MissileAttack launches a missile
|
||||
Uses:
|
||||
MissileName Actor name of the missile being launched
|
||||
MissileHeight Height above floor for the spawned missile
|
||||
|
||||
A_MissileAttack can handle homing missiles as long as the missile
|
||||
has the SEEKERMISSILE flag set and contains some kind of tracer
|
||||
code pointer (A_Tracer, A_MummyFX1Seek, etc.) In its moving animation.
|
||||
|
||||
A_ComboAttack combines A_MeleeAttack and A_MissileAttack depending on the current
|
||||
distance to the target.
|
||||
|
||||
A_BulletAttack Hitscan attack
|
||||
Uses:
|
||||
damage amount of bullets being fired
|
||||
|
||||
|
||||
The following functions use direct parameters:
|
||||
----------------------------------------------
|
||||
|
||||
A_PlaySound ("soundname") Plays the sound soundname
|
||||
A_PlayWeaponSound ("soundname") Plays the sound soundname on the weapon channel
|
||||
Sounds played with A_PlaySound and A_PlayWeaponSound
|
||||
can occur simultaneously.
|
||||
A_SeekerMissile (threshold, maxturnangle)
|
||||
Seeker missile handling. threshold and maxturnangle determine
|
||||
how 'aggressive' the missile will home in on its target. The larger
|
||||
the values the more precise it is. threshold specifies the angle
|
||||
inside which the missile will home in directly on its target.
|
||||
If the angle toward the target is larger than threshold it will
|
||||
change its movement angle only partially towards the target.
|
||||
maxturnangle is the maximum change of movement direction that
|
||||
will be performed in one move. Maxturnangle should be larger
|
||||
than threshold. Both angles are specified in degrees and must be
|
||||
in the range [0, 90].
|
||||
Example: The flaming skull of Heretic's mummy uses an equivalent
|
||||
of A_SeekerMisile 20 30
|
||||
A_Jump (chance, distance) Randomly advances to different state. Like painchance, the chance
|
||||
value can range between 0 and 255. A chance of 0 will never advance,
|
||||
while a chance of 255 will almost always advance. If the state is
|
||||
not advanced, then the one immediately following the A_Jump will
|
||||
be used as if A_Jump had not been present.
|
||||
A_CustomMissile ("missiletype", spawnheight, spawnofs_xy, angle)
|
||||
Spawns a missile attack where "missiletype" is the type of missile
|
||||
to shoot, spawnheight is how high from the monster's feet to shoot
|
||||
the missile, spawnofs_xy is how far the monster's center to shoot
|
||||
the missile, and angle is the direction relative to the monster's
|
||||
facing angle in which to shoot the missile.
|
|
@ -279,6 +279,7 @@ enum
|
|||
MF5_BOUNCEONACTORS = 0x00000008, // bouncing missile doesn't explode when it hits an actor
|
||||
MF5_EXPLODEONWATER = 0x00000010, // bouncing missile explpdes when hitting a water surface
|
||||
MF5_AVOIDINGDROPOFF = 0x00000020, // Used to move monsters away fro dropoffs
|
||||
MF5_NODAMAGE = 0x00000040, // Actor can be shot and reacts to being shot but takes no damage
|
||||
|
||||
// --- mobj.renderflags ---
|
||||
|
||||
|
@ -398,6 +399,8 @@ enum
|
|||
AMETA_BloodColor, // colorized blood
|
||||
AMETA_GibHealth, // negative health below which this monster dies an extreme death
|
||||
AMETA_WoundHealth, // health needed to enter wound state
|
||||
AMETA_PoisonDamage, // Amount of poison damage
|
||||
AMETA_FastSpeed, // Speed in fast mode
|
||||
};
|
||||
|
||||
// Map Object definition.
|
||||
|
|
|
@ -552,13 +552,14 @@ BOOL C_DoKey (event_t *ev)
|
|||
}
|
||||
}
|
||||
|
||||
if (binding == NULL)
|
||||
|
||||
if (binding == NULL || *binding==0)
|
||||
{
|
||||
binding = Bindings[ev->data1];
|
||||
dclick = false;
|
||||
}
|
||||
|
||||
if (binding != NULL && (chatmodeon == 0 || ev->data1 < 256))
|
||||
if (binding != NULL && *binding!=0 && (chatmodeon == 0 || ev->data1 < 256))
|
||||
{
|
||||
if (ev->type == EV_KeyUp)
|
||||
{
|
||||
|
|
|
@ -124,7 +124,8 @@ FState AStaff::States[] =
|
|||
|
||||
IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
|
||||
PROP_Weapon_SelectionOrder (3800)
|
||||
PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_HITS_GHOSTS|WIF_BOT_MELEE)
|
||||
PROP_Flags2Set(MF2_THRUGHOST)
|
||||
PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_BOT_MELEE)
|
||||
PROP_Weapon_UpState (S_STAFFUP)
|
||||
PROP_Weapon_DownState (S_STAFFDOWN)
|
||||
PROP_Weapon_ReadyState (S_STAFFREADY)
|
||||
|
@ -134,7 +135,7 @@ IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
|
|||
END_DEFAULTS
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AStaffPowered, Heretic, -1, 0)
|
||||
PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_HITS_GHOSTS|WIF_READYSNDHALF|WIF_POWERED_UP|WIF_BOT_MELEE|WIF_STAFF2_KICKBACK)
|
||||
PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_READYSNDHALF|WIF_POWERED_UP|WIF_BOT_MELEE|WIF_STAFF2_KICKBACK)
|
||||
PROP_Weapon_UpState (S_STAFFUP2)
|
||||
PROP_Weapon_DownState (S_STAFFDOWN2)
|
||||
PROP_Weapon_ReadyState (S_STAFFREADY2)
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
// Projectiles intended to be spawned through ACS
|
||||
|
||||
#include "actor.h"
|
||||
#include "info.h"
|
||||
#include "p_local.h"
|
||||
|
||||
// Fire Ball ----------------------------------------------------------------
|
||||
|
||||
class AFireBall : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AFireBall, AActor)
|
||||
};
|
||||
|
||||
FState AFireBall::States[] =
|
||||
{
|
||||
#define S_FIREBALL1_1 0
|
||||
S_BRIGHT (FBL1, 'A', 4, NULL , &States[S_FIREBALL1_1+1]),
|
||||
S_BRIGHT (FBL1, 'B', 4, NULL , &States[S_FIREBALL1_1]),
|
||||
|
||||
#define S_FIREBALL1_X1 (S_FIREBALL1_1+2)
|
||||
S_BRIGHT (XPL1, 'A', 4, NULL , &States[S_FIREBALL1_X1+1]),
|
||||
S_BRIGHT (XPL1, 'B', 4, NULL , &States[S_FIREBALL1_X1+2]),
|
||||
S_BRIGHT (XPL1, 'C', 4, NULL , &States[S_FIREBALL1_X1+3]),
|
||||
S_BRIGHT (XPL1, 'D', 4, NULL , &States[S_FIREBALL1_X1+4]),
|
||||
S_BRIGHT (XPL1, 'E', 4, NULL , &States[S_FIREBALL1_X1+5]),
|
||||
S_BRIGHT (XPL1, 'F', 4, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AFireBall, Hexen, -1, 10)
|
||||
PROP_SpeedFixed (2)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_Damage (4)
|
||||
PROP_DamageType (MOD_FIRE)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_FIREBALL1_1)
|
||||
PROP_DeathState (S_FIREBALL1_X1)
|
||||
|
||||
PROP_DeathSound ("Fireball")
|
||||
END_DEFAULTS
|
||||
|
||||
// Arrow --------------------------------------------------------------------
|
||||
|
||||
class AArrow : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AArrow, AActor)
|
||||
};
|
||||
|
||||
FState AArrow::States[] =
|
||||
{
|
||||
#define S_ARROW_1 0
|
||||
S_NORMAL (ARRW, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_ARROW_X1 (S_ARROW_1+1)
|
||||
S_NORMAL (ARRW, 'A', 1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AArrow, Hexen, -1, 50)
|
||||
PROP_SpeedFixed (6)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (4)
|
||||
PROP_Damage (4)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
|
||||
PROP_SpawnState (S_ARROW_1)
|
||||
PROP_DeathState (S_ARROW_X1)
|
||||
END_DEFAULTS
|
||||
|
||||
// Dart ---------------------------------------------------------------------
|
||||
|
||||
class ADart : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ADart, AActor)
|
||||
};
|
||||
|
||||
FState ADart::States[] =
|
||||
{
|
||||
#define S_DART_1 0
|
||||
S_NORMAL (DART, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_DART_X1 (S_DART_1+1)
|
||||
S_NORMAL (DART, 'A', 1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ADart, Hexen, -1, 51)
|
||||
PROP_SpeedFixed (6)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (4)
|
||||
PROP_Damage (2)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
|
||||
PROP_SpawnState (S_DART_1)
|
||||
PROP_DeathState (S_DART_X1)
|
||||
END_DEFAULTS
|
||||
|
||||
// Poison Dart --------------------------------------------------------------
|
||||
|
||||
class APoisonDart : public ADart
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APoisonDart, ADart)
|
||||
public:
|
||||
int DoSpecialDamage (AActor *victim, int damage);
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APoisonDart, Hexen, -1, 52)
|
||||
END_DEFAULTS
|
||||
|
||||
int APoisonDart::DoSpecialDamage (AActor *victim, int damage)
|
||||
{
|
||||
if (victim->player)
|
||||
{
|
||||
P_PoisonPlayer (victim->player, this, this->target, 20);
|
||||
damage >>= 1;
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
// Ripper Ball --------------------------------------------------------------
|
||||
|
||||
class ARipperBall : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ARipperBall, AActor)
|
||||
};
|
||||
|
||||
FState ARipperBall::States[] =
|
||||
{
|
||||
#define S_RIPPERBALL_1 0
|
||||
S_NORMAL (RIPP, 'A', 3, NULL , &States[S_RIPPERBALL_1+1]),
|
||||
S_NORMAL (RIPP, 'B', 3, NULL , &States[S_RIPPERBALL_1+2]),
|
||||
S_NORMAL (RIPP, 'C', 3, NULL , &States[S_RIPPERBALL_1]),
|
||||
|
||||
#define S_RIPPERBALL_X1 (S_RIPPERBALL_1+3)
|
||||
S_BRIGHT (CFCF, 'Q', 4, NULL , &States[S_RIPPERBALL_X1+1]),
|
||||
S_BRIGHT (CFCF, 'R', 3, NULL , &States[S_RIPPERBALL_X1+2]),
|
||||
S_BRIGHT (CFCF, 'S', 4, NULL , &States[S_RIPPERBALL_X1+3]),
|
||||
S_BRIGHT (CFCF, 'T', 3, NULL , &States[S_RIPPERBALL_X1+4]),
|
||||
S_BRIGHT (CFCF, 'U', 4, NULL , &States[S_RIPPERBALL_X1+5]),
|
||||
S_BRIGHT (CFCF, 'V', 3, NULL , &States[S_RIPPERBALL_X1+6]),
|
||||
S_BRIGHT (CFCF, 'W', 4, NULL , &States[S_RIPPERBALL_X1+7]),
|
||||
S_BRIGHT (CFCF, 'X', 3, NULL , &States[S_RIPPERBALL_X1+8]),
|
||||
S_BRIGHT (CFCF, 'Y', 4, NULL , &States[S_RIPPERBALL_X1+9]),
|
||||
S_BRIGHT (CFCF, 'Z', 3, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ARipperBall, Hexen, -1, 53)
|
||||
PROP_SpeedFixed (6)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_Damage (2)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP)
|
||||
|
||||
PROP_SpawnState (S_RIPPERBALL_1)
|
||||
PROP_DeathState (S_RIPPERBALL_X1)
|
||||
END_DEFAULTS
|
||||
|
||||
// Projectile Blade ---------------------------------------------------------
|
||||
|
||||
class AProjectileBlade : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AProjectileBlade, AActor)
|
||||
};
|
||||
|
||||
FState AProjectileBlade::States[] =
|
||||
{
|
||||
#define S_PRJ_BLADE1 0
|
||||
S_NORMAL (BLAD, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_PRJ_BLADE_X1 (S_PRJ_BLADE1+1)
|
||||
S_NORMAL (BLAD, 'A', 1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AProjectileBlade, Hexen, -1, 64)
|
||||
PROP_SpeedFixed (6)
|
||||
PROP_RadiusFixed (6)
|
||||
PROP_HeightFixed (6)
|
||||
PROP_Damage (3)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
|
||||
PROP_SpawnState (S_PRJ_BLADE1)
|
||||
PROP_DeathState (S_PRJ_BLADE_X1)
|
||||
END_DEFAULTS
|
|
@ -15,11 +15,6 @@ protected:
|
|||
virtual bool ShouldStay ();
|
||||
};
|
||||
|
||||
class AStrifeKey : public AKey
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AStrifeKey, AKey)
|
||||
};
|
||||
|
||||
bool P_CheckKeys (AActor *owner, int keynum, bool remote);
|
||||
void P_InitKeyMessages ();
|
||||
int P_GetMapColorForLock (int lock);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "c_dispatch.h"
|
||||
#include "gstrings.h"
|
||||
#include "templates.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
static FRandom pr_restore ("RestorePos");
|
||||
|
||||
|
@ -1102,6 +1103,21 @@ bool AInventory::DoRespawn ()
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// AInventory :: GiveQuest
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void AInventory::GiveQuest (AActor *toucher)
|
||||
{
|
||||
int quest = GetClass()->Meta.GetMetaInt(AIMETA_GiveQuest);
|
||||
if (quest>0 && quest<31)
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[quest-1]);
|
||||
}
|
||||
}
|
||||
//===========================================================================
|
||||
//
|
||||
// AInventory :: TryPickup
|
||||
|
@ -1169,6 +1185,8 @@ bool AInventory::TryPickup (AActor *toucher)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
GiveQuest(toucher);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1271,6 +1289,7 @@ bool ACustomInventory::TryPickup (AActor *toucher)
|
|||
}
|
||||
else if (useok || ItemFlags & IF_ALWAYSPICKUP)
|
||||
{
|
||||
GiveQuest (toucher);
|
||||
GoAwayAndDie();
|
||||
}
|
||||
return useok;
|
||||
|
@ -2049,6 +2068,7 @@ IMPLEMENT_ABSTRACT_ACTOR (AMapRevealer)
|
|||
bool AMapRevealer::TryPickup (AActor *toucher)
|
||||
{
|
||||
level.flags |= LEVEL_ALLMAP;
|
||||
GiveQuest (toucher);
|
||||
GoAwayAndDie ();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ enum
|
|||
{
|
||||
AIMETA_BASE = 0x71000,
|
||||
AIMETA_PickupMessage, // string
|
||||
AIMETA_GiveQuest, // optionally give one of the quest items.
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -145,6 +146,9 @@ public:
|
|||
|
||||
virtual PalEntry GetBlend ();
|
||||
|
||||
protected:
|
||||
void GiveQuest(AActor * toucher);
|
||||
|
||||
private:
|
||||
static int StaticLastMessageTic;
|
||||
static const char *StaticLastMessage;
|
||||
|
@ -260,7 +264,7 @@ enum
|
|||
WIF_WIMPY_WEAPON = 0x00000200, // change away when ammo for another weapon is replenished
|
||||
WIF_POWERED_UP = 0x00000400, // this is a tome-of-power'ed version of its sister
|
||||
WIF_EXTREME_DEATH = 0x00000800, // weapon always causes an extreme death
|
||||
WIF_HITS_GHOSTS = 0x00001000, // melee weapon can strike ghosts
|
||||
|
||||
WIF_STAFF2_KICKBACK = 0x00002000, // the powered-up Heretic staff has special kickback
|
||||
|
||||
WIF_CHEATNOTWEAPON = 1<<27, // Give cheat considers this not a weapon (used by Sigil)
|
||||
|
|
|
@ -92,6 +92,7 @@ bool AWeaponPiece::TryPickup (AActor *toucher)
|
|||
{
|
||||
// Already has the piece, check if mana needed
|
||||
if (!gaveAmmo) return false;
|
||||
GiveQuest (toucher);
|
||||
GoAwayAndDie();
|
||||
return true;
|
||||
}
|
||||
|
@ -114,6 +115,7 @@ bool AWeaponPiece::TryPickup (AActor *toucher)
|
|||
FullWeapon->AmmoGive2=Defaults->AmmoGive2;
|
||||
}
|
||||
}
|
||||
GiveQuest (toucher);
|
||||
GoAwayAndDie();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "m_random.h"
|
||||
#include "a_strifeglobal.h"
|
||||
#include "c_console.h"
|
||||
#include "gstrings.h"
|
||||
|
||||
static FRandom pr_spectrespawn ("AlienSpectreSpawn");
|
||||
static FRandom pr_212e4 ("212e4");
|
||||
|
@ -510,13 +511,13 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre2))
|
||||
{
|
||||
C_MidPrint("You Killed The Bishop!");
|
||||
C_MidPrint(GStrings("TXT_KILLED_BISHOP"));
|
||||
log = 74;
|
||||
player->GiveInventoryType (QuestItemClasses[20]);
|
||||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre3))
|
||||
{
|
||||
C_MidPrint("You've Killed The Oracle!");
|
||||
C_MidPrint(GStrings("TXT_KILLED_ORACLE"));
|
||||
// If there are any Oracles still alive, kill them.
|
||||
TThinkerIterator<AOracle> it;
|
||||
AOracle *oracle;
|
||||
|
@ -546,7 +547,7 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre4))
|
||||
{
|
||||
C_MidPrint("You Killed Macil!");
|
||||
C_MidPrint(GStrings("TXT_KILLED_MACIL"));
|
||||
player->GiveInventoryType (QuestItemClasses[23]);
|
||||
if (player->FindInventory (QuestItemClasses[24]) == NULL)
|
||||
{ // Richter has taken over. Macil is a snake.
|
||||
|
@ -559,7 +560,7 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre5))
|
||||
{
|
||||
C_MidPrint("You've Killed the Loremaster!");
|
||||
C_MidPrint(GStrings("TXT_KILLED_LOREMASTER"));
|
||||
ASigil *sigil;
|
||||
|
||||
player->GiveInventoryType (QuestItemClasses[25]);
|
||||
|
|
|
@ -1,161 +0,0 @@
|
|||
#include "actor.h"
|
||||
#include "m_random.h"
|
||||
#include "a_action.h"
|
||||
#include "p_local.h"
|
||||
#include "p_enemy.h"
|
||||
#include "s_sound.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
void A_SentinelRefire (AActor *);
|
||||
void A_PeasantAttack (AActor *);
|
||||
void A_TossGib (AActor *);
|
||||
|
||||
// Base class for the beggars ---------------------------------------------
|
||||
|
||||
class ABeggar : public AStrifeHumanoid
|
||||
{
|
||||
DECLARE_ACTOR (ABeggar, AStrifeHumanoid);
|
||||
};
|
||||
|
||||
FState ABeggar::States[] =
|
||||
{
|
||||
#define S_BEGGAR_STND 0
|
||||
S_NORMAL (BEGR, 'A', 10, A_Look, &States[S_BEGGAR_STND]),
|
||||
|
||||
#define S_BEGGAR_RUN (S_BEGGAR_STND+1)
|
||||
S_NORMAL (BEGR, 'A', 4, A_Wander, &States[S_BEGGAR_RUN+1]),
|
||||
S_NORMAL (BEGR, 'A', 4, A_Wander, &States[S_BEGGAR_RUN+2]),
|
||||
S_NORMAL (BEGR, 'B', 4, A_Wander, &States[S_BEGGAR_RUN+3]),
|
||||
S_NORMAL (BEGR, 'B', 4, A_Wander, &States[S_BEGGAR_RUN+4]),
|
||||
S_NORMAL (BEGR, 'C', 4, A_Wander, &States[S_BEGGAR_RUN+5]),
|
||||
S_NORMAL (BEGR, 'C', 4, A_Wander, &States[S_BEGGAR_RUN]),
|
||||
|
||||
#define S_BEGGAR_ATTACK (S_BEGGAR_RUN+6)
|
||||
S_NORMAL (BEGR, 'D', 8, NULL, &States[S_BEGGAR_ATTACK+1]),
|
||||
S_NORMAL (BEGR, 'E', 8, A_PeasantAttack, &States[S_BEGGAR_ATTACK+2]),
|
||||
S_NORMAL (BEGR, 'E', 1, A_Chase, &States[S_BEGGAR_ATTACK+3]),
|
||||
S_NORMAL (BEGR, 'D', 8, A_SentinelRefire, &States[S_BEGGAR_ATTACK]),
|
||||
|
||||
#define S_BEGGAR_PAIN (S_BEGGAR_ATTACK+4)
|
||||
S_NORMAL (BEGR, 'A', 3, A_Pain, &States[S_BEGGAR_PAIN+1]),
|
||||
S_NORMAL (BEGR, 'A', 3, A_Chase, &States[S_BEGGAR_ATTACK]),
|
||||
|
||||
#define S_BEGGAR_DIE (S_BEGGAR_PAIN+2)
|
||||
S_NORMAL (BEGR, 'F', 4, NULL, &States[S_BEGGAR_DIE+1]),
|
||||
S_NORMAL (BEGR, 'G', 4, A_Scream, &States[S_BEGGAR_DIE+2]),
|
||||
S_NORMAL (BEGR, 'H', 4, NULL, &States[S_BEGGAR_DIE+3]),
|
||||
S_NORMAL (BEGR, 'I', 4, A_NoBlocking, &States[S_BEGGAR_DIE+4]),
|
||||
S_NORMAL (BEGR, 'J', 4, NULL, &States[S_BEGGAR_DIE+5]),
|
||||
S_NORMAL (BEGR, 'K', 4, NULL, &States[S_BEGGAR_DIE+6]),
|
||||
S_NORMAL (BEGR, 'L', 4, NULL, &States[S_BEGGAR_DIE+7]),
|
||||
S_NORMAL (BEGR, 'M', 4, NULL, &States[S_BEGGAR_DIE+8]),
|
||||
S_NORMAL (BEGR, 'N', -1, NULL, NULL),
|
||||
|
||||
#define S_BEGGAR_XDIE (S_BEGGAR_DIE+9)
|
||||
S_NORMAL (BEGR, 'F', 5, A_TossGib, &States[S_BEGGAR_XDIE+1]),
|
||||
S_NORMAL (GIBS, 'M', 5, A_TossGib, &States[S_BEGGAR_XDIE+2]),
|
||||
S_NORMAL (GIBS, 'N', 5, A_XScream, &States[S_BEGGAR_XDIE+3]),
|
||||
S_NORMAL (GIBS, 'O', 5, A_NoBlocking, &States[S_BEGGAR_XDIE+4]),
|
||||
S_NORMAL (GIBS, 'P', 4, A_TossGib, &States[S_BEGGAR_XDIE+5]),
|
||||
S_NORMAL (GIBS, 'Q', 4, A_TossGib, &States[S_BEGGAR_XDIE+6]),
|
||||
S_NORMAL (GIBS, 'R', 4, A_TossGib, &States[S_BEGGAR_XDIE+7]),
|
||||
S_NORMAL (GIBS, 'S', 4, A_TossGib, &States[S_BEGGAR_XDIE+8]),
|
||||
S_NORMAL (GIBS, 'T', 4, A_TossGib, &States[S_BEGGAR_XDIE+9]),
|
||||
S_NORMAL (GIBS, 'U', 5, NULL, &States[S_BEGGAR_XDIE+10]),
|
||||
S_NORMAL (GIBS, 'V', 1400, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABeggar, Strife, 0, 0)
|
||||
PROP_SpawnState (S_BEGGAR_STND)
|
||||
PROP_SeeState (S_BEGGAR_RUN)
|
||||
PROP_PainState (S_BEGGAR_PAIN)
|
||||
PROP_MeleeState (S_BEGGAR_ATTACK)
|
||||
PROP_DeathState (S_BEGGAR_DIE)
|
||||
PROP_XDeathState (S_BEGGAR_XDIE)
|
||||
|
||||
PROP_SpawnHealth (20)
|
||||
PROP_PainChance (250)
|
||||
PROP_SpeedFixed (3)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (56)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_JUSTHIT)
|
||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_ISMONSTER)
|
||||
PROP_Flags4 (MF4_NOSPLASHALERT)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_Tag ("Beggar")
|
||||
|
||||
PROP_AttackSound ("beggar/attack")
|
||||
PROP_PainSound ("beggar/pain")
|
||||
PROP_DeathSound ("beggar/death")
|
||||
END_DEFAULTS
|
||||
|
||||
// Beggar 1 -----------------------------------------------------------------
|
||||
|
||||
class ABeggar1 : public ABeggar
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABeggar1, ABeggar)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABeggar1, Strife, 141, 0)
|
||||
PROP_StrifeType (38)
|
||||
PROP_StrifeTeaserType (37)
|
||||
PROP_StrifeTeaserType2 (38)
|
||||
PROP_Tag ("Beggar")
|
||||
END_DEFAULTS
|
||||
|
||||
// Beggar 2 -----------------------------------------------------------------
|
||||
|
||||
class ABeggar2 : public ABeggar
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABeggar2, ABeggar)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABeggar2, Strife, 155, 0)
|
||||
PROP_StrifeType (39)
|
||||
PROP_StrifeTeaserType (38)
|
||||
PROP_StrifeTeaserType2 (39)
|
||||
PROP_Tag ("Beggar")
|
||||
END_DEFAULTS
|
||||
|
||||
// Beggar 3 -----------------------------------------------------------------
|
||||
|
||||
class ABeggar3 : public ABeggar
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABeggar3, ABeggar)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABeggar3, Strife, 156, 0)
|
||||
PROP_StrifeType (40)
|
||||
PROP_StrifeTeaserType (39)
|
||||
PROP_StrifeTeaserType2 (40)
|
||||
PROP_Tag ("Beggar")
|
||||
END_DEFAULTS
|
||||
|
||||
// Beggar 4 -----------------------------------------------------------------
|
||||
|
||||
class ABeggar4 : public ABeggar
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABeggar4, ABeggar)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABeggar4, Strife, 157, 0)
|
||||
PROP_StrifeType (41)
|
||||
PROP_StrifeTeaserType (40)
|
||||
PROP_StrifeTeaserType2 (41)
|
||||
PROP_Tag ("Beggar")
|
||||
END_DEFAULTS
|
||||
|
||||
// Beggar 5 -----------------------------------------------------------------
|
||||
|
||||
class ABeggar5 : public ABeggar
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABeggar5, ABeggar)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABeggar5, Strife, 158, 0)
|
||||
PROP_StrifeType (42)
|
||||
PROP_StrifeTeaserType (41)
|
||||
PROP_StrifeTeaserType2 (42)
|
||||
PROP_Tag ("Beggar")
|
||||
END_DEFAULTS
|
|
@ -1,228 +0,0 @@
|
|||
#include "actor.h"
|
||||
#include "m_random.h"
|
||||
#include "a_action.h"
|
||||
#include "p_local.h"
|
||||
#include "p_enemy.h"
|
||||
#include "s_sound.h"
|
||||
|
||||
void A_AlertOthers (AActor *);
|
||||
void A_CloseUpShop (AActor *);
|
||||
void A_ClearSoundTarget (AActor *);
|
||||
void A_PlayActiveSound (AActor *);
|
||||
|
||||
// Base class for the merchants ---------------------------------------------
|
||||
|
||||
class AMerchant : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AMerchant, AActor)
|
||||
public:
|
||||
int TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype);
|
||||
};
|
||||
|
||||
FState AMerchant::States[] =
|
||||
{
|
||||
#define S_MERCHANT_YES 0
|
||||
S_NORMAL (MRYS, 'A', 20, NULL, &States[S_MERCHANT_YES+6]),
|
||||
|
||||
#define S_MERCHANT_NO (S_MERCHANT_YES+1)
|
||||
S_NORMAL (MRNO, 'A', 6, NULL, &States[S_MERCHANT_NO+1]),
|
||||
S_NORMAL (MRNO, 'B', 6, NULL, &States[S_MERCHANT_NO+2]),
|
||||
S_NORMAL (MRNO, 'C', 10, NULL, &States[S_MERCHANT_NO+3]),
|
||||
S_NORMAL (MRNO, 'B', 6, NULL, &States[S_MERCHANT_NO+4]),
|
||||
S_NORMAL (MRNO, 'A', 6, NULL, &States[S_MERCHANT_NO+5]),
|
||||
|
||||
#define S_MERCHANT_STND (S_MERCHANT_NO+5)
|
||||
S_NORMAL (MRST, 'A', 10, A_Look2, &States[S_MERCHANT_STND]),
|
||||
|
||||
#define S_MERCHANT_LOOK1 (S_MERCHANT_STND+1)
|
||||
// This actually uses A_LoopActiveSound, but since that doesn't actually
|
||||
// loop in Strife, this is probably better, eh?
|
||||
S_NORMAL (MRLK, 'A', 30, A_PlayActiveSound, &States[S_MERCHANT_STND]),
|
||||
|
||||
#define S_MERCHANT_LOOK2 (S_MERCHANT_LOOK1+1)
|
||||
S_NORMAL (MRLK, 'B', 30, NULL, &States[S_MERCHANT_STND]),
|
||||
|
||||
#define S_MERCHANT_BD (S_MERCHANT_LOOK2+1)
|
||||
S_NORMAL (MRBD, 'A', 4, NULL, &States[S_MERCHANT_BD+1]),
|
||||
S_NORMAL (MRBD, 'B', 4, NULL, &States[S_MERCHANT_BD+2]),
|
||||
S_NORMAL (MRBD, 'C', 4, NULL, &States[S_MERCHANT_BD+3]),
|
||||
S_NORMAL (MRBD, 'D', 4, NULL, &States[S_MERCHANT_BD+4]),
|
||||
S_NORMAL (MRBD, 'E', 4, NULL, &States[S_MERCHANT_BD+5]),
|
||||
S_NORMAL (MRBD, 'D', 4, NULL, &States[S_MERCHANT_BD+6]),
|
||||
S_NORMAL (MRBD, 'C', 4, NULL, &States[S_MERCHANT_BD+7]),
|
||||
S_NORMAL (MRBD, 'B', 4, NULL, &States[S_MERCHANT_BD+8]),
|
||||
S_NORMAL (MRBD, 'A', 5, NULL, &States[S_MERCHANT_BD+9]),
|
||||
S_NORMAL (MRBD, 'F', 6, NULL, &States[S_MERCHANT_STND]),
|
||||
|
||||
#define S_MERCHANT_PAIN (S_MERCHANT_BD+10)
|
||||
S_NORMAL (MRPN, 'A', 3, A_AlertOthers, &States[S_MERCHANT_PAIN+1]),
|
||||
S_NORMAL (MRPN, 'B', 3, A_Pain, &States[S_MERCHANT_PAIN+2]),
|
||||
S_NORMAL (MRPN, 'C', 3, NULL, &States[S_MERCHANT_PAIN+3]),
|
||||
S_NORMAL (MRPN, 'D', 9, A_CloseUpShop, &States[S_MERCHANT_PAIN+4]),
|
||||
S_NORMAL (MRPN, 'C', 4, NULL, &States[S_MERCHANT_PAIN+5]),
|
||||
S_NORMAL (MRPN, 'B', 3, NULL, &States[S_MERCHANT_PAIN+6]),
|
||||
S_NORMAL (MRPN, 'A', 3, A_ClearSoundTarget, &States[S_MERCHANT_STND]),
|
||||
|
||||
#define S_MERCHANT_GT (S_MERCHANT_PAIN+7)
|
||||
S_NORMAL (MRGT, 'A', 5, NULL, &States[S_MERCHANT_GT+1]),
|
||||
S_NORMAL (MRGT, 'B', 5, NULL, &States[S_MERCHANT_GT+2]),
|
||||
S_NORMAL (MRGT, 'C', 5, NULL, &States[S_MERCHANT_GT+3]),
|
||||
S_NORMAL (MRGT, 'D', 5, NULL, &States[S_MERCHANT_GT+4]),
|
||||
S_NORMAL (MRGT, 'E', 5, NULL, &States[S_MERCHANT_GT+5]),
|
||||
S_NORMAL (MRGT, 'F', 5, NULL, &States[S_MERCHANT_GT+6]),
|
||||
S_NORMAL (MRGT, 'G', 5, NULL, &States[S_MERCHANT_GT+7]),
|
||||
S_NORMAL (MRGT, 'H', 5, NULL, &States[S_MERCHANT_GT+8]),
|
||||
S_NORMAL (MRGT, 'I', 5, NULL, &States[S_MERCHANT_STND])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMerchant, Strife, -1, 0)
|
||||
PROP_SpawnState (S_MERCHANT_STND)
|
||||
PROP_SeeState (S_MERCHANT_PAIN)
|
||||
PROP_PainState (S_MERCHANT_PAIN)
|
||||
PROP_GreetingsState (S_MERCHANT_GT)
|
||||
PROP_YesState (S_MERCHANT_YES)
|
||||
PROP_NoState (S_MERCHANT_NO)
|
||||
|
||||
PROP_SpawnHealthLong (10000000)
|
||||
PROP_PainChance (150)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (56)
|
||||
PROP_Mass (5000)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOTDMATCH)
|
||||
PROP_Flags4 (MF4_NOSPLASHALERT)
|
||||
END_DEFAULTS
|
||||
|
||||
int AMerchant::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype)
|
||||
{
|
||||
target = source;
|
||||
if (PainState != NULL)
|
||||
{
|
||||
SetState (PainState);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Weapon Smith -------------------------------------------------------------
|
||||
|
||||
class AWeaponSmith : public AMerchant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AWeaponSmith, AMerchant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AWeaponSmith, Strife, 116, 0)
|
||||
PROP_StrifeType (2)
|
||||
PROP_StrifeTeaserType (2)
|
||||
PROP_StrifeTeaserType2 (2)
|
||||
PROP_PainSound ("smith/pain")
|
||||
PROP_Tag ("Weapon_Smith")
|
||||
END_DEFAULTS
|
||||
|
||||
// Bar Keep -----------------------------------------------------------------
|
||||
|
||||
class ABarKeep : public AMerchant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABarKeep, AMerchant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABarKeep, Strife, 72, 0)
|
||||
PROP_Translation (TRANSLATION_Standard, 4)
|
||||
PROP_StrifeType (3)
|
||||
PROP_StrifeTeaserType (3)
|
||||
PROP_StrifeTeaserType2 (3)
|
||||
PROP_PainSound ("barkeep/pain")
|
||||
PROP_ActiveSound ("barkeep/active")
|
||||
PROP_Tag ("Bar_Keep")
|
||||
END_DEFAULTS
|
||||
|
||||
// Armorer ------------------------------------------------------------------
|
||||
|
||||
class AArmorer : public AMerchant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AArmorer, AMerchant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AArmorer, Strife, 73, 0)
|
||||
PROP_Translation (TRANSLATION_Standard, 5)
|
||||
PROP_StrifeType (4)
|
||||
PROP_StrifeTeaserType (4)
|
||||
PROP_StrifeTeaserType2 (4)
|
||||
PROP_PainSound ("armorer/pain")
|
||||
PROP_Tag ("Aromorer")
|
||||
END_DEFAULTS
|
||||
|
||||
// Medic --------------------------------------------------------------------
|
||||
|
||||
class AMedic : public AMerchant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AMedic, AMerchant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AMedic, Strife, 74, 0)
|
||||
PROP_Translation (TRANSLATION_Standard, 6)
|
||||
PROP_StrifeType (5)
|
||||
PROP_StrifeTeaserType (5)
|
||||
PROP_StrifeTeaserType2 (5)
|
||||
PROP_PainSound ("medic/pain")
|
||||
PROP_Tag ("Medic")
|
||||
END_DEFAULTS
|
||||
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_AlertOthers
|
||||
//
|
||||
// [RH] Split from A_CloseUpShop so that when merchants go into their pain
|
||||
// state, the very first thing they do is send out an alert, which should
|
||||
// prevent perpetual store closure. If we wait until A_CloseUpShop to do this,
|
||||
// it is possible to set up a chain reaction where one merchant sends out the
|
||||
// alert after another has already cleared their alert, causing that merchant
|
||||
// to go back on the alert and send out their own alert 9 tics later.
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_AlertOthers (AActor *self)
|
||||
{
|
||||
if (self->target != NULL && self->target->player != NULL)
|
||||
{
|
||||
P_NoiseAlert (self->target, self);
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_CloseUpShop
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_CloseUpShop (AActor *self)
|
||||
{
|
||||
EV_DoDoor (DDoor::doorCloseWaitOpen, NULL, self, 999, 8*FRACUNIT, 120*TICRATE, 0, 0);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_ClearSoundTarget
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_ClearSoundTarget (AActor *self)
|
||||
{
|
||||
AActor *actor;
|
||||
|
||||
self->Sector->SoundTarget = NULL;
|
||||
for (actor = self->Sector->thinglist; actor != NULL; actor = actor->snext)
|
||||
{
|
||||
actor->LastHeard = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_PlayActiveSound
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_PlayActiveSound (AActor *self)
|
||||
{
|
||||
S_SoundID (self, CHAN_VOICE, self->ActiveSound, 1, ATTN_NORM);
|
||||
}
|
|
@ -1,427 +0,0 @@
|
|||
#include "actor.h"
|
||||
#include "m_random.h"
|
||||
#include "a_action.h"
|
||||
#include "p_local.h"
|
||||
#include "p_enemy.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
static FRandom pr_peasatk ("PeasantAttack");
|
||||
|
||||
void A_PeasantAttack (AActor *);
|
||||
void A_TossGib (AActor *);
|
||||
void A_GetHurt (AActor *);
|
||||
|
||||
// Peasant Base Class -------------------------------------------------------
|
||||
|
||||
class APeasant : public AStrifeHumanoid
|
||||
{
|
||||
DECLARE_ACTOR (APeasant, AStrifeHumanoid)
|
||||
};
|
||||
|
||||
FState APeasant::States[] =
|
||||
{
|
||||
#define S_PEASANT_STND 0
|
||||
S_NORMAL (PEAS, 'A', 10, A_Look2, &States[S_PEASANT_STND]),
|
||||
|
||||
#define S_PEASANT_RUN (S_PEASANT_STND+1)
|
||||
S_NORMAL (PEAS, 'A', 5, A_Wander, &States[S_PEASANT_RUN+1]),
|
||||
S_NORMAL (PEAS, 'A', 5, A_Wander, &States[S_PEASANT_RUN+2]),
|
||||
S_NORMAL (PEAS, 'B', 5, A_Wander, &States[S_PEASANT_RUN+3]),
|
||||
S_NORMAL (PEAS, 'B', 5, A_Wander, &States[S_PEASANT_RUN+4]),
|
||||
S_NORMAL (PEAS, 'C', 5, A_Wander, &States[S_PEASANT_RUN+5]),
|
||||
S_NORMAL (PEAS, 'C', 5, A_Wander, &States[S_PEASANT_RUN+6]),
|
||||
S_NORMAL (PEAS, 'D', 5, A_Wander, &States[S_PEASANT_RUN+7]),
|
||||
S_NORMAL (PEAS, 'D', 5, A_Wander, &States[S_PEASANT_STND]),
|
||||
|
||||
#define S_PEASANT_MELEE (S_PEASANT_RUN+8)
|
||||
S_NORMAL (PEAS, 'E', 10, A_FaceTarget, &States[S_PEASANT_MELEE+1]),
|
||||
S_NORMAL (PEAS, 'F', 8, A_PeasantAttack, &States[S_PEASANT_MELEE+2]),
|
||||
S_NORMAL (PEAS, 'E', 8, NULL, &States[S_PEASANT_RUN]),
|
||||
|
||||
#define S_PEASANT_PAIN (S_PEASANT_MELEE+3)
|
||||
S_NORMAL (PEAS, 'O', 3, NULL, &States[S_PEASANT_PAIN+1]),
|
||||
S_NORMAL (PEAS, 'O', 3, A_Pain, &States[S_PEASANT_MELEE]),
|
||||
|
||||
#define S_PEASANT_WOUNDED (S_PEASANT_PAIN+2)
|
||||
S_NORMAL (PEAS, 'G', 5, NULL, &States[S_PEASANT_WOUNDED+1]),
|
||||
S_NORMAL (PEAS, 'H', 10, A_GetHurt, &States[S_PEASANT_WOUNDED+2]),
|
||||
S_NORMAL (PEAS, 'I', 6, NULL, &States[S_PEASANT_WOUNDED+1]),
|
||||
|
||||
#define S_PEASANT_DIE (S_PEASANT_WOUNDED+3)
|
||||
S_NORMAL (PEAS, 'G', 5, NULL, &States[S_PEASANT_DIE+1]),
|
||||
S_NORMAL (PEAS, 'H', 5, A_Scream, &States[S_PEASANT_DIE+2]),
|
||||
S_NORMAL (PEAS, 'I', 6, NULL, &States[S_PEASANT_DIE+3]),
|
||||
S_NORMAL (PEAS, 'J', 5, A_NoBlocking, &States[S_PEASANT_DIE+4]),
|
||||
S_NORMAL (PEAS, 'K', 5, NULL, &States[S_PEASANT_DIE+5]),
|
||||
S_NORMAL (PEAS, 'L', 6, NULL, &States[S_PEASANT_DIE+6]),
|
||||
S_NORMAL (PEAS, 'M', 8, NULL, &States[S_PEASANT_DIE+7]),
|
||||
S_NORMAL (PEAS, 'N', 1400, NULL, &States[S_PEASANT_DIE+8]),
|
||||
S_NORMAL (GIBS, 'U', 5, NULL, &States[S_PEASANT_DIE+9]),
|
||||
S_NORMAL (GIBS, 'V', 1400, NULL, NULL),
|
||||
|
||||
#define S_PEASANT_XDIE (S_PEASANT_DIE+10)
|
||||
S_NORMAL (GIBS, 'M', 5, A_TossGib, &States[S_PEASANT_XDIE+1]),
|
||||
S_NORMAL (GIBS, 'N', 5, A_XScream, &States[S_PEASANT_XDIE+2]),
|
||||
S_NORMAL (GIBS, 'O', 5, A_NoBlocking, &States[S_PEASANT_XDIE+3]),
|
||||
S_NORMAL (GIBS, 'P', 4, A_TossGib, &States[S_PEASANT_XDIE+4]),
|
||||
S_NORMAL (GIBS, 'Q', 4, A_TossGib, &States[S_PEASANT_XDIE+5]),
|
||||
S_NORMAL (GIBS, 'R', 4, A_TossGib, &States[S_PEASANT_XDIE+6]),
|
||||
S_NORMAL (GIBS, 'S', 4, A_TossGib, &States[S_PEASANT_DIE+8])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APeasant, Strife, -1, 0)
|
||||
PROP_SpawnState (S_PEASANT_STND)
|
||||
PROP_SeeState (S_PEASANT_RUN)
|
||||
PROP_PainState (S_PEASANT_PAIN)
|
||||
PROP_MeleeState (S_PEASANT_MELEE)
|
||||
PROP_WoundState (S_PEASANT_WOUNDED)
|
||||
PROP_DeathState (S_PEASANT_DIE)
|
||||
PROP_XDeathState (S_PEASANT_XDIE)
|
||||
|
||||
PROP_SpawnHealth (31)
|
||||
PROP_PainChance (200)
|
||||
PROP_SpeedFixed (8)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (56)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_JUSTHIT|MF_FRIENDLY)
|
||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_ISMONSTER)
|
||||
PROP_Flags4 (MF4_NOSPLASHALERT)
|
||||
PROP_MinMissileChance (150)
|
||||
|
||||
PROP_SeeSound ("peasant/sight")
|
||||
PROP_AttackSound ("peasant/attack")
|
||||
PROP_PainSound ("peasant/pain")
|
||||
PROP_DeathSound ("peasant/death")
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 1 --------------------------------------------------------
|
||||
|
||||
class APeasant1 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant1, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant1, Strife, 3004, 0)
|
||||
PROP_StrifeType (6)
|
||||
PROP_StrifeTeaserType (6)
|
||||
PROP_StrifeTeaserType2 (6)
|
||||
PROP_SpeedFixed (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 2 --------------------------------------------------------
|
||||
|
||||
class APeasant2 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant2, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant2, Strife, 130, 0)
|
||||
PROP_StrifeType (7)
|
||||
PROP_StrifeTeaserType (7)
|
||||
PROP_StrifeTeaserType2 (7)
|
||||
PROP_SpeedFixed (5)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 3 --------------------------------------------------------
|
||||
|
||||
class APeasant3 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant3, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant3, Strife, 131, 0)
|
||||
PROP_StrifeType (8)
|
||||
PROP_StrifeTeaserType (8)
|
||||
PROP_StrifeTeaserType2 (8)
|
||||
PROP_SpeedFixed (5)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 4 --------------------------------------------------------
|
||||
|
||||
class APeasant4 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant4, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant4, Strife, 65, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,0)
|
||||
PROP_StrifeType (9)
|
||||
PROP_StrifeTeaserType (9)
|
||||
PROP_StrifeTeaserType2 (9)
|
||||
PROP_SpeedFixed (7)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 5 --------------------------------------------------------
|
||||
|
||||
class APeasant5 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant5, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant5, Strife, 132, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,0)
|
||||
PROP_StrifeType (10)
|
||||
PROP_StrifeTeaserType (10)
|
||||
PROP_StrifeTeaserType2 (10)
|
||||
PROP_SpeedFixed (7)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 6 --------------------------------------------------------
|
||||
|
||||
class APeasant6 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant6, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant6, Strife, 133, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,0)
|
||||
PROP_StrifeType (11)
|
||||
PROP_StrifeTeaserType (11)
|
||||
PROP_StrifeTeaserType2 (11)
|
||||
PROP_SpeedFixed (7)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 7 --------------------------------------------------------
|
||||
|
||||
class APeasant7 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant7, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant7, Strife, 66, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,2)
|
||||
PROP_StrifeType (12)
|
||||
PROP_StrifeTeaserType (12)
|
||||
PROP_StrifeTeaserType2 (12)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 8 --------------------------------------------------------
|
||||
|
||||
class APeasant8 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant8, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant8, Strife, 134, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,2)
|
||||
PROP_StrifeType (13)
|
||||
PROP_StrifeTeaserType (13)
|
||||
PROP_StrifeTeaserType2 (13)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 9 --------------------------------------------------------
|
||||
|
||||
class APeasant9 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant9, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant9, Strife, 135, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,2)
|
||||
PROP_StrifeType (14)
|
||||
PROP_StrifeTeaserType (14)
|
||||
PROP_StrifeTeaserType2 (14)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 10 --------------------------------------------------------
|
||||
|
||||
class APeasant10 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant10, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant10, Strife, 67, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,1)
|
||||
PROP_StrifeType (15)
|
||||
PROP_StrifeTeaserType (15)
|
||||
PROP_StrifeTeaserType2 (15)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 11 --------------------------------------------------------
|
||||
|
||||
class APeasant11 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant11, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant11, Strife, 136, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,1)
|
||||
PROP_StrifeType (16)
|
||||
PROP_StrifeTeaserType (16)
|
||||
PROP_StrifeTeaserType2 (16)
|
||||
PROP_SpeedFixed (7)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 12 --------------------------------------------------------
|
||||
|
||||
class APeasant12 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant12, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant12, Strife, 137, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,1)
|
||||
PROP_StrifeType (17)
|
||||
PROP_StrifeTeaserType (17)
|
||||
PROP_StrifeTeaserType2 (17)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 13 --------------------------------------------------------
|
||||
|
||||
class APeasant13 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant13, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant13, Strife, 172, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,3)
|
||||
PROP_StrifeType (18)
|
||||
PROP_StrifeTeaserType (18)
|
||||
PROP_StrifeTeaserType2 (18)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 14 --------------------------------------------------------
|
||||
|
||||
class APeasant14 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant14, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant14, Strife, 173, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,3)
|
||||
PROP_StrifeType (19)
|
||||
PROP_StrifeTeaserType (19)
|
||||
PROP_StrifeTeaserType2 (19)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 15 --------------------------------------------------------
|
||||
|
||||
class APeasant15 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant15, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant15, Strife, 174, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,3)
|
||||
PROP_StrifeType (20)
|
||||
PROP_StrifeTeaserType (20)
|
||||
PROP_StrifeTeaserType2 (20)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 16 --------------------------------------------------------
|
||||
|
||||
class APeasant16 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant16, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant16, Strife, 175, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,5)
|
||||
PROP_StrifeType (21)
|
||||
PROP_StrifeTeaserType (21)
|
||||
PROP_StrifeTeaserType2 (21)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 17 --------------------------------------------------------
|
||||
|
||||
class APeasant17 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant17, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant17, Strife, 176, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,5)
|
||||
PROP_StrifeType (22)
|
||||
PROP_StrifeTeaserType (22)
|
||||
PROP_StrifeTeaserType2 (22)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 18 --------------------------------------------------------
|
||||
|
||||
class APeasant18 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant18, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant18, Strife, 177, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,5)
|
||||
PROP_StrifeType (23)
|
||||
PROP_StrifeTeaserType (23)
|
||||
PROP_StrifeTeaserType2 (23)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 19 --------------------------------------------------------
|
||||
|
||||
class APeasant19 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant19, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant19, Strife, 178, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,4)
|
||||
PROP_StrifeType (24)
|
||||
PROP_StrifeTeaserType (24)
|
||||
PROP_StrifeTeaserType2 (24)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 20 --------------------------------------------------------
|
||||
|
||||
class APeasant20 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant20, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant20, Strife, 179, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,4)
|
||||
PROP_StrifeType (25)
|
||||
PROP_StrifeTeaserType (25)
|
||||
PROP_StrifeTeaserType2 (25)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 21 --------------------------------------------------------
|
||||
|
||||
class APeasant21 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant21, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant21, Strife, 180, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,4)
|
||||
PROP_StrifeType (26)
|
||||
PROP_StrifeTeaserType (26)
|
||||
PROP_StrifeTeaserType2 (26)
|
||||
END_DEFAULTS
|
||||
|
||||
// Peasant Variant 22 --------------------------------------------------------
|
||||
|
||||
class APeasant22 : public APeasant
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (APeasant22, APeasant)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (APeasant22, Strife, 181, 0)
|
||||
PROP_Translation (TRANSLATION_Standard,6)
|
||||
PROP_StrifeType (27)
|
||||
PROP_StrifeTeaserType (27)
|
||||
PROP_StrifeTeaserType2 (27)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_PeasantAttack
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_PeasantAttack (AActor *self)
|
||||
{
|
||||
if (self->target == NULL)
|
||||
return;
|
||||
|
||||
A_FaceTarget (self);
|
||||
|
||||
if (self->CheckMeleeRange ())
|
||||
{
|
||||
P_DamageMobj (self->target, self, self, (pr_peasatk() % 5) * 2 + 2, MOD_HIT);
|
||||
}
|
||||
}
|
|
@ -1,449 +0,0 @@
|
|||
/*
|
||||
* Quest Item Usage:
|
||||
*
|
||||
* 1 You got Beldin's ring
|
||||
* 2 You got the Chalice
|
||||
* 3 You got 300 gold, so it's time to visit Irale and the governor
|
||||
* 4 Accepted the governor's power coupling mission
|
||||
* 5 Accepted the governor's mission to kill Derwin
|
||||
* 6 You broke the Front's power coupling
|
||||
* 7 You took out the scanning team
|
||||
* 8 You got the broken power coupling
|
||||
* 9 You got the ear
|
||||
* 10 You got the prison pass
|
||||
* 11 You got the prison key
|
||||
* 12 You got the severed hand
|
||||
* 13 You've freed the prisoners!
|
||||
* 14 You've Blown Up the Crystal
|
||||
* 15 You got the guard uniform
|
||||
* 16 You've Blown Up the Gates (/Piston)
|
||||
* 17 You watched the Sigil slideshow on map10
|
||||
* 18 You got the Oracle pass
|
||||
* 19 You met Quincy and talked to him about the Bishop
|
||||
* 20
|
||||
* 21 You Killed the Bishop!
|
||||
* 22 The Oracle has told you to kill Macil
|
||||
* 23 You've Killed The Oracle!
|
||||
* 24 You Killed Macil!
|
||||
* 25 You've destroyed the Converter!
|
||||
* 26 You've Killed The Loremaster!
|
||||
* 27 You've Blown Up the Computer
|
||||
* 28 You got the catacomb key
|
||||
* 29 You destroyed the mind control device in the mines
|
||||
* 30
|
||||
* 31
|
||||
*/
|
||||
|
||||
#include "a_pickups.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
FState AQuestItem::States[] =
|
||||
{
|
||||
S_NORMAL (TOKN, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AQuestItem, Strife, -1, 0)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 1 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem1 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem1, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem1, Strife, -1, 0)
|
||||
PROP_StrifeType (312)
|
||||
PROP_StrifeTeaserType (293)
|
||||
PROP_StrifeTeaserType2 (310)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 2 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem2 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem2, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem2, Strife, -1, 0)
|
||||
PROP_StrifeType (313)
|
||||
PROP_StrifeTeaserType (294)
|
||||
PROP_StrifeTeaserType2 (311)
|
||||
// "Blown_Up_the_Crystal" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 3 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem3 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem3, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem3, Strife, -1, 0)
|
||||
PROP_StrifeType (314)
|
||||
PROP_StrifeTeaserType (295)
|
||||
PROP_StrifeTeaserType2 (312)
|
||||
// "Blown_Up_the_Gates" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 4 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem4 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem4, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem4, Strife, -1, 0)
|
||||
PROP_StrifeType (315)
|
||||
PROP_StrifeTeaserType (296)
|
||||
PROP_StrifeTeaserType2 (313)
|
||||
PROP_Tag ("quest4")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 5 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem5 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem5, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem5, Strife, -1, 0)
|
||||
PROP_StrifeType (316)
|
||||
PROP_StrifeTeaserType (297)
|
||||
PROP_StrifeTeaserType2 (314)
|
||||
PROP_Tag ("quest5")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 6 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem6 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem6, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem6, Strife, -1, 0)
|
||||
PROP_StrifeType (317)
|
||||
PROP_StrifeTeaserType (298)
|
||||
PROP_StrifeTeaserType2 (315)
|
||||
PROP_Tag ("quest6")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 7 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem7 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem7, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem7, Strife, -1, 0)
|
||||
PROP_StrifeType (318)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 8 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem8 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem8, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem8, Strife, -1, 0)
|
||||
PROP_StrifeType (319)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 9 -------------------------------------------------------------
|
||||
|
||||
class AQuestItem9 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem9, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem9, Strife, -1, 0)
|
||||
PROP_StrifeType (320)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 10 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem10 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem10, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem10, Strife, -1, 0)
|
||||
PROP_StrifeType (321)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 11 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem11 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem11, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem11, Strife, -1, 0)
|
||||
PROP_StrifeType (322)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 12 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem12 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem12, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem12, Strife, -1, 0)
|
||||
PROP_StrifeType (323)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 13 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem13 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem13, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem13, Strife, -1, 0)
|
||||
PROP_StrifeType (324)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 14 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem14 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem14, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem14, Strife, -1, 0)
|
||||
PROP_StrifeType (325)
|
||||
PROP_Tag ("You've_Blown_Up_the_Crystal")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 15 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem15 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem15, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem15, Strife, -1, 0)
|
||||
PROP_StrifeType (326)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 16 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem16 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem16, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem16, Strife, -1, 0)
|
||||
PROP_StrifeType (327)
|
||||
PROP_Tag ("You've_Blown_Up_the_Gates")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 17 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem17 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem17, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem17, Strife, -1, 0)
|
||||
PROP_StrifeType (328)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 18 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem18 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem18, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem18, Strife, -1, 0)
|
||||
PROP_StrifeType (329)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 19 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem19 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem19, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem19, Strife, -1, 0)
|
||||
PROP_StrifeType (330)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 20 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem20 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem20, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem20, Strife, -1, 0)
|
||||
PROP_StrifeType (331)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 21 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem21 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem21, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem21, Strife, -1, 0)
|
||||
PROP_StrifeType (332)
|
||||
PROP_Tag ("You_Killed_the_Bishop!")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 22 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem22 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem22, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem22, Strife, -1, 0)
|
||||
PROP_StrifeType (333)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 23 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem23 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem23, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem23, Strife, -1, 0)
|
||||
PROP_StrifeType (334)
|
||||
PROP_Tag ("You've_Killed_The_Oracle!")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 24 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem24 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem24, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem24, Strife, -1, 0)
|
||||
PROP_StrifeType (335)
|
||||
PROP_Tag ("You_Killed_Macil!")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 25 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem25 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem25, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem25, Strife, -1, 0)
|
||||
PROP_StrifeType (336)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 26 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem26 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem26, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem26, Strife, -1, 0)
|
||||
PROP_StrifeType (337)
|
||||
PROP_Tag ("You've_Killed_The_Loremaster!")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 27 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem27 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem27, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem27, Strife, -1, 0)
|
||||
PROP_StrifeType (338)
|
||||
PROP_Tag ("You've_Blown_Up_the_Computer")
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 28 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem28 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem28, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem28, Strife, -1, 0)
|
||||
PROP_StrifeType (339)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 29 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem29 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem29, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem29, Strife, -1, 0)
|
||||
PROP_StrifeType (340)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 30 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem30 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem30, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem30, Strife, -1, 0)
|
||||
PROP_StrifeType (341)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item 31 ------------------------------------------------------------
|
||||
|
||||
class AQuestItem31 : public AQuestItem
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AQuestItem31, AQuestItem)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AQuestItem31, Strife, -1, 0)
|
||||
PROP_StrifeType (342)
|
||||
END_DEFAULTS
|
||||
|
||||
// Quest Item Class Pointers ------------------------------------------------
|
||||
|
||||
const TypeInfo *QuestItemClasses[31] =
|
||||
{
|
||||
RUNTIME_CLASS(AQuestItem1),
|
||||
RUNTIME_CLASS(AQuestItem2),
|
||||
RUNTIME_CLASS(AQuestItem3),
|
||||
RUNTIME_CLASS(AQuestItem4),
|
||||
RUNTIME_CLASS(AQuestItem5),
|
||||
RUNTIME_CLASS(AQuestItem6),
|
||||
RUNTIME_CLASS(AQuestItem7),
|
||||
RUNTIME_CLASS(AQuestItem8),
|
||||
RUNTIME_CLASS(AQuestItem9),
|
||||
RUNTIME_CLASS(AQuestItem10),
|
||||
RUNTIME_CLASS(AQuestItem11),
|
||||
RUNTIME_CLASS(AQuestItem12),
|
||||
RUNTIME_CLASS(AQuestItem13),
|
||||
RUNTIME_CLASS(AQuestItem14),
|
||||
RUNTIME_CLASS(AQuestItem15),
|
||||
RUNTIME_CLASS(AQuestItem16),
|
||||
RUNTIME_CLASS(AQuestItem17),
|
||||
RUNTIME_CLASS(AQuestItem18),
|
||||
RUNTIME_CLASS(AQuestItem19),
|
||||
RUNTIME_CLASS(AQuestItem20),
|
||||
RUNTIME_CLASS(AQuestItem21),
|
||||
RUNTIME_CLASS(AQuestItem22),
|
||||
RUNTIME_CLASS(AQuestItem23),
|
||||
RUNTIME_CLASS(AQuestItem24),
|
||||
RUNTIME_CLASS(AQuestItem25),
|
||||
RUNTIME_CLASS(AQuestItem26),
|
||||
RUNTIME_CLASS(AQuestItem27),
|
||||
RUNTIME_CLASS(AQuestItem28),
|
||||
RUNTIME_CLASS(AQuestItem29),
|
||||
RUNTIME_CLASS(AQuestItem30),
|
||||
RUNTIME_CLASS(AQuestItem31)
|
||||
};
|
|
@ -1,53 +0,0 @@
|
|||
#include "actor.h"
|
||||
#include "p_enemy.h"
|
||||
|
||||
// Rat Buddy ----------------------------------------------------------------
|
||||
|
||||
class ARatBuddy : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ARatBuddy, AActor)
|
||||
};
|
||||
|
||||
FState ARatBuddy::States[] =
|
||||
{
|
||||
#define S_RAT_STAND 0
|
||||
S_NORMAL (RATT, 'A', 10, A_Look, &States[S_RAT_STAND]),
|
||||
|
||||
#define S_RAT_CHASE (S_RAT_STAND+1)
|
||||
S_NORMAL (RATT, 'A', 4, A_Chase, &States[S_RAT_CHASE+1]),
|
||||
S_NORMAL (RATT, 'A', 4, A_Chase, &States[S_RAT_CHASE+2]),
|
||||
S_NORMAL (RATT, 'B', 4, A_Chase, &States[S_RAT_CHASE+3]),
|
||||
S_NORMAL (RATT, 'B', 4, A_Chase, &States[S_RAT_CHASE]),
|
||||
|
||||
#define S_RAT_WANDER (S_RAT_CHASE+4)
|
||||
S_NORMAL (RATT, 'A', 8, A_Wander, &States[S_RAT_WANDER+1]),
|
||||
S_NORMAL (RATT, 'B', 4, A_Wander, &States[S_RAT_CHASE]),
|
||||
|
||||
#define S_RAT_DIE (S_RAT_WANDER+2)
|
||||
S_NORMAL (MEAT, 'Q', 700, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ARatBuddy, Strife, 85, 0)
|
||||
PROP_StrifeType (202)
|
||||
PROP_StrifeTeaserType (196)
|
||||
PROP_StrifeTeaserType2 (200)
|
||||
PROP_SpawnHealth (5)
|
||||
PROP_SpawnState (S_RAT_STAND)
|
||||
PROP_SeeState (S_RAT_CHASE)
|
||||
PROP_MeleeState (S_RAT_WANDER)
|
||||
PROP_DeathState (S_RAT_DIE)
|
||||
PROP_SpeedFixed (13)
|
||||
PROP_RadiusFixed (10)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Flags (MF_NOBLOOD)
|
||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ)
|
||||
PROP_Flags3 (MF3_ISMONSTER)
|
||||
PROP_Flags4 (MF4_INCOMBAT)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_MaxStepHeight (16)
|
||||
PROP_MaxDropOffHeight (32)
|
||||
PROP_Tag ("rat_buddy")
|
||||
PROP_SeeSound ("rat/sight")
|
||||
PROP_DeathSound ("rat/death")
|
||||
PROP_ActiveSound ("rat/active")
|
||||
END_DEFAULTS
|
|
@ -1,69 +0,0 @@
|
|||
#include "a_pickups.h"
|
||||
|
||||
// Metal Armor --------------------------------------------------------------
|
||||
|
||||
class AMetalArmor : public ABasicArmorPickup
|
||||
{
|
||||
DECLARE_ACTOR (AMetalArmor, ABasicArmorPickup)
|
||||
public:
|
||||
virtual const char *PickupMessage ()
|
||||
{
|
||||
return "You picked up the Metal Armor.";
|
||||
}
|
||||
};
|
||||
|
||||
FState AMetalArmor::States[] =
|
||||
{
|
||||
S_NORMAL (ARM3, 'A', -1, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMetalArmor, Strife, 2019, 69)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_MaxAmount (3)
|
||||
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_INVBAR)
|
||||
PROP_StrifeType (129)
|
||||
PROP_StrifeTeaserType (125)
|
||||
PROP_StrifeTeaserType2 (128)
|
||||
PROP_BasicArmorPickup_SaveAmount (200)
|
||||
PROP_BasicArmorPickup_SavePercent (FRACUNIT/2)
|
||||
PROP_Inventory_Icon ("I_ARM1")
|
||||
PROP_Tag ("Metal_Armor")
|
||||
END_DEFAULTS
|
||||
|
||||
// Leather Armor ------------------------------------------------------------
|
||||
|
||||
class ALeatherArmor : public ABasicArmorPickup
|
||||
{
|
||||
DECLARE_ACTOR (ALeatherArmor, ABasicArmorPickup)
|
||||
public:
|
||||
virtual const char *PickupMessage ()
|
||||
{
|
||||
return "You picked up the Leather Armor.";
|
||||
}
|
||||
};
|
||||
|
||||
FState ALeatherArmor::States[] =
|
||||
{
|
||||
S_NORMAL (ARM4, 'A', -1, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ALeatherArmor, Strife, 2018, 68)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_MaxAmount (5)
|
||||
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_INVBAR)
|
||||
PROP_StrifeType (130)
|
||||
PROP_StrifeTeaserType (126)
|
||||
PROP_StrifeTeaserType2 (129)
|
||||
PROP_BasicArmorPickup_SaveAmount (100)
|
||||
PROP_BasicArmorPickup_SavePercent (FRACUNIT/3)
|
||||
PROP_Inventory_Icon ("I_ARM2")
|
||||
PROP_Tag ("Leather_Armor")
|
||||
END_DEFAULTS
|
|
@ -55,11 +55,6 @@ public:
|
|||
AInventory *CreateCopy (AActor *other);
|
||||
};
|
||||
|
||||
class AQuestItem : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AQuestItem, AInventory)
|
||||
};
|
||||
|
||||
class AOracle : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AOracle, AActor)
|
||||
|
|
|
@ -10,136 +10,7 @@
|
|||
#include "s_sound.h"
|
||||
#include "a_strifeweaps.h"
|
||||
#include "d_event.h"
|
||||
|
||||
// Med patch -----------------------------------------------------------------
|
||||
|
||||
class AMedPatch : public AHealthPickup
|
||||
{
|
||||
DECLARE_ACTOR (AMedPatch, AHealthPickup);
|
||||
protected:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AMedPatch::States[] =
|
||||
{
|
||||
S_NORMAL (STMP, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMedPatch, Strife, 2011, 0)
|
||||
PROP_SpawnHealth (10)
|
||||
PROP_SpawnState (0)
|
||||
PROP_StrifeType (125)
|
||||
PROP_StrifeTeaserType (121)
|
||||
PROP_StrifeTeaserType2 (124)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_MaxAmount (20)
|
||||
PROP_Tag ("Med_patch")
|
||||
PROP_Inventory_Icon ("I_STMP")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AMedPatch::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Med patch.";
|
||||
}
|
||||
|
||||
// Medical Kit ---------------------------------------------------------------
|
||||
|
||||
class AMedicalKit : public AHealthPickup
|
||||
{
|
||||
DECLARE_ACTOR (AMedicalKit, AHealthPickup);
|
||||
protected:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AMedicalKit::States[] =
|
||||
{
|
||||
S_NORMAL (MDKT, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMedicalKit, Strife, 2012, 0)
|
||||
PROP_SpawnHealth (25)
|
||||
PROP_SpawnState (0)
|
||||
PROP_StrifeType (126)
|
||||
PROP_StrifeTeaserType (122)
|
||||
PROP_StrifeTeaserType2 (125)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_MaxAmount (15)
|
||||
PROP_Tag ("Medical_kit")
|
||||
PROP_Inventory_Icon ("I_MDKT")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AMedicalKit::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Medical kit.";
|
||||
}
|
||||
|
||||
// Surgery Kit --------------------------------------------------------------
|
||||
|
||||
class ASurgeryKit : public AHealthPickup
|
||||
{
|
||||
DECLARE_ACTOR (ASurgeryKit, AHealthPickup);
|
||||
protected:
|
||||
const char *PickupMessage ();
|
||||
bool Use (bool pickup);
|
||||
};
|
||||
|
||||
FState ASurgeryKit::States[] =
|
||||
{
|
||||
S_NORMAL (FULL, 'A', 35, NULL, &States[1]),
|
||||
S_NORMAL (FULL, 'B', 35, NULL, &States[0])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASurgeryKit, Strife, 83, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_StrifeType (127)
|
||||
PROP_StrifeTeaserType (123)
|
||||
PROP_StrifeTeaserType2 (126)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_MaxAmount (5)
|
||||
PROP_Tag ("Surgery_Kit") // "full_health" in the Teaser
|
||||
PROP_Inventory_Icon ("I_FULL")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ASurgeryKit::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Surgery Kit.";
|
||||
}
|
||||
|
||||
bool ASurgeryKit::Use (bool pickup)
|
||||
{
|
||||
return P_GiveBody (Owner, -100);
|
||||
}
|
||||
|
||||
// StrifeMap ----------------------------------------------------------------
|
||||
|
||||
class AStrifeMap : public AMapRevealer
|
||||
{
|
||||
DECLARE_ACTOR (AStrifeMap, AMapRevealer)
|
||||
protected:
|
||||
virtual const char *PickupMessage ()
|
||||
{
|
||||
return "You picked up the map";
|
||||
}
|
||||
};
|
||||
|
||||
FState AStrifeMap::States[] =
|
||||
{
|
||||
S_BRIGHT (SMAP, 'A', 6, NULL , &States[1]),
|
||||
S_BRIGHT (SMAP, 'B', 6, NULL , &States[0]),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AStrifeMap, Strife, 2026, 137)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_SpawnState (0)
|
||||
PROP_StrifeType (164)
|
||||
PROP_StrifeTeaserType (160)
|
||||
PROP_StrifeTeaserType2 (163)
|
||||
PROP_Inventory_PickupSound ("misc/p_pkup")
|
||||
END_DEFAULTS
|
||||
#include "a_keys.h"
|
||||
|
||||
// Degnin Ore ---------------------------------------------------------------
|
||||
|
||||
|
@ -235,357 +106,6 @@ bool ADegninOre::Use (bool pickup)
|
|||
}
|
||||
}
|
||||
|
||||
// Beldin's Ring ------------------------------------------------------------
|
||||
|
||||
class ABeldinsRing : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (ABeldinsRing, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ABeldinsRing::States[] =
|
||||
{
|
||||
S_NORMAL (RING, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABeldinsRing, Strife, -1, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_StrifeType (173)
|
||||
PROP_StrifeTeaserType (165)
|
||||
PROP_StrifeTeaserType2 (169)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("ring")
|
||||
PROP_Inventory_Icon ("I_RING")
|
||||
END_DEFAULTS
|
||||
|
||||
bool ABeldinsRing::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[0]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *ABeldinsRing::PickupMessage ()
|
||||
{
|
||||
return "You picked up the ring.";
|
||||
}
|
||||
|
||||
// Offering Chalice ---------------------------------------------------------
|
||||
|
||||
class AOfferingChalice : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AOfferingChalice, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AOfferingChalice::States[] =
|
||||
{
|
||||
S_BRIGHT (RELC, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AOfferingChalice, Strife, 205, 0)
|
||||
PROP_StrifeType (174)
|
||||
PROP_StrifeTeaserType (166)
|
||||
PROP_StrifeTeaserType2 (170)
|
||||
PROP_SpawnState (0)
|
||||
PROP_RadiusFixed (10)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Flags (MF_SPECIAL|MF_DROPPED)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("Offering_Chalice")
|
||||
PROP_Inventory_Icon ("I_RELC")
|
||||
END_DEFAULTS
|
||||
|
||||
bool AOfferingChalice::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[1]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *AOfferingChalice::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Offering Chalice.";
|
||||
}
|
||||
|
||||
// Ear ----------------------------------------------------------------------
|
||||
|
||||
class AEar : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AEar, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AEar::States[] =
|
||||
{
|
||||
S_NORMAL (EARS, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEar, Strife, -1, 0)
|
||||
PROP_StrifeType (175)
|
||||
PROP_StrifeTeaserType (167)
|
||||
PROP_StrifeTeaserType2 (171)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("ear")
|
||||
PROP_Inventory_Icon ("I_EARS")
|
||||
END_DEFAULTS
|
||||
|
||||
bool AEar::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[8]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *AEar::PickupMessage ()
|
||||
{
|
||||
return "You picked up the ear.";
|
||||
}
|
||||
|
||||
// Broken Power Coupling ----------------------------------------------------
|
||||
|
||||
class ABrokenPowerCoupling : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (ABrokenPowerCoupling, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ABrokenPowerCoupling::States[] =
|
||||
{
|
||||
S_NORMAL (COUP, 'C', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABrokenPowerCoupling, Strife, 226, 0)
|
||||
PROP_StrifeType (289)
|
||||
PROP_SpawnHealth (40)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_RadiusFixed (16)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Inventory_MaxAmount (1)
|
||||
PROP_Flags (MF_SPECIAL|MF_DROPPED)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Tag ("BROKEN_POWER_COUPLING")
|
||||
PROP_Inventory_Icon ("I_COUP")
|
||||
END_DEFAULTS
|
||||
|
||||
bool ABrokenPowerCoupling::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[7]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *ABrokenPowerCoupling::PickupMessage ()
|
||||
{
|
||||
return "You picked up the broken power coupling.";
|
||||
}
|
||||
|
||||
// Shadow Armor -------------------------------------------------------------
|
||||
|
||||
void A_ClearShadow (AActor *);
|
||||
void A_BeShadowyFoe (AActor *);
|
||||
void A_SetShadow (AActor *);
|
||||
|
||||
class AShadowArmor : public APowerupGiver
|
||||
{
|
||||
DECLARE_ACTOR (AShadowArmor, APowerupGiver)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AShadowArmor::States[] =
|
||||
{
|
||||
S_BRIGHT (SHD1, 'A', 17, A_ClearShadow, &States[1]),
|
||||
S_BRIGHT (SHD1, 'A', 17, A_BeShadowyFoe, &States[2]),
|
||||
S_BRIGHT (SHD1, 'A', 17, A_SetShadow, &States[3]),
|
||||
S_BRIGHT (SHD1, 'A', 17, A_BeShadowyFoe, &States[0])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AShadowArmor, Strife, 2024, 135)
|
||||
PROP_StrifeType (160)
|
||||
PROP_StrifeTeaserType (156)
|
||||
PROP_StrifeTeaserType2 (159)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_MaxAmount (2)
|
||||
PROP_Inventory_FlagsClear (IF_FANCYPICKUPSOUND)
|
||||
PROP_PowerupGiver_Powerup ("PowerShadow")
|
||||
PROP_Tag ("Shadow_armor")
|
||||
PROP_Inventory_Icon ("I_SHD1")
|
||||
PROP_Inventory_PickupSound ("misc/i_pkup")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AShadowArmor::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Shadow armor.";
|
||||
}
|
||||
|
||||
// Environmental suit -------------------------------------------------------
|
||||
|
||||
class AEnvironmentalSuit : public APowerupGiver
|
||||
{
|
||||
DECLARE_ACTOR (AEnvironmentalSuit, APowerupGiver)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AEnvironmentalSuit::States[] =
|
||||
{
|
||||
S_BRIGHT (MASK, 'A', -1, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEnvironmentalSuit, Strife, 2025, 136)
|
||||
PROP_StrifeType (161)
|
||||
PROP_StrifeTeaserType (157)
|
||||
PROP_StrifeTeaserType2 (160)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_MaxAmount (5)
|
||||
PROP_Inventory_FlagsClear (IF_FANCYPICKUPSOUND)
|
||||
PROP_PowerupGiver_Powerup ("PowerMask")
|
||||
PROP_Tag ("Environmental_Suit")
|
||||
PROP_Inventory_Icon ("I_MASK")
|
||||
PROP_Inventory_PickupSound ("misc/i_pkup")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AEnvironmentalSuit::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Environmental Suit.";
|
||||
}
|
||||
|
||||
// Guard Uniform ------------------------------------------------------------
|
||||
|
||||
class AGuardUniform : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AGuardUniform, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AGuardUniform::States[] =
|
||||
{
|
||||
S_NORMAL (UNIF, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AGuardUniform, Strife, 90, 0)
|
||||
PROP_StrifeType (162)
|
||||
PROP_StrifeTeaserType (158)
|
||||
PROP_StrifeTeaserType2 (161)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("Guard_Uniform")
|
||||
PROP_Inventory_Icon ("I_UNIF")
|
||||
END_DEFAULTS
|
||||
|
||||
bool AGuardUniform::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[14]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *AGuardUniform::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Guard Uniform.";
|
||||
}
|
||||
|
||||
// Officer's Uniform --------------------------------------------------------
|
||||
|
||||
class AOfficersUniform : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AOfficersUniform, AInventory)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AOfficersUniform::States[] =
|
||||
{
|
||||
S_NORMAL (OFIC, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AOfficersUniform, Strife, 52, 0)
|
||||
PROP_StrifeType (163)
|
||||
PROP_StrifeTeaserType (159)
|
||||
PROP_StrifeTeaserType2 (162)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("Officer's_Uniform")
|
||||
PROP_Inventory_Icon ("I_OFIC")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AOfficersUniform::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Officer's Uniform.";
|
||||
}
|
||||
|
||||
// InterrogatorReport -------------------------------------------------------
|
||||
// SCRIPT32 in strife0.wad has an Acolyte that drops this, but I couldn't
|
||||
// find that Acolyte in the map. It seems to be totally unused in the
|
||||
// final game.
|
||||
|
||||
class AInterrogatorReport : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AInterrogatorReport, AInventory)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AInterrogatorReport::States[] =
|
||||
{
|
||||
S_NORMAL (TOKN, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AInterrogatorReport, Strife, -1, 0)
|
||||
PROP_StrifeType (308)
|
||||
PROP_StrifeTeaserType (289)
|
||||
PROP_StrifeTeaserType2 (306)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Tag ("report")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AInterrogatorReport::PickupMessage ()
|
||||
{
|
||||
return "You picked up the report.";
|
||||
}
|
||||
|
||||
// Gun Training -------------------------------------------------------------
|
||||
|
||||
class AGunTraining : public AInventory
|
||||
|
@ -653,71 +173,6 @@ bool AHealthTraining::TryPickup (AActor *toucher)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Info ---------------------------------------------------------------------
|
||||
|
||||
class AInfo : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AInfo, AInventory)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AInfo::States[] =
|
||||
{
|
||||
S_NORMAL (TOKN, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AInfo, Strife, -1, 0)
|
||||
PROP_StrifeType (300)
|
||||
PROP_StrifeTeaserType (282)
|
||||
PROP_StrifeTeaserType2 (299)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_FlagsSet (IF_INVBAR)
|
||||
PROP_Tag ("info")
|
||||
PROP_Inventory_Icon ("I_TOKN")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AInfo::PickupMessage ()
|
||||
{
|
||||
return "You picked up the info.";
|
||||
}
|
||||
|
||||
// Targeter -----------------------------------------------------------------
|
||||
|
||||
class ATargeter : public APowerupGiver
|
||||
{
|
||||
DECLARE_ACTOR (ATargeter, APowerupGiver)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ATargeter::States[] =
|
||||
{
|
||||
S_NORMAL (TARG, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ATargeter, Strife, 207, 0)
|
||||
PROP_StrifeType (167)
|
||||
PROP_StrifeTeaserType (169)
|
||||
PROP_StrifeTeaserType2 (173)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_Inventory_MaxAmount (5)
|
||||
PROP_Inventory_FlagsClear (IF_FANCYPICKUPSOUND)
|
||||
PROP_Tag ("Targeter")
|
||||
PROP_Inventory_Icon ("I_TARG")
|
||||
PROP_PowerupGiver_Powerup ("PowerTargeter")
|
||||
PROP_Inventory_PickupSound ("misc/i_pkup")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ATargeter::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Targeter.";
|
||||
}
|
||||
|
||||
// Scanner ------------------------------------------------------------------
|
||||
|
||||
class AScanner : public APowerupGiver
|
||||
|
@ -765,6 +220,62 @@ bool AScanner::Use (bool pickup)
|
|||
return Super::Use (pickup);
|
||||
}
|
||||
|
||||
// Prison Pass --------------------------------------------------------------
|
||||
|
||||
class APrisonPass : public AKey
|
||||
{
|
||||
DECLARE_ACTOR (APrisonPass, AKey)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
bool SpecialDropAction (AActor *dropper);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APrisonPass::States[] =
|
||||
{
|
||||
S_NORMAL (TOKN, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APrisonPass, Strife, -1, 0)
|
||||
PROP_StrifeType (304)
|
||||
PROP_StrifeTeaserType (286)
|
||||
PROP_StrifeTeaserType2 (303)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_TOKN")
|
||||
PROP_Tag ("Prison_pass")
|
||||
END_DEFAULTS
|
||||
|
||||
bool APrisonPass::TryPickup (AActor *toucher)
|
||||
{
|
||||
Super::TryPickup (toucher);
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, toucher, 223, 2*FRACUNIT, 0, 0, 0);
|
||||
toucher->GiveInventoryType (QuestItemClasses[9]);
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *APrisonPass::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Prison pass.";
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// APrisonPass :: SpecialDropAction
|
||||
//
|
||||
// Trying to make a monster that drops a prison pass turns it into an
|
||||
// OpenDoor223 item instead. That means the only way to get it in Strife
|
||||
// is through dialog, which is why it doesn't have its own sprite.
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
bool APrisonPass::SpecialDropAction (AActor *dropper)
|
||||
{
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, dropper, 223, 2*FRACUNIT, 0, 0, 0);
|
||||
Destroy ();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Dummy items. They are just used by Strife to perform ---------------------
|
||||
// actions and cannot be held. ----------------------------------------------
|
||||
|
|
|
@ -1,895 +0,0 @@
|
|||
#include "a_keys.h"
|
||||
#include "a_strifeglobal.h"
|
||||
#include "p_local.h"
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AStrifeKey, Strife, -1, 0)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
END_DEFAULTS
|
||||
|
||||
// Base Key -----------------------------------------------------------------
|
||||
|
||||
class ABaseKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ABaseKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ABaseKey::States[] =
|
||||
{
|
||||
S_NORMAL (FUSL, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABaseKey, Strife, 230, 0)
|
||||
PROP_StrifeType (133)
|
||||
PROP_StrifeTeaserType (129)
|
||||
PROP_StrifeTeaserType2 (132)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_FUSL")
|
||||
PROP_Tag ("Base_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ABaseKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Base Key.";
|
||||
}
|
||||
|
||||
// Govs Key -----------------------------------------------------------------
|
||||
|
||||
class AGovsKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AGovsKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AGovsKey::States[] =
|
||||
{
|
||||
S_NORMAL (REBL, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AGovsKey, Strife, -1, 0)
|
||||
PROP_StrifeType (134)
|
||||
PROP_StrifeTeaserType (130)
|
||||
PROP_StrifeTeaserType2 (133)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_REBL")
|
||||
PROP_Tag ("Govs_Key") // "Rebel_Key" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AGovsKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Govs Key.";
|
||||
}
|
||||
|
||||
// Passcard -----------------------------------------------------------------
|
||||
|
||||
class APasscard : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (APasscard, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APasscard::States[] =
|
||||
{
|
||||
S_NORMAL (TPAS, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APasscard, Strife, 185, 0)
|
||||
PROP_StrifeType (135)
|
||||
PROP_StrifeTeaserType (131)
|
||||
PROP_StrifeTeaserType2 (134)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_TPAS")
|
||||
PROP_Tag ("Passcard")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *APasscard::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Passcard.";
|
||||
}
|
||||
|
||||
// ID Badge -----------------------------------------------------------------
|
||||
|
||||
class AIDBadge : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AIDBadge, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AIDBadge::States[] =
|
||||
{
|
||||
S_NORMAL (CRD1, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AIDBadge, Strife, 184, 0)
|
||||
PROP_StrifeType (136)
|
||||
PROP_StrifeTeaserType (132)
|
||||
PROP_StrifeTeaserType2 (135)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_CRD1")
|
||||
PROP_Tag ("ID_Badge")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AIDBadge::PickupMessage ()
|
||||
{
|
||||
return "You picked up the ID Badge.";
|
||||
}
|
||||
|
||||
// Prison Key ---------------------------------------------------------------
|
||||
|
||||
class APrisonKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (APrisonKey, AStrifeKey)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APrisonKey::States[] =
|
||||
{
|
||||
S_NORMAL (PRIS, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APrisonKey, Strife, -1, 0)
|
||||
PROP_StrifeType (137)
|
||||
PROP_StrifeTeaserType (133)
|
||||
PROP_StrifeTeaserType2 (136)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_PRIS")
|
||||
PROP_Tag ("Prison_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
bool APrisonKey::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[10]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *APrisonKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Prison Key.";
|
||||
}
|
||||
|
||||
// Severed Hand -------------------------------------------------------------
|
||||
|
||||
class ASeveredHand : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ASeveredHand, AStrifeKey)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ASeveredHand::States[] =
|
||||
{
|
||||
S_NORMAL (HAND, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASeveredHand, Strife, 91, 0)
|
||||
PROP_StrifeType (138)
|
||||
PROP_StrifeTeaserType (134)
|
||||
PROP_StrifeTeaserType2 (137)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_HAND")
|
||||
PROP_Tag ("Severed_Hand")
|
||||
END_DEFAULTS
|
||||
|
||||
bool ASeveredHand::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[11]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *ASeveredHand::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Severed Hand.";
|
||||
}
|
||||
|
||||
// Power1 Key ---------------------------------------------------------------
|
||||
|
||||
class APower1Key : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (APower1Key, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APower1Key::States[] =
|
||||
{
|
||||
S_NORMAL (PWR1, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APower1Key, Strife, -1, 0)
|
||||
PROP_StrifeType (139)
|
||||
PROP_StrifeTeaserType (135)
|
||||
PROP_StrifeTeaserType2 (138)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_PWR1")
|
||||
PROP_Tag ("Power1_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *APower1Key::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Power1 Key.";
|
||||
}
|
||||
|
||||
// Power2 Key ---------------------------------------------------------------
|
||||
|
||||
class APower2Key : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (APower2Key, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APower2Key::States[] =
|
||||
{
|
||||
S_NORMAL (PWR2, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APower2Key, Strife, -1, 0)
|
||||
PROP_StrifeType (140)
|
||||
PROP_StrifeTeaserType (136)
|
||||
PROP_StrifeTeaserType2 (139)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_PWR2")
|
||||
PROP_Tag ("Power2_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *APower2Key::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Power2 Key.";
|
||||
}
|
||||
|
||||
// Power3 Key ---------------------------------------------------------------
|
||||
|
||||
class APower3Key : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (APower3Key, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APower3Key::States[] =
|
||||
{
|
||||
S_NORMAL (PWR3, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APower3Key, Strife, -1, 0)
|
||||
PROP_StrifeType (141)
|
||||
PROP_StrifeTeaserType (137)
|
||||
PROP_StrifeTeaserType2 (140)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_PWR3")
|
||||
PROP_Tag ("Power3_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *APower3Key::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Power3 Key.";
|
||||
}
|
||||
|
||||
// Gold Key -----------------------------------------------------------------
|
||||
|
||||
class AGoldKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AGoldKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AGoldKey::States[] =
|
||||
{
|
||||
S_NORMAL (KY1G, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AGoldKey, Strife, 40, 0)
|
||||
PROP_StrifeType (142)
|
||||
PROP_StrifeTeaserType (138)
|
||||
PROP_StrifeTeaserType2 (141)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_KY1G")
|
||||
PROP_Tag ("Gold_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AGoldKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Gold Key.";
|
||||
}
|
||||
|
||||
// ID Card ------------------------------------------------------------------
|
||||
|
||||
class AIDCard : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AIDCard, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AIDCard::States[] =
|
||||
{
|
||||
S_NORMAL (CRD2, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AIDCard, Strife, 13, 0)
|
||||
PROP_StrifeType (143)
|
||||
PROP_StrifeTeaserType (139)
|
||||
PROP_StrifeTeaserType2 (142)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_CRD2")
|
||||
PROP_Tag ("ID_Card")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AIDCard::PickupMessage ()
|
||||
{
|
||||
return "You picked up the ID Card.";
|
||||
}
|
||||
|
||||
// Silver Key ---------------------------------------------------------------
|
||||
|
||||
class ASilverKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ASilverKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ASilverKey::States[] =
|
||||
{
|
||||
S_NORMAL (KY2S, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASilverKey, Strife, 38, 0)
|
||||
PROP_StrifeType (144)
|
||||
PROP_StrifeTeaserType (140)
|
||||
PROP_StrifeTeaserType2 (143)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_KY2S")
|
||||
PROP_Tag ("Silver_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ASilverKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Silver Key.";
|
||||
}
|
||||
|
||||
// Oracle Key ---------------------------------------------------------------
|
||||
|
||||
class AOracleKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AOracleKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AOracleKey::States[] =
|
||||
{
|
||||
S_NORMAL (ORAC, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AOracleKey, Strife, 61, 0)
|
||||
PROP_StrifeType (145)
|
||||
PROP_StrifeTeaserType (141)
|
||||
PROP_StrifeTeaserType2 (144)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_ORAC")
|
||||
PROP_Tag ("Oracle_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AOracleKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Oracle Key.";
|
||||
}
|
||||
|
||||
// Military ID --------------------------------------------------------------
|
||||
|
||||
class AMilitaryID : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AMilitaryID, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AMilitaryID::States[] =
|
||||
{
|
||||
S_NORMAL (GYID, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMilitaryID, Strife, -1, 0)
|
||||
PROP_StrifeType (146)
|
||||
PROP_StrifeTeaserType (142)
|
||||
PROP_StrifeTeaserType2 (145)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_GYID")
|
||||
PROP_Tag ("Military ID")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AMilitaryID::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Military ID.";
|
||||
}
|
||||
|
||||
// Order Key ----------------------------------------------------------------
|
||||
|
||||
class AOrderKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AOrderKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AOrderKey::States[] =
|
||||
{
|
||||
S_NORMAL (FUBR, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AOrderKey, Strife, 86, 0)
|
||||
PROP_StrifeType (147)
|
||||
PROP_StrifeTeaserType (143)
|
||||
PROP_StrifeTeaserType2 (146)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_FUBR")
|
||||
PROP_Tag ("Order_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AOrderKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Order Key.";
|
||||
}
|
||||
|
||||
// Warehouse Key ------------------------------------------------------------
|
||||
|
||||
class AWarehouseKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AWarehouseKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AWarehouseKey::States[] =
|
||||
{
|
||||
S_NORMAL (WARE, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AWarehouseKey, Strife, 166, 0)
|
||||
PROP_StrifeType (148)
|
||||
PROP_StrifeTeaserType (144)
|
||||
PROP_StrifeTeaserType2 (147)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_WARE")
|
||||
PROP_Tag ("Warehouse_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AWarehouseKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Warehouse Key.";
|
||||
}
|
||||
|
||||
// Brass Key ----------------------------------------------------------------
|
||||
|
||||
class ABrassKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ABrassKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ABrassKey::States[] =
|
||||
{
|
||||
S_NORMAL (KY3B, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABrassKey, Strife, 39, 0)
|
||||
PROP_StrifeType (149)
|
||||
PROP_StrifeTeaserType (145)
|
||||
PROP_StrifeTeaserType2 (148)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_KY3B")
|
||||
PROP_Tag ("Brass_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ABrassKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Brass Key.";
|
||||
}
|
||||
|
||||
// Red Crystal Key ----------------------------------------------------------
|
||||
|
||||
class ARedCrystalKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ARedCrystalKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ARedCrystalKey::States[] =
|
||||
{
|
||||
S_BRIGHT (RCRY, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ARedCrystalKey, Strife, 192, 0)
|
||||
PROP_StrifeType (150)
|
||||
PROP_StrifeTeaserType (146)
|
||||
PROP_StrifeTeaserType2 (149)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_RCRY")
|
||||
PROP_Tag ("Red_Crystal_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ARedCrystalKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Red Crystal Key.";
|
||||
}
|
||||
|
||||
// Blue Crystal Key ---------------------------------------------------------
|
||||
|
||||
class ABlueCrystalKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ABlueCrystalKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ABlueCrystalKey::States[] =
|
||||
{
|
||||
S_BRIGHT (BCRY, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABlueCrystalKey, Strife, 193, 0)
|
||||
PROP_StrifeType (151)
|
||||
PROP_StrifeTeaserType (147)
|
||||
PROP_StrifeTeaserType2 (150)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_BCRY")
|
||||
PROP_Tag ("Blue_Crystal_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ABlueCrystalKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Blue Crystal Key.";
|
||||
}
|
||||
|
||||
// Chapel Key ---------------------------------------------------------------
|
||||
|
||||
class AChapelKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AChapelKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AChapelKey::States[] =
|
||||
{
|
||||
S_NORMAL (CHAP, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AChapelKey, Strife, 195, 0)
|
||||
PROP_StrifeType (152)
|
||||
PROP_StrifeTeaserType (148)
|
||||
PROP_StrifeTeaserType2 (151)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_CHAP")
|
||||
PROP_Tag ("Chapel_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AChapelKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Chapel Key.";
|
||||
}
|
||||
|
||||
// Catacomb Key -------------------------------------------------------------
|
||||
|
||||
class ACatacombKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ACatacombKey, AStrifeKey)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ACatacombKey::States[] =
|
||||
{
|
||||
S_NORMAL (TUNL, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACatacombKey, Strife, -1, 0)
|
||||
PROP_StrifeType (153)
|
||||
PROP_StrifeTeaserType (149)
|
||||
PROP_StrifeTeaserType2 (152)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_TUNL")
|
||||
PROP_Tag ("Catacomb_Key") // "Tunnel_Key" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
bool ACatacombKey::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[27]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *ACatacombKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Catacomb Key.";
|
||||
}
|
||||
|
||||
// Security Key -------------------------------------------------------------
|
||||
|
||||
class ASecurityKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ASecurityKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ASecurityKey::States[] =
|
||||
{
|
||||
S_NORMAL (SECK, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASecurityKey, Strife, -1, 0)
|
||||
PROP_StrifeType (154)
|
||||
PROP_StrifeTeaserType (150)
|
||||
PROP_StrifeTeaserType2 (153)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_SECK")
|
||||
PROP_Tag ("Security_Key")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ASecurityKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Security Key.";
|
||||
}
|
||||
|
||||
// Core Key -----------------------------------------------------------------
|
||||
|
||||
class ACoreKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ACoreKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ACoreKey::States[] =
|
||||
{
|
||||
S_NORMAL (GOID, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACoreKey, Strife, 236, 0)
|
||||
PROP_StrifeType (155)
|
||||
PROP_StrifeTeaserType (151)
|
||||
PROP_StrifeTeaserType2 (154)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_GOID")
|
||||
PROP_Tag ("Core_Key") // "New_Key1" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ACoreKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Core Key.";
|
||||
}
|
||||
|
||||
// Mauler Key ---------------------------------------------------------------
|
||||
|
||||
class AMaulerKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AMaulerKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AMaulerKey::States[] =
|
||||
{
|
||||
S_NORMAL (BLTK, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMaulerKey, Strife, 233, 0)
|
||||
PROP_StrifeType (156)
|
||||
PROP_StrifeTeaserType (152)
|
||||
PROP_StrifeTeaserType2 (155)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_BLTK")
|
||||
PROP_Tag ("Mauler_Key") // "New_Key2" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AMaulerKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Mauler Key.";
|
||||
}
|
||||
|
||||
// Factory Key --------------------------------------------------------------
|
||||
|
||||
class AFactoryKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AFactoryKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AFactoryKey::States[] =
|
||||
{
|
||||
S_NORMAL (PROC, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AFactoryKey, Strife, 234, 0)
|
||||
PROP_StrifeType (157)
|
||||
PROP_StrifeTeaserType (153)
|
||||
PROP_StrifeTeaserType2 (156)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_PROC")
|
||||
PROP_Tag ("Factory_Key") // "New_Key3" in the Teaser
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AFactoryKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Factory Key.";
|
||||
}
|
||||
|
||||
// Mine Key -----------------------------------------------------------------
|
||||
|
||||
class AMineKey : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (AMineKey, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AMineKey::States[] =
|
||||
{
|
||||
S_NORMAL (MINE, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMineKey, Strife, 235, 0)
|
||||
PROP_StrifeType (158)
|
||||
PROP_StrifeTeaserType (154)
|
||||
PROP_StrifeTeaserType2 (157)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_MINE") // "New_Key4" in the Teaser
|
||||
PROP_Tag ("MINE_KEY")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *AMineKey::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Mine Key.";
|
||||
}
|
||||
|
||||
// New Key5 -----------------------------------------------------------------
|
||||
|
||||
class ANewKey5 : public AStrifeKey
|
||||
{
|
||||
DECLARE_ACTOR (ANewKey5, AStrifeKey)
|
||||
public:
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState ANewKey5::States[] =
|
||||
{
|
||||
S_NORMAL (BLTK, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ANewKey5, Strife, -1, 0)
|
||||
PROP_StrifeType (159)
|
||||
PROP_StrifeTeaserType (155)
|
||||
PROP_StrifeTeaserType2 (158)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_BLTK")
|
||||
PROP_Tag ("New_Key5")
|
||||
END_DEFAULTS
|
||||
|
||||
const char *ANewKey5::PickupMessage ()
|
||||
{
|
||||
return "You picked up the New Key5.";
|
||||
}
|
||||
|
||||
// Prison Pass --------------------------------------------------------------
|
||||
|
||||
class APrisonPass : public AKey
|
||||
{
|
||||
DECLARE_ACTOR (APrisonPass, AKey)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
bool SpecialDropAction (AActor *dropper);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState APrisonPass::States[] =
|
||||
{
|
||||
S_NORMAL (TOKN, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (APrisonPass, Strife, -1, 0)
|
||||
PROP_StrifeType (304)
|
||||
PROP_StrifeTeaserType (286)
|
||||
PROP_StrifeTeaserType2 (303)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_Icon ("I_TOKN")
|
||||
PROP_Tag ("Prison_pass")
|
||||
END_DEFAULTS
|
||||
|
||||
bool APrisonPass::TryPickup (AActor *toucher)
|
||||
{
|
||||
Super::TryPickup (toucher);
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, toucher, 223, 2*FRACUNIT, 0, 0, 0);
|
||||
toucher->GiveInventoryType (QuestItemClasses[9]);
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *APrisonPass::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Prison pass.";
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// APrisonPass :: SpecialDropAction
|
||||
//
|
||||
// Trying to make a monster that drops a prison pass turns it into an
|
||||
// OpenDoor223 item instead. That means the only way to get it in Strife
|
||||
// is through dialog, which is why it doesn't have its own sprite.
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
bool APrisonPass::SpecialDropAction (AActor *dropper)
|
||||
{
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, dropper, 223, 2*FRACUNIT, 0, 0, 0);
|
||||
Destroy ();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Oracle Pass --------------------------------------------------------------
|
||||
|
||||
class AOraclePass : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (AOraclePass, AInventory)
|
||||
public:
|
||||
bool TryPickup (AActor *toucher);
|
||||
const char *PickupMessage ();
|
||||
};
|
||||
|
||||
FState AOraclePass::States[] =
|
||||
{
|
||||
S_NORMAL (OTOK, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AOraclePass, Strife, -1, 0)
|
||||
PROP_StrifeType (311)
|
||||
PROP_StrifeTeaserType (292)
|
||||
PROP_StrifeTeaserType2 (309)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Inventory_FlagsSet(IF_INVBAR)
|
||||
PROP_Inventory_Icon ("I_OTOK")
|
||||
PROP_Tag ("Oracle_Pass")
|
||||
END_DEFAULTS
|
||||
|
||||
bool AOraclePass::TryPickup (AActor *toucher)
|
||||
{
|
||||
if (Super::TryPickup (toucher))
|
||||
{
|
||||
toucher->GiveInventoryType (QuestItemClasses[17]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *AOraclePass::PickupMessage ()
|
||||
{
|
||||
return "You picked up the Oracle Pass.";
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -4,6 +4,7 @@
|
|||
#include "c_console.h"
|
||||
#include "p_enemy.h"
|
||||
#include "a_action.h"
|
||||
#include "gstrings.h"
|
||||
|
||||
static FRandom pr_bang4cloud ("Bang4Cloud");
|
||||
static FRandom pr_lightout ("LightOut");
|
||||
|
@ -14,11 +15,6 @@ void A_TossGib (AActor *);
|
|||
void A_LoopActiveSound (AActor *);
|
||||
void A_LightGoesOut (AActor *);
|
||||
|
||||
class ARubble1 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ARubble1, AActor)
|
||||
};
|
||||
|
||||
// A Cloud used for varius explosions ---------------------------------------
|
||||
// This actor has no direct equivalent in strife. To create this, Strife
|
||||
// spawned a spark and then changed its state to that of this explosion
|
||||
|
@ -71,14 +67,14 @@ void A_Bang4Cloud (AActor *self)
|
|||
|
||||
void A_GiveQuestItem (AActor *self)
|
||||
{
|
||||
int questitem = (self->Speed >> FRACBITS) - 1;
|
||||
int questitem = (self->Speed >> FRACBITS);
|
||||
|
||||
// Give one of these quest items to every player in the game
|
||||
for (int i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (playeringame[i])
|
||||
{
|
||||
AInventory *item = static_cast<AInventory *>(Spawn (QuestItemClasses[questitem], 0,0,0));
|
||||
AInventory *item = static_cast<AInventory *>(Spawn (QuestItemClasses[questitem-1], 0,0,0));
|
||||
if (!item->TryPickup (players[i].mo))
|
||||
{
|
||||
item->Destroy ();
|
||||
|
@ -86,7 +82,11 @@ void A_GiveQuestItem (AActor *self)
|
|||
}
|
||||
}
|
||||
|
||||
const char *name = QuestItemClasses[questitem]->Meta.GetMetaString (AMETA_StrifeName);
|
||||
char messageid[64];
|
||||
|
||||
sprintf(messageid, "TXT_QUEST_%d", questitem);
|
||||
const char * name = GStrings[messageid];
|
||||
|
||||
if (name != NULL)
|
||||
{
|
||||
C_MidPrint (name);
|
||||
|
@ -272,7 +272,7 @@ void A_LightGoesOut (AActor *self)
|
|||
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
foo = Spawn<ARubble1> (self->x, self->y, self->z);
|
||||
foo = Spawn("Rubble1", self->x, self->y, self->z);
|
||||
if (foo != NULL)
|
||||
{
|
||||
int t = pr_lightout() & 15;
|
||||
|
|
|
@ -1,90 +0,0 @@
|
|||
#include "actor.h"
|
||||
#include "m_random.h"
|
||||
#include "a_action.h"
|
||||
#include "p_local.h"
|
||||
#include "p_enemy.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
void A_20e10 (AActor *);
|
||||
void A_TossGib (AActor *);
|
||||
void A_SpawnZombie (AActor *);
|
||||
|
||||
// Zombie -------------------------------------------------------------------
|
||||
|
||||
class AZombie : public AStrifeHumanoid
|
||||
{
|
||||
DECLARE_ACTOR (AZombie, AStrifeHumanoid)
|
||||
};
|
||||
|
||||
FState AZombie::States[] =
|
||||
{
|
||||
#define S_ZOMBIE_STND 0
|
||||
S_NORMAL (PEAS, 'A', 5, A_20e10, &States[S_ZOMBIE_STND]),
|
||||
|
||||
#define S_ZOMBIE_PAIN (S_ZOMBIE_STND+1)
|
||||
S_NORMAL (AGRD, 'A', 5, A_20e10, &States[S_ZOMBIE_PAIN]),
|
||||
|
||||
#define S_ZOMBIE_DIE (S_ZOMBIE_PAIN+1)
|
||||
S_NORMAL (GIBS, 'M', 5, A_TossGib, &States[S_ZOMBIE_DIE+1]),
|
||||
S_NORMAL (GIBS, 'N', 5, A_XScream, &States[S_ZOMBIE_DIE+2]),
|
||||
S_NORMAL (GIBS, 'O', 5, A_NoBlocking, &States[S_ZOMBIE_DIE+3]),
|
||||
S_NORMAL (GIBS, 'P', 4, A_TossGib, &States[S_ZOMBIE_DIE+4]),
|
||||
S_NORMAL (GIBS, 'Q', 4, A_TossGib, &States[S_ZOMBIE_DIE+5]),
|
||||
S_NORMAL (GIBS, 'R', 4, A_TossGib, &States[S_ZOMBIE_DIE+6]),
|
||||
S_NORMAL (GIBS, 'S', 4, A_TossGib, &States[S_ZOMBIE_DIE+7]),
|
||||
S_NORMAL (GIBS, 'T', 4, A_TossGib, &States[S_ZOMBIE_DIE+8]),
|
||||
S_NORMAL (GIBS, 'U', 5, NULL, &States[S_ZOMBIE_DIE+9]),
|
||||
S_NORMAL (GIBS, 'V', 1400, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AZombie, Strife, 169, 0)
|
||||
PROP_SpawnState (S_ZOMBIE_STND)
|
||||
PROP_PainState (S_ZOMBIE_PAIN)
|
||||
PROP_DeathState (S_ZOMBIE_DIE)
|
||||
|
||||
PROP_SpawnHealth (31)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (56)
|
||||
PROP_PainChance (0)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE)
|
||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_MaxStepHeight (16)
|
||||
PROP_MaxDropOffHeight (32)
|
||||
PROP_Translation (TRANSLATION_Standard, 0)
|
||||
PROP_StrifeType (28)
|
||||
|
||||
PROP_DeathSound ("zombie/death")
|
||||
END_DEFAULTS
|
||||
|
||||
// Zombie Spawner -----------------------------------------------------------
|
||||
|
||||
class AZombieSpawner : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AZombieSpawner, AActor)
|
||||
};
|
||||
|
||||
FState AZombieSpawner::States[] =
|
||||
{
|
||||
S_NORMAL (TNT1, 'A', 175, A_SpawnZombie, &States[0])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AZombieSpawner, Strife, 170, 0)
|
||||
PROP_SpawnHealth (20)
|
||||
PROP_Flags (MF_SHOOTABLE|MF_NOSECTOR)
|
||||
PROP_SpawnState (0)
|
||||
PROP_RenderStyle (STYLE_None)
|
||||
PROP_StrifeType (30)
|
||||
PROP_ActiveSound ("zombie/spawner") // Does Strife use this somewhere else?
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_SpawnZombie
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_SpawnZombie (AActor *self)
|
||||
{
|
||||
Spawn<AZombie> (self->x, self->y, self->z);
|
||||
}
|
|
@ -84,7 +84,7 @@ xx(Extreme)
|
|||
|
||||
// Damage types
|
||||
xx(Fire)
|
||||
xx(Ice)
|
||||
//xx(Ice) already defined above
|
||||
xx(Disintegrate)
|
||||
xx(Water)
|
||||
xx(Slime)
|
||||
|
|
|
@ -643,7 +643,7 @@ static void TakeStrifeItem (const TypeInfo *itemtype, int amount)
|
|||
return;
|
||||
|
||||
// Don't take quest items.
|
||||
if (itemtype->IsDescendantOf (RUNTIME_CLASS(AQuestItem)))
|
||||
if (itemtype->IsDescendantOf (TypeInfo::FindType("QuestItem")))
|
||||
return;
|
||||
|
||||
// Don't take keys
|
||||
|
|
|
@ -1393,7 +1393,16 @@ FUNC(LS_ACS_ExecuteAlways)
|
|||
FUNC(LS_ACS_LockedExecute)
|
||||
// ACS_LockedExecute (script, map, s_arg1, s_arg2, lock)
|
||||
{
|
||||
if (arg4 && !P_CheckKeys (it, arg4, 1))
|
||||
if (arg4 && !P_CheckKeys (it, arg4, true))
|
||||
return false;
|
||||
else
|
||||
return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0);
|
||||
}
|
||||
|
||||
FUNC(LS_ACS_LockedExecuteDoor)
|
||||
// ACS_LockedExecuteDoor (script, map, s_arg1, s_arg2, lock)
|
||||
{
|
||||
if (arg4 && !P_CheckKeys (it, arg4, false))
|
||||
return false;
|
||||
else
|
||||
return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0);
|
||||
|
@ -2556,8 +2565,8 @@ lnSpecFunc LineSpecials[256] =
|
|||
LS_Door_Raise,
|
||||
LS_Door_LockedRaise,
|
||||
LS_Door_Animated,
|
||||
LS_Autosave, // Autosave
|
||||
LS_NOP, // 16
|
||||
LS_Autosave,
|
||||
LS_NOP, // Transfer_WallLight
|
||||
LS_NOP, // 17
|
||||
LS_NOP, // 18
|
||||
LS_NOP, // 19
|
||||
|
@ -2626,7 +2635,7 @@ lnSpecFunc LineSpecials[256] =
|
|||
LS_ACS_Terminate,
|
||||
LS_ACS_LockedExecute,
|
||||
LS_ACS_ExecuteWithResult,
|
||||
LS_NOP, // 85
|
||||
LS_ACS_LockedExecuteDoor,
|
||||
LS_NOP, // 86
|
||||
LS_NOP, // 87
|
||||
LS_NOP, // 88
|
||||
|
|
|
@ -127,6 +127,7 @@ typedef enum {
|
|||
ACS_Terminate = 82,
|
||||
ACS_LockedExecute = 83,
|
||||
ACS_ExecuteWithResult = 84,
|
||||
ACS_LockedExecuteDoor = 85,
|
||||
|
||||
Polyobj_OR_RotateLeft = 90,
|
||||
Polyobj_OR_RotateRight = 91,
|
||||
|
|
|
@ -2551,7 +2551,7 @@ BOOL PTR_AimTraverse (intercept_t* in)
|
|||
if ((th->flags3 & MF3_GHOST) &&
|
||||
shootthing->player && // [RH] Be sure shootthing is a player
|
||||
shootthing->player->ReadyWeapon &&
|
||||
(shootthing->player->ReadyWeapon->WeaponFlags & WIF_HITS_GHOSTS))
|
||||
(shootthing->player->ReadyWeapon->flags2 & MF2_THRUGHOST))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -2695,7 +2695,7 @@ void P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
|||
|
||||
hitGhosts = (t1->player != NULL &&
|
||||
t1->player->ReadyWeapon != NULL &&
|
||||
(t1->player->ReadyWeapon->WeaponFlags & WIF_HITS_GHOSTS));
|
||||
(t1->player->ReadyWeapon->flags2 & MF2_THRUGHOST));
|
||||
|
||||
if (!Trace (t1->x, t1->y, shootz, t1->Sector, vx, vy, vz, distance,
|
||||
MF_SHOOTABLE, ML_BLOCKEVERYTHING, t1, trace,
|
||||
|
|
|
@ -89,6 +89,7 @@ static FRandom pr_spawnmapthing ("SpawnMapThing");
|
|||
static FRandom pr_spawnpuff ("SpawnPuff");
|
||||
static FRandom pr_spawnblood ("SpawnBlood");
|
||||
static FRandom pr_splatter ("BloodSplatter");
|
||||
static FRandom pr_takedamage ("TakeDamage");
|
||||
static FRandom pr_ripperblood ("RipperBlood");
|
||||
static FRandom pr_chunk ("Chunk");
|
||||
static FRandom pr_checkmissilespawn ("CheckMissileSpawn");
|
||||
|
@ -3051,6 +3052,7 @@ AActor *AActor::StaticSpawn (const TypeInfo *type, fixed_t ix, fixed_t iy, fixed
|
|||
actor->frame = st->GetFrame();
|
||||
actor->renderflags = (actor->renderflags & ~RF_FULLBRIGHT) | st->GetFullbright();
|
||||
actor->touching_sectorlist = NULL; // NULL head of sector list // phares 3/13/98
|
||||
actor->Speed = actor->GetClass()->Meta.GetMetaFixed(AMETA_FastSpeed, actor->Speed);
|
||||
|
||||
// set subsector and/or block links
|
||||
actor->LinkToWorld (SpawningMapThing);
|
||||
|
@ -4595,6 +4597,16 @@ int AActor::DoSpecialDamage (AActor *target, int damage)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (target->player)
|
||||
{
|
||||
int poisondamage = GetClass()->Meta.GetMetaInt(AMETA_PoisonDamage);
|
||||
if (poisondamage > 0)
|
||||
{
|
||||
P_PoisonPlayer (target->player, this, this->target, poisondamage);
|
||||
damage >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return damage;
|
||||
}
|
||||
}
|
||||
|
@ -4607,6 +4619,16 @@ int AActor::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, in
|
|||
// it needs to work.
|
||||
FState *death;
|
||||
|
||||
if (flags5 & MF5_NODAMAGE)
|
||||
{
|
||||
target = source;
|
||||
if (PainState != NULL && pr_takedamage() < PainChance)
|
||||
{
|
||||
SetState (PainState);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (DeathState != NULL)
|
||||
{
|
||||
return damage;
|
||||
|
|
|
@ -194,7 +194,7 @@ void DRotatePoly::Tick ()
|
|||
return;
|
||||
}
|
||||
m_Dist -= absSpeed;
|
||||
if (m_Dist <= 0 && m_Dist+absSpeed>0)
|
||||
if (m_Dist == 0)
|
||||
{
|
||||
polyobj_t *poly = GetPolyobj (m_PolyObj);
|
||||
if (poly->specialdata == this)
|
||||
|
|
|
@ -69,6 +69,8 @@
|
|||
#include "thingdef.h"
|
||||
|
||||
|
||||
const TypeInfo *QuestItemClasses[31];
|
||||
|
||||
|
||||
extern TArray<FActorInfo *> Decorations;
|
||||
|
||||
|
@ -221,6 +223,7 @@ static flagdef ActorFlags[]=
|
|||
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, BOUNCEONACTORS, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, EXPLODEONWATER, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, NODAMAGE, AActor, flags5),
|
||||
|
||||
// Effect flags
|
||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||
|
@ -444,12 +447,14 @@ ACTOR(ClearShadow)
|
|||
ACTOR(GetHurt)
|
||||
ACTOR(TurretLook)
|
||||
ACTOR(KlaxonBlare)
|
||||
ACTOR(20e10)
|
||||
ACTOR(CheckTerrain)
|
||||
ACTOR(Countdown)
|
||||
ACTOR(AlertMonsters)
|
||||
ACTOR(ClearSoundTarget)
|
||||
ACTOR(FireAssaultGun)
|
||||
ACTOR(PlaySound)
|
||||
ACTOR(PlayWeaponSound)
|
||||
ACTOR(FLoopActiveSound)
|
||||
ACTOR(LoopActiveSound)
|
||||
ACTOR(StopSound)
|
||||
ACTOR(SeekerMissile)
|
||||
|
@ -500,6 +505,7 @@ ACTOR(GiveToTarget)
|
|||
ACTOR(TakeFromTarget)
|
||||
ACTOR(JumpIfInTargetInventory)
|
||||
ACTOR(CountdownArg)
|
||||
ACTOR(CustomMeleeAttack)
|
||||
|
||||
|
||||
#include "d_dehackedactions.h"
|
||||
|
@ -620,8 +626,9 @@ AFuncDesc AFTable[]=
|
|||
FUNC(A_KlaxonBlare, NULL)
|
||||
FUNC(A_Countdown, NULL)
|
||||
FUNC(A_AlertMonsters, NULL)
|
||||
FUNC(A_ClearSoundTarget, NULL)
|
||||
FUNC(A_FireAssaultGun, NULL)
|
||||
{"A_CheckTerrain", A_20e10, NULL }, // This needs a better name!
|
||||
FUNC(A_CheckTerrain, NULL )
|
||||
|
||||
// Only selected original weapon functions will be available.
|
||||
// All the attack pointers are somewhat tricky due to the way the flash state is handled
|
||||
|
@ -642,6 +649,7 @@ AFuncDesc AFTable[]=
|
|||
FUNC(A_BulletAttack, NULL)
|
||||
FUNC(A_PlaySound, "S" )
|
||||
FUNC(A_PlayWeaponSound, "S" )
|
||||
FUNC(A_FLoopActiveSound, NULL )
|
||||
FUNC(A_LoopActiveSound, NULL )
|
||||
FUNC(A_StopSound, NULL )
|
||||
FUNC(A_SeekerMissile, "XX" )
|
||||
|
@ -684,6 +692,7 @@ AFuncDesc AFTable[]=
|
|||
FUNC(A_GiveToTarget, "Mx" )
|
||||
FUNC(A_TakeFromTarget, "Mx" )
|
||||
FUNC(A_CountdownArg, "X")
|
||||
FUNC(A_CustomMeleeAttack, "XXXsty" )
|
||||
};
|
||||
|
||||
//==========================================================================
|
||||
|
@ -2079,17 +2088,6 @@ void ParseActorProperties (Baggage &bag)
|
|||
SC_ScriptError("\"%s\" is an unknown actor property\n", propname.GetChars());
|
||||
}
|
||||
}
|
||||
|
||||
// copy the THRUGHOST flag to the HITS_GHOSTS weapon flag
|
||||
// Their meaning is synonymous so it really doesn't make sense
|
||||
// to have two different flags for this
|
||||
if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(AWeapon)))
|
||||
{
|
||||
AWeapon * weapon=(AWeapon*)bag.Info->Defaults;
|
||||
|
||||
if (weapon->flags2&MF2_THRUGHOST) weapon->WeaponFlags|=WIF_HITS_GHOSTS;
|
||||
else weapon->WeaponFlags&=~WIF_HITS_GHOSTS;
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -2248,12 +2246,40 @@ static void ActorSpawnID (AActor *defaults, Baggage &bag)
|
|||
//==========================================================================
|
||||
static void ActorConversationID (AActor *defaults, Baggage &bag)
|
||||
{
|
||||
int convid;
|
||||
|
||||
SC_MustGetNumber();
|
||||
if (sc_Number<0 || sc_Number>344)
|
||||
convid = sc_Number;
|
||||
|
||||
// Handling for Strife teaser IDs - only of meaning for the standard items
|
||||
// as PWADs cannot be loaded with the teasers.
|
||||
if (SC_CheckString(","))
|
||||
{
|
||||
SC_MustGetNumber();
|
||||
if ((gameinfo.flags & (GI_SHAREWARE|GI_TEASER2)) == (GI_SHAREWARE))
|
||||
convid=sc_Number;
|
||||
|
||||
SC_MustGetStringName(",");
|
||||
SC_MustGetNumber();
|
||||
if ((gameinfo.flags & (GI_SHAREWARE|GI_TEASER2)) == (GI_SHAREWARE|GI_TEASER2))
|
||||
convid=sc_Number;
|
||||
|
||||
if (convid==-1) return;
|
||||
}
|
||||
if (convid<0 || convid>344)
|
||||
{
|
||||
SC_ScriptError ("ConversationID must be in the range [0,344]");
|
||||
}
|
||||
else StrifeTypes[sc_Number] = bag.Info->Class;
|
||||
else StrifeTypes[convid] = bag.Info->Class;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
static void ActorTag (AActor *defaults, Baggage &bag)
|
||||
{
|
||||
SC_MustGetString();
|
||||
bag.Info->Class->Meta.SetMetaString(AMETA_StrifeName, sc_String);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -2771,7 +2797,7 @@ static void ActorTranslation (AActor *defaults, Baggage &bag)
|
|||
{
|
||||
if (SC_CheckNumber())
|
||||
{
|
||||
int max = gameinfo.gametype==GAME_Strife? 6:2;
|
||||
int max = (gameinfo.gametype==GAME_Strife || (bag.Info->GameFilter&GAME_Strife)) ? 6:2;
|
||||
if (sc_Number < 0 || sc_Number > max)
|
||||
{
|
||||
SC_ScriptError ("Translation must be in the range [0,%d]", max);
|
||||
|
@ -2889,6 +2915,24 @@ static void ActorMaxDropoffHeight (AActor *defaults, Baggage &bag)
|
|||
defaults->MaxDropOffHeight=sc_Number;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
static void ActorPoisonDamage (AActor *defaults, Baggage &bag)
|
||||
{
|
||||
SC_MustGetNumber();
|
||||
bag.Info->Class->Meta.SetMetaInt (AMETA_PoisonDamage, sc_Number);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
static void ActorFastSpeed (AActor *defaults, Baggage &bag)
|
||||
{
|
||||
SC_MustGetFloat();
|
||||
bag.Info->Class->Meta.SetMetaFixed (AMETA_FastSpeed, fixed_t(sc_Float*FRACUNIT));
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
|
@ -3143,6 +3187,15 @@ static void InventoryUsesound (AInventory *defaults, Baggage &bag)
|
|||
defaults->UseSound=S_FindSound(sc_String);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
static void InventoryGiveQuest (APuzzleItem *defaults, Baggage &bag)
|
||||
{
|
||||
SC_MustGetNumber();
|
||||
bag.Info->Class->Meta.SetMetaInt(AIMETA_GiveQuest, sc_Number);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
|
@ -3446,6 +3499,7 @@ static const ActorProps props[] =
|
|||
{ "dropitem", ActorDropItem, RUNTIME_CLASS(AActor) },
|
||||
{ "explosiondamage", ActorExplosionDamage, RUNTIME_CLASS(AActor) },
|
||||
{ "explosionradius", ActorExplosionRadius, RUNTIME_CLASS(AActor) },
|
||||
{ "fastspeed", ActorFastSpeed, RUNTIME_CLASS(AActor) },
|
||||
{ "game", ActorGame, RUNTIME_CLASS(AActor) },
|
||||
{ "gibhealth", ActorGibHealth, RUNTIME_CLASS(AActor) },
|
||||
{ "greetings", ActorGreetingsState, RUNTIME_CLASS(AActor) },
|
||||
|
@ -3456,6 +3510,7 @@ static const ActorProps props[] =
|
|||
{ "ice", ActorIceState, RUNTIME_CLASS(AActor) },
|
||||
{ "inventory.amount", (apf)InventoryAmount, RUNTIME_CLASS(AInventory) },
|
||||
{ "inventory.defmaxamount", (apf)InventoryDefMaxAmount, RUNTIME_CLASS(AInventory) },
|
||||
{ "inventory.givequest", (apf)InventoryGiveQuest, RUNTIME_CLASS(AInventory) },
|
||||
{ "inventory.icon", (apf)InventoryIcon, RUNTIME_CLASS(AInventory) },
|
||||
{ "inventory.maxamount", (apf)InventoryMaxAmount, RUNTIME_CLASS(AInventory) },
|
||||
{ "inventory.pickupmessage", (apf)InventoryPickupmsg, RUNTIME_CLASS(AInventory) },
|
||||
|
@ -3479,6 +3534,7 @@ static const ActorProps props[] =
|
|||
{ "pain", ActorPainState, RUNTIME_CLASS(AActor) },
|
||||
{ "painchance", ActorPainChance, RUNTIME_CLASS(AActor) },
|
||||
{ "painsound", ActorPainSound, RUNTIME_CLASS(AActor) },
|
||||
{ "poisondamage", ActorPoisonDamage, RUNTIME_CLASS(AActor) },
|
||||
{ "powerup.color", (apf)PowerupColor, RUNTIME_CLASS(APowerupGiver) },
|
||||
{ "powerup.duration", (apf)PowerupDuration, RUNTIME_CLASS(APowerupGiver) },
|
||||
{ "powerup.type", (apf)PowerupType, RUNTIME_CLASS(APowerupGiver) },
|
||||
|
@ -3496,6 +3552,7 @@ static const ActorProps props[] =
|
|||
{ "spawnid", ActorSpawnID, RUNTIME_CLASS(AActor) },
|
||||
{ "speed", ActorSpeed, RUNTIME_CLASS(AActor) },
|
||||
{ "states", ActorStates, RUNTIME_CLASS(AActor) },
|
||||
{ "tag", ActorTag, RUNTIME_CLASS(AActor) },
|
||||
{ "translation", ActorTranslation, RUNTIME_CLASS(AActor) },
|
||||
{ "weapon.ammogive", (apf)WeaponAmmoGive1, RUNTIME_CLASS(AWeapon) },
|
||||
{ "weapon.ammogive1", (apf)WeaponAmmoGive1, RUNTIME_CLASS(AWeapon) },
|
||||
|
@ -3626,4 +3683,12 @@ void FinishThingdef()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Since these are defined in DECORATE now the table has to be initialized here.
|
||||
for(int i=0;i<31;i++)
|
||||
{
|
||||
char fmt[20];
|
||||
sprintf(fmt, "QuestItem%d", i+1);
|
||||
QuestItemClasses[i]=TypeInfo::FindType(fmt);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ static FRandom pr_camissile ("CustomActorfire");
|
|||
static FRandom pr_camelee ("CustomMelee");
|
||||
static FRandom pr_cabullet ("CustomBullet");
|
||||
static FRandom pr_cajump ("CustomJump");
|
||||
static FRandom pr_custommelee ("CustomMelee2");
|
||||
static FRandom pr_cwbullet ("CustomWpBullet");
|
||||
static FRandom pr_cwjump ("CustomWpJump");
|
||||
static FRandom pr_cwpunch ("CustomWpPunch");
|
||||
|
@ -660,6 +661,44 @@ void A_CustomBulletAttack (AActor *self)
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// A fully customizable melee attack
|
||||
//
|
||||
//==========================================================================
|
||||
void A_CustomMeleeAttack (AActor *self)
|
||||
{
|
||||
int index=CheckIndex(6);
|
||||
if (index<0) return;
|
||||
|
||||
int Multiplier = EvalExpressionI (StateParameters[index], self);
|
||||
int Modulus = EvalExpressionI (StateParameters[index+1], self);
|
||||
int Adder = EvalExpressionI (StateParameters[index+2], self);
|
||||
int MeleeSound=StateParameters[index+3];
|
||||
const char * DamageType = (const char*)StateParameters[index+4];
|
||||
bool bleed = EvalExpressionN (StateParameters[index+5], self);
|
||||
int mod;
|
||||
|
||||
// This needs to be redesigned once the customizable damage type system is working
|
||||
if (DamageType == NULL) mod=MOD_HIT;
|
||||
else if (!stricmp(DamageType, "Fire")) mod=MOD_FIRE;
|
||||
else if (!stricmp(DamageType, "Ice")) mod=MOD_ICE;
|
||||
else if (!stricmp(DamageType, "Disintegrate")) mod=MOD_DISINTEGRATE;
|
||||
else mod=MOD_HIT;
|
||||
|
||||
if (!self->target)
|
||||
return;
|
||||
|
||||
A_FaceTarget (self);
|
||||
if (self->CheckMeleeRange ())
|
||||
{
|
||||
int damage = ((pr_custommelee()%Modulus)*Multiplier)+Adder;
|
||||
if (MeleeSound) S_SoundID (self, CHAN_WEAPON, MeleeSound, 1, ATTN_NORM);
|
||||
P_DamageMobj (self->target, self, self, damage, MOD_HIT);
|
||||
if (bleed) P_TraceBleed (damage, self->target, self);
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// State jump function
|
||||
|
@ -1045,7 +1084,7 @@ void A_SpawnItem(AActor * self)
|
|||
if (index<0) return;
|
||||
|
||||
const TypeInfo * missile= TypeInfo::FindType((const char *)StateParameters[index]);
|
||||
int distance = EvalExpressionI (StateParameters[index+1], self);
|
||||
fixed_t distance = EvalExpressionF (StateParameters[index+1], self);
|
||||
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
||||
|
||||
|
@ -1263,7 +1302,7 @@ void A_SetTranslucent(AActor * self)
|
|||
if (mode != STYLE_Fuzzy)
|
||||
{
|
||||
if (self->alpha == 0) mode = STYLE_None;
|
||||
else if (mode == STYLE_Translucent && self->alpha == FRACUNIT) mode = STYLE_Normal;
|
||||
else if (mode == STYLE_Translucent && self->alpha >= FRACUNIT) mode = STYLE_Normal;
|
||||
}
|
||||
|
||||
self->RenderStyle=mode;
|
||||
|
|
|
@ -23,3 +23,14 @@
|
|||
#include "actors/hexen/puzzleitems.txt"
|
||||
#include "actors/hexen/scriptprojectiles.txt"
|
||||
#include "actors/hexen/speedboots.txt"
|
||||
|
||||
#include "actors/strife/beggars.txt"
|
||||
#include "actors/strife/merchants.txt"
|
||||
#include "actors/strife/peasants.txt"
|
||||
#include "actors/strife/questitems.txt"
|
||||
#include "actors/strife/ratbuddy.txt"
|
||||
#include "actors/strife/strifearmor.txt"
|
||||
#include "actors/strife/strifeitems.txt"
|
||||
#include "actors/strife/strifekeys.txt"
|
||||
#include "actors/strife/strifestuff.txt"
|
||||
#include "actors/strife/zombie.txt"
|
||||
|
|
|
@ -102,8 +102,7 @@ ACTOR ZTwinedTorchUnlit : ZTwinedTorch 117
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
TWTR I -1
|
||||
Stop
|
||||
Goto Super.Inactive
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,8 +134,7 @@ ACTOR ZWallTorchUnlit : ZWallTorch 55
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
WLTR I -1
|
||||
Stop
|
||||
Goto Super.Inactive
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -221,8 +219,7 @@ ACTOR ZFireBullUnlit : ZFireBull 8043
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
FBUL H -1
|
||||
Stop
|
||||
Goto Super.Inactive+2
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,14 +276,13 @@ ACTOR ZCauldron : SwitchableDecoration 8069
|
|||
}
|
||||
}
|
||||
|
||||
ACTOR ZCauldronUnlit : ZCauldron
|
||||
ACTOR ZCauldronUnlit : ZCauldron 8070
|
||||
{
|
||||
Game Hexen
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CDRN A -1
|
||||
Stop
|
||||
Goto Super.Inactive
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1,135 @@
|
|||
//
|
||||
// Fire Ball ----------------------------------------------------------------
|
||||
|
||||
ACTOR FireBall
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 10
|
||||
Speed 2
|
||||
Radius 8
|
||||
Height 8
|
||||
Damage 4
|
||||
DamageType Fire
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
|
||||
+NOTELEPORT
|
||||
RenderStyle Add
|
||||
DeathSound "Fireball"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FBL1 AB 4 Bright
|
||||
Loop
|
||||
Death:
|
||||
XPL1 ABCDEF 4 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Arrow --------------------------------------------------------------------
|
||||
|
||||
ACTOR Arrow
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 50
|
||||
Speed 6
|
||||
Radius 8
|
||||
Height 4
|
||||
Damage 4
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
|
||||
+NOTELEPORT
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ARRW A -1
|
||||
Stop
|
||||
Death:
|
||||
ARRW A 1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Dart ---------------------------------------------------------------------
|
||||
|
||||
ACTOR Dart
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 51
|
||||
Speed 6
|
||||
Radius 8
|
||||
Height 4
|
||||
Damage 2
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
|
||||
+NOTELEPORT
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DART A -1
|
||||
Stop
|
||||
Death:
|
||||
DART A 1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Poison Dart --------------------------------------------------------------
|
||||
|
||||
ACTOR PoisonDart : Dart
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 52
|
||||
PoisonDamage 20
|
||||
}
|
||||
|
||||
// Ripper Ball --------------------------------------------------------------
|
||||
|
||||
ACTOR RipperBall
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 53
|
||||
Speed 6
|
||||
Radius 8
|
||||
Damage 2
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
|
||||
+NOTELEPORT +RIPPER
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RIPP ABC 3
|
||||
Loop
|
||||
Death:
|
||||
CFCF Q 4 Bright
|
||||
CFCF R 3 Bright
|
||||
CFCF S 4 Bright
|
||||
CFCF T 3 Bright
|
||||
CFCF U 4 Bright
|
||||
CFCF V 3 Bright
|
||||
CFCF W 4 Bright
|
||||
CFCF X 3 Bright
|
||||
CFCF Y 4 Bright
|
||||
CFCF Z 3 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Projectile Blade ---------------------------------------------------------
|
||||
|
||||
ACTOR ProjectileBlade
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 64
|
||||
Speed 6
|
||||
Radius 6
|
||||
Height 6
|
||||
Damage 3
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
|
||||
+NOTELEPORT
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BLAD A -1
|
||||
Stop
|
||||
Death:
|
||||
BLAD A 1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
|
96
wadsrc/decorate/strife/beggars.txt
Normal file
96
wadsrc/decorate/strife/beggars.txt
Normal file
|
@ -0,0 +1,96 @@
|
|||
|
||||
// Base class for the beggars ---------------------------------------------
|
||||
|
||||
ACTOR Beggar : StrifeHumanoid
|
||||
{
|
||||
Health 20
|
||||
PainChance 250
|
||||
Speed 3
|
||||
Radius 20
|
||||
Height 56
|
||||
Monster
|
||||
+JUSTHIT
|
||||
-COUNTKILL
|
||||
+NOSPLASHALERT
|
||||
MinMissileChance 150
|
||||
Tag "Beggar"
|
||||
MaxStepHeight 16
|
||||
MaxDropoffHeight 32
|
||||
|
||||
AttackSound "beggar/attack"
|
||||
PainSound "beggar/pain"
|
||||
DeathSound "beggar/death"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BEGR A 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
BEGR AABBCC 4 A_Wander
|
||||
Loop
|
||||
Melee:
|
||||
BEGR D 8
|
||||
BEGR D 8 A_CustomMeleeAttack(2, 5, 2)
|
||||
BEGR E 1 A_Chase
|
||||
BEGR D 8 A_SentinelRefire
|
||||
Loop
|
||||
Pain:
|
||||
BEGR A 3 A_Pain
|
||||
BEGR A 3 A_Chase
|
||||
Goto Melee
|
||||
Death:
|
||||
BEGR F 4
|
||||
BEGR G 4 A_Scream
|
||||
BEGR H 4
|
||||
BEGR I 4 A_NoBlocking
|
||||
BEGR JKLM 4
|
||||
BEGR N -1
|
||||
Stop
|
||||
XDeath:
|
||||
BEGR F 5 A_TossGib
|
||||
GIBS M 5 A_TossGib
|
||||
GIBS N 5 A_XScream
|
||||
GIBS O 5 A_NoBlocking
|
||||
GIBS PQRST 4 A_TossGib
|
||||
GIBS U 5
|
||||
GIBS V 1400
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Beggars -----------------------------------------------------------------
|
||||
|
||||
ACTOR Beggar1 : Beggar 141
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 38, 37, 38
|
||||
}
|
||||
|
||||
|
||||
ACTOR Beggar2 : Beggar 155
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 39, 38, 39
|
||||
}
|
||||
|
||||
|
||||
ACTOR Beggar3 : Beggar 156
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 40, 39, 40
|
||||
}
|
||||
|
||||
|
||||
ACTOR Beggar4 : Beggar 157
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 41, 40, 41
|
||||
}
|
||||
|
||||
|
||||
ACTOR Beggar5 : Beggar 158
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 42, 41, 42
|
||||
}
|
99
wadsrc/decorate/strife/merchants.txt
Normal file
99
wadsrc/decorate/strife/merchants.txt
Normal file
|
@ -0,0 +1,99 @@
|
|||
// Base class for the merchants ---------------------------------------------
|
||||
|
||||
ACTOR Merchant
|
||||
{
|
||||
Health 10000000
|
||||
PainChance 256 // a merchant should always enter the pain state when getting hurt
|
||||
Radius 20
|
||||
Height 56
|
||||
Mass 5000
|
||||
+SOLID
|
||||
+SHOOTABLE
|
||||
+NOTDMATCH
|
||||
+NOSPLASHALERT
|
||||
+NODAMAGE
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MRST A 10 A_Look2
|
||||
Loop
|
||||
MRLK A 30 A_ActiveSound
|
||||
Loop
|
||||
MRLK B 30
|
||||
Loop
|
||||
MRBD ABCDEDCB 4
|
||||
MRBD A 5
|
||||
MRBD F 6
|
||||
Loop
|
||||
See:
|
||||
Pain:
|
||||
MRPN A 3 A_AlertMonsters
|
||||
MRPN B 3 A_Pain
|
||||
MRPN C 3
|
||||
MRPN D 9 Door_CloseWaitOpen(999, 64, 960)
|
||||
MRPN C 4
|
||||
MRPN B 3
|
||||
MRPN A 3 A_ClearSoundTarget
|
||||
Goto Spawn
|
||||
Yes:
|
||||
MRYS A 20
|
||||
// Fall through
|
||||
Greetings:
|
||||
MRGT ABCDEFGHI 5
|
||||
Goto Spawn
|
||||
No:
|
||||
MRNO AB 6
|
||||
MRNO C 10
|
||||
MRNO BA 6
|
||||
Goto Greetings
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Weapon Smith -------------------------------------------------------------
|
||||
|
||||
ACTOR WeaponSmith : Merchant 116
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 2
|
||||
PainSound "smith/pain"
|
||||
Tag "Weapon_Smith"
|
||||
}
|
||||
|
||||
|
||||
// Bar Keep -----------------------------------------------------------------
|
||||
|
||||
ACTOR BarKeep : Merchant 72
|
||||
{
|
||||
Game Strife
|
||||
Translation 4
|
||||
ConversationID 3
|
||||
PainSound "barkeep/pain"
|
||||
ActiveSound "barkeep/active"
|
||||
Tag "Bar_Keep"
|
||||
}
|
||||
|
||||
|
||||
// Armorer ------------------------------------------------------------------
|
||||
|
||||
ACTOR Armorer : Merchant 73
|
||||
{
|
||||
Game Strife
|
||||
Translation 5
|
||||
ConversationID 4
|
||||
PainSound "armorer/pain"
|
||||
Tag "Armorer"
|
||||
}
|
||||
|
||||
|
||||
// Medic --------------------------------------------------------------------
|
||||
|
||||
ACTOR Medic : Merchant 74
|
||||
{
|
||||
Game Strife
|
||||
Translation 6
|
||||
ConversationID 5
|
||||
PainSound "medic/pain"
|
||||
Tag "Medic"
|
||||
}
|
||||
|
223
wadsrc/decorate/strife/peasants.txt
Normal file
223
wadsrc/decorate/strife/peasants.txt
Normal file
|
@ -0,0 +1,223 @@
|
|||
|
||||
// Peasant Base Class -------------------------------------------------------
|
||||
|
||||
ACTOR Peasant : StrifeHumanoid
|
||||
{
|
||||
Health 31
|
||||
PainChance 200
|
||||
Speed 8
|
||||
Radius 20
|
||||
Height 56
|
||||
Monster
|
||||
+FRIENDLY
|
||||
-COUNTKILL
|
||||
+NOSPLASHALERT
|
||||
MinMissileChance 150
|
||||
MaxStepHeight 16
|
||||
MaxDropoffHeight 32
|
||||
SeeSound "peasant/sight"
|
||||
AttackSound "peasant/attack"
|
||||
PainSound "peasant/pain"
|
||||
DeathSound "peasant/death"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PEAS A 10 A_Look2
|
||||
Loop
|
||||
See:
|
||||
PEAS AABBCCDD 5 A_Wander
|
||||
Loop
|
||||
Melee:
|
||||
PEAS E 10 A_FaceTarget
|
||||
PEAS F 8 A_CustomMeleeAttack(2, 5, 2)
|
||||
PEAS E 8
|
||||
Goto See
|
||||
Pain:
|
||||
PEAS O 3
|
||||
PEAS O 3 A_Pain
|
||||
Goto Melee
|
||||
Wound:
|
||||
PEAS G 5
|
||||
PEAS H 10 A_GetHurt
|
||||
PEAS I 6
|
||||
Goto Wound+1
|
||||
Death:
|
||||
PEAS G 5
|
||||
PEAS H 5 A_Scream
|
||||
PEAS I 6
|
||||
PEAS J 5 A_NoBlocking
|
||||
PEAS K 5
|
||||
PEAS L 6
|
||||
PEAS M 8
|
||||
PEAS N 1400
|
||||
GIBS U 5
|
||||
GIBS V 1400
|
||||
Stop
|
||||
XDeath:
|
||||
GIBS M 5 A_TossGib
|
||||
GIBS N 5 A_XScream
|
||||
GIBS O 5 A_NoBlocking
|
||||
GIBS PQRS 4 A_TossGib
|
||||
Goto Death+8
|
||||
}
|
||||
}
|
||||
|
||||
// Peasant Variant 1 --------------------------------------------------------
|
||||
|
||||
ACTOR Peasant1 : Peasant 3004
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 6
|
||||
Speed 4
|
||||
}
|
||||
|
||||
ACTOR Peasant2 : Peasant 130
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 7
|
||||
Speed 5
|
||||
}
|
||||
|
||||
ACTOR Peasant3 : Peasant 131
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 8
|
||||
Speed 5
|
||||
}
|
||||
|
||||
ACTOR Peasant4 : Peasant 65
|
||||
{
|
||||
Game Strife
|
||||
Translation 0
|
||||
ConversationID 9
|
||||
Speed 7
|
||||
}
|
||||
|
||||
ACTOR Peasant5 : Peasant 132
|
||||
{
|
||||
Game Strife
|
||||
Translation 0
|
||||
ConversationID 10
|
||||
Speed 7
|
||||
}
|
||||
|
||||
ACTOR Peasant6 : Peasant 133
|
||||
{
|
||||
Game Strife
|
||||
Translation 0
|
||||
ConversationID 11
|
||||
Speed 7
|
||||
}
|
||||
|
||||
ACTOR Peasant7 : Peasant 66
|
||||
{
|
||||
Game Strife
|
||||
Translation 2
|
||||
ConversationID 12
|
||||
}
|
||||
|
||||
ACTOR Peasant8 : Peasant 134
|
||||
{
|
||||
Game Strife
|
||||
Translation 2
|
||||
ConversationID 13
|
||||
}
|
||||
|
||||
ACTOR Peasant9 : Peasant 135
|
||||
{
|
||||
Game Strife
|
||||
Translation 2
|
||||
ConversationID 14
|
||||
}
|
||||
|
||||
ACTOR Peasant10 : Peasant 67
|
||||
{
|
||||
Game Strife
|
||||
Translation 1
|
||||
ConversationID 15
|
||||
}
|
||||
|
||||
ACTOR Peasant11 : Peasant 136
|
||||
{
|
||||
Game Strife
|
||||
Translation 1
|
||||
ConversationID 16
|
||||
}
|
||||
|
||||
ACTOR Peasant12 : Peasant 137
|
||||
{
|
||||
Game Strife
|
||||
Translation 1
|
||||
ConversationID 17
|
||||
}
|
||||
|
||||
ACTOR Peasant13 : Peasant 172
|
||||
{
|
||||
Game Strife
|
||||
Translation 3
|
||||
ConversationID 18
|
||||
}
|
||||
|
||||
ACTOR Peasant14 : Peasant 173
|
||||
{
|
||||
Game Strife
|
||||
Translation 3
|
||||
ConversationID 19
|
||||
}
|
||||
|
||||
ACTOR Peasant15 : Peasant 174
|
||||
{
|
||||
Game Strife
|
||||
Translation 3
|
||||
ConversationID 20
|
||||
}
|
||||
|
||||
ACTOR Peasant16 : Peasant 175
|
||||
{
|
||||
Game Strife
|
||||
Translation 5
|
||||
ConversationID 21
|
||||
}
|
||||
|
||||
ACTOR Peasant17 : Peasant 176
|
||||
{
|
||||
Game Strife
|
||||
Translation 5
|
||||
ConversationID 22
|
||||
}
|
||||
|
||||
ACTOR Peasant18 : Peasant 177
|
||||
{
|
||||
Game Strife
|
||||
Translation 5
|
||||
ConversationID 23
|
||||
}
|
||||
|
||||
ACTOR Peasant19 : Peasant 178
|
||||
{
|
||||
Game Strife
|
||||
Translation 4
|
||||
ConversationID 24
|
||||
}
|
||||
|
||||
ACTOR Peasant20 : Peasant 179
|
||||
{
|
||||
Game Strife
|
||||
Translation 4
|
||||
ConversationID 25
|
||||
}
|
||||
|
||||
ACTOR Peasant21 : Peasant 180
|
||||
{
|
||||
Game Strife
|
||||
Translation 4
|
||||
ConversationID 26
|
||||
}
|
||||
|
||||
ACTOR Peasant22 : Peasant 181
|
||||
{
|
||||
Game Strife
|
||||
Translation 6
|
||||
ConversationID 27
|
||||
}
|
||||
|
206
wadsrc/decorate/strife/questitems.txt
Normal file
206
wadsrc/decorate/strife/questitems.txt
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Quest Item Usage:
|
||||
*
|
||||
* 1 You got Beldin's ring
|
||||
* 2 You got the Chalice
|
||||
* 3 You got 300 gold, so it's time to visit Irale and the governor
|
||||
* 4 Accepted the governor's power coupling mission
|
||||
* 5 Accepted the governor's mission to kill Derwin
|
||||
* 6 You broke the Front's power coupling
|
||||
* 7 You took out the scanning team
|
||||
* 8 You got the broken power coupling
|
||||
* 9 You got the ear
|
||||
* 10 You got the prison pass
|
||||
* 11 You got the prison key
|
||||
* 12 You got the severed hand
|
||||
* 13 You've freed the prisoners!
|
||||
* 14 You've Blown Up the Crystal
|
||||
* 15 You got the guard uniform
|
||||
* 16 You've Blown Up the Gates (/Piston)
|
||||
* 17 You watched the Sigil slideshow on map10
|
||||
* 18 You got the Oracle pass
|
||||
* 19 You met Quincy and talked to him about the Bishop
|
||||
* 20
|
||||
* 21 You Killed the Bishop!
|
||||
* 22 The Oracle has told you to kill Macil
|
||||
* 23 You've Killed The Oracle!
|
||||
* 24 You Killed Macil!
|
||||
* 25 You've destroyed the Converter!
|
||||
* 26 You've Killed The Loremaster!
|
||||
* 27 You've Blown Up the Computer
|
||||
* 28 You got the catacomb key
|
||||
* 29 You destroyed the mind control device in the mines
|
||||
* 30
|
||||
* 31
|
||||
*/
|
||||
|
||||
ACTOR QuestItem : Inventory
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TOKN A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Quest Items -------------------------------------------------------------
|
||||
|
||||
ACTOR QuestItem1 : QuestItem
|
||||
{
|
||||
ConversationID 312, 293, 310
|
||||
}
|
||||
|
||||
ACTOR QuestItem2 : QuestItem
|
||||
{
|
||||
ConversationID 313, 294, 311
|
||||
}
|
||||
|
||||
ACTOR QuestItem3 : QuestItem
|
||||
{
|
||||
ConversationID 314, 295, 312
|
||||
}
|
||||
|
||||
ACTOR QuestItem4 : QuestItem
|
||||
{
|
||||
ConversationID 315, 296, 313
|
||||
Tag "quest4"
|
||||
}
|
||||
|
||||
ACTOR QuestItem5 : QuestItem
|
||||
{
|
||||
ConversationID 316, 297, 314
|
||||
Tag "quest5"
|
||||
}
|
||||
|
||||
ACTOR QuestItem6 : QuestItem
|
||||
{
|
||||
ConversationID 317, 298, 315
|
||||
Tag "quest4"
|
||||
}
|
||||
|
||||
ACTOR QuestItem7 : QuestItem
|
||||
{
|
||||
ConversationID 318, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem8 : QuestItem
|
||||
{
|
||||
ConversationID 319, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem9 : QuestItem
|
||||
{
|
||||
ConversationID 320, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem10 : QuestItem
|
||||
{
|
||||
ConversationID 321, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem11 : QuestItem
|
||||
{
|
||||
ConversationID 322, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem12 : QuestItem
|
||||
{
|
||||
ConversationID 323, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem13 : QuestItem
|
||||
{
|
||||
ConversationID 324, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem14 : QuestItem
|
||||
{
|
||||
ConversationID 325, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem15 : QuestItem
|
||||
{
|
||||
ConversationID 326, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem16 : QuestItem
|
||||
{
|
||||
ConversationID 327, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem17 : QuestItem
|
||||
{
|
||||
ConversationID 328, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem18 : QuestItem
|
||||
{
|
||||
ConversationID 329, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem19 : QuestItem
|
||||
{
|
||||
ConversationID 330, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem20 : QuestItem
|
||||
{
|
||||
ConversationID 331, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem21 : QuestItem
|
||||
{
|
||||
ConversationID 332, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem22 : QuestItem
|
||||
{
|
||||
ConversationID 333, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem23 : QuestItem
|
||||
{
|
||||
ConversationID 334, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem24 : QuestItem
|
||||
{
|
||||
ConversationID 335, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem25 : QuestItem
|
||||
{
|
||||
ConversationID 336, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem26 : QuestItem
|
||||
{
|
||||
ConversationID 337, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem27 : QuestItem
|
||||
{
|
||||
ConversationID 338, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem28 : QuestItem
|
||||
{
|
||||
ConversationID 339, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem29 : QuestItem
|
||||
{
|
||||
ConversationID 340, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem30 : QuestItem
|
||||
{
|
||||
ConversationID 341, -1, -1
|
||||
}
|
||||
|
||||
ACTOR QuestItem31 : QuestItem
|
||||
{
|
||||
ConversationID 342, -1, -1
|
||||
}
|
||||
|
37
wadsrc/decorate/strife/ratbuddy.txt
Normal file
37
wadsrc/decorate/strife/ratbuddy.txt
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
ACTOR RatBuddy 85
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 202, 196, 200
|
||||
Health 5
|
||||
Speed 13
|
||||
Radius 10
|
||||
Height 16
|
||||
+SHOOTABLE
|
||||
+NOBLOOD +FLOORCLIP +CANPASS
|
||||
+ISMONSTER +INCOMBAT
|
||||
MinMissileChance 150
|
||||
MaxStepHeight 16
|
||||
MaxDropoffHeight 32
|
||||
Tag "rat_buddy"
|
||||
SeeSound "rat/sight"
|
||||
DeathSound "rat/death"
|
||||
ActiveSound "rat/active"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RATT A 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
RATT AABB 4 A_Chase
|
||||
Loop
|
||||
Melee:
|
||||
RATT A 8 A_Wander
|
||||
RATT B 4 A_Wander
|
||||
Goto See
|
||||
Death:
|
||||
MEAT Q 700
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
49
wadsrc/decorate/strife/strifearmor.txt
Normal file
49
wadsrc/decorate/strife/strifearmor.txt
Normal file
|
@ -0,0 +1,49 @@
|
|||
|
||||
ACTOR MetalArmor : BasicArmorPickup 2019
|
||||
{
|
||||
Game Strife
|
||||
SpawnID 69
|
||||
ConversationID 129, 125, 128
|
||||
Radius 20
|
||||
Height 16
|
||||
+FLOORCLIP
|
||||
+INVENTORY.AUTOACTIVATE
|
||||
+INVENTORY.INVBAR
|
||||
Inventory.MaxAmount 3
|
||||
Inventory.Icon "I_ARM1"
|
||||
Inventory.PickupMessage "$TXT_METALARMOR"
|
||||
Armor.SaveAmount 200
|
||||
Armor.SavePercent 50
|
||||
Tag "Metal_Armor"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ARM3 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
ACTOR LeatherArmor : BasicArmorPickup 2018
|
||||
{
|
||||
Game Strife
|
||||
SpawnID 68
|
||||
ConversationID 130, 126, 129
|
||||
Radius 20
|
||||
Height 16
|
||||
+FLOORCLIP
|
||||
+INVENTORY.AUTOACTIVATE
|
||||
+INVENTORY.INVBAR
|
||||
Inventory.MaxAmount 5
|
||||
Inventory.Icon "I_ARM2"
|
||||
Inventory.PickupMessage "$TXT_LEATHERARMOR"
|
||||
Armor.SaveAmount 100
|
||||
Armor.SavePercent 33.33333
|
||||
Tag "Leather_Armor"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ARM4 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
335
wadsrc/decorate/strife/strifeitems.txt
Normal file
335
wadsrc/decorate/strife/strifeitems.txt
Normal file
|
@ -0,0 +1,335 @@
|
|||
// Med patch -----------------------------------------------------------------
|
||||
|
||||
ACTOR MedPatch : HealthPickup 2011
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 125, 121, 124
|
||||
Health 10
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Inventory.MaxAmount 20
|
||||
Tag "Med_patch"
|
||||
Inventory.Icon "I_STMP"
|
||||
Inventory.PickupMessage "$TXT_MEDPATCH"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
STMP A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Medical Kit ---------------------------------------------------------------
|
||||
|
||||
ACTOR MedicalKit : HealthPickup 2012
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 126, 122, 125
|
||||
Health 25
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Inventory.MaxAmount 15
|
||||
Tag "Medical_kit"
|
||||
Inventory.Icon "I_MDKT"
|
||||
Inventory.PickupMessage "$TXT_MEDICALKIT"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MDKT A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Surgery Kit --------------------------------------------------------------
|
||||
|
||||
ACTOR SurgeryKit : HealthPickup 83
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 127, 123, 126
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Health -100
|
||||
Inventory.MaxAmount 5
|
||||
Tag "Surgery_Kit" // "full_health" in the Teaser
|
||||
Inventory.Icon "I_FULL"
|
||||
Inventory.PickupMessage "$TXT_SURGERYKIT"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FULL AB 35
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// StrifeMap ----------------------------------------------------------------
|
||||
|
||||
ACTOR StrifeMap : MapRevealer 2026
|
||||
{
|
||||
Game Strife
|
||||
SpawnID 137
|
||||
ConversationID 164, 160, 163
|
||||
+FLOORCLIP
|
||||
Inventory.PickupSound "misc/p_pkup"
|
||||
Inventory.PickupMessage "$TXT_STRIFEMAP"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SMAP AB 6 Bright
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Beldin's Ring ------------------------------------------------------------
|
||||
|
||||
ACTOR BeldinsRing : Inventory
|
||||
{
|
||||
Game Strife
|
||||
+NOTDMATCH
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
ConversationID 173, 165, 169
|
||||
Tag "ring"
|
||||
Inventory.Icon "I_RING"
|
||||
Inventory.GiveQuest 1
|
||||
Inventory.PickupMessage "$TXT_BELDINSRING"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RING A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Offering Chalice ---------------------------------------------------------
|
||||
|
||||
ACTOR OfferingChalice : Inventory 205
|
||||
{
|
||||
Game Strife
|
||||
+DROPPED
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
ConversationID 174, 166, 170
|
||||
Radius 10
|
||||
Height 16
|
||||
Tag "Offering_Chalice"
|
||||
Inventory.Icon "I_RELC"
|
||||
Inventory.PickupMessage "$TXT_OFFERINGCHALICE"
|
||||
Inventory.GiveQuest 2
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RELC A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Ear ----------------------------------------------------------------------
|
||||
|
||||
ACTOR Ear : Inventory
|
||||
{
|
||||
Game Strife
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
ConversationID 175, 167, 171
|
||||
Tag "ear"
|
||||
Inventory.Icon "I_EARS"
|
||||
Inventory.PickupMessage "$TXT_EAR"
|
||||
Inventory.GiveQuest 9
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
EARS A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Broken Power Coupling ----------------------------------------------------
|
||||
|
||||
ACTOR BrokenPowerCoupling : Inventory 226
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 289, -1, -1
|
||||
Health 40
|
||||
+DROPPED
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Radius 16
|
||||
Height 16
|
||||
Tag "BROKEN_POWER_COUPLING"
|
||||
Inventory.MaxAmount 1
|
||||
Inventory.Icon "I_COUP"
|
||||
Inventory.PickupMessage "$TXT_BROKENCOUPLING"
|
||||
Inventory.GiveQuest 8
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
COUP C -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Shadow Armor -------------------------------------------------------------
|
||||
|
||||
ACTOR ShadowArmor : PowerupGiver 2024
|
||||
{
|
||||
Game Strife
|
||||
SpawnID 135
|
||||
ConversationID 160, 156, 159
|
||||
+FLOORCLIP
|
||||
+VISIBILITYPULSE
|
||||
+INVENTORY.INVBAR
|
||||
-INVENTORY.FANCYPICKUPSOUND
|
||||
RenderStyle Translucent
|
||||
Tag "Shadow_armor"
|
||||
Inventory.MaxAmount 2
|
||||
Powerup.Type "Shadow"
|
||||
Inventory.Icon "I_SHD1"
|
||||
Inventory.PickupSound "misc/i_pkup"
|
||||
Inventory.PickupMessage "$TXT_SHADOWARMOR"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SHD1 A -1 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Environmental suit -------------------------------------------------------
|
||||
|
||||
ACTOR EnvironmentalSuit : PowerupGiver 2025
|
||||
{
|
||||
Game Strife
|
||||
SpawnID 136
|
||||
ConversationID 161, 157, 160
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
-INVENTORY.FANCYPICKUPSOUND
|
||||
Inventory.MaxAmount 5
|
||||
Powerup.Type "Mask"
|
||||
Tag "Environmental_Suit"
|
||||
Inventory.Icon "I_MASK"
|
||||
Inventory.PickupSound "misc/i_pkup"
|
||||
Inventory.PickupMessage "$TXT_ENVSUIT"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MASK A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Guard Uniform ------------------------------------------------------------
|
||||
|
||||
ACTOR GuardUniform : Inventory 90
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 162, 158, 161
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Tag "Guard_Uniform"
|
||||
Inventory.Icon "I_UNIF"
|
||||
Inventory.PickupMessage "$TXT_GUARDUNIFORM"
|
||||
Inventory.GiveQuest 15
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
UNIF A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Officer's Uniform --------------------------------------------------------
|
||||
|
||||
ACTOR OfficersUniform : Inventory 52
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 163, 159, 162
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Tag "Officer's_Uniform"
|
||||
Inventory.Icon "I_OFIC"
|
||||
Inventory.PickupMessage "$TXT_OFFICERSUNIFORM"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
OFIC A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// InterrogatorReport -------------------------------------------------------
|
||||
// SCRIPT32 in strife0.wad has an Acolyte that drops this, but I couldn't
|
||||
// find that Acolyte in the map. It seems to be totally unused in the
|
||||
// final game.
|
||||
|
||||
ACTOR InterrogatorReport : Inventory
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 308, 289, 306
|
||||
+FLOORCLIP
|
||||
Tag "report"
|
||||
Inventory.PickupMessage "$TXT_REPORT"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TOKN A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Info ---------------------------------------------------------------------
|
||||
|
||||
ACTOR Info : Inventory
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 300, 282, 299
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
Tag "info"
|
||||
Inventory.Icon "I_TOKN"
|
||||
Inventory.PickupMessage "$TXT_INFO"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TOKN A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Targeter -----------------------------------------------------------------
|
||||
|
||||
ACTOR Targeter : PowerupGiver 207
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 167, 169, 173
|
||||
+FLOORCLIP
|
||||
+INVENTORY.INVBAR
|
||||
-INVENTORY.FANCYPICKUPSOUND
|
||||
Tag "Targeter"
|
||||
Powerup.Type "Targeter"
|
||||
Inventory.MaxAmount 5
|
||||
Inventory.Icon "I_TARG"
|
||||
Inventory.PickupSound "misc/i_pkup"
|
||||
Inventory.PickupMessage "$TXT_TARGETER"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TARG A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
516
wadsrc/decorate/strife/strifekeys.txt
Normal file
516
wadsrc/decorate/strife/strifekeys.txt
Normal file
|
@ -0,0 +1,516 @@
|
|||
ACTOR StrifeKey : Key
|
||||
{
|
||||
Radius 20
|
||||
Height 16
|
||||
+NOTDMATCH
|
||||
+FLOORCLIP
|
||||
}
|
||||
|
||||
// Base Key -----------------------------------------------------------------
|
||||
|
||||
ACTOR BaseKey : StrifeKey 230
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 133, 129, 132
|
||||
Inventory.Icon "I_FUSL"
|
||||
Tag "Base_Key"
|
||||
Inventory.PickupMessage "$TXT_BASEKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FUSL A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Govs Key -----------------------------------------------------------------
|
||||
|
||||
ACTOR GovsKey : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 134, 130, 133
|
||||
Inventory.Icon "I_REBL"
|
||||
Tag "Govs_Key" // "Rebel_Key" in the Teaser
|
||||
Inventory.PickupMessage "$TXT_GOVSKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
REBL A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Passcard -----------------------------------------------------------------
|
||||
|
||||
ACTOR Passcard : StrifeKey 185
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 135, 131, 134
|
||||
Inventory.Icon "I_TPAS"
|
||||
Tag "Passcard"
|
||||
Inventory.PickupMessage "$TXT_PASSCARD"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TPAS A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ID Badge -----------------------------------------------------------------
|
||||
|
||||
ACTOR IDBadge : StrifeKey 184
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 136, 132, 135
|
||||
Inventory.Icon "I_CRD1"
|
||||
Tag "ID_Badge"
|
||||
Inventory.PickupMessage "$TXT_IDBADGE"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CRD1 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Prison Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR PrisonKey : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 137, 133, 136
|
||||
Inventory.Icon "I_PRIS"
|
||||
Tag "Prison_Key"
|
||||
Inventory.GiveQuest 11
|
||||
Inventory.PickupMessage "$TXT_PRISONKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PRIS A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Severed Hand -------------------------------------------------------------
|
||||
|
||||
ACTOR SeveredHand : StrifeKey 91
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 138, 134, 137
|
||||
Inventory.Icon "I_HAND"
|
||||
Tag "Severed_Hand"
|
||||
Inventory.GiveQuest 12
|
||||
Inventory.PickupMessage "$TXT_SEVEREDHAND"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
HAND A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Power1 Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR Power1Key : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 139, 135, 138
|
||||
Inventory.Icon "I_PWR1"
|
||||
Tag "Power1_Key"
|
||||
Inventory.PickupMessage "$TXT_POWER1KEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PWR1 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Power2 Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR Power2Key : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 140, 136, 139
|
||||
Inventory.Icon "I_PWR2"
|
||||
Tag "Power2_Key"
|
||||
Inventory.PickupMessage "$TXT_POWER2KEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PWR2 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Power3 Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR Power3Key : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 141, 137, 140
|
||||
Inventory.Icon "I_PWR3"
|
||||
Tag "Power3_Key"
|
||||
Inventory.PickupMessage "$TXT_POWER3KEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PWR3 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Gold Key -----------------------------------------------------------------
|
||||
|
||||
ACTOR GoldKey : StrifeKey 40
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 142, 138, 141
|
||||
Inventory.Icon "I_KY1G"
|
||||
Tag "Gold_Key"
|
||||
Inventory.PickupMessage "$TXT_GOLDKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
KY1G A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ID Card ------------------------------------------------------------------
|
||||
|
||||
ACTOR IDCard : StrifeKey 13
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 143, 139, 142
|
||||
Inventory.Icon "I_CRD2"
|
||||
Tag "ID_Card"
|
||||
Inventory.PickupMessage "$TXT_IDCARD"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CRD2 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Silver Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR SilverKey : StrifeKey 38
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 144, 140, 143
|
||||
Inventory.Icon "I_KY2S"
|
||||
Tag "Silver_Key"
|
||||
Inventory.PickupMessage "$TXT_SILVERKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
KY2S A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Oracle Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR OracleKey : StrifeKey 61
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 145, 141, 144
|
||||
Inventory.Icon "I_ORAC"
|
||||
Tag "Oracle_Key"
|
||||
Inventory.PickupMessage "$TXT_ORACLEKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ORAC A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Military ID --------------------------------------------------------------
|
||||
|
||||
ACTOR MilitaryID : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 146, 142, 145
|
||||
Inventory.Icon "I_GYID"
|
||||
Tag "Military ID"
|
||||
Inventory.PickupMessage "$TXT_MILITARYID"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
GYID A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Order Key ----------------------------------------------------------------
|
||||
|
||||
ACTOR OrderKey : StrifeKey 86
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 147, 143, 146
|
||||
Inventory.Icon "I_FUBR"
|
||||
Tag "Order_Key"
|
||||
Inventory.PickupMessage "$TXT_ORDERKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FUBR A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Warehouse Key ------------------------------------------------------------
|
||||
|
||||
ACTOR WarehouseKey : StrifeKey 166
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 148, 144, 147
|
||||
Inventory.Icon "I_WARE"
|
||||
Tag "Warehouse_Key"
|
||||
Inventory.PickupMessage "$TXT_WAREHOUSEKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
WARE A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Brass Key ----------------------------------------------------------------
|
||||
|
||||
ACTOR BrassKey : StrifeKey 39
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 149, 145, 148
|
||||
Inventory.Icon "I_KY3B"
|
||||
Tag "Brass_Key"
|
||||
Inventory.PickupMessage "$TXT_BRASSKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
KY3B A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Red Crystal Key ----------------------------------------------------------
|
||||
|
||||
ACTOR RedCrystalKey : StrifeKey 192
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 150, 146, 149
|
||||
Inventory.Icon "I_RCRY"
|
||||
Tag "Red_Crystal_Key"
|
||||
Inventory.PickupMessage "$TXT_REDCRYSTAL"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RCRY A -1 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Blue Crystal Key ---------------------------------------------------------
|
||||
|
||||
ACTOR BlueCrystalKey : StrifeKey 193
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 151, 147, 150
|
||||
Inventory.Icon "I_BCRY"
|
||||
Tag "Blue_Crystal_Key"
|
||||
Inventory.PickupMessage "$TXT_BLUECRYSTAL"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BCRY A -1 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Chapel Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR ChapelKey : StrifeKey 195
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 152, 148, 151
|
||||
Inventory.Icon "I_CHAP"
|
||||
Tag "Chapel_Key"
|
||||
Inventory.PickupMessage "$TXT_CHAPELKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CHAP A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Catacomb Key -------------------------------------------------------------
|
||||
|
||||
ACTOR CatacombKey : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 153, 149, 152
|
||||
Inventory.Icon "I_TUNL"
|
||||
Tag "Catacomb_Key" // "Tunnel_Key" in the Teaser
|
||||
Inventory.GiveQuest 28
|
||||
Inventory.PickupMessage "$TXT_CATACOMBKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TUNL A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Security Key -------------------------------------------------------------
|
||||
|
||||
ACTOR SecurityKey : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 154, 150, 153
|
||||
Inventory.Icon "I_SECK"
|
||||
Tag "Security_Key"
|
||||
Inventory.PickupMessage "$TXT_SECURITYKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SECK A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Core Key -----------------------------------------------------------------
|
||||
|
||||
ACTOR CoreKey : StrifeKey 236
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 155, 151, 154
|
||||
Inventory.Icon "I_GOID"
|
||||
Tag "Core_Key" // "New_Key1" in the Teaser
|
||||
Inventory.PickupMessage "$TXT_COREKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
GOID A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Mauler Key ---------------------------------------------------------------
|
||||
|
||||
ACTOR MaulerKey : StrifeKey 233
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 156, 152, 155
|
||||
Inventory.Icon "I_BLTK"
|
||||
Tag "Mauler_Key" // "New_Key2" in the Teaser
|
||||
Inventory.PickupMessage "$TXT_MAULERKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BLTK A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Factory Key --------------------------------------------------------------
|
||||
|
||||
ACTOR FactoryKey : StrifeKey 234
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 157, 153, 156
|
||||
Inventory.Icon "I_PROC"
|
||||
Tag "Factory_Key" // "New_Key3" in the Teaser
|
||||
Inventory.PickupMessage "$TXT_FACTORYKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PROC A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Mine Key -----------------------------------------------------------------
|
||||
|
||||
ACTOR MineKey : StrifeKey 235
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 158, 154, 157
|
||||
Inventory.Icon "I_MINE" // "New_Key4" in the Teaser
|
||||
Tag "MINE_KEY"
|
||||
Inventory.PickupMessage "$TXT_MINEKEY"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MINE A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// New Key5 -----------------------------------------------------------------
|
||||
|
||||
ACTOR NewKey5 : StrifeKey
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 159, 155, 158
|
||||
Inventory.Icon "I_BLTK"
|
||||
Tag "New_Key5"
|
||||
Inventory.PickupMessage "$TXT_NEWKEY5"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BLTK A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Oracle Pass --------------------------------------------------------------
|
||||
|
||||
ACTOR OraclePass : Inventory
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 311, 292, 309
|
||||
+INVENTORY.INVBAR
|
||||
Inventory.Icon "I_OTOK"
|
||||
Inventory.GiveQuest 18
|
||||
Inventory.PickupMessage "$TXT_ORACLEPASS"
|
||||
Tag "Oracle_Pass"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
OTOK A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
1659
wadsrc/decorate/strife/strifestuff.txt
Normal file
1659
wadsrc/decorate/strife/strifestuff.txt
Normal file
File diff suppressed because it is too large
Load diff
61
wadsrc/decorate/strife/zombie.txt
Normal file
61
wadsrc/decorate/strife/zombie.txt
Normal file
|
@ -0,0 +1,61 @@
|
|||
|
||||
// Zombie -------------------------------------------------------------------
|
||||
|
||||
ACTOR Zombie : StrifeHumanoid 169
|
||||
{
|
||||
Game Strife
|
||||
Health 31
|
||||
Radius 20
|
||||
Height 56
|
||||
PainChance 0
|
||||
+SOLID
|
||||
+SHOOTABLE
|
||||
+FLOORCLIP
|
||||
+CANPASS
|
||||
+CANPUSHWALLS
|
||||
+ACTIVATEMCROSS
|
||||
MinMissileChance 150
|
||||
MaxStepHeight 16
|
||||
MaxDropOffHeight 32
|
||||
Translation 0
|
||||
ConversationID 28, -1, -1
|
||||
DeathSound "zombie/death"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PEAS A 5 A_CheckTerrain
|
||||
Loop
|
||||
Pain:
|
||||
AGRD A 5 A_CheckTerrain
|
||||
Loop
|
||||
Death:
|
||||
GIBS M 5 A_TossGib
|
||||
GIBS N 5 A_XScream
|
||||
GIBS O 5 A_NoBlocking
|
||||
GIBS PQRST 4 A_TossGib
|
||||
GIBS U 5
|
||||
GIBS V 1400
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Zombie Spawner -----------------------------------------------------------
|
||||
|
||||
ACTOR ZombieSpawner 170
|
||||
{
|
||||
Game Strife
|
||||
Health 20
|
||||
+SHOOTABLE
|
||||
+NOSECTOR
|
||||
RenderStyle None
|
||||
ConversationID 30, -1, -1
|
||||
ActiveSound "zombie/spawner" // Does Strife use this somewhere else?
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 175 A_SpawnItem("Zombie", 0.1, 0)
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
|
@ -986,6 +986,66 @@ TXT_NEED_BRASSKEY = "You need the Brass Key";
|
|||
TXT_NEED_REDCRYSTAL = "You need the Red Crystal";
|
||||
TXT_NEED_BLUECRYSTAL = "You need the Blue Crystal";
|
||||
|
||||
// Strife Quest messages
|
||||
|
||||
TXT_QUEST_14 = "You've Blown Up the Crystal";
|
||||
TXT_QUEST_16 = "You've Blown Up the Gates";
|
||||
TXT_QUEST_27 = "You've Blown Up the Computer";
|
||||
|
||||
TXT_KILLED_BISHOP = "You Killed The Bishop!";
|
||||
TXT_KILLED_ORACLE = "You've Killed The Oracle!";
|
||||
TXT_KILLED_MACIL = "You Killed Macil!";
|
||||
TXT_KILLED_LOREMASTER = "You've Killed the Loremaster!";
|
||||
|
||||
// Strife pickup messages
|
||||
|
||||
TXT_METALARMOR = "You picked up the Metal Armor.";
|
||||
TXT_LEATHERARMOR = "You picked up the Leather Armor.";
|
||||
TXT_MEDPATCH = "You picked up the Med patch.";
|
||||
TXT_MEDICALKIT = "You picked up the Medical kit.";
|
||||
TXT_SURGERYKIT = "You picked up the Surgery Kit.";
|
||||
TXT_STRIFEMAP = "You picked up the map";
|
||||
TXT_BELDINSRING = "You picked up the ring.";
|
||||
TXT_OFFERINGCHALICE = "You picked up the Offering Chalice.";
|
||||
TXT_EAR = "You picked up the ear.";
|
||||
TXT_BROKENCOUPLING = "You picked up the broken power coupling.";
|
||||
TXT_SHADOWARMOR = "You picked up the Shadow armor.";
|
||||
TXT_ENVSUIT = "You picked up the Environmental Suit.";
|
||||
TXT_GUARDUNIFORM = "You picked up the Guard Uniform.";
|
||||
TXT_OFFICERSUNIFORM = "You picked up the Officer's Uniform.";
|
||||
TXT_REPORT = "You picked up the report.";
|
||||
TXT_INFO = "You picked up the info.";
|
||||
TXT_TARGETER = "You picked up the Targeter.";
|
||||
|
||||
TXT_BASEKEY = "You picked up the Base Key.";
|
||||
TXT_GOVSKEY = "You picked up the Govs Key.";
|
||||
TXT_PASSCARD = "You picked up the Passcard.";
|
||||
TXT_IDBADGE = "You picked up the ID Badge.";
|
||||
TXT_PRISONKEY = "You picked up the Prison Key.";
|
||||
TXT_SEVEREDHAND = "You picked up the Severed Hand.";
|
||||
TXT_POWER1KEY = "You picked up the Power1 Key.";
|
||||
TXT_POWER2KEY = "You picked up the Power2 Key.";
|
||||
TXT_POWER3KEY = "You picked up the Power3 Key.";
|
||||
TXT_GOLDKEY = "You picked up the Gold Key.";
|
||||
TXT_IDCARD = "You picked up the ID Card.";
|
||||
TXT_SILVERKEY = "You picked up the Silver Key.";
|
||||
TXT_ORACLEKEY = "You picked up the Oracle Key.";
|
||||
TXT_MILITARYID = "You picked up the Military ID.";
|
||||
TXT_ORDERKEY = "You picked up the Order Key.";
|
||||
TXT_WAREHOUSEKEY = "You picked up the Warehouse Key.";
|
||||
TXT_BRASSKEY = "You picked up the Brass Key.";
|
||||
TXT_REDCRYSTAL = "You picked up the Red Crystal Key.";
|
||||
TXT_BLUECRYSTAL = "You picked up the Blue Crystal Key.";
|
||||
TXT_CHAPELKEY = "You picked up the Chapel Key.";
|
||||
TXT_CATACOMBKEY = "You picked up the Catacomb Key.";
|
||||
TXT_SECURITYKEY = "You picked up the Security Key.";
|
||||
TXT_COREKEY = "You picked up the Core Key.";
|
||||
TXT_MAULERKEY = "You picked up the Mauler Key.";
|
||||
TXT_FACTORYKEY = "You picked up the Factory Key.";
|
||||
TXT_MINEKEY = "You picked up the Mine Key.";
|
||||
TXT_NEWKEY5 = "You picked up the New Key5.";
|
||||
TXT_ORACLEPASS = "You picked up the Oracle Pass.";
|
||||
|
||||
// Bloodbath announcer
|
||||
|
||||
BBA_BONED = "%k boned %o like a fish";
|
||||
|
|
|
@ -548,6 +548,16 @@ PD_ANY = "Una chiave qualunque aprira' questa porta";
|
|||
PD_ALL3 = "Ti servono tutte e tre le chiavi per aprire questa porta";
|
||||
PD_ALL6 = "Ti servono tutte e sei le chiavi per aprire questa porta";
|
||||
|
||||
PD_ALL3O = "Ti servono tutte e tre le chiavi per attivare questo oggetto ";
|
||||
PD_ALL6O = "Ti servono tutte e tre le chiavi per attivare questo oggetto ";
|
||||
PD_BLUECO = "ti serve una tessera blu per attivare questo oggetto ";
|
||||
PD_REDCO = "ti serve una tessera rossa per attivare questo oggetto ";
|
||||
PD_YELLOWCO = "ti serve una tessera gialla per attivare questo oggetto ";
|
||||
PD_BLUESO = "ti serve una chiave-teschio blu per attivare questo oggetto ";
|
||||
PD_REDSO = "ti serve una chiave-teschio rossa per attivare questo oggetto ";
|
||||
PD_YELLOWSO = "ti serve una chiave-teschio gialla per attivare questo oggetto ";
|
||||
|
||||
|
||||
// Gameflow messages
|
||||
TXT_FRAGLIMIT = "Fraglimit raggiunto.";
|
||||
TXT_TIMELIMIT = "Timelimit raggiunto.";
|
||||
|
|
|
@ -301,6 +301,39 @@
|
|||
<Filter
|
||||
Name="Strife"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\decorate\strife\beggars.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\merchants.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\peasants.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\questitems.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\ratbuddy.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\rebels.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\strifearmor.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\strifeitems.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\strifekeys.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\strifestuff.txt">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\decorate\strife\zombie.txt">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Raven"
|
||||
|
|
|
@ -209,3 +209,15 @@ actors/hexen/hexenspecialdecs.txt decorate/hexen/hexenspecialdecs.txt
|
|||
actors/hexen/puzzleitems.txt decorate/hexen/puzzleitems.txt
|
||||
actors/hexen/scriptprojectiles.txt decorate/hexen/scriptprojectiles.txt
|
||||
actors/hexen/speedboots.txt decorate/hexen/speedboots.txt
|
||||
|
||||
actors/strife/beggars.txt decorate/strife/beggars.txt
|
||||
actors/strife/merchants.txt decorate/strife/merchants.txt
|
||||
actors/strife/peasants.txt decorate/strife/peasants.txt
|
||||
actors/strife/questitems.txt decorate/strife/questitems.txt
|
||||
actors/strife/ratbuddy.txt decorate/strife/ratbuddy.txt
|
||||
actors/strife/strifearmor.txt decorate/strife/strifearmor.txt
|
||||
actors/strife/strifeitems.txt decorate/strife/strifeitems.txt
|
||||
actors/strife/strifekeys.txt decorate/strife/strifekeys.txt
|
||||
actors/strife/strifestuff.txt decorate/strife/strifestuff.txt
|
||||
actors/strife/zombie.txt decorate/strife/zombie.txt
|
||||
|
||||
|
|
30
zdoom.vcproj
30
zdoom.vcproj
|
@ -3903,21 +3903,6 @@
|
|||
AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" "/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_hexen\a_scriptprojectiles.cpp">
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" "/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" "/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_hexen\a_serpent.cpp">
|
||||
<FileConfiguration
|
||||
|
@ -4042,12 +4027,6 @@
|
|||
<File
|
||||
RelativePath=".\src\g_strife\a_programmer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_questitems.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_ratbuddy.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_reaver.cpp">
|
||||
</File>
|
||||
|
@ -4066,9 +4045,6 @@
|
|||
<File
|
||||
RelativePath=".\src\g_strife\a_strifeammo.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_strifearmor.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_strifebishop.cpp">
|
||||
</File>
|
||||
|
@ -4078,9 +4054,6 @@
|
|||
<File
|
||||
RelativePath=".\src\g_strife\a_strifeitems.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_strifekeys.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_strifeplayer.cpp">
|
||||
</File>
|
||||
|
@ -4105,9 +4078,6 @@
|
|||
<File
|
||||
RelativePath=".\src\g_strife\a_thingstoblowup.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\a_zombie.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\g_strife\strife_sbar.cpp">
|
||||
</File>
|
||||
|
|
Loading…
Reference in a new issue