Commit graph

344 commits

Author SHA1 Message Date
Randy Heit
bac407c543 - Fixed: The SafeDivScales used a signed shift for their if test. This fails
when a == 0x80000000, because the result of abs will still be negative as
  long as we use signed math.
- Fixed: SafeDivScale31 performed DivScale32 instead.
- Fixed: R_DrawSpanP_ASM had a short jump into a different section.


SVN r472 (trunk)
2007-02-02 23:41:51 +00:00
Randy Heit
0b7b527ac2 - Fixed: When quiting from fullscreen mode, RestoreConView() did not ungrab
the mouse.
- Fixed an old Doom bug: Firing the chaingun with only one bullet still made
  it play its sound twice.


SVN r471 (trunk)
2007-01-31 00:52:33 +00:00
Randy Heit
095b11bc36 - Added an operator += for FString that takes an FName as input, since GCC
is unable to synthesize one.
- Converted xlatcc to use lemon during its build process. Now you don't need
  bison to rebuild everything anymore.


SVN r470 (trunk)
2007-01-31 00:30:42 +00:00
Randy Heit
72c93b479e - Added support for damage-specific player pain sounds.
- Removed the constraint that all $playerreserve SNDINFO commands must come
  before the other $player commands.
- Fixed: TArray::Reserve did not construct its newly allocated entries.
- Changed the damage type for drowning from 'Water' to 'Drowning'.


SVN r466 (trunk)
2007-01-28 04:59:04 +00:00
Randy Heit
ba5e77e021 - Fixed: Since FMemLump is now implemented on top of FString, it never
contains a NULL point, so the GetMem() method should fake it by
  returning NULL when the string is empty. Reverted p_xlat.cpp to its
  old revision.


SVN r465 (trunk)
2007-01-28 03:17:02 +00:00
Christoph Oelckers
37f701a462 - Fixed: The rewrite of FMemLump broke the non-standard use of it in
P_TranslateLinedefs.
- Fixed: ShowErrorPane can be called before ST_NetDone is valid so it has to
  check whether it is NULL.
- Fixed: The Megasphere had an incorrect pickup sound.
- Fixed: The new video initialization code could set the screen's Font pointer
  to NULL, causing a crash with levels that start in a secret sector.


SVN r464 (trunk)
2007-01-26 21:46:47 +00:00
Randy Heit
af13d6d686 - Fixed: If you called the FString assignment operator that accepts a
const char * with a string inside its buffer, it released the buffer
  before copying the string.
- Added a new FString constructor that creates the string from a lump.
- Fixed: G_DoReborn() calls G_InitNew() with mapname set to level.mapname.
  G_InitNew() then copies it onto level.mapname, which is undefined
  behavior (although it does work as we want it to).
- Modified FMemLump to store its data using FString. That class provides
  a convenient method of storing reference counted data, so now FMemLump
  doesn't need to muck about sneakily using const_casts and possibly
  tricking its users into thinking that an old one is still valid after
  being assigned to a new one.
- Fixed: The IMGZ, PNG, PCX, and JPEG loaders assumed the files were
  large enough for their headers without actually checking.



SVN r463 (trunk)
2007-01-25 04:02:06 +00:00
Randy Heit
36839136fb - Fixed: The simulated palette blends when the menu or console are open
were applied even when the status bar wasn't drawn. (In other words, even
  in situations where a real palette blend wouldn't have happened.)


SVN r462 (trunk)
2007-01-23 01:43:47 +00:00
Randy Heit
9b72e34223 - Added a range check for the PNG grAb chunks.
- Fixed: AddLine() could corrupt memory if the length of the text being
  added was longer than the console buffer.
- Fixed: FTexture::GetScaled(Left|Top)Offset returned the Width and Height
  instead when the scale values were 0.
- Removed the unnecessary "mov ecx,c" from mscinlines.h:Scale().


SVN r461 (trunk)
2007-01-23 01:13:17 +00:00
Randy Heit
64ad1d14af - Fixed: The simulated palette blend used when the console is down needs to
force a full screen update the next frame.


SVN r460 (trunk)
2007-01-22 23:55:46 +00:00
Randy Heit
f1c41539de - Fixed: LocalViewPitch could overflow and wrap around when a netgame stalls.
SVN r459 (trunk)
2007-01-22 23:50:09 +00:00
Randy Heit
0b5e4b1f1f - Changed the vertheight and rounding-error-checking code in
DCanvas::DrawTexture() to calculate off the actual bottom of the image
  instead of the height, improving precision. Now the scaled status bar is
  flush with the bottom of the screen at 1280x1024, for instance.


SVN r458 (trunk)
2007-01-22 23:14:00 +00:00
Randy Heit
b4390308df - Added a new WIF_NO_AUTO_SWITCH flag for weapons that should never be
switched to automatically when the player picks them up.


SVN r457 (trunk)
2007-01-22 22:15:50 +00:00
Christoph Oelckers
d0c910fca6 - added Grubber's submission for customizable gravity per actor.
- Fixed: A_Jump didn't work for weapons or CustomInventory items.



