Commit graph

258 commits

Author SHA1 Message Date
Randy Heit
d62e6c5332 - Added Martin Howe's code for replacing environment variables in partial IWAD
search paths.


SVN r307 (trunk)
2006-08-22 22:34:35 +00:00
Randy Heit
1a7253e53c - Added support for casting color names in ACS print-type statements. What that
means is that instead of writing this:
    print (s:"\cDSome text");
  You can write this:
    print (r:CR_GREEN, s:"Some text");
- Added some new colors, based on the ones jimmy91 posted in the forum: cream,
  light blue, black, olive, dark green, dark red, dark brown, purple, and dark
  gray.
- Simplified FFont::BuildTranslations() and BuildTranslations2() to make adding
  new colors easier.


SVN r306 (trunk)
2006-08-22 21:58:24 +00:00
Christoph Oelckers
66295cf9e9 - Removed a few redundant calls to FTexture::GetWidth because all textures
are now fully initialized when being created.
- Added GZDoom's HI_START/HI_END namespace and HIRESTEX support.
- Added sprite scaling to the weapon drawing code


SVN r304 (trunk)
2006-08-22 21:45:12 +00:00
Christoph Oelckers
5c7eeed018 - Added support for PCX textures (1, 4, 8 and 24 bit variants.)
SVN r303 (trunk)
2006-08-21 13:09:55 +00:00
Christoph Oelckers
2536eca01d - Changed: Patch and IMGZ textures now initialize their dimensions upon creation.
The lump is open anyway at that time so deferring this action until the information
  is needed doesn't give any speed improvements. Now GetDimensions and all its
  associated overhead is gone.
- Added support for TGA textures. It can handle all of the common variations
  of this format.
- Changed: GI_PAGESARERAW is no longer checked. It wasn't really necessary before
  because the chance of texture misidentification is absolutely minimal.
  But raw pages are now restricted to textures of type TEX_MiscPatch only.
- Changed the automap parchment to use a regular texture. The previous 
  FAutomapTexture is only used as a last resort fallback now. If the code
  finds a recognizable graphic it will create a proper texture for it now.
- Fixed: Flats were only auto-scaled when in Doom flat format.
- Fixed: FMultiPatchTexture::CheckForHacks blindly assumed that all patches
  were FPstchTextures. Since the texture code does not have any type information
  I added a new flag bIsPatch for this purpose.
- Moved all texture classes into their own source files and created a new
  subdirectory 'textures' for that.
- Cleaned up the texture management code and added some stricter checks for
  the validity of Doom patches. The old code liked to crash when being passed
  some non-graphic data.

SVN r300 (trunk)
2006-08-20 12:55:46 +00:00
Christoph Oelckers
ab947ce16b - Added custom fail messages to the puzzle items.
SVN r299 (trunk)
2006-08-18 22:22:39 +00:00
Christoph Oelckers
aef5df6628 - Did some minor reorganization of code in r_data.cpp (mostly to make
handling of textures easier in GZDoom.)
- Did some preparations to allow loading folders on the HD into the lump
  directory.


SVN r298 (trunk)
2006-08-17 22:10:50 +00:00
Christoph Oelckers
f66b7de8c8 - Took MF2_WINDTHRUST off AMorphedMonster. This is something that should not
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)
2006-08-17 09:54:42 +00:00
Randy Heit
a6d656b108 - Updated thingdef_specials.h for the new thingdef_specials.gperf file.
- 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)
2006-08-17 00:19:26 +00:00
Randy Heit
7dc4be302f - Added action special support to the thingdef expression evaluator. Now you
can use them like normal functions, which is probably most useful for
  ACS_ExecuteWithResult.


SVN r294 (trunk)
2006-08-16 20:56:06 +00:00
Randy Heit
ed12bdc0f4 - Switched to IJG code for reading JPEG images. I have included a stripped-
down version of the library with the ZDoom source. (It actually uses less
  space than zlib now.) Unix users probably ought to use the system-supplied
  libjpeg instead. I modified Makefile.linux to hopefully do that. I'm sure
  Jim or someone will correct me if it doesn't actually work.


SVN r293 (trunk)
2006-08-16 18:08:39 +00:00
Randy Heit
21869a6c08 - Added JPEG texture support, courtesy of Ken's Picture Library. I will
probably switch to the IJG library once I pare it down. (Ken's code is 18K
  of C source but does not support progressive JPEG. The IJG library is over
  a megabyte of source and supports pretty much everything you would ever
  need ever.)
- Fixed endianness issue in FTextureManager::CreateTexture().
- Added support for interlaced PNGs. Now ZDoom is a mostly complete PNG
  reader. The only thing missing is 48-bit RGB and 16-bit grayscale support,
  which are just wastes of bits here, but also less likely to appear than
  an interlaced PNG. (However, if you are using interlaced PNGs for textures,
  then you are needlessly wasting space, since the image won't display
  progressively.)
- Fixed: Writing named screenshots didn't work.

