Commit graph

7624 commits

Author SHA1 Message Date
Christoph Oelckers
e84a7de390 - variable was in the wrong scope. 2016-10-02 18:56:04 +02:00
Christoph Oelckers
37d61167ea - hotfix for a RapidJSON bug: If the Writer tries to process an INF or NaN value, it aborts and leaves the writer in a broken state, unable to recover. Changed so that it writes a 0 value so that the resulting JSON at least parses correctly. 2016-10-02 18:50:37 +02:00
Christoph Oelckers
3418710a38 - be a bit more thorough and also call Effect() on vertically moving missiles with zero damage. 2016-10-02 14:38:48 +02:00
Christoph Oelckers
865863ab6f - fixed: AFastProjectile did not work properly for perfectly vertically moving missiles. Like AActor::Tick it needs to ensure that a tiny bit of lateral movement is present so that collision detection and the Effect() function work as intended. 2016-10-02 14:37:26 +02:00
Christoph Oelckers
0bce6e3925 - added ACS and DECORATE setter functions for named translations. 2016-10-02 14:09:45 +02:00
Christoph Oelckers
a505e91032 - added TRNSLATE lump for defining global translations which are accessible by name.
This is only the definition part, manipulation functions for ACS and DECORATE still to do.
2016-10-02 13:35:25 +02:00
alexey.lysiuk
d7683a8c55 Fixed crash on early fatal error exit
Process terminates correctly if zdoom.pk3 is missing
2016-10-02 10:13:45 +03:00
Marisa Heit
efc9ed2fe9 Fix state lookup from non-action functions (i.e. Damage functions) 2016-10-01 22:31:07 -05:00
Marisa Heit
eb2ee33950 FxVMFunctionCall must pass null pointers when calling an action function from a non-action function 2016-10-01 22:29:57 -05:00
Marisa Heit
944ae2bc09 Only generate the self==stateowner check inside action functions 2016-10-01 21:47:43 -05:00
Christoph Oelckers
51ffd6d9c6 - fixed some warnings.
- A_SetRenderStyle should not default to STYLE_None.
2016-10-02 01:00:07 +02:00
Christoph Oelckers
80f2f5829f - added A_SetRenderStyle function which replaces A_SetTranslucent. A_SetTranslucent had to be deprecated due to obsolete semantics of the renderstyle argument. 2016-10-02 00:43:05 +02:00
Christoph Oelckers
ff0b879323 - added UDMF portal flags. Names are identical with Eternity for compatibility reasons. 2016-10-02 00:31:25 +02:00
Christoph Oelckers
7720359f4c - fixed: AActor::Masacre must restore the flag if it cannot kill the monster. 2016-10-01 12:08:07 +02:00
alexey.lysiuk
099bfed806 Fixed endianness issue with precaching of MUS files 2016-10-01 11:50:29 +02:00
alexey.lysiuk
e9ce699042 Fixed compilation with GCC or Clang 2016-10-01 12:17:15 +03:00
Christoph Oelckers
b400cf1454 - added an integrity check to the SNDINFO parser to detect and eliminate recursive links. Normally these would crash the sound code later.
- allow recursive linking of $random definitions (as long as they do not link back, see above.)
- fixed the sound precaching which did not handle $alias inside $random. Normally this went undetected but in cases where the random sound index was the same as a sound index in the current link chain this could hang the function.
2016-09-30 10:50:41 +02:00
Christopher Bruns
3ecd20c4a1 Enhance IDE list of PK3 source files using a more complicated approach than I had hoped for. 2016-09-29 00:43:23 +02:00
Christopher Bruns
a83d1facdf Use GLOB_RECURSE and exclude file names with brackets, for a more complete list of PK3 source files for the IDE.
# Conflicts:
#	CMakeLists.txt
2016-09-29 00:43:22 +02:00
Christoph Oelckers
2d5061e81f - fixed: DScroller did not initialize m_LastHeight in all situations. This caused a problem with the serializer because RapidJSON aborts the write of a floating point value if it is invalid.
- ensure that floats are always written out. If the actual value causes an error (i.e. INF or NaN), write a 0 to guarantee proper formatting.
2016-09-28 11:58:12 +02:00
Christoph Oelckers
676d2365e1 - fixed: The ACS strings deserializer set incorrect indices in the bucket array. This only caused a problem if there were gaps in the string pool. 2016-09-28 09:49:41 +02:00
Christoph Oelckers
12ea8ffbe4 - removed some leftover garbage from the floating point rewrite in the floorRaiseToLowestCeiling case of DFloor. 2016-09-28 08:06:15 +02:00
Marisa Heit
e3be6e4819 Fixed: The menu no longer refreshed the screen border 2016-09-27 18:58:09 -05:00
Marisa Heit
59e52b3e9b Fixed: Heretic platforms make a mid-move sound, unlike Doom's 2016-09-27 18:40:36 -05:00
Marisa Heit
40f0dbf51c Fixed: Y and Z were flipped for sound velocity 2016-09-27 16:27:31 -05:00
Christopher Bruns
a7044c9a8b Remove quotation marks that cause trouble with older versions of CMake. 2016-09-25 22:11:08 +02:00
Christoph Oelckers
f4462a7b93 - fixed: Any DSectorEffect thinker must be placed into STAT_SECTOREFFECT.
The slot had been there forever to address this same problem but only one of the two constructors actually set it, too bad that it was the wrong one...