SVN r456 (trunk)
2007-01-20 14:27:44 +00:00
Randy Heit
4f845508cc - Added D3DCREATE_FPU_PRESERVE to the IDirect3D9::CreateDevice() call.
Normally Direct3D sets the FPU to single precision. We don't want that,
  since it can mean going out of sync with machines that are using the
  standard precision. Additionally, the nodebuilder requires the extra
  precision that single precision lacks.


SVN r455 (trunk)
2007-01-19 02:45:26 +00:00
Randy Heit
47c401f4ec - Replaced the vector math routines with the ones I developed for the FP code.
SVN r454 (trunk)
2007-01-19 02:00:39 +00:00
Randy Heit
f0f976c4f5 - Added a summonfoe CCMD, which is analagous to summonfriend but forces the
summoned creature to be hostile instead.


SVN r453 (trunk)
2007-01-16 03:04:00 +00:00
Randy Heit
de18276b24 - Changed the default snd_output under Linux to OSS.
- Fixed the behavior of the "Don't ask" checkbox for the GTK+ version of
  the IWAD dialog.



SVN r452 (trunk)
2007-01-16 02:19:25 +00:00
Randy Heit
c196880ee5 - Added a GTK+ version of the IWAD selection dialog box. That brings the
Linux port one step closer to feature parity with the Windows version.



SVN r451 (trunk)
2007-01-16 01:53:43 +00:00
Christoph Oelckers
554573bcb3 - Adjusted AlterWeaponSprite so that it properly handles multiple
invisibility powerups at the same time.


SVN r450 (trunk)
2007-01-14 08:58:07 +00:00
Randy Heit
14ecb21dee - Integrated the fatal error display into the text logger.
SVN r449 (trunk)
2007-01-14 02:25:19 +00:00
Christoph Oelckers
3c976ac02c - Converted the StrifePlayer to DECORATE. Even though it requires exporting
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)
2007-01-12 15:24:10 +00:00
Christoph Oelckers
1cd8370327 - Added Skulltag's REDMAP and GREENMAP.
- 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)
2007-01-09 16:32:44 +00:00
Randy Heit
82ba0fb189 SVN r446 (trunk) 2007-01-09 04:40:58 +00:00
Christoph Oelckers
dbb9baf909 - Fixed: Sorting of files in Zips was broken.
SVN r445 (trunk)
2007-01-07 10:18:35 +00:00
Christoph Oelckers
4510ccf849 - Ported GZDoom's deep water splash code so that splashes are handled properly
in Boom maps with non-swimmable water.
- Changed ENDOOM CVAR so that there is an option to show only modified versions.


SVN r444 (trunk)
2007-01-07 09:43:58 +00:00
Randy Heit
6b1bf235fd - Added simulation of Strife's startup screen.
- Switched from a 14-pixel tall VGA font to a 16-pixel tall one for the
  Heretic loading screen (and ENDOOM).


SVN r443 (trunk)
2007-01-07 05:00:07 +00:00
Christoph Oelckers
34c6f64d82 - Added ENDOOM screen. It will only be shown when the game is exited via the
main menu and there is an option to switch it off for those who don't want
  to wait.


SVN r441 (trunk)
2007-01-06 12:30:34 +00:00
Randy Heit
dbe2593500 - Added simulation of Heretic's startup screen.
SVN r438 (trunk)
2007-01-06 04:08:24 +00:00
Christoph Oelckers
ec2e63c6d3 - Added customizable border textures. They will be defined with the
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)
2007-01-05 22:08:57 +00:00
Randy Heit
34719e8d58 - Added simulation of Hexen's startup screen (currently minus net notches).
SVN r436 (trunk)
2007-01-05 04:21:14 +00:00
Christoph Oelckers
6a89d3594a - Fixed: The ANIMATED parser must read the bytes for the speed as unsigned bytes.
- Fixed: The screen wipe must be disabled for Heretic's underwater ending. If
  not, the wipe will try to mix pictures with different palettes.


SVN r435 (trunk)
2007-01-02 09:51:04 +00:00
Christoph Oelckers
e15988505a - Fixed: Several actors for Doom were missing their spawn ID.
SVN r434 (trunk)
2006-12-31 11:27:39 +00:00
Randy Heit
82cf5d703f - Fixed: APlayerPawn::GiveDefaultInventory() used two different variables
both named item.
- Switched ddraw.dll to be delay loaded. With D3D9 now being the default
  display code, this avoids wasting time loading DDraw if it isn't needed.
- Fixed: The Win32 I_FatalError() did not set alreadyThrown, so it could get
  stuck in an endless fatal error loop.

SVN r433 (trunk)
2006-12-29 20:28:23 +00:00
Randy Heit
b2b28fa2f5 - Fixed: The SDL input code must convert the event.data1 to uppercase.
- Added more resolution options when playing windowed under SDL.
- Changed SDL mouse handling to be basically identical to the (non-DirectInput)
  Win32 code. The mouse is polled periodically and constantly warped to the
  center of the window. Despite what the SDL docs specify, SDL_WM_GrabInput()
  is apparently no longer a reliable means of obtaining continuous relative
  mouse motion events.