SVN r292 (trunk)
2006-08-15 04:34:35 +00:00
Randy Heit
89396964f5 - Added support for truecolor PNG textures. They still get resampled to the
global palette, but at least they are visible now.
- Optimized UnfilterRow() in m_png.cpp a little.


SVN r291 (trunk)
2006-08-13 03:38:18 +00:00
Christoph Oelckers
8ecfe6a8ac - Fixed: P_CheckOnMobjZ returned the first thing an actor could stand on,
not the highest possible.


SVN r290 (trunk)
2006-08-12 21:02:46 +00:00
Christoph Oelckers
7f93ab05ee - Added disintegration damage to SectorDamage.
- Bumped savegame version, min. savegame version, netgame version and
  demo version because the inventory and damage changes are incompatible
  with the old code.

SVN r289 (trunk)
2006-08-12 08:38:00 +00:00
Randy Heit
b25c7722f3 - Added the ACS commands
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)
2006-08-12 02:30:57 +00:00
Christoph Oelckers
b8312a9bd8 - Gave Strife's PhosphorousFire the MF2_NODMGTHRUST flag so that its
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)
2006-08-10 21:03:17 +00:00
Christoph Oelckers
688476b9aa August 10, 2006 (Changes by Graf Zahl)
- 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)
2006-08-10 15:28:12 +00:00
Randy Heit
f2333b6f26 - Fixed: The ACS VM made no checks for object files without strings, assuming
that if it didn't have any strings, then it didn't matter what it calculated
  for the location of the string table because it would never be referenced.
  While this is true for a script all by itself, it means a crash if you have
  a map script without strings that imports a library with strings and the
  library tries to use one of its strings.


SVN r281 (trunk)
2006-08-03 03:45:58 +00:00
Randy Heit
3a552d4aa0 - It turns out that the Visual C++ 2005 runtime calls IsDebuggerPresent, which
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)
2006-08-02 04:57:36 +00:00
Christoph Oelckers
effa46975e - Fixed: The pickup message for Hexen's fighter's axe was assigned to the
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)
2006-08-01 22:11:49 +00:00
Christoph Oelckers
5ac0789e6e - Added a type check to Spawn(actorname,...) to allow it to print a
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)
2006-07-31 10:22:53 +00:00
Christoph Oelckers
f94cdaf782 - Added Grubber's GetPlayerInfo ACS function.
SVN r276 (trunk)
2006-07-30 22:56:20 +00:00
Christoph Oelckers
d6bc07c3b1 - Fixed: Starting a game without skill menu always started the first episode.
- Changed A_AlertMonsters so that it can be placed directly in a weapon state.
- Fixed: Frozen corpses of stealth monsters were invisible.
- Added: Calling Radius_Quake with a tid of 0 now uses the activator
  as the quake's center.


SVN r275 (trunk)
2006-07-30 08:31:26 +00:00
Christoph Oelckers
3f90f1655c - Used the new explosion handling to clean up the old style projectile
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)
2006-07-29 10:47:14 +00:00
Randy Heit
06681ec72d - Version bump to 2.1.4.
- Fixed: Friendlies would not turn to face you when you engaged them in
  conversation, nor would they reliably return to their original facing when
  you stopped talking to them.
- Added deprecation warnings for the DontHurtShooter, ExplosionRadius, and
  ExplosionDamage actor "properties." They were considered deprecated before;
  now this is explicitly stated when they are used. The problem with them is
  that they are not really properties and do not behave like other properties
  and cannot be inherited, because they are really just an alternate way of
  specifying parameters for A_Explode. (Anything that currently prints a
  deprecation warning will be removed completely in 2.2.0, which will be the
  version where custom state labels make their debut.)


SVN r272 (trunk)
2006-07-29 01:26:24 +00:00
Christoph Oelckers
f203219d24 - Changed player sprite translation for the menu so that it uses a regular
translation table instead of a local custom buffer.
- Fixed: ResetBaggage must set MeleeDamage to 0.


SVN r271 (trunk)
2006-07-26 09:50:17 +00:00
Randy Heit
35d79553b2 - Made SafeReadMemory() in i_crash.cpp more readable.
SVN r270 (trunk)
2006-07-21 22:36:39 +00:00
Randy Heit
f7a8653196 - Here's something MinGW users will probably like: i_crash.cpp no longer needs
dbghelp.h if you compile with GCC.


SVN r269 (trunk)
2006-07-21 22:28:54 +00:00
Randy Heit
361f855de0 - Added some simple translucency map analysis for BOOM maps to more
intelligently pick the value to use for TranslucentLine's second argument.
- Added a queryiwad_key cvar to control which key can force the IWAD selection
  to appear. It can be either "shift" or "control". Any other value will
  disable its functionality.
- Fixed: A_SkullPop() and A_FreezeDeathChunks() did not transfer the player's
  inventory to the new dismembered head "player".


