- Made the Ettin's and Centaur's howling sound an actor property.
- Added A_CustomComboAttack function to finally have something that can
replace the old A_ComboAttack function.
- Added A_SpawnItemEx function that removes the problems with A_SpawnItem
and which also should make most of the A_CustomMissile abuse unnecessary.
- Added A_QueueCorpse to the list of DECORATE code pointers.
- Made the size of Hexen's corpse queue configurable by CVAR
(sv_corpsequeuesize.) Setting this CVAR to -1 will disable corpse
queuing completely so that even in Hexen all corpses will stay forever.
SVN r392 (trunk)
to PO_MovePolyobj() from P_SerializePolyobjs() for a crushing polyobject
that touches a player actor will not have a valid actor->player->mo chain
for P_DamageMobj and crash if it happens to touch the player. Since the
polyobject was presumably in a good spot when the game was saved, we can
just skip this step entirely and let it take care of itself the next time
it moves (by which time, the players will be valid).
- Fixed: When transitioning from fullscreen to windowed mode with D3DFB, the
window kept the WS_EX_TOPMOST style.
- Slight correctness fix: When in fullscreen, the window should have WS_POPUP
style.
- Added a NULL target check to P_SpawnMissileXYZ(), A_DemonAttack1(),
A_DemonAttack2_1(), and A_DemonAttack2_2().
SVN r384 (trunk)
- Made Hexenarmor factors configurable by DECORATE.
- Added support for selecting the invulnerability mode per item as well.
- Made Invulnerability and Healing radius behavior selectable by player
class instead of hard coding the special behavior to the Hexen classes.
SVN r379 (trunk)
with an FString now.
- Fixed: The music strings in the default level info were never freed and
caused memory leaks when used repeatedly.
- Fixed: The intermusic string in the level info was never freed.
- Fixed: The default fire obituary should only be printed if the damage
came from the environment. If it comes from a monster the monster specific
obituary should be used instead.
- Added custom damage types from the floating point test release.
- Changed Pain Elemental's massacre check. Now A_PainDie checks for the damage
type and doesn't spawn anything if it is NAME_Massacre. A_PainDie can also
be used by other actors so a more generalized approach is needed than hard
coding it into the Pain Elemental.
- Converted a few of Doom's monsters to DECORATE because I couldn't test the
first version of the custom state code with the corpses inheriting from them.
- Added custom states from last year's floating point test release and fixed
some bugs I found in that code. Unfortunately it wasn't all salvageable
and it was easier to recreate some parts from scratch.
SVN r368 (trunk)
affected by armor.
- Added an unfreeze CCMD so that frozen players can be unfrozen for testing.
- Added special death states for projectiles hitting actors.
- Added ACS SetActorPitch/GetActorPitch functions.
- Added cameraheight property for actors.
SVN r359 (trunk)
- The stat meters now return an FString instead of sprintfing into a fixed
output buffer.
- NOASM is now automatically defined when compiling for a non-x86 target.
- Some changes have been made to the integral types in doomtype.h:
- For consistancy with the other integral types, byte is no longer a
synonym for BYTE.
- Most uses of BOOL have been change to the standard C++ bool type. Those
that weren't were changed to INTBOOL to indicate they may contain values
other than 0 or 1 but are still used as a boolean.
- Compiler-provided types with explicit bit sizes are now used. In
particular, DWORD is no longer a long so it will work with both 64-bit
Windows and Linux.
- Since some files need to include Windows headers, uint32 is a synonym
for the non-Windows version of DWORD.
- Removed d_textur.h. The pic_t struct it defined was used nowhere, and that
was all it contained.
SVN r326 (trunk)
be a default setting.
- Moved a_artiegg.cpp to g_shared and renamed it to a_morph.cpp to better reflect
its meaning.
- Fixed: AMorphProjectile's PlayerClass and MonsterClass members must be serialized
as FNames. Serializing them as ints is not safe because name indices are not
guaranteed to be the same each time the game is started. Same for APlayerPawn's
MorphWeapon member.
- Converted EggFX, ArtiEgg, PorkFX and ArtiPork to DECORATE.
- Added a new parameter to A_FireCustomMissile. Previously it always aimed
straight ahead and altered the projectile's angle according to the resulting
direction. If the 6th parameter is 1 now it will aim at the specified angle
directly.
- Changed custom morphing to be based on a new MorphProjectile class, not
the Heretic specific EggFX. The EggFX properties are now prefixed with
'MorphProjectile.'.
SVN r297 (trunk)
- Created a new MorphedMonster class that Chicken and Pig now derive from.
This class automatically takes care of unmorphing the monster when its
time is up.
- Made PlayerClass and MonsterClass properties of EggFX. You can override
these in a subclass to create new kinds of morpher projectiles. Along with
that, MorphWeapon is a new property of PlayerPawn that controls what type
of weapon you have available while morphed ("None" means you have no
weapons).
- Changed morphed monsters to record the time when they want to unmorph, not
the time left until they unmorph. This simplifies calling
P_UpdateMorhpedMonster() because you don't need to pass it a tic count.
- Added an optional second parameter to A_SpawnDebris and an optional
fifth parameter to A_SpawnItem that both do the same thing: If you set it
to 1, then the spawned actor will be assigned the same translation table
as the actor that called the function.
- Moved the blood colorization in P_SpawnBlood() ahead of the SetDamage()
call so that the blood color will available to the states of the blood
actor.
- Extended the puke command so that giving it a negative script number will
act like ACS_ExecuteAlways and always execute the script. (Ugh. Why did I
use's Raven's cheat code to name this command?)
SVN r296 (trunk)
ReplaceTextures (str old_texture, str new_texture, optional bool not_lower,
optional bool not_mid, optional bool not_upper, optional bool not_floor,
optional bool not_ceiling); and
SectorDamage (int tag, int amount, str type, bool players_only, bool in_air,
str protection_item, bool subclasses_okay);
- Added the vid_nowidescreen cvar to disable widescreen aspect ratio
correction. When this is enabled, the only display ratio available is 4:3
(and 5:4 if vid_tft is set).
- Added support for setting an actor's damage property to an expression
through decorate. Just enclose it within parentheses, and the expression
will be evaluated exactly as-is without the normal Doom damage calculation.
So if you want something that does exactly 6 damage, use a "Damage (6)"
property. To deal normal Doom missile damage, you can use
"Damage (random(1,8)*6)" instead of "Damage 6".
- Moved InvFirst and InvSel into APlayerPawn so that they can be consistantly
maintained by ObtainInventory.
SVN r288 (trunk)
damage is truly thrustless. The 'thrustless' parameter disabled all
thrust done by PIT_RadiusDamage but not the one done by P_DamageMobj.
Also gave Hexen's poison cloud the MF3_BLOODLESSIMPACT flag and made
spawning of blood decals in PIT_RadiusAttack depend on that. Since with
these changes the 'bombthrustless' argument to P_RadiusAttack is no
longer useful I removed it.
SVN r285 (trunk)
AxePuff, not the weapon itself.
- Fixed: P_RunEffects used the consoleplayer's camera without checking its
validity.
- Fixed: CopyFriendliness needs to copy target to LastHeard as well in order
to make newly spawned monsters chase their spawner's target.
SVN r278 (trunk)
meaningful message instead of the nondescript
'Tried to spawn a class-less actor'.
- Converted AGlassJunk to DECORATE and made the spawn function a little
more flexible so that replacing the shard is easier.
- Converted ABloodSplatter to DECORATE.
- Removed A_Jiggle because it never worked properly.
- Changed DECORATE parser to allow commas between arguments for multi-
argument properties. For all newly added properties this format will
become mandatory but for backwards compatibility it is optional for
old ones.
- Added a check for negative indices to TAutoGrowArray::SetVal to prevent
passing an index of -1 from crashing the game.
- Fixed: Morphing must clear the weapon's flash sprite.
- Fixed: Resurrecting a morphed player caused a crash.
- Fixed: Random sounds that recursively refer to themselves caused a stack
overflow. Now they print a warning and get ignored.
SVN r277 (trunk)
class menu was present so instead of starting the game specific skill menu
it always started Hexen's.
- Fixed: When a non-player tried to play a player sound it tried to access
the actor object as an APlayerPawn.
- Changed PlayAttacking2 to always use the melee state instead of different
implementations per player and hard coding it to MissileState+1. Also
changed PlayAttacking for the HereticPlayer to use the same animation as
PlayAttacking2. Now the special handling for Heretic in the FireWeapon
functions can be removed.
For R258:
- Fixed: PlayerStartItem created a duplicate of the item's class name before
converting it into an FName.
- Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor
is compatible with all games now so the explicit handling is no longer needed.
- Moved replacement handling back into AActor::StaticSpawn but controlled
by a (mandatory) parameter. Also added replacement to most other
instances in the game where non-inventory items are spawned. Replacement is safe
nearly everywhere except for inventory related spawns.
- Fixed: Due to the player class inclusion A_NoBlocking never called
NoBlockingSet for monsters.
- Changed: Sounds can be specified by full path now in SNDINFO and S_SKIN.
SVN r259 (trunk)
so now it is available in all games.
- Replaced the call to A_FlameSnd in the HereticPlayer's burn death sequence
with A_FireScream and defined *burndeath for Heretic.
- Added Grubber's custom player class support.
SVN r250 (trunk)
for direct descendants of AWeapon and not for every weapon being defined.
- Changed parsing of actor names back to not use C-mode. This change breaks
any definition that contain periods in their name and apparently there's
more than anyone could expect. Also altered the parser to manually check
for colons inside the parsed string so that placing spaces around them
is no longer necessary.
- Fixed: Weapons could be picked up for ammo even if they gave none.
- Fixed: A_Beacon was missing a NULL pointer check for the beacon's owner.
- Fixed: The status bar tried to access CPlayer->camera without checking
its validity. In spy mode there is a possibility that it is NULL.
SVN r237 (trunk)
- Added a PickupMessage property to the internal actor parser, replaced
most of the virtual PickupMessages with it and placed the code that
reads the metadata into AInventory::PickupMessage. Now the
PickupMessage method is truly virtual and I can do:
Added a Health.LowMessage property to define double message items like
Doom's medikit in DECORATE.
- Since defining Mana3 as an ammo type and then overriding the TryPickup
method means that this item defeats all ammo checks in the game it might
as well be defined as a CustomInventory item. At least this fixes the
amount given in easy and very hard skills.
- Converted all ammo items to DECORATE.
- Changed internal property setting of ammo types and sister weapons
to use fuglyname as for DECORATE definitions. This allows to export
the ammo definitions into DECORATE definitions without doing it for
the weapons themselves.
- Replaced obituary methods with actor properties.
- Fixed: The secret map check didn't work for maps inside Zips.
SVN r196 (trunk)
dialogs.
- Added Thing_Raise special that allows Arch-Vile like resurrections from scripts
or DECORATE states.
- Added a RadiusDamageFactor property for actors. This replaces the hard coded
factor of 0.25 for Hexen's players.
- Added new SpawnProjectile function to ACS. It's the same as Thing_Projectile2
but the projectile is specified by name, not spawn ID.
- Added MAPINFO option to set the compatibility flags. If this is done these
explicit settings will take precedence over the compatflags CVAR.
SVN r164 (trunk)
longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER
which is deciding what to do. To keep backwards compatibility this flag
is unset for projectiles in Doom and Strife and set for them in Heretic
and Hexen. The same applies to DECORATE but of course the flag can be
manipulated here.
- BLODxx sprites are now globally renamed to BLUDxx when not playing Doom.
This allows using the same states in every game, including the
Raven-specific blood actors.
- Gave the bullet puff and the axe blood masses of 5 so that the make small
splashes.
- Added A_Light(value) code pointer for DECORATE to generalize the weapon
light effect.
- Added 'noskillmenu' option to MAPINFO episode definitions. This is for
WADs that want to implement a skill selection level.
- Added APROP_ChaseGoal and APROP_Frightened actor properties for ACS.
- Added MF5_CHASEGOAL flag that makes monsters to go after their goal even
if they have a valid target.
- Fixed some issues with the changes to P_NewChaseDir I made to include
MBF's dropoff logic.
- Added a PowerFrightener powerup class. It seemed like such a waste to
have this cool feature but no means to use it in a decent fashion.
- Fixed: S_Init and S_ParseSndInfo should call atterm only once but not
each time they are called.
SVN r112 (trunk)
functions added to the exit chain with atterm so that they can be called
in a deterministic order and not whatever order the linker decides to put
them in.
- Fixed: DCajunMaster did not free its getspawned.
- Fixed: P_FreeLevelData() did not free ACS scripts.
- Fixed: Level snapshots were not freed at exit.
- Fixed: The save/load menu list was not freed at exit.
- Fixed: FCompressedMemFile needs a destructor to free the m_ImplodedBuffer.
- Fixed: G_DoLoadGame() did not free the engine string.
- Fixed: M_ReadSaveStrings() did not free the engine string.
- Fixed: Processing DEM_SAVEGAME did not free the pathname string.
- Added a check for truncated flats to FFlatTexture::MakeTexture() because
Heretic's F_SKY1 is only four bytes long.
- Added a dump of the offending state to the "Cannot find state..." diagnostic.
- Fixed: FCompressedFile did not initialize m_Mode in its default constructor.
- Fixed: Heretic and Hexen status bars did not initialize ArtiRefresh.
- Fixed: PNGHandle destructor should use delete[] to free TextChunks.
SVN r111 (trunk)
- 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)
- Converted A_Hexendecorations.cpp
- Changed the lower decal spawning code to transfer the main decal's color if
the lower decal's default color is the same as the main decal's.
- Changed the decal stretcher back to use the specified size parameters as a
scaling factor and not a destination size because this is more consistent with
the rest of the decal code. Also adjusted the blood smear definition in DECALDEF
and the description in the Wiki for this.
- Added Jim's most recent fixes.
SVN r77 (trunk)
- Removed doom.x, heretic.x and strife.x from the SVN repository. These
are generated files.
- Fixed: A_PainDie has to check whether a valid target exists before
calling IsFriend.
- Fixed: FDecalLib::FindAnimator needs a signed counter to work properly.
May 1, 2006 (Changes by Graf Zahl)
- Added support for game specific pickup messages, if only to be able
to define Raven's invulnerability item in DECORATE.
- Removed A_TreeDeath because it is no longer used.
- Fixed: When picking up a PowerupGiver for an active powerup the
blend color and the duration were transferred to a temorary item
and never took effect. They have to be trnasferred to the newly created
powerup item before trying to give it to the player, not afterward.
- Made the colormap of the InvulnerabilitySphere item specific.
The base power class still needs to have its color adjusted
per game though and since Raven's invulnerability item is used in both
Hexen and Heretic it can't define its own colormap/blend.
- Separated the invulnerability colormaps from the game being played
and made them item specific. They can also be specified as regular
blend colors in DECORATE now.
- Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp,
a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE.
- Changed the Soulsphere to be a real health item with the Dehacked
modifications made in d_dehacked.cpp as for most other items which
need to be adjusted.
- Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER
dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods
from AInvulnerabilitySphere and ABlurSphere.
- Converted a_splashes.cpp to DECORATE.
- Converted most of a_debris.cpp to DECORATE.
SVN r73 (trunk)
- Fixed the issues with .96x's railgun code and added it to the current
version.
- Fixed: Setting of the friendly Minotaur's angle was inconsistent and
could cause it to move backwards in a féw situation.
- Fixed: The minotaur did checks for type by checking for the MF_FRIENDLY
flag, not by checking for the actor class. That made it impossible to
spawn friendly 'normal' minotaurs.
- Moved a few virtual methods which are only applicable to the friendly
minotaur to AMinotaurFriend.
- Fixed: The friendly minotaur checked the master's health instead of
the target's when deciding whether to switch targets. Replaced with
MF4_NOTARGETSWITCH.
- Fixed: maybedrawnow must not draw the console unless the background
texture has been set up.
SVN r66 (trunk)
- Added multiple-choice sound sequences. These overcome one of the major
deficiences of the Hexen-inherited SNDSEQ system while still being Hexen
compatible: Custom door sounds can now use different opening and closing
sequences, for both normal and blazing speeds.
- Added a serializer for TArray.
- Added a countof macro to doomtype.h. See the1's blog to find out why
it's implemented the way it is.
<http://blogs.msdn.com/the1/articles/210011.aspx>
- Added a new method to FRandom for getting random numbers larger than 255,
which lets me:
- Fixed: SNDSEQ delayrand commands could delay for no more than 255 tics.
- Fixed: If you're going to have sector_t.SoundTarget, then they need to
be included in the pointer cleanup scans.
- Ported back newer name code from 2.1.
- Fixed: Using -warp with only one parameter in Doom and Heretic to
select a map on episode 1 no longer worked.
- New: Loading a multiplayer save now restores the players based on
their names rather than on their connection order. Using connection
order was sensible when -net was the only way to start a network game,
but with -host/-join, it's not so nice. Also, if there aren't enough
players in the save, then the extra players will be spawned normally,
so you can continue a saved game with more players than you started it
with.
- Added some new SNDSEQ commands to make it possible to define Heretic's
ambient sounds in SNDSEQ: volumerel, volumerand, slot, randomsequence,
delayonce, and restart. With these, it is basically possible to obsolete
all of the $ambient SNDINFO commands.
- Fixed: Sound sequences would only execute one command each time they were
ticked.
- Fixed: No bounds checking was done on the volume sound sequences played at.
- Fixed: The tic parameter to playloop was useless and caused it to
act like a redundant playrepeat. I have removed all the logic that
caused playloop to play repeating sounds, and now it acts like an
infinite sequence of play/delay commands until the sequence is
stopped.
- Fixed: Sound sequences were ticked every frame, not every tic, so all
the delay commands were timed incorrectly and varied depending on your
framerate. Since this is useful for restarting looping sounds that got
cut off, I have not changed this. Instead, the delay commands now
record the tic when execution should resume, not the number of tics
left to delay.
SVN r57 (trunk)
partially because the background patch has to be drawn always to
overwrite the old display.
- Fixed: Giving a health item to a non-player caused a crash.
- Added a compatibility option to limit deh.MaxHealth to the health bonus.
Originally this value wasn't used for health packs. Doing this was a bug
in Boom but since there's quite a few maps out there which require
Boom's altered behavior it has to be compatibility optioned.
- Fixed: The health bonus's max health must be defined by deh.MaxHealth,
not deh.MaxSoulsphere. To achieve this deh.MaxHealth's handling had to
be altered because it has to default to 100.
- Fixed: ZDBSP created incorrect side references with compressed sidedefs
and both sidedefs of a linedef being the same. This only affects the
external tool because the internal node builder is run after uncompressing
the sidedefs.
- Added Jim's latest makefile.linux.
- Added a consistency check to the PNAMES loader because one crash log
indicated that it crashed due to a corrupt PNAMES lump.
- Brought back the sector based sound target handling as a compatibility
option. This radical change just broke far too many maps that depend
on the original behavior. Strife's special AI functions are excluded
though because they work better with the new method.
SVN r56 (trunk)
- Fixed: DMover::MovePlane() would not stop moving the plane when it exactly
reached its target height unless it was a floor moving down.
- Fixed: Actors that can't attack should not be valid haters for Thing_Hate.
- Fixed: AArtiBlastRadius::BlastActor() should not set MF2_SLIDE for missiles.
- Fixed: sdl/i_input.cpp should check !iscntrl() before generating EV_GUI_Char
messages.
SVN r36 (trunk)
ParseActorProperties().
- Fixed: The decorate FindFlag() function returned flags from ActorFlags
instead of the passed flags set.
- Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed
NULL player->mo checks.
- Fixed: The "give all" command didn't give the backpack in Doom, and it
must give the backpack before giving ammo.
- Fixed: P_SetPsprite() must not call the action function if the player is
not attached to an actor. This can happen, for instance, if the level is
destroyed while the player is holding a powered-up Phoenix Rod. As part
of its EndPowerup() function, it sets the psprite to the regular version,
but the player actor has already been destroyed.
- Fixed: FinishThingdef() needs to check for valid names, because weapons
could have inherited valid pointers from their superclass.
- Fixed: fuglyname didn't work.
- Fixed: Redefining $ambient sounds leaked memory.
- Added Jim's crashcatcher.c fix for better shell support.
- VC7.1 seems to have no trouble distinguishing between passing a (const
TypeInfo *) reference to operator<< and the generic, templated (object *)
version, so a few places that can benefit from it now use it. I believe
VC6 had problems with this, which is why I didn't do it all along. The
function's implementation was also moved out of dobject.cpp and into
farchive.cpp.
- Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the
last byte in a row if the image width is not an even multiple of the number
pixels per byte.
- Fixed: P_TranslateLineDef() should only clear monster activation for secret
useable lines, not crossable lines.
- Fixed: Some leftover P_IsHostile() calls still needed to be rewritten.
- Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances.
SVN r20 (trunk)
- Fixed: AExplosiveBarrel should have MF2_MCROSS set.
- Fixed: Passing 0 numrays to A_BFGSpray should default to 40.
- Fixed: New A_JumpIfCloser() function.
- Future-proofing: thingdef.cpp/FindState() allows the 2.1 names for
SwitchingDecorations.
- Fixed: ASwitchingDecoration declared itself as deriving from AActor instead of
ASwitchableDecoration.
- Fixed: AWeaponHolder::Serialize() did not call its supermethod.
SVN r19 (trunk)