mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-27 22:42:29 +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_heresiarch.cpp \
|
||||||
a_hexenspecialdecs.cpp a_iceguy.cpp a_korax.cpp a_mageboss.cpp a_magecone.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_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 \
|
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 \
|
hexen_sbar.cpp a_artiegg.cpp a_artitele.cpp a_minotaur.cpp a_ravenambient.cpp \
|
||||||
a_acolyte.cpp a_alienspectres.cpp \
|
a_acolyte.cpp a_alienspectres.cpp \
|
||||||
a_beggars.cpp a_coin.cpp a_crusader.cpp a_entityboss.cpp a_inquisitor.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_loremaster.cpp a_macil.cpp a_oracle.cpp \
|
||||||
a_programmer.cpp a_questitems.cpp a_ratbuddy.cpp a_reaver.cpp a_rebels.cpp \
|
a_programmer.cpp a_reaver.cpp a_rebels.cpp \
|
||||||
a_sentinel.cpp a_spectral.cpp a_stalker.cpp a_strifeammo.cpp a_strifearmor.cpp \
|
a_sentinel.cpp a_spectral.cpp a_stalker.cpp a_strifeammo.cpp \
|
||||||
a_strifebishop.cpp a_strifeitems.cpp a_strifekeys.cpp a_strifeplayer.cpp \
|
a_strifebishop.cpp a_strifeitems.cpp a_strifeplayer.cpp \
|
||||||
a_strifestuff.cpp a_strifeweapons.cpp a_templar.cpp a_thingstoblowup.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_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_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 \
|
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
|
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.
|
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
|
May 5, 2006
|
||||||
- Fixed: Scanned IWAD paths were not freed if you exited without selecting one.
|
- Fixed: Scanned IWAD paths were not freed if you exited without selecting one.
|
||||||
- Fixed: Dynamically allocated cvars were not freed on exit.
|
- Fixed: Dynamically allocated cvars were not freed on exit.
|
||||||
|
@ -40,6 +79,8 @@ May 4, 2006
|
||||||
were missing game filters.
|
were missing game filters.
|
||||||
|
|
||||||
May 4, 2006 (Changes by Graf Zahl)
|
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_Puzzleitems.cpp and parts of A_HexenSpecialdecs.cpp to DECORATE.
|
||||||
- Converted A_Hexendecorations.cpp to DECORATE.
|
- Converted A_Hexendecorations.cpp to DECORATE.
|
||||||
- Changed the lower decal spawning code to transfer the main decal's color if
|
- 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
|
- 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: Dehacked patches weren't loaded when not playing Doom.
|
||||||
- Fixed: Thing_Remove must not remove living players from the map.
|
- 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.
|
made it impossible to define music in MAPINFO for Hexen.
|
||||||
- Fixed: Resurrecting a morphed player must first restore the unmorphed
|
- Fixed: Resurrecting a morphed player must first restore the unmorphed
|
||||||
version.
|
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: 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 INDIANA cheat in Hexen gives 25 of each item, not just 1.
|
||||||
- Fixed: The stair builder's compatibility mode must do a linear search
|
- 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
|
- Fixed: Any monster with a TakeSpecialDamage method should call the
|
||||||
super class's method instead of simply returning the damage amount.
|
super class's method instead of simply returning the damage amount.
|
||||||
- Fixed: Hexen's mash monsters cannot be frozen. No matter how you kill
|
- 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_BOUNCEONACTORS = 0x00000008, // bouncing missile doesn't explode when it hits an actor
|
||||||
MF5_EXPLODEONWATER = 0x00000010, // bouncing missile explpdes when hitting a water surface
|
MF5_EXPLODEONWATER = 0x00000010, // bouncing missile explpdes when hitting a water surface
|
||||||
MF5_AVOIDINGDROPOFF = 0x00000020, // Used to move monsters away fro dropoffs
|
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 ---
|
// --- mobj.renderflags ---
|
||||||
|
|
||||||
|
@ -398,6 +399,8 @@ enum
|
||||||
AMETA_BloodColor, // colorized blood
|
AMETA_BloodColor, // colorized blood
|
||||||
AMETA_GibHealth, // negative health below which this monster dies an extreme death
|
AMETA_GibHealth, // negative health below which this monster dies an extreme death
|
||||||
AMETA_WoundHealth, // health needed to enter wound state
|
AMETA_WoundHealth, // health needed to enter wound state
|
||||||
|
AMETA_PoisonDamage, // Amount of poison damage
|
||||||
|
AMETA_FastSpeed, // Speed in fast mode
|
||||||
};
|
};
|
||||||
|
|
||||||
// Map Object definition.
|
// 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];
|
binding = Bindings[ev->data1];
|
||||||
dclick = false;
|
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)
|
if (ev->type == EV_KeyUp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -124,7 +124,8 @@ FState AStaff::States[] =
|
||||||
|
|
||||||
IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
|
IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
|
||||||
PROP_Weapon_SelectionOrder (3800)
|
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_UpState (S_STAFFUP)
|
||||||
PROP_Weapon_DownState (S_STAFFDOWN)
|
PROP_Weapon_DownState (S_STAFFDOWN)
|
||||||
PROP_Weapon_ReadyState (S_STAFFREADY)
|
PROP_Weapon_ReadyState (S_STAFFREADY)
|
||||||
|
@ -134,7 +135,7 @@ IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
|
||||||
END_DEFAULTS
|
END_DEFAULTS
|
||||||
|
|
||||||
IMPLEMENT_STATELESS_ACTOR (AStaffPowered, Heretic, -1, 0)
|
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_UpState (S_STAFFUP2)
|
||||||
PROP_Weapon_DownState (S_STAFFDOWN2)
|
PROP_Weapon_DownState (S_STAFFDOWN2)
|
||||||
PROP_Weapon_ReadyState (S_STAFFREADY2)
|
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 ();
|
virtual bool ShouldStay ();
|
||||||
};
|
};
|
||||||
|
|
||||||
class AStrifeKey : public AKey
|
|
||||||
{
|
|
||||||
DECLARE_STATELESS_ACTOR (AStrifeKey, AKey)
|
|
||||||
};
|
|
||||||
|
|
||||||
bool P_CheckKeys (AActor *owner, int keynum, bool remote);
|
bool P_CheckKeys (AActor *owner, int keynum, bool remote);
|
||||||
void P_InitKeyMessages ();
|
void P_InitKeyMessages ();
|
||||||
int P_GetMapColorForLock (int lock);
|
int P_GetMapColorForLock (int lock);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "gstrings.h"
|
#include "gstrings.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
|
#include "a_strifeglobal.h"
|
||||||
|
|
||||||
static FRandom pr_restore ("RestorePos");
|
static FRandom pr_restore ("RestorePos");
|
||||||
|
|
||||||
|
@ -1102,6 +1103,21 @@ bool AInventory::DoRespawn ()
|
||||||
return true;
|
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
|
// AInventory :: TryPickup
|
||||||
|
@ -1169,6 +1185,8 @@ bool AInventory::TryPickup (AActor *toucher)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GiveQuest(toucher);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1271,6 +1289,7 @@ bool ACustomInventory::TryPickup (AActor *toucher)
|
||||||
}
|
}
|
||||||
else if (useok || ItemFlags & IF_ALWAYSPICKUP)
|
else if (useok || ItemFlags & IF_ALWAYSPICKUP)
|
||||||
{
|
{
|
||||||
|
GiveQuest (toucher);
|
||||||
GoAwayAndDie();
|
GoAwayAndDie();
|
||||||
}
|
}
|
||||||
return useok;
|
return useok;
|
||||||
|
@ -2049,6 +2068,7 @@ IMPLEMENT_ABSTRACT_ACTOR (AMapRevealer)
|
||||||
bool AMapRevealer::TryPickup (AActor *toucher)
|
bool AMapRevealer::TryPickup (AActor *toucher)
|
||||||
{
|
{
|
||||||
level.flags |= LEVEL_ALLMAP;
|
level.flags |= LEVEL_ALLMAP;
|
||||||
|
GiveQuest (toucher);
|
||||||
GoAwayAndDie ();
|
GoAwayAndDie ();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,7 @@ enum
|
||||||
{
|
{
|
||||||
AIMETA_BASE = 0x71000,
|
AIMETA_BASE = 0x71000,
|
||||||
AIMETA_PickupMessage, // string
|
AIMETA_PickupMessage, // string
|
||||||
|
AIMETA_GiveQuest, // optionally give one of the quest items.
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -145,6 +146,9 @@ public:
|
||||||
|
|
||||||
virtual PalEntry GetBlend ();
|
virtual PalEntry GetBlend ();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void GiveQuest(AActor * toucher);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static int StaticLastMessageTic;
|
static int StaticLastMessageTic;
|
||||||
static const char *StaticLastMessage;
|
static const char *StaticLastMessage;
|
||||||
|
@ -260,7 +264,7 @@ enum
|
||||||
WIF_WIMPY_WEAPON = 0x00000200, // change away when ammo for another weapon is replenished
|
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_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_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_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)
|
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
|
// Already has the piece, check if mana needed
|
||||||
if (!gaveAmmo) return false;
|
if (!gaveAmmo) return false;
|
||||||
|
GiveQuest (toucher);
|
||||||
GoAwayAndDie();
|
GoAwayAndDie();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -114,6 +115,7 @@ bool AWeaponPiece::TryPickup (AActor *toucher)
|
||||||
FullWeapon->AmmoGive2=Defaults->AmmoGive2;
|
FullWeapon->AmmoGive2=Defaults->AmmoGive2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
GiveQuest (toucher);
|
||||||
GoAwayAndDie();
|
GoAwayAndDie();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "m_random.h"
|
#include "m_random.h"
|
||||||
#include "a_strifeglobal.h"
|
#include "a_strifeglobal.h"
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
|
#include "gstrings.h"
|
||||||
|
|
||||||
static FRandom pr_spectrespawn ("AlienSpectreSpawn");
|
static FRandom pr_spectrespawn ("AlienSpectreSpawn");
|
||||||
static FRandom pr_212e4 ("212e4");
|
static FRandom pr_212e4 ("212e4");
|
||||||
|
@ -510,13 +511,13 @@ void A_AlienSpectreDeath (AActor *self)
|
||||||
}
|
}
|
||||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre2))
|
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre2))
|
||||||
{
|
{
|
||||||
C_MidPrint("You Killed The Bishop!");
|
C_MidPrint(GStrings("TXT_KILLED_BISHOP"));
|
||||||
log = 74;
|
log = 74;
|
||||||
player->GiveInventoryType (QuestItemClasses[20]);
|
player->GiveInventoryType (QuestItemClasses[20]);
|
||||||
}
|
}
|
||||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre3))
|
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.
|
// If there are any Oracles still alive, kill them.
|
||||||
TThinkerIterator<AOracle> it;
|
TThinkerIterator<AOracle> it;
|
||||||
AOracle *oracle;
|
AOracle *oracle;
|
||||||
|
@ -546,7 +547,7 @@ void A_AlienSpectreDeath (AActor *self)
|
||||||
}
|
}
|
||||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre4))
|
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre4))
|
||||||
{
|
{
|
||||||
C_MidPrint("You Killed Macil!");
|
C_MidPrint(GStrings("TXT_KILLED_MACIL"));
|
||||||
player->GiveInventoryType (QuestItemClasses[23]);
|
player->GiveInventoryType (QuestItemClasses[23]);
|
||||||
if (player->FindInventory (QuestItemClasses[24]) == NULL)
|
if (player->FindInventory (QuestItemClasses[24]) == NULL)
|
||||||
{ // Richter has taken over. Macil is a snake.
|
{ // Richter has taken over. Macil is a snake.
|
||||||
|
@ -559,7 +560,7 @@ void A_AlienSpectreDeath (AActor *self)
|
||||||
}
|
}
|
||||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre5))
|
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre5))
|
||||||
{
|
{
|
||||||
C_MidPrint("You've Killed the Loremaster!");
|
C_MidPrint(GStrings("TXT_KILLED_LOREMASTER"));
|
||||||
ASigil *sigil;
|
ASigil *sigil;
|
||||||
|
|
||||||
player->GiveInventoryType (QuestItemClasses[25]);
|
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);
|
AInventory *CreateCopy (AActor *other);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AQuestItem : public AInventory
|
|
||||||
{
|
|
||||||
DECLARE_ACTOR (AQuestItem, AInventory)
|
|
||||||
};
|
|
||||||
|
|
||||||
class AOracle : public AActor
|
class AOracle : public AActor
|
||||||
{
|
{
|
||||||
DECLARE_ACTOR (AOracle, AActor)
|
DECLARE_ACTOR (AOracle, AActor)
|
||||||
|
|
|
@ -10,136 +10,7 @@
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
#include "a_strifeweaps.h"
|
#include "a_strifeweaps.h"
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
|
#include "a_keys.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
|
|
||||||
|
|
||||||
// Degnin Ore ---------------------------------------------------------------
|
// 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 -------------------------------------------------------------
|
// Gun Training -------------------------------------------------------------
|
||||||
|
|
||||||
class AGunTraining : public AInventory
|
class AGunTraining : public AInventory
|
||||||
|
@ -653,71 +173,6 @@ bool AHealthTraining::TryPickup (AActor *toucher)
|
||||||
return false;
|
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 ------------------------------------------------------------------
|
// Scanner ------------------------------------------------------------------
|
||||||
|
|
||||||
class AScanner : public APowerupGiver
|
class AScanner : public APowerupGiver
|
||||||
|
@ -765,6 +220,62 @@ bool AScanner::Use (bool pickup)
|
||||||
return Super::Use (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 ---------------------
|
// Dummy items. They are just used by Strife to perform ---------------------
|
||||||
// actions and cannot be held. ----------------------------------------------
|
// 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 "c_console.h"
|
||||||
#include "p_enemy.h"
|
#include "p_enemy.h"
|
||||||
#include "a_action.h"
|
#include "a_action.h"
|
||||||
|
#include "gstrings.h"
|
||||||
|
|
||||||
static FRandom pr_bang4cloud ("Bang4Cloud");
|
static FRandom pr_bang4cloud ("Bang4Cloud");
|
||||||
static FRandom pr_lightout ("LightOut");
|
static FRandom pr_lightout ("LightOut");
|
||||||
|
@ -14,11 +15,6 @@ void A_TossGib (AActor *);
|
||||||
void A_LoopActiveSound (AActor *);
|
void A_LoopActiveSound (AActor *);
|
||||||
void A_LightGoesOut (AActor *);
|
void A_LightGoesOut (AActor *);
|
||||||
|
|
||||||
class ARubble1 : public AActor
|
|
||||||
{
|
|
||||||
DECLARE_ACTOR (ARubble1, AActor)
|
|
||||||
};
|
|
||||||
|
|
||||||
// A Cloud used for varius explosions ---------------------------------------
|
// A Cloud used for varius explosions ---------------------------------------
|
||||||
// This actor has no direct equivalent in strife. To create this, Strife
|
// 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
|
// 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)
|
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
|
// Give one of these quest items to every player in the game
|
||||||
for (int i = 0; i < MAXPLAYERS; ++i)
|
for (int i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
if (playeringame[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))
|
if (!item->TryPickup (players[i].mo))
|
||||||
{
|
{
|
||||||
item->Destroy ();
|
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)
|
if (name != NULL)
|
||||||
{
|
{
|
||||||
C_MidPrint (name);
|
C_MidPrint (name);
|
||||||
|
@ -272,7 +272,7 @@ void A_LightGoesOut (AActor *self)
|
||||||
|
|
||||||
for (int i = 0; i < 8; ++i)
|
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)
|
if (foo != NULL)
|
||||||
{
|
{
|
||||||
int t = pr_lightout() & 15;
|
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
|
// Damage types
|
||||||
xx(Fire)
|
xx(Fire)
|
||||||
xx(Ice)
|
//xx(Ice) already defined above
|
||||||
xx(Disintegrate)
|
xx(Disintegrate)
|
||||||
xx(Water)
|
xx(Water)
|
||||||
xx(Slime)
|
xx(Slime)
|
||||||
|
|
|
@ -643,7 +643,7 @@ static void TakeStrifeItem (const TypeInfo *itemtype, int amount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Don't take quest items.
|
// Don't take quest items.
|
||||||
if (itemtype->IsDescendantOf (RUNTIME_CLASS(AQuestItem)))
|
if (itemtype->IsDescendantOf (TypeInfo::FindType("QuestItem")))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Don't take keys
|
// Don't take keys
|
||||||
|
|
|
@ -1393,7 +1393,16 @@ FUNC(LS_ACS_ExecuteAlways)
|
||||||
FUNC(LS_ACS_LockedExecute)
|
FUNC(LS_ACS_LockedExecute)
|
||||||
// ACS_LockedExecute (script, map, s_arg1, s_arg2, lock)
|
// 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;
|
return false;
|
||||||
else
|
else
|
||||||
return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0);
|
return LS_ACS_Execute (ln, it, backSide, arg0, arg1, arg2, arg3, 0);
|
||||||
|
@ -2556,8 +2565,8 @@ lnSpecFunc LineSpecials[256] =
|
||||||
LS_Door_Raise,
|
LS_Door_Raise,
|
||||||
LS_Door_LockedRaise,
|
LS_Door_LockedRaise,
|
||||||
LS_Door_Animated,
|
LS_Door_Animated,
|
||||||
LS_Autosave, // Autosave
|
LS_Autosave,
|
||||||
LS_NOP, // 16
|
LS_NOP, // Transfer_WallLight
|
||||||
LS_NOP, // 17
|
LS_NOP, // 17
|
||||||
LS_NOP, // 18
|
LS_NOP, // 18
|
||||||
LS_NOP, // 19
|
LS_NOP, // 19
|
||||||
|
@ -2626,7 +2635,7 @@ lnSpecFunc LineSpecials[256] =
|
||||||
LS_ACS_Terminate,
|
LS_ACS_Terminate,
|
||||||
LS_ACS_LockedExecute,
|
LS_ACS_LockedExecute,
|
||||||
LS_ACS_ExecuteWithResult,
|
LS_ACS_ExecuteWithResult,
|
||||||
LS_NOP, // 85
|
LS_ACS_LockedExecuteDoor,
|
||||||
LS_NOP, // 86
|
LS_NOP, // 86
|
||||||
LS_NOP, // 87
|
LS_NOP, // 87
|
||||||
LS_NOP, // 88
|
LS_NOP, // 88
|
||||||
|
|
|
@ -127,6 +127,7 @@ typedef enum {
|
||||||
ACS_Terminate = 82,
|
ACS_Terminate = 82,
|
||||||
ACS_LockedExecute = 83,
|
ACS_LockedExecute = 83,
|
||||||
ACS_ExecuteWithResult = 84,
|
ACS_ExecuteWithResult = 84,
|
||||||
|
ACS_LockedExecuteDoor = 85,
|
||||||
|
|
||||||
Polyobj_OR_RotateLeft = 90,
|
Polyobj_OR_RotateLeft = 90,
|
||||||
Polyobj_OR_RotateRight = 91,
|
Polyobj_OR_RotateRight = 91,
|
||||||
|
|
|
@ -2551,7 +2551,7 @@ BOOL PTR_AimTraverse (intercept_t* in)
|
||||||
if ((th->flags3 & MF3_GHOST) &&
|
if ((th->flags3 & MF3_GHOST) &&
|
||||||
shootthing->player && // [RH] Be sure shootthing is a player
|
shootthing->player && // [RH] Be sure shootthing is a player
|
||||||
shootthing->player->ReadyWeapon &&
|
shootthing->player->ReadyWeapon &&
|
||||||
(shootthing->player->ReadyWeapon->WeaponFlags & WIF_HITS_GHOSTS))
|
(shootthing->player->ReadyWeapon->flags2 & MF2_THRUGHOST))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2695,7 +2695,7 @@ void P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
|
|
||||||
hitGhosts = (t1->player != NULL &&
|
hitGhosts = (t1->player != NULL &&
|
||||||
t1->player->ReadyWeapon != 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,
|
if (!Trace (t1->x, t1->y, shootz, t1->Sector, vx, vy, vz, distance,
|
||||||
MF_SHOOTABLE, ML_BLOCKEVERYTHING, t1, trace,
|
MF_SHOOTABLE, ML_BLOCKEVERYTHING, t1, trace,
|
||||||
|
|
|
@ -89,6 +89,7 @@ static FRandom pr_spawnmapthing ("SpawnMapThing");
|
||||||
static FRandom pr_spawnpuff ("SpawnPuff");
|
static FRandom pr_spawnpuff ("SpawnPuff");
|
||||||
static FRandom pr_spawnblood ("SpawnBlood");
|
static FRandom pr_spawnblood ("SpawnBlood");
|
||||||
static FRandom pr_splatter ("BloodSplatter");
|
static FRandom pr_splatter ("BloodSplatter");
|
||||||
|
static FRandom pr_takedamage ("TakeDamage");
|
||||||
static FRandom pr_ripperblood ("RipperBlood");
|
static FRandom pr_ripperblood ("RipperBlood");
|
||||||
static FRandom pr_chunk ("Chunk");
|
static FRandom pr_chunk ("Chunk");
|
||||||
static FRandom pr_checkmissilespawn ("CheckMissileSpawn");
|
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->frame = st->GetFrame();
|
||||||
actor->renderflags = (actor->renderflags & ~RF_FULLBRIGHT) | st->GetFullbright();
|
actor->renderflags = (actor->renderflags & ~RF_FULLBRIGHT) | st->GetFullbright();
|
||||||
actor->touching_sectorlist = NULL; // NULL head of sector list // phares 3/13/98
|
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
|
// set subsector and/or block links
|
||||||
actor->LinkToWorld (SpawningMapThing);
|
actor->LinkToWorld (SpawningMapThing);
|
||||||
|
@ -4595,6 +4597,16 @@ int AActor::DoSpecialDamage (AActor *target, int damage)
|
||||||
}
|
}
|
||||||
else
|
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;
|
return damage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4607,6 +4619,16 @@ int AActor::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, in
|
||||||
// it needs to work.
|
// it needs to work.
|
||||||
FState *death;
|
FState *death;
|
||||||
|
|
||||||
|
if (flags5 & MF5_NODAMAGE)
|
||||||
|
{
|
||||||
|
target = source;
|
||||||
|
if (PainState != NULL && pr_takedamage() < PainChance)
|
||||||
|
{
|
||||||
|
SetState (PainState);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (DeathState != NULL)
|
if (DeathState != NULL)
|
||||||
{
|
{
|
||||||
return damage;
|
return damage;
|
||||||
|
|
|
@ -194,7 +194,7 @@ void DRotatePoly::Tick ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_Dist -= absSpeed;
|
m_Dist -= absSpeed;
|
||||||
if (m_Dist <= 0 && m_Dist+absSpeed>0)
|
if (m_Dist == 0)
|
||||||
{
|
{
|
||||||
polyobj_t *poly = GetPolyobj (m_PolyObj);
|
polyobj_t *poly = GetPolyobj (m_PolyObj);
|
||||||
if (poly->specialdata == this)
|
if (poly->specialdata == this)
|
||||||
|
|
|
@ -69,6 +69,8 @@
|
||||||
#include "thingdef.h"
|
#include "thingdef.h"
|
||||||
|
|
||||||
|
|
||||||
|
const TypeInfo *QuestItemClasses[31];
|
||||||
|
|
||||||
|
|
||||||
extern TArray<FActorInfo *> Decorations;
|
extern TArray<FActorInfo *> Decorations;
|
||||||
|
|
||||||
|
@ -221,6 +223,7 @@ static flagdef ActorFlags[]=
|
||||||
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, BOUNCEONACTORS, AActor, flags5),
|
DEFINE_FLAG(MF5, BOUNCEONACTORS, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, EXPLODEONWATER, AActor, flags5),
|
DEFINE_FLAG(MF5, EXPLODEONWATER, AActor, flags5),
|
||||||
|
DEFINE_FLAG(MF5, NODAMAGE, AActor, flags5),
|
||||||
|
|
||||||
// Effect flags
|
// Effect flags
|
||||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||||
|
@ -444,12 +447,14 @@ ACTOR(ClearShadow)
|
||||||
ACTOR(GetHurt)
|
ACTOR(GetHurt)
|
||||||
ACTOR(TurretLook)
|
ACTOR(TurretLook)
|
||||||
ACTOR(KlaxonBlare)
|
ACTOR(KlaxonBlare)
|
||||||
ACTOR(20e10)
|
ACTOR(CheckTerrain)
|
||||||
ACTOR(Countdown)
|
ACTOR(Countdown)
|
||||||
ACTOR(AlertMonsters)
|
ACTOR(AlertMonsters)
|
||||||
|
ACTOR(ClearSoundTarget)
|
||||||
ACTOR(FireAssaultGun)
|
ACTOR(FireAssaultGun)
|
||||||
ACTOR(PlaySound)
|
ACTOR(PlaySound)
|
||||||
ACTOR(PlayWeaponSound)
|
ACTOR(PlayWeaponSound)
|
||||||
|
ACTOR(FLoopActiveSound)
|
||||||
ACTOR(LoopActiveSound)
|
ACTOR(LoopActiveSound)
|
||||||
ACTOR(StopSound)
|
ACTOR(StopSound)
|
||||||
ACTOR(SeekerMissile)
|
ACTOR(SeekerMissile)
|
||||||
|
@ -500,6 +505,7 @@ ACTOR(GiveToTarget)
|
||||||
ACTOR(TakeFromTarget)
|
ACTOR(TakeFromTarget)
|
||||||
ACTOR(JumpIfInTargetInventory)
|
ACTOR(JumpIfInTargetInventory)
|
||||||
ACTOR(CountdownArg)
|
ACTOR(CountdownArg)
|
||||||
|
ACTOR(CustomMeleeAttack)
|
||||||
|
|
||||||
|
|
||||||
#include "d_dehackedactions.h"
|
#include "d_dehackedactions.h"
|
||||||
|
@ -620,8 +626,9 @@ AFuncDesc AFTable[]=
|
||||||
FUNC(A_KlaxonBlare, NULL)
|
FUNC(A_KlaxonBlare, NULL)
|
||||||
FUNC(A_Countdown, NULL)
|
FUNC(A_Countdown, NULL)
|
||||||
FUNC(A_AlertMonsters, NULL)
|
FUNC(A_AlertMonsters, NULL)
|
||||||
|
FUNC(A_ClearSoundTarget, NULL)
|
||||||
FUNC(A_FireAssaultGun, 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.
|
// Only selected original weapon functions will be available.
|
||||||
// All the attack pointers are somewhat tricky due to the way the flash state is handled
|
// 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_BulletAttack, NULL)
|
||||||
FUNC(A_PlaySound, "S" )
|
FUNC(A_PlaySound, "S" )
|
||||||
FUNC(A_PlayWeaponSound, "S" )
|
FUNC(A_PlayWeaponSound, "S" )
|
||||||
|
FUNC(A_FLoopActiveSound, NULL )
|
||||||
FUNC(A_LoopActiveSound, NULL )
|
FUNC(A_LoopActiveSound, NULL )
|
||||||
FUNC(A_StopSound, NULL )
|
FUNC(A_StopSound, NULL )
|
||||||
FUNC(A_SeekerMissile, "XX" )
|
FUNC(A_SeekerMissile, "XX" )
|
||||||
|
@ -684,6 +692,7 @@ AFuncDesc AFTable[]=
|
||||||
FUNC(A_GiveToTarget, "Mx" )
|
FUNC(A_GiveToTarget, "Mx" )
|
||||||
FUNC(A_TakeFromTarget, "Mx" )
|
FUNC(A_TakeFromTarget, "Mx" )
|
||||||
FUNC(A_CountdownArg, "X")
|
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());
|
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)
|
static void ActorConversationID (AActor *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
|
int convid;
|
||||||
|
|
||||||
SC_MustGetNumber();
|
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]");
|
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())
|
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)
|
if (sc_Number < 0 || sc_Number > max)
|
||||||
{
|
{
|
||||||
SC_ScriptError ("Translation must be in the range [0,%d]", 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;
|
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);
|
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) },
|
{ "dropitem", ActorDropItem, RUNTIME_CLASS(AActor) },
|
||||||
{ "explosiondamage", ActorExplosionDamage, RUNTIME_CLASS(AActor) },
|
{ "explosiondamage", ActorExplosionDamage, RUNTIME_CLASS(AActor) },
|
||||||
{ "explosionradius", ActorExplosionRadius, RUNTIME_CLASS(AActor) },
|
{ "explosionradius", ActorExplosionRadius, RUNTIME_CLASS(AActor) },
|
||||||
|
{ "fastspeed", ActorFastSpeed, RUNTIME_CLASS(AActor) },
|
||||||
{ "game", ActorGame, RUNTIME_CLASS(AActor) },
|
{ "game", ActorGame, RUNTIME_CLASS(AActor) },
|
||||||
{ "gibhealth", ActorGibHealth, RUNTIME_CLASS(AActor) },
|
{ "gibhealth", ActorGibHealth, RUNTIME_CLASS(AActor) },
|
||||||
{ "greetings", ActorGreetingsState, RUNTIME_CLASS(AActor) },
|
{ "greetings", ActorGreetingsState, RUNTIME_CLASS(AActor) },
|
||||||
|
@ -3456,6 +3510,7 @@ static const ActorProps props[] =
|
||||||
{ "ice", ActorIceState, RUNTIME_CLASS(AActor) },
|
{ "ice", ActorIceState, RUNTIME_CLASS(AActor) },
|
||||||
{ "inventory.amount", (apf)InventoryAmount, RUNTIME_CLASS(AInventory) },
|
{ "inventory.amount", (apf)InventoryAmount, RUNTIME_CLASS(AInventory) },
|
||||||
{ "inventory.defmaxamount", (apf)InventoryDefMaxAmount, 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.icon", (apf)InventoryIcon, RUNTIME_CLASS(AInventory) },
|
||||||
{ "inventory.maxamount", (apf)InventoryMaxAmount, RUNTIME_CLASS(AInventory) },
|
{ "inventory.maxamount", (apf)InventoryMaxAmount, RUNTIME_CLASS(AInventory) },
|
||||||
{ "inventory.pickupmessage", (apf)InventoryPickupmsg, RUNTIME_CLASS(AInventory) },
|
{ "inventory.pickupmessage", (apf)InventoryPickupmsg, RUNTIME_CLASS(AInventory) },
|
||||||
|
@ -3479,6 +3534,7 @@ static const ActorProps props[] =
|
||||||
{ "pain", ActorPainState, RUNTIME_CLASS(AActor) },
|
{ "pain", ActorPainState, RUNTIME_CLASS(AActor) },
|
||||||
{ "painchance", ActorPainChance, RUNTIME_CLASS(AActor) },
|
{ "painchance", ActorPainChance, RUNTIME_CLASS(AActor) },
|
||||||
{ "painsound", ActorPainSound, RUNTIME_CLASS(AActor) },
|
{ "painsound", ActorPainSound, RUNTIME_CLASS(AActor) },
|
||||||
|
{ "poisondamage", ActorPoisonDamage, RUNTIME_CLASS(AActor) },
|
||||||
{ "powerup.color", (apf)PowerupColor, RUNTIME_CLASS(APowerupGiver) },
|
{ "powerup.color", (apf)PowerupColor, RUNTIME_CLASS(APowerupGiver) },
|
||||||
{ "powerup.duration", (apf)PowerupDuration, RUNTIME_CLASS(APowerupGiver) },
|
{ "powerup.duration", (apf)PowerupDuration, RUNTIME_CLASS(APowerupGiver) },
|
||||||
{ "powerup.type", (apf)PowerupType, RUNTIME_CLASS(APowerupGiver) },
|
{ "powerup.type", (apf)PowerupType, RUNTIME_CLASS(APowerupGiver) },
|
||||||
|
@ -3496,6 +3552,7 @@ static const ActorProps props[] =
|
||||||
{ "spawnid", ActorSpawnID, RUNTIME_CLASS(AActor) },
|
{ "spawnid", ActorSpawnID, RUNTIME_CLASS(AActor) },
|
||||||
{ "speed", ActorSpeed, RUNTIME_CLASS(AActor) },
|
{ "speed", ActorSpeed, RUNTIME_CLASS(AActor) },
|
||||||
{ "states", ActorStates, RUNTIME_CLASS(AActor) },
|
{ "states", ActorStates, RUNTIME_CLASS(AActor) },
|
||||||
|
{ "tag", ActorTag, RUNTIME_CLASS(AActor) },
|
||||||
{ "translation", ActorTranslation, RUNTIME_CLASS(AActor) },
|
{ "translation", ActorTranslation, RUNTIME_CLASS(AActor) },
|
||||||
{ "weapon.ammogive", (apf)WeaponAmmoGive1, RUNTIME_CLASS(AWeapon) },
|
{ "weapon.ammogive", (apf)WeaponAmmoGive1, RUNTIME_CLASS(AWeapon) },
|
||||||
{ "weapon.ammogive1", (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_camelee ("CustomMelee");
|
||||||
static FRandom pr_cabullet ("CustomBullet");
|
static FRandom pr_cabullet ("CustomBullet");
|
||||||
static FRandom pr_cajump ("CustomJump");
|
static FRandom pr_cajump ("CustomJump");
|
||||||
|
static FRandom pr_custommelee ("CustomMelee2");
|
||||||
static FRandom pr_cwbullet ("CustomWpBullet");
|
static FRandom pr_cwbullet ("CustomWpBullet");
|
||||||
static FRandom pr_cwjump ("CustomWpJump");
|
static FRandom pr_cwjump ("CustomWpJump");
|
||||||
static FRandom pr_cwpunch ("CustomWpPunch");
|
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
|
// State jump function
|
||||||
|
@ -1045,7 +1084,7 @@ void A_SpawnItem(AActor * self)
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
|
|
||||||
const TypeInfo * missile= TypeInfo::FindType((const char *)StateParameters[index]);
|
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);
|
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||||
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
||||||
|
|
||||||
|
@ -1263,7 +1302,7 @@ void A_SetTranslucent(AActor * self)
|
||||||
if (mode != STYLE_Fuzzy)
|
if (mode != STYLE_Fuzzy)
|
||||||
{
|
{
|
||||||
if (self->alpha == 0) mode = STYLE_None;
|
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;
|
self->RenderStyle=mode;
|
||||||
|
|
|
@ -23,3 +23,14 @@
|
||||||
#include "actors/hexen/puzzleitems.txt"
|
#include "actors/hexen/puzzleitems.txt"
|
||||||
#include "actors/hexen/scriptprojectiles.txt"
|
#include "actors/hexen/scriptprojectiles.txt"
|
||||||
#include "actors/hexen/speedboots.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
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
TWTR I -1
|
Goto Super.Inactive
|
||||||
Stop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,8 +134,7 @@ ACTOR ZWallTorchUnlit : ZWallTorch 55
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
WLTR I -1
|
Goto Super.Inactive
|
||||||
Stop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,8 +219,7 @@ ACTOR ZFireBullUnlit : ZFireBull 8043
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
FBUL H -1
|
Goto Super.Inactive+2
|
||||||
Stop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,14 +276,13 @@ ACTOR ZCauldron : SwitchableDecoration 8069
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ACTOR ZCauldronUnlit : ZCauldron
|
ACTOR ZCauldronUnlit : ZCauldron 8070
|
||||||
{
|
{
|
||||||
Game Hexen
|
Game Hexen
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
CDRN A -1
|
Goto Super.Inactive
|
||||||
Stop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_REDCRYSTAL = "You need the Red Crystal";
|
||||||
TXT_NEED_BLUECRYSTAL = "You need the Blue 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
|
// Bloodbath announcer
|
||||||
|
|
||||||
BBA_BONED = "%k boned %o like a fish";
|
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_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_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
|
// Gameflow messages
|
||||||
TXT_FRAGLIMIT = "Fraglimit raggiunto.";
|
TXT_FRAGLIMIT = "Fraglimit raggiunto.";
|
||||||
TXT_TIMELIMIT = "Timelimit raggiunto.";
|
TXT_TIMELIMIT = "Timelimit raggiunto.";
|
||||||
|
|
|
@ -301,6 +301,39 @@
|
||||||
<Filter
|
<Filter
|
||||||
Name="Strife"
|
Name="Strife"
|
||||||
Filter="">
|
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>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Raven"
|
Name="Raven"
|
||||||
|
|
|
@ -209,3 +209,15 @@ actors/hexen/hexenspecialdecs.txt decorate/hexen/hexenspecialdecs.txt
|
||||||
actors/hexen/puzzleitems.txt decorate/hexen/puzzleitems.txt
|
actors/hexen/puzzleitems.txt decorate/hexen/puzzleitems.txt
|
||||||
actors/hexen/scriptprojectiles.txt decorate/hexen/scriptprojectiles.txt
|
actors/hexen/scriptprojectiles.txt decorate/hexen/scriptprojectiles.txt
|
||||||
actors/hexen/speedboots.txt decorate/hexen/speedboots.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" "/>
|
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>
|
||||||
</File>
|
</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
|
<File
|
||||||
RelativePath=".\src\g_hexen\a_serpent.cpp">
|
RelativePath=".\src\g_hexen\a_serpent.cpp">
|
||||||
<FileConfiguration
|
<FileConfiguration
|
||||||
|
@ -4042,12 +4027,6 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_programmer.cpp">
|
RelativePath=".\src\g_strife\a_programmer.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\src\g_strife\a_questitems.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\src\g_strife\a_ratbuddy.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_reaver.cpp">
|
RelativePath=".\src\g_strife\a_reaver.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
@ -4066,9 +4045,6 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_strifeammo.cpp">
|
RelativePath=".\src\g_strife\a_strifeammo.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\src\g_strife\a_strifearmor.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_strifebishop.cpp">
|
RelativePath=".\src\g_strife\a_strifebishop.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
@ -4078,9 +4054,6 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_strifeitems.cpp">
|
RelativePath=".\src\g_strife\a_strifeitems.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\src\g_strife\a_strifekeys.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_strifeplayer.cpp">
|
RelativePath=".\src\g_strife\a_strifeplayer.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
@ -4105,9 +4078,6 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\a_thingstoblowup.cpp">
|
RelativePath=".\src\g_strife\a_thingstoblowup.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\src\g_strife\a_zombie.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\g_strife\strife_sbar.cpp">
|
RelativePath=".\src\g_strife\strife_sbar.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
|
Loading…
Reference in a new issue