SVN r268 (trunk)
2006-07-20 05:13:39 +00:00
Randy Heit
6d389c6b7d - Fixed: C_midPrint() needs a NULL status bar check.
SVN r267 (trunk)
2006-07-19 16:00:44 +00:00
Christoph Oelckers
b1989b4d34 - Fixed: PClass::CreateDerivedClass forgot to NULL FActorInfo::Replacee.
SVN r266 (trunk)
2006-07-18 23:09:11 +00:00
Christoph Oelckers
c32b9df059 - Fixed: S_ClearSoundData cleared PlayerClasses instead of PlayerClassLookups.
SVN r262 (trunk)
2006-07-16 23:03:39 +00:00
Christoph Oelckers
1ff4d09bed - Added NecroMage's submission for bitwise/shift assignment operators for ACS.
SVN r261 (trunk)
2006-07-16 20:13:24 +00:00
Christoph Oelckers
e5a26c75fa - Added replacement handling to A_BossDeath.
SVN r260 (trunk)
2006-07-16 15:00:10 +00:00
Christoph Oelckers
93cd78ebfb - Fixed: The check for no skill menu was incorrect when a custom player
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)
2006-07-16 10:23:14 +00:00
Christoph Oelckers
ecce60e8f9 SVN r258 (trunk) 2006-07-16 09:10:45 +00:00
Randy Heit
5e37e4a0b8 - Fixed: Makefile.mgw was mysteriously missing some targets. After fixing that,
I also removed some of GCC's warnings.


SVN r255 (trunk)
2006-07-16 01:25:29 +00:00
Christoph Oelckers
1c3153690a - Fixed: Any kill in multiplayer games that could not be credited to a player
didn't count at all - not even toward the global level statistics.
- ...and removed it again. It was not an accident. The only reason the PowerupGiver
  had its own RespawnTics was to account for the pickup flash delay. 
  But that is better handled by checking the flag and adding the additional 30 
  tics in AInventory::Hide because then it affects all items that have one - 
  and only those. The AT_GAME_SET function didn't work anyway because it was
  called after parsing DECORATE.


SVN r253 (trunk)
2006-07-14 08:04:17 +00:00
Randy Heit
3113037229 - Restored the PowerupGiver AT_GAME_SET function. I assume its removal was an
accident from merging in Grubber's custom player classes.


SVN r252 (trunk)
2006-07-14 00:33:11 +00:00
Christoph Oelckers
bada3bf462 - Removed the game filter check from addplayerclass. If a player class is added
here the game filter is irrelevant and there's nothing that should prevent
  the HereticPlayer being added to a Hexen game, for example.
- Changed: The addplayerclass CCMD was far too paranoid and needlessly aborted
  the game for any error being encountered. Since an empty player class list
  is checked for elsewhere outputting the messages to the console is sufficient.


SVN r251 (trunk)
2006-07-13 10:24:54 +00:00
Christoph Oelckers
31c749058b - Generalized Hexen's class-based spawning to be a property of the player class
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)
2006-07-13 10:17:56 +00:00
Randy Heit
38a073626f - Changed decorate replacement to be opt-in instead of opt-out. This allows for
greater flexibility in what can be replaced (replaced actors need not be ancestors
  of actors that replace them) at the expense of not having universal actor
  replacement. Instances where replacements work:
   - Line specials that spawn things (Thing_Spawn and related)
   - ACS spawning commands (SpawnSpot and the like)
   - Spawning mapthings at level load time in P_SpawnMapThing()
   - Spawning items off of dead dudes in P_DropItem()
   - The A_SpawnItem decorate function
   - The summon and summonfriend console commands
   - ThingCount will count both original actors and their replacements as the same
     things.
  TBD: Should the ACS inventory functions use replacements too, or not?


SVN r249 (trunk)
2006-07-13 03:34:50 +00:00
Randy Heit
56427d1b1c - Fixed: The game would crash after informing you of a duplicate class registration
because PClass::CreateDerivedClass() did not initialize everything before calling
  InsertIntoHash().
- Fixed: Forcefully removing a weapon from a player's inventory would not reset
  the player's refire counter.
- Fixed: FreeKeySections() was called before M_SaveDefaults() during shutdown,
  so all custom keys would go to a "(null)" section instead of their intended
  section.


SVN r248 (trunk)
2006-07-13 02:08:39 +00:00
Randy Heit
18af8a57cf - Restored the previous level flag values to avoid needlessly breaking some
savegames at this point in time.
- Fixed: R_ClearPlanes() did not clear skybox planes for a full clear.
- Streamlined zip file loading by delaying the processing of the local file
  header until it is actually needed.


SVN r247 (trunk)
2006-07-12 03:35:55 +00:00
Christoph Oelckers
5d1563b0e4 - Changed the additive scrollers option into a compatibility flag so that it can
be changed from the menu.


SVN r245 (trunk)
2006-07-11 08:27:05 +00:00
Randy Heit
0b3730392c - Fixed closed doors between the front sector's floor and ceiling the right way.
I was just missing a non-null texture check.
- Removed references to texturewidthmask. What was that?