This is something that normally won't be noticed. But if some actor is spawned on a moving platform, with both thinkers on the same statnum it means that the order of execution is not correct with the platform being done first, resulting in the actor to 'jump' while the platform is moving. To prevent this it is necessary that all sector movers only tick after all actors have completed their thinking turn.
2016-09-25 09:43:17 +02:00
Christoph Oelckers
92d0043a81 - undid part of the last commit and hopefully corrected it for good now.
We have to be extremely careful with the player data, because there's just too much code littered around that has certain expectations about what needs to be present and what not.
Obviously, when travelling in a hub, the player_t should be retained from the previous level. But we still have to set player_t::mo to the PlayerPawn from the savegame so that G_UnsnapshotLevel doesn't prematurely delete it and all associated voodoo dolls, because it checks player_t::mo to decide whether a player is valid or not.
The actual deletion of this redundant PlayerPawn should only be done in G_FinishTravel, after the actual player has been fully set up
2016-09-25 09:23:44 +02:00
Christoph Oelckers
6a6a0e8017 - removed some more hubtravel related player start fudging.
* do not skip the player_t init when travelling in a hub. The old player may still be needed in some edge cases. This applies only to singleplayer for now. The multiplayer version still needs reviewing. I left it alone because it may shuffle players around which is not wanted when doing hub travelling.
 * do not spawn two temp players in G_FinishTravel. Instead handle the case where no player_t::mo can be found gracefully by adding a few nullptr checks. This temp player served no real purpose except for having a valid pointer. The actual start position was retrieved from somewhere else.
2016-09-25 01:28:27 +02:00
Major Cooke
74b8e9f286 - Don't use Normalized180() on angles. This could result in ranges being wrongly inverted.
- Fixed properties not having the proper indices.
- Use ViewPos-to-actor instead of measuring actor-to-actor.
- Use the actual camera instead of the actor so camera textures can work.
2016-09-24 17:54:09 +02:00
alexey.lysiuk
a419b581a8 Fixed compilation on macOS 2016-09-24 13:15:45 +03:00
Christoph Oelckers
3f17d64f90 - fixed pitch comparison in visibility checking. 2016-09-24 09:42:35 +02:00
Christoph Oelckers
3862c77b4b - undid savegame version bump because it's not needed. 2016-09-24 09:18:25 +02:00
Major Cooke
dfa4f38c8f Updated to new save game code. 2016-09-24 09:17:18 +02:00
Christopher Bruns
e9f31e5f95 Fix tabbing of recent change to CMakeLists.txt to match previous version. 2016-09-24 09:17:18 +02:00
Christopher Bruns
19c3529d32 Add a comment describing my enhancement to the CMake PK3 target rule. 2016-09-24 09:17:17 +02:00
Christopher Bruns
fa52c9d098 Add first level folder contents to SOURCES for PK3 targets, so I can open the files from Visual Studio.
(cherry picked from commit c378cd4ff0b901051671932a39e3cb56e82541f4)