- Fixed: The non-Windows implementation of I_FindClose() did not check for -1
  handles.



SVN r432 (trunk)
2006-12-29 05:14:19 +00:00
Randy Heit
851bf89442 - Fixed all the warnings from GCC 4.2, including a handful that were
present in
  older GCCs.



SVN r430 (trunk)
2006-12-29 03:38:37 +00:00
Randy Heit
ff65f75a8c - Fixed: The VC++ project was not set up to redefine RM using del in
wadsrc/Makefile, nor did it use the makefile for cleaning.
- Added ST_NetMessage() for mixing miscellaneous messages with the network
  startup meter, since they get mixed in the same space on the Linux terminal
  and must be handled properly to avoid looking bad.


SVN r429 (trunk)
2006-12-29 02:21:47 +00:00
Randy Heit
4899fa91f1 - Fixed the new network status display for the Linux terminal.
SVN r428 (trunk)
2006-12-29 01:48:47 +00:00
Christoph Oelckers
3eeef7af77 - Converted the Communicator to DECORATE.
- 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)
2006-12-25 13:43:11 +00:00
Christoph Oelckers
2b6203f950 - Replaced several calls to S_GetSoundPlayingInfo with S_IsActorPlayingSomething
because S_GetSoundPlayingInfo cannot properly resolve player and random sounds.
- Fixed: S_IsActorPlayingSomething has to resolve aliases and player sounds.
- Took S_ParseSndSeq call out of S_Init. This doesn't work when parsing SNDINFO
  in D_DoomMain.
- Moved SNDINFO reading back to its old place after MAPINFO. This is necessary
  for Hexen's music definitions.


SVN r425 (trunk)
2006-12-24 23:08:49 +00:00
Christoph Oelckers
558a18cf5c - Added new flag MF5_NOBLOODDECALS that prevents bleeding actors from spawning
blood decals.


SVN r424 (trunk)
2006-12-24 12:51:24 +00:00
Christoph Oelckers
d718827ec1 - Fixed: The Cacodemon doesn't have a melee attack defined as I mistakenly
assumed when writing its DECORATE code.


SVN r423 (trunk)
2006-12-23 23:09:23 +00:00
Christoph Oelckers
9b0b199bb5 - Fixed: Commander Keen's death sequence had one state duplicated.
- Fixed: Due to the changes for custom states the internal weapons shouldn't
  define a holdatk state unless it differs from the attack state.
- Fixed: The bot code tried to spawn ACajunBodyNode instead of CajunBodyNode.
- Changed: MF2_BLASTED doesn't work well for players so I had to take it out
  of A_BlastRadius.
- Fixed: When MF2_BLASTED was cleared MF2_SLIDE got cleared as well, no matter
  whether it was set by default or not. Now the MF2_SLIDE check checks both
  flags and the BlastRadius code doesn't set MF2_SLIDE anymore.


SVN r422 (trunk)
2006-12-23 12:12:06 +00:00
Randy Heit
1360a1d89e - Guests can now watch as other guests connect during i_net handshaking.
- Fixed: The host would let more than the desired number of players connect.
- Decreased the frequency of packets in ST_NetLoop() to two per second.
- Fixed: During the i_net handshaking, guests never verified that the messages
  they received were from the host.
- Removed the -net command line option. I'm not sure it even worked anymore.


SVN r421 (trunk)
2006-12-23 03:40:12 +00:00
Randy Heit
e1bd63e876 - Turned on warning level 4 just to see what it would produce: a lot of
warnings. At first, I was going to try and clean them all up. Then I decided
  that was a worthless cause and went about just acting on the ones that
  might actually be helpful:
   C4189 (local variable is initialized but not referenced)
   C4702 (unreachable code)
   C4512 (assignment operator could not be generated)


SVN r420 (trunk)
2006-12-21 04:34:43 +00:00
Randy Heit
c8d07f3883 - Fixed: D3DFB::Reset() also needs to restore the texture border color,
otherwise it gets reset to black and unused. 
- Fixed: I_SetWndProc() needs to be called before any of the DirectX
  interfaces are initialized, because DirectX subclasses the window itself,
  and I_SetWndProc() undoes that subclassing.


SVN r419 (trunk)
2006-12-20 02:20:59 +00:00
Christoph Oelckers
43ddce519c - Fixed: Inventory.Icon printed error message for all the missing icons in
Strife's teaser.
- Fixed: st_start.cpp needed a 
  #define _WIN32_WINNT 0x0501.
- Fixed a few uninitialized variables warnings for GCC.


SVN r418 (trunk)
2006-12-19 16:08:48 +00:00
Randy Heit
83373fba88 Note: I have not tried compiling these recent changes under Linux. I wouldn't
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)
2006-12-19 04:09:10 +00:00
Christoph Oelckers
e9c68df94e - Fixed: The smartaim logic was incorrect. Also added another mode: Autoaim only
at monsters.


SVN r415 (trunk)
2006-12-16 16:34:39 +00:00
Christoph Oelckers
693bf96cb3 - Merged FActorInfo::FindStateExact and FActorInfo::FindState into one function
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)
2006-12-16 14:06:21 +00:00