SVN r244 (trunk)
2006-07-11 04:48:10 +00:00
Christoph Oelckers
133a035c76 - Fixed: The earthquake code needs to check whether a quake's spot is still valid.
Super Sonic Doom crashed due to this.
- Fixed: G_DoAutosave could divide by 0 if autosavecount was 0.


SVN r243 (trunk)
2006-07-11 00:20:45 +00:00
Christoph Oelckers
a9470f8642 - Fixed: The calls to DCanvas::Dim in c_console.cpp were missing some type casts.
- Fixed: CCMD(dir) passes FStrings directly to Printf.

For R241:

- Fixed: The defaultbind command still treated the bindings as char pointers and
  as a result didn't work.
- Added SpawnSpotFacing ACS function which is the same as SpawnSpot but it uses
  the map spot's angle.
- Added ThingCountName ACS function which is the same as ThingCount but it takes
  an actor's type name instead of a spawn ID.


SVN r242 (trunk)
2006-07-09 21:50:16 +00:00
Christoph Oelckers
dd3c0d82f7 SVN r241 (trunk) 2006-07-09 20:15:38 +00:00
Randy Heit
d027aafb4c - Fixed: If the sector behind a seg was closed, but it was closed between the
ceiling and floor of the front sector, the renderer did not add it to the
  solid clip list.
- Blends created with the ACS fade commands now degrade to transparent overlays
  when the console is visible, just as they do for the menu.


SVN r240 (trunk)
2006-07-09 20:04:05 +00:00
Christoph Oelckers
5541dc69f1 - Fixed: Specifying 'strifefallingdamage' in MAPINFO cleared all other flags.
- Fixed: maxstepheight and maxdropoffheight were stored as ints instead of 
  fixed_t's by the DECORATE parser.


SVN r239 (trunk)
2006-07-08 20:17:52 +00:00
Randy Heit
6695e255ce - Added actor replacement for DECORATE. This works at a higher level than
using duplicate DoomEdNums and will affect all attempts to spawn the
  replaced actor. However, because this happens for all spawns and not just
  at map load, the replacing actor must be compatible with the replaced
  actor, which means that an actor can only serve as a replacement for one
  of its baseclasses. For example, if you want to use a modified imp, you can
  use this DECORATE:
      actor MyImp : DoomImp replaces DoompImp
      {
          // Put changed properties here
      }
- New: The IWAD dialog now remembers the last IWAD you picked and
  automatically highlights it the next time you run the game. This also
  applies if you check "Don't ask me this again": The IWAD selected will be
  the one that gets automatically loaded, not the one located first. (Using
  the -iwad parameter will not change the default IWAD.) In addition, you
  can now bring the dialog up even if you disable it by holding down SHIFT
  during startup.
- Changed ExtractFilePath() and ExtractFileBase() to return FStrings instead
  of writing to a provided output buffer. ExtractFileBase() can also
  optionally keep the file's extension in the result.
- Removed the -heapsize parameter entirely. The informational message should
  no longer be needed.
- Removed -maxdemo parameter. There's no point to having it around since
  the demo buffer grows automatically.


SVN r238 (trunk)
2006-07-08 02:17:35 +00:00
Christoph Oelckers
43c1ec4a74 - Fixed: Changed initialization of Weapon.Kickback so that it is only done
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)
2006-07-03 09:07:56 +00:00
Christoph Oelckers
9e6d5c8fd9 - Fixed: G_NewInit destroyed the players' userinfo data.
- Changed the special radius damage handling for the barrel and boss brain
  into an actor flag.
- Added A_RadiusThrust code pointer for DECORATE and adjusted the radius 
  attack functions accordingly.


SVN r236 (trunk)
2006-07-02 21:58:10 +00:00
Randy Heit
0398ddcc76 - Changed the earthquake view shaking so that it works for anything and not
just players.


SVN r235 (trunk)
2006-07-01 00:21:36 +00:00
Christoph Oelckers
207c84e3dd - Fixed: In multiplayer games, when trying to change targets, A_Chase forgot
to check whether the new target was the same as the old one and treated 
  this case as a real target change.


SVN r234 (trunk)
2006-07-01 00:15:06 +00:00
Randy Heit
9fdcb553aa - Added some hackery at the start of MouseRead_Win32() that prevents it from
yanking the mouse around if they keys haven't been read yet to combat the
  same situation that causes the keyboard to return DIERR_NOTACQUIRED in
  KeyRead(): The window is sort of in focus and sort of not. User.dll
  considers it to be focused and it's drawn as such, but another focused
  window is on top of it, and DirectInput doesn't see it as focused.
- Fixed: KeyRead() should handle DIERR_NOTACQUIRED errors the same way it
  handles DIERR_INPUTLOST errors. This can happen if our window had the
  focus stolen away from it before we tried to acquire the keyboard in
  DI_Init2(). Strangely, MouseRead_DI() already did this.
- When a stack overflow occurs, report.txt now only includes the first and
  last 16KB of the stack to make it more manageable.