# Conflicts:
#	CMakeLists.txt
2016-09-24 09:17:17 +02:00
Edoardo Prezioso
7e4d0ecdbf - Fixed GCC/Clang regression post serialization. 2016-09-24 09:00:31 +02:00
Christoph Oelckers
b7c822d208 - fixed secplane_t serializer. It passed incorrect defaults to the sub-serializers and calculated negiC wrong. 2016-09-23 23:47:25 +02:00
Christoph Oelckers
69291b9cf9 - completely eliminated the horrible fudging that went on with players during hub travel. This means that DestroyMostThinkers and the player substitution mechanism in the object deserializer are gone now.
I wish I had realized this the last time it came up - it would have saved me a lot of trouble.
But as it turns out, the more recent travelling code makes all of this completely unnecessary, working perfectly fine with deleting the player pawns along with the rest of the thinkers before loading the stored ones from the savegame (and getting rid of those in G_FinishTravel.)
And with a sane savegame format that does not depend on side effects from how the thinker serializing handled linking into the lists the old code was even harmful, leaving voodoo dolls behind.
I had the exact same effect when I tried to reshuffle some things for reliably restoring portals, but did not make the connection to interference between two mutually incompatible player travelling mechanisms that just worked by sheer happenstance with the original order of things.
2016-09-23 23:03:11 +02:00
Christoph Oelckers
2318db0b1a - let DWaggleBase use the interpolation pointer of its parent instead of defining its own one.
- do not call checking code for loading savegames when writing them in ACS module serializer.
2016-09-23 22:03:44 +02:00
Christoph Oelckers
36bf099d54 - fixed: object pointers as array members may not be skipped if they are null.
- changed S_GetMusic to return a const pointer to the actual music name instead of a copy. The only thing this is used for is the savegame code and it has no use for a copy, it can work far more efficiently with a const pointer.
2016-09-23 21:24:56 +02:00
Christoph Oelckers
02b3884dff - added copyright header to serializer.cpp. 2016-09-23 20:13:22 +02:00
Christoph Oelckers
e4924c3d47 - added some missing End... calls in player deserialization code.
- fixed reading of music name.

In its current state the code is now capable of reading an E1M1 savegame and continuing play.
2016-09-23 20:05:12 +02:00
Christoph Oelckers
d28d02839e - fixed: An actor's default stencil color should be set in DECORATE instead of doing some hackery elsewhere to compensate for the lack of initialization. 2016-09-23 19:19:26 +02:00
Christoph Oelckers
b844ab137e - added some comments about the special player treatment in hub travels because this is not really intuitive... 2016-09-23 18:12:38 +02:00
Christoph Oelckers
01d28e3eb2 - added the last missing bits of the savegame code - thinker list deserialization and handling of players during hub travel. Now testing is what remains... 2016-09-23 17:49:33 +02:00
Christoph Oelckers
edb7f7959e - re-enable some commented-out stuff. 2016-09-23 14:06:51 +02:00
Christoph Oelckers
86e9282193 - removed the sequential processing of JSON objects because the benefit is too small.
After testing with a savegame on ZDCMP2 which is probably the largest map in existence, timing both methods resulted in a speed difference of less than 40 ms (70 vs 110 ms for reading all sectory, linedefs, sidedefs and objects).
This compares to an overall restoration time, including reloading the level, precaching all textures and setting everything up, of approx. 1.2 s, meaning an increase of 3% of the entire reloading time.
That's simply not worth all the negative side effects that may happen with a method that highly depends on proper code construction.
On the other hand, using random access means that a savegame version change is only needed now when the semantics of a field change, but not if some get added or deleted.

- do not I_Error out in the serializer unless caused by a programming error.

It is better to let the serializer finish, collect all the errors and I_Error out when the game is known to be in a stable enough state to allow unwinding.
2016-09-23 14:04:05 +02:00
Christoph Oelckers
5a3f1dcdb6 - made reading of objects from the savegame work.
It turned out this may not be done automatically when opening the savegame - it has to be done later, after the pre-spawned map thinkers and all connected objects have been destroyed.
The object deserializer also has to be rather careful about dealing with parse errors, because if something goes wrong a whole batch of uninitialized or partially initialized objects will be left behind to destroy.
This means that no object class may assume that anything but the default constructor has been run on it and needs to check any variable it may reference.
2016-09-23 09:38:55 +02:00