3 new code pointers without general use it was necessary to handle
GiveDefaultInventory consistently for all players without the need to
subclass this function.
- Added a Player.RunHealth property to expose the StrifePlayer's behavior of
not being able to run when its health is below 10.
- Changed APlayerPawn::GiveDefaultInventory so that it always adds a HexenArmor
and a BasicArmor item to the inventory. If these items are not the first ones
added to the inventory anything else that might absorb damage is not guaranteed
to work consistently because their function depends on the order in the inventory.
- Changed handling of APowerup's DoEffect so that it is called from the owner's
Tick function, not the item's. This is so that the order of execution is
determined by the order in the inventory. When done in the item's Tick function
order depends on the global thinker table which can cause problems with the
order in which conflicting powerups apply their effect. Now it is guaranteed
that the item that was added to the inventory first applies its effect last.
- Fixed: Added checks for Speed==0 to A_Tracer and A_Tracer2 because this could
cause a divide by zero.
- Fixed: P_MoveThing must also set the moved actor's previous position to
prevent interpolation of the move.
- Fixed: APowerInvisibility and its subclasses need to constantly update
the owner's translucency information in case of interference between different
subclasses. Also changed Hexen's Cleric's invulnerability mode to disable
the translucency effect if an invisibility powerup is active.
SVN r448 (trunk)
- Fixed: The PlayerSpeedTrail must copy the player's scaling information
(from Skulltag)
- Added r_maxparticles CVAR from Skulltag.
- Changed PCX loader so that it always loads the last 768 bytes of 8 bit graphics as a palette
SVN r447 (trunk)
MAPINFO keyword 'bordertexture' and are settable per map.
- Fixed: When used in DECORATE A_Explode must use A_ExplodeParms.
- Added custom label support to A_Chase. To enable resurrection from the
customizable version I also moved all A_VileChase stuff into p_enemy.cpp.
SVN r437 (trunk)
- Renamed the new armor properties to use the same names as Skulltag to avoid
confusion. They still don't need a separate base class as in Skulltag though.
- Added Skulltag-type armor bonus that increases the max amount that can be given
by other armor items.
- Separated all armor related code from a_pickups.cpp into a_armor.cpp.
SVN r427 (trunk)
be surprised if it doesn't work.
- Reorganized the network startup loops so now they are event driven. There is
a single function that gets called to drive it, and it uses callbacks to
perform the different stages of the synchronization. This lets me have a nice,
responsive abort button instead of the previous unannounced hit-escape-to-
abort behavior, and I think the rearranged code is slightly easier to
understand too.
- Increased the number of bytes for version info during D_ArbitrateNetStart(),
in preparation for the day when NETGAMEVERSION requires more than one byte.
- I noticed an issue with Vista RC1 and the new fatal error setup. Even after
releasing a DirectDraw or Direct3D interface, the DWM can still use the
last image drawn using them when it composites the window. It doesn't always
do it but it does often enough that it is a real problem. At this point, I
don't know if it's a problem with the release version of Vista or not.
After messing around, I discovered the problem was caused by ~Win32Video()
hiding the window and then having it immediately shown soon after. The DWM
kept an image of the window to do the transition effect with, and then when
it didn't get a chance to do the transition, it didn't properly forget about
its saved image and kept plastering it on top of everything else
underneath.
- Added a network synchronization panel to the window during netgame startup.
- Fixed: PClass::CreateDerivedClass() must initialize StateList to NULL.
Otherwise, classic DECORATE definitions generate a big, fat crash.
- Resurrected the R_Init progress bar, now as a standard Windows control.
- Removed the sound failure dialog. The FMOD setup already defaulted to no
sound if initialization failed, so this only applies when snd_output is set
to "alternate" which now also falls back to no sound. In addition, it wasn't
working right, and I didn't feel like fixing it for the probably 0% of users
it affected.
- Fixed: The edit control used for logging output added text in reverse order
on Win9x.
- Went back to the roots and made graphics initialization one of the last
things to happen during setup. Now the startup text is visible again. More
importantly, the main window is no longer created invisible, which seems
to cause trouble with it not always appearing in the taskbar. The fatal
error dialog is now also embedded in the main window instead of being a
separate modal dialog, so you can play with the log window to see any
problems that might be reported there.
Rather than completely restoring the original startup order, I tried to
keep things as close to the way they were with early graphics startup. In
particular, V_Init() now creates a dummy screen so that things that need
screen dimensions can get them. It gets replaced by the real screen later
in I_InitGraphics(). Will need to check this under Linux to make sure it
didn't cause any problems there.
- Removed the following stubs that just called functions in Video:
- I_StartModeIterator()
- I_NextMode()
- I_DisplayType()
I_FullscreenChanged() was also removed, and a new fullscreen parameter
was added to IVideo::StartModeIterator(), since that's all it controlled.
- Renamed I_InitHardware() back to I_InitGraphics(), since that's all it's
initialized post-1.22.
SVN r416 (trunk)
because the differences are only minimal.
- Removed all the varargs FindState functions because they aren't really needed.
The engine itself never explicitly checks for more than 2 labels and for the
rest a function that gets passed a FName array is more suitable anyway.
SVN r414 (trunk)
and doesn't have to traverse parent lists to find them. This is required for
Dehacked actors that inherit states (e.g. NonsolidMeat and Spectre) but it also
makes the data much easier to handle.
SVN r413 (trunk)
- Added DECORATE support for setting an actor's args. If this is done
it will also disable the actor's special that can be set in a map. This
is for actors that want to use A_CountdownArg or similar functions
that use the args for something different than the special's parameters.
- Converted a_sharedmisc.cpp to DECORATE.
- Added a new NActorIterator that can search for classes specified by name.
- Added a new constructor to TThinkerIterator that can search
for DECORATE defined subclasses that are not represented by a real C++ class.
- Fixed: BuildInfoDefaults must set the parent symbol table so that
all actors can get to the global symbols stored in AActor.
- Fixed some minor inconsistencies in the Arch-Vile's DECORATE definition.
- Fixed: A_VileAttack moved the flame without relinking it into the sector
lists. It also forgot to set the z-position correctly. (original Doom bug.)
- Fixed: The Doom 2 cast finale didn't work with the dynamic state name handling.
SVN r401 (trunk)
- Fixed: If the FBTexture wasn't exactly the same size as the screen,
D3DFB::PaintToWindow() would still lock it with D3DLOCK_DISCARD. Alas,
I saw no speedup for using a dirty region. (Side note: The Radeons are
apparently slower compared to DirectDraw because they must do
power-of-2 textures. If they ever add non-power-of-2 support like nvidia,
I assume they will also see a speed gain.)
- Changed fb_d3d9.cpp so that instead of trying to compensate for Geforce
off-by-one errors in the pixel shader, it automatically detects where
the error occurs and modifies the way the palette is uploaded to
compensate. Palette color 255 is then represented using the texture
border color instead of actually being part of the palette. This should
work correctly with all cards, since I had a report of an FX where the
off-by-one occurred in a different spot from the place where I observed
it on a 6 and 7 series cards. Since the shader now has one fewer
instruction, I notice a very marginal speedup. (Interestingly, removing
the flash blending from the shader had no perceivable performance gain.)
SVN r399 (trunk)
names for some DECORATE functions. Technically these will be constants
of the AActor class but that will make them accessible in all other actor
classes.
SVN r397 (trunk)
APlayerPawn::GiveDefaultInventory gave him some HexenArmor even though
he doesn't need it.
- Added custom blood type properties to DECORATE.
- Converted Blood to DECORATE and made some minor changes to the code
in preparation for custom blood types.
- Converted the bot helper things to DECORATE.
- Added damage type specific crash states.
SVN r395 (trunk)
- Added integer constant declarations to objects.
- Added some new token-based functions to sc_man.cpp that know about keywords
and record proper type information, so parsers don't need to treat
everything as strings.
- Added a simple symbol table to PClass.
SVN r394 (trunk)
not even zvox.wad or the skins directory.
- Minor improvement of Hexen's Demons: They now transfer the translation
to the chunks they spawn so that they look correct if they are color
translated. See Resurrection of Chaos for an example.
- Converted Key gizmos to DECORATE.
- Converted Heretic's Beast (Weredragon) to DECORATE.
- Added a randomness parameter to A_SpawnItemEx. This allows
spawning objects with a random chance without the need to write
complicated A_Jump constructs.
- Converted Heretic's Mummy to DECORATE.
- Converted Hexen's Demons to DECORATE.
SVN r393 (trunk)
- 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)
better emulate some calculation of internal code pointers.
- Added named RNG support to DECORATE's expression evaluator. Just use
random[name](min, max).
SVN r391 (trunk)
- Added MissSound parameter to A_CustomMeleeAttack.
- Converted Heretic's Snake (Ophidian) to DECORATE.
- Added an option to A_CustomMissile to jump to the see state if
the caller's target is dead.
- Fixed: A_ThrowGrenade didn't play the missile's spawn sound.
- Added MF_SPAWNSOUNDSOURCE flag so that Raven's missile spawning code
pointers can be recreated with DECORATE.
- Converted a_ravenambient.cpp to DECORATE.
SVN r388 (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)
in DECORATE. While it is still recommended not to use them anymore
they will continue to work with custom state support and existing
DECORATE code doesn't have to be changed. However, they will remain
limited to the existing functionality, nothing more.
SVN r377 (trunk)
- After doing some tests with state label scopes I had to conclude that
using '.' both for separating sub-state-labels and scope resolution
identifiers does not work reliably unless all actor class names were
prohibited from being used as state labels. Since that is undesirable
the only solution is to change the scope resolution operator. Fortunately
no WADs so far have used it so implementing such a breaking change isn't
a major issue. Now it uses '::', like C++ for this purpose.
- Converted Revenant, Mancubus and Pain Elemental to DECORATE.
SVN r375 (trunk)
- Added VSpeed DECORATE property so that an actor can be given an initial
vertical speed.
- Removed the barrel check in P_DamageMobj. AActor::Die is doing the same
operation unconditionally so this is redundant.
- Added A_BarrelDestroy to the list of DECORATE code pointers so that
the same effect can be recreated for other items as well.
- Renamed A_BarrelRespawn to A_Respawn, changed it so that it works for
monsters and added it to the list of DECORATE code pointers. Now Quake-style
zombies should be possible. ;)
- Changed handling of MF4_RANDOMIZE so that it applies to all actors being
spawned and not just projectiles.
- Converted Berserk and Megasphere to DECORATE.
- Fixed: HealThing should respect the stamina a player has and the Dehacked
health compatibility flag if max is 0. To do that it calls P_GiveBody now.
SVN r373 (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)
instead of forcing it into misc1/misc2. Although this increases the EXE's
size by 30k it has several advantages:
* State parameters are no longer limited to 65535 for all states combined.
* State parameters can be used with long durations.
* Some special handling in the weapon state set functions can be removed.
SVN r364 (trunk)
A_Jump into a varargs function.
- Fixed: P_MorphPlayer() should check that the desired type is actually a
PlayerPawn.
- Added an optional parameter to the morphme ccmd that specifies the player
class to morph into.
- Changed the SetActorPitch, SetActorAngle, Thing_Spawn*, Thing_Projectile*,
and Thing_Move functions so that TID 0 affects the activator.
SVN r362 (trunk)
It is like A_Jump, except it accepts up to 20 jump targets. The jump
probability is still the first parameter and controls whether any jump is
taken at all; use 256 if you always want to jump. If a jump is taken, then
one of the jump targets will be chosen at random, with each target having
an equal chance of being chosen.
- Fixed: The unfreeze ccmd was not multiplayer-safe. And I renamed it to thaw,
since it has nothing to do with the freeze ccmd.
SVN r360 (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)
definition and not in BeginPlay.
- Changed the special explosion behavior of the rocket to a flag
(MF5_DEHEXPLOSION) so that its effects can be used on other actors
as well without having to inherit from the rocket.
SVN r353 (trunk)
- Fixed: Voodoo dolls should not start ENTER scripts.
- Fixed: ActorDamage must not parse the enclosing parentheses as part of the
expression. That will produce an error if a flag set or clear command immediately
follows.
- Fixed: P_DamageMobj ignored MF2_NODMGTHRUST if the damaging object had no
owner.
- Added a 'font' parameter to A_Print.
- Changed A_CustomMeleeAttack to take one damage parameter only. Since expressions
can be used this value is not used as a factor for a random value but as
a direct damage value instead.
- Fixed: AActor::SetState must check whether a called action function resulted
in the actor's destruction. A_Jump constructs to a 0-length terminating
state will hang if this isn't checked.
SVN r329 (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)
- Fixed: CheckActorInventory stored the return value in the wrong address
on the ACS stack.
- Fixed: Skin sounds weren't properly restored after a SNDINFO reset.
- Added a more flexible ACS ChangeLevel function. It gets passed a level name
instead of a level number and has several additional options (e.g. changing
skill, starting the map without monsters and clearing the players' inventories. (UNTESTED!)
- Changed Thing_Activate so that passing a tid of 0 activates the calling actor.
- Changed Thing_Remove so that passing a tid of 0 removes the calling actor.
- Added DECORATE parameters to A_Saw.
SVN r283 (trunk)
is not available under Windows 95. Since this is (or at least should be) the
only thing preventing us from running under Windows 95, I added a stub that
replaces __imp__IsDebuggerPresent@0 with a pointer to a function that checks
for the real thing.
SVN r279 (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)
definitions. The SimpleProjectile class is gone and it uses the meta
data and A_ExplodeParms instead now.
- Removed the deprecation warnings for explosion parameters again because
the new system is fully inheritable and therefore useful.
- Changed the explosion properties into meta data and adjusted A_ExplodeParams
to use these when called without any parameters. Also removed all special
parsing for A_Explode so now this function can be called with expressions
like any other function.
- Changed DECORATE parsing so that functions with completely optional
parameter lists don't create an empty list when called without parameters.
SVN r274 (trunk)