- Limited StreamEditBinary() to the first 64KB of the file to keep it from
  taking too long on large dumps.
- And now I know why gathering crash information in the same process that
  crashed can be bad: Stack overflows. You get one spare page to play with
  when the stack overflows. MiniDumpWriteDump() needs more than that and
  causes an access violation when it runs out of leftover stack, silently
  terminating the application. Windows XP x64 offers SetThreadStackGuarantee()
  to increase this, but that isn't available on anything older, including
  32-bit XP. To get around this, a new thread is created to write the mini
  dump when the stack overflows.
- Changed A_Burnination() to be closer to Strife's.
- Fixed: When playing back demos, DoAddBot() can be called without an
  associated call to SpawnBot(). So if the bot can't spawn, botnum can
  go negative, which will cause problems later in DCajunMaster::Main()
  when it sees that wanted_botnum (0) is higher than botnum (-1).
- Fixed: Stopping demo recording in multiplayer games should not abruptly
  drop the recorder out of the game without notifying the other players.
  In fact, there's no reason why it should drop them out of multiplayer at
  all.
- Fixed: Earthquakes were unreliable in multiplayer games because
  P_PredictPlayer() did not preserve the player's xviewshift.
- Fixed: PlayerIsGone() needs to stop any scripts that belong to the player
  who left, in addition to executing disconnect scripts.
- Fixed: APlayerPawn::AddInventory() should also check for a NULL player->mo
  in case the player left but somebody still has a reference to their actor.
- Fixed: DDrawFB::PaintToWindow() should simulate proper unlocking behavior
  and set Buffer to NULL.
- Improved feedback for network game initialization with the console ticker.
- Moved i_net.cpp and i_net.h out of sdl/ and win32/ and into the main source
  directory. They are identical, so keeping two copies of them is bad.
- Fixed: (At least with Creative's driver's,) EAX settings are global and not
  per-application. So if you play a multiplayer ZDoom game on one computer
  (or even another EAX-using application), ZDoom needs to restore the
  environment when it regains focus.
- Maybe fixed: (See http://forum.zdoom.org/potato.php?t=10689) Apparently,
  PacketGet can receive ECONNRESET from nodes that aren't in the game. It
  should be safe to just ignore these packets.
- Fixed: PlayerIsGone() should set the gone player's camera to NULL in case
  the player who left was player 0. This is because if a remaining player
  receives a "recoverable" error, they will become player 0. Once that happens,
  they game will try to update sounds through their camera and crash in
  FMODSoundRenderer::UpdateListener() because the zones array is now NULL.
  G_NewInit() should also clear all the player structures.


SVN r233 (trunk)
2006-06-30 02:13:26 +00:00
Christoph Oelckers
38b0230253 - Added a 'default' setting to all color selection menu items that leaves
the font untranslated.
- Fixed: Heretic's monsters were missing the MF2_MCROSS flag.


SVN r232 (trunk)
2006-06-29 14:21:56 +00:00
Christoph Oelckers
81ee5b4942 - Fixed: Bouncing projectiles should not bounce off horizon lines. Now they
vanish instead.
- Changed masses of ice chunks and glass shards to make small splashes


SVN r231 (trunk)
2006-06-28 11:14:20 +00:00
Christoph Oelckers
7ff576adf4 - Fixed: P_UndoPlayerMorph didn't properly transfer the inventory. It just
copied the pointer instead of using ObtainInventory.


SVN r230 (trunk)
2006-06-27 23:49:45 +00:00
Randy Heit
3b39092412 - Moved the version resource into the "compile-time directives" section of
the resource script so that Developer Studio won't replace the version macros
  in it with their literal values. Now updating version.h is guaranteed to be
  enough to bump the version everywhere it's used.


SVN r225 (trunk)
2006-06-25 01:16:18 +00:00
Christoph Oelckers
7266c1e929 - Fixed: PIT_CheckThing checked AActor::tid instead of TidToHate to determine
whether a monster of the same species can be hurt.
- Added new ice chunk sprites submitted by Enjay.

SVN r223 (trunk)
2006-06-24 23:58:01 +00:00
Christoph Oelckers
3c3a9dd8f8 - Deleted the programmer death script from strifehelp.acs because it is no
longer used.
- Fixed: strifehelp.acs and the PUMPUPS cheat need to give 10 UpgradeStaminas
  because that item is using Inventory::Amount now.


SVN r220 (trunk)
2006-06-24 08:03:15 +00:00
Randy Heit
27ff97f16e - Changed the archive format for crash reports from tar.gz to zip.
- Went back to a single process model for crash reporting. It appears there
  are some machines that don't like having another process collect the
  information and report it. I still feel that having another process do
  it _should_ be more reliable, because that process can execute in a known
  good state. Ah well. I haven't yet seen anything that left the main process
  in a totally unrecoverable state, so it's probably okay. Unlike before, this
  single-process version is still GCC-compatible.


SVN r217 (trunk)
2006-06-24 03:47:17 +00:00
Christoph Oelckers
1faa6d57a4 - Fixed: The resurrect cheat didn't reset the player's damage type so
if he died by being frozen the blue blend didn't disappear.

SVN r216 (trunk)
2006-06-23 16:20:41 +00:00
Christoph Oelckers
27c00bcb95 - Fixed: FWarpTexture::MakeTexture must be declared virtual so that
the FWarp2Texture version of it can be called.

SVN r215 (trunk)
2006-06-23 08:20:08 +00:00
Christoph Oelckers
550d687bcf - Fixed: The check to prevent items from being given to dead players
didn't work properly. It has to be done in the cheat code, not in
  APlayerPawn::AddInventory.
- Fixed: The medikit and stimpack used a MaxAmount of 100 so that
  stamina upgrades were ineffective.

SVN r214 (trunk)
2006-06-22 20:52:49 +00:00
Christoph Oelckers
a0c912ef2d - Fixed: Jumping and crouching at the same time created jerky results.
Now jumping takes precedence and you can't crouch while pressing the
  jump key (which causes an uncrouch.)

SVN r213 (trunk)
2006-06-22 09:36:48 +00:00
Randy Heit
e6268bf0a2 - Fixed: DF_NO_COOP_WEAPON_SPAWN was handled backwardly.
SVN r212 (trunk)
2006-06-22 02:19:43 +00:00
Randy Heit
9eb0aa1a02 - Fixed: G_InitLevelLocals() needs to OR in the crouching bits, otherwise it
discards the jumping bits.
- ProcessActor() now sets C mode before retrieving the actor's name.
- Fixed: The new SC_GetString() scanner accepted slashes at the end of tokens
  when not in C mode, even if they were the start of a comment. Now if you
  want a slash at the end, you must quote it.


SVN r211 (trunk)
2006-06-21 23:22:17 +00:00
Christoph Oelckers
729e3b346d - Fixed: Decal actors with an invalid decal texture caused a crash.
SVN r210 (trunk)
2006-06-21 20:45:19 +00:00
Christoph Oelckers
e7f21912a5 Fixed: Player could crouch while dead.
SVN r209 (trunk)
2006-06-21 17:59:34 +00:00
Christoph Oelckers
14765bf64b - Fixed: The sidedef loader could allocate insufficient memory if a map
contained unused sidedefs.
- Fixed: Color control sequences were written to the log file. Since any
  entered console command contains such a sequence it was quite noticable.

SVN r208 (trunk)
2006-06-21 15:40:42 +00:00
Christoph Oelckers
f356e356a0 - Fixed: The obituary code didn't use the attacker's name for kills caused
by other players.

SVN r207 (trunk)
2006-06-21 12:10:36 +00:00
Christoph Oelckers
e2ac4c1168 - Fixed: PIT_StompThing never checked for COMPATF_NO_PASSMOBJ.
- Fixed: COMPATF_TRACE returned true for all two-sided lines, not just for
  those with the same sector on both sides.

SVN r206 (trunk)
2006-06-21 11:47:27 +00:00
Randy Heit
19dad144e1 - Added grubber's thingdef_exp.cpp. I might not use it later, but I can still
use it now.
- Fixed sc_man_scanner.re for negative numbers in C mode.


SVN r201 (trunk)
2006-06-20 21:21:52 +00:00
Randy Heit
c54f2f66fc - Unlimited the monster pain sounds in Hexen after playing as the Cleric a
while and killing centaurs with the flechette.
- Fixed: Moving to an old level in a hub caused the old player's inventory to
  spawn owned by the current player (but still hanging off the old player), so
  the game would hang when trying to delete it.
- Modified re2c so that it doesn't add a date to the file it generates. Thus,
  if it regenerates a file during a full rebuild, SVN won't see it as a change.
  Also updated it to 0.10.5.
- Fixed: SC_GetString() did not properly terminate sc_String when the last
  token in the file had no white space after it. Since I could not actually
  find the problem (it works fine in debug mode and I saw no logic errors),
  I decided to take this opportunity to reimplement it using an re2c-generated
  scanner. Now it's 1.6x faster than before and correctness is easier to
  verify.
- Fixed: FMODSoundRenderer::Shutdown() also needs to reset NumChannels.
- Added back the Manifest to zdoom.rc for non-VC8 Windows compilers.
- Fixed MinGW compilation again. Now it uses the same method as Makefile.linux
  to find all the source files so that it doesn't need to be manually updated
  each time source files are added or removed.
- Added the SVN revision number to the version string. A new tool is used to
  obtain this information from the svnversion command and write it into a
  header file. If you don't have the svn command line tools installed or didn't
  check it out from the repository, you can still build. I added some rules for
  this to Makefile.linux, and I assume they work because they do for
  Makefile.mingw.
- Fixed: MIDISong2 did not delete MusHeader in its destructor.


SVN r200 (trunk)
2006-06-20 20:30:39 +00:00
Christoph Oelckers
cf7d8ab43b - Removed the unused sfx_ variables for the chainsaw sounds.
- Fixed map name checks in idclev, hxvisit, for +map and the titlemap.
- Changed handling of Zips so that the patches/, graphics/, sounds/ and
  music/ subdirectories no longer are placed in the global namespace. Instead
  new namespaces are defined. These namespaces aren't merged, however and 
  searching in them either returns a lump inside it or one from the global
  namespace when it doesn't come from a Zip file. Proper order of files is
  still observed though. As a result proper use of the directories inside Zips 
  is strictly enforced now so that for example anything used as a patch must be 
  in the patches/ directory and won't be found anywhere else.


SVN r199 (trunk)
2006-06-19 15:31:10 +00:00
Christoph Oelckers
a42f98af15 - Added another set of ACS inventory functions which take a tid for the actor
and aren't limited to the script's activator.
- Added GetSectorLightLevel(tag), GetActorCeilingZ(tid) and
  SetActorPosition(tid, x, y, z, fog) ACS functions.
- Fixed: First initialization of camera textures should not mark the rendered
  lines as mapped.

SVN r198 (trunk)
2006-06-18 15:49:00 +00:00
Randy Heit
c87e2252ed - Finally implemented code to keep some or all of your inventory intact when
respawning in coop. Now the new inventory code should finally be complete. :-)
- Fixed: PROP_Inventory_PickupMessage was improperly defined for non-VC++
  compilation.


SVN r197 (trunk)
2006-06-18 04:10:47 +00:00
Christoph Oelckers
1bd6ac028b - Converted a_doomhealth.cpp to DECORATE.
- 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)
2006-06-17 20:29:41 +00:00
Christoph Oelckers
9338c7360b - Fixed: The secret map check didn't work for maps inside Zips.
SVN r195 (trunk)
2006-06-17 07:46:02 +00:00
Randy Heit
d99f5b4b99 SVN r191 (trunk) 2006-06-15 03:31:19 +00:00
Randy Heit
6e198e034b - Removed my "backwards compatibility fix" for APROP_Speed. It turns out that
in all the public versions where monster speed is not fixed point, you
  couldn't modify the monster's speed due to a bug in P_Move() anyway. So
  there's nothing to be backward compatible with.


SVN r190 (trunk)
2006-06-14 23:22:14 +00:00
Christoph Oelckers
fd79fac52c - Fixed: Saving on maps that don't contain a MAPINFO definition didn't work.
- Fixed: The Zip loader loaded all WADs inside a Zip into the lump directory.
  This is only supposed to be done for WADs in the root directory.
- Complete restructuring of the map loading code. Previously the only way
  to put maps into Zips was to load them as embedded WADs which caused
  some problems, most importantly that the map's file name was irrelevant
  and the internal map label was used instead. With the new code there
  is now a properly defined way to add maps to Zips:
  * Maps are placed in a subdirectory called 'maps'.
  * Maps are stored as WADs that contain all map related lumps.
  * The first lump in the map's WAD directory must be the map label.
  * All lumps not belonging to the first map are ignored.
  * The map's file name determines the name the map is identified with. 
    For maps stored this way the internal map label is ignored so with this 
    method renaming maps is as easy as renaming a file and it is no longer 
    necessary to manipulate the map label.
  With the new code it is also possible to load external maps without
  adding them to the WAD list. Type 'open mapfile.wad' in the console
  to start such a map.
  The new code also performs stricter lump name checks to prevent accidental
  loading of non-map data.


SVN r188 (trunk)
2006-06-14 15:56:56 +00:00
Randy Heit
2a0216cf6f - Fixed: In the past, ZDoom worked like Doom and used integral values for
monster speeds. Now it uses fixed point so that an actor's speed property
  can always be considered is always fixed point. So DoSetActorProperty()
  should scale very slow speeds, just like dehacked's PatchThing() has done
  for some time now.


SVN r187 (trunk)
2006-06-14 03:57:58 +00:00
Christoph Oelckers
37ab80b566 - Changed UpgradeStamina to use AInventory's Amount and MaxAmount to
control the amount of upgrade and the maximum that can be reached.

SVN r186 (trunk)
2006-06-12 20:54:39 +00:00
Christoph Oelckers
bb5a44fc90 - Fixed: The skin loader assumed that all skin textures are in Doom patch
format. Now it calls FTexture::CreateTexture to do proper checks.
- Removed the PickupSound method from FakeInventory and changed it so that
  it uses AInventory::PickupSound to store its custom pickup sound.
- Removed the PickupMessage method from FakeInventory. This can be handled
  by the standard pickup message code now that it uses the meta data for the
  message.
- Fixed: The maximum indices for StrifeTypes were inconsistent. Now the
  allowed range is 0-1000 in all situations.
- Fixed: Setting a local SNDINFO for a map deleted all skin based sounds.
- Added a crouchsprite property to the skin info.
- Fixed: Crouching sprites must be checked each frame, not just each tic.
- Added an srand call to D_DoomMain in order to randomize the values returned
  by rand which is being used to shuffle the playlist.


SVN r185 (trunk)
2006-06-11 11:28:48 +00:00
Randy Heit
5859aa7194 - Fixed: Information added with addkeysection and addmenukey was never freed.
- Fixed: A classic decorate FakeInventory's PickupText was never freed.
- Fixed: Colored lights were never freed.
- Fixed: When a dehacked patch was applied, the dehacked StateMap was never
  freed.
- Removed termdone checks around atterm(S_ClearSoundData) and
  atterm(S_Shutdown) because atterm() already checks for duplicates.
- Fixed: S_ClearSoundData() should unload all sounds before it clears S_sfx.
- Fixed: AltSoundRenderer::LoadSound() didn't check if the sound had already
  been loaded and lost the old sound data if it had been.
- Fixed: FinishDehPatch() needlessly duplicated the new DehackedPickup's name.
- Fixed: PatchStrings() allocated a private string and never freed it.


SVN r183 (trunk)
2006-06-11 01:06:19 +00:00
Christoph Oelckers
9655ee9843 - Changed music name handling in MAPINFO so that music can be specified by
full path of a file in a Zip.
- Fixed: intermusic in MAPINFO was limited to WAD lumps and couldn't handle 
  external data.

ACS:

- Fixed: Global and World array symbols didn't initialize their array information.


SVN r182 (trunk)
2006-06-09 08:19:46 +00:00
Randy Heit
c808041337 - Fixed: Trying to play a 0-length song from a wad inside a zip caused a crash.
SVN r181 (trunk)
2006-06-09 00:26:07 +00:00
Christoph Oelckers
6b821afa64 SVN r179 (trunk) 2006-06-07 20:53:40 +00:00
Randy Heit
7a601515df - ClassifyLine now chooses either SSE2 or regular x87 math depending on whether
or not SSE2 is available at runtime. Since most of the time is spent in
  ClassifyLine, using SSE2 in just this one function helps the most.
- Nodebuilding is a little faster if we inline PointOnSide.
- Changed FEventTree into a regular binary tree, since there just aren't enough
  nodes inserted into it to make a red-black tree worthwhile.
- Added more checks at the start of ClassifyLine so that it has a better chance
  of avoiding the more complicated checking, and it seems to have paid off with
  a reasonably modest performance boost.
- Added a "vertex map" for ZDBSP's vertex selection. (Think BLOCKMAP for
  vertices instead of lines.) On large maps, this can result in a very
  significant speed up. (In one particular map, ZDBSP had previously
  spent 40% of its time just scanning through all the vertices in the
  map. Now the time it spends finding vertices is immeasurable.) On small maps,
  this won't make much of a difference, because the number of vertices to search
  was so small to begin with.


SVN r173 (trunk)
2006-06-06 21:39:08 +00:00
Christoph Oelckers
15681d0588 - Added a StartConversation special that allows automatic activation of Strife
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)
2006-06-03 12:30:11 +00:00
Randy Heit
4325fb8993 - Merged in recent ZDBSP fixes:
- Added code to explicitly handle outputting overlapping segs when
   building GL nodes with ZDBSP, removing the check that discarded
   them early on.
 - AddIntersection() should convert to doubles before subtracting the vertex
   from the node, not after, to avoid integer overflow. (See cah.wad, MAP12
   and MAP13.) A simpler dot product will also suffice for distance calculation.
 - Splitters that come too close to a vertex should be avoided. (See cata.wad.)
 - Red-Black Tree implementation was broken and colored every node red.
 - Moved most of the code for outputting degenerate GL subsectors into another
   function.


SVN r160 (trunk)
2006-06-01 01:43:16 +00:00
Christoph Oelckers
fd1a239c66 SVN r158 (trunk) 2006-06-01 00:05:03 +00:00
Randy Heit
12b066ef2e - Fixed: When building GL nodes for Deathkings MAP42, one polyobject had one
of its segs thrown away, so the map could not start. This was because the
  nodebuilder assumed all subsectors would be 2D and could not handle the
  case where a degenerate 1D subsector is created. In this case, that happens
  because that map has three polyobjects in the middle of the void, so the only
  way to assign them to a subsector is to use a 1D subsector.


SVN r153 (trunk)
2006-05-29 03:27:32 +00:00
Christoph Oelckers
fb31db860d - Fixed: Monsters couldn't hurt other monsters of the same species if they
were supposed to hate them.
- Since I was editing the file anyway I added checks for Heretic's and Strife's
  damaging floor types to DCajunMaster::IsDangerous.
- Added a NULL pointer check to DCajunMaster::TurnToAng because a crash log
  indicated that this can happen.
- Fixed: Strife's energy pod contains 20 units when dropped by monsters.
  To achieve this I added an Ammo.DropAmount property because there are
  no other means to control this from inside a conversation script.

SVN r151 (trunk)
2006-05-28 14:54:01 +00:00
Christoph Oelckers
96f6cfd18a SVN r148 (trunk) 2006-05-27 10:27:51 +00:00