Commit graph

7682 commits

Author SHA1 Message Date
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
Christoph Oelckers
a83ea4ddd2 - fixed two typos in property names. 2016-09-23 09:20:58 +02:00
Christoph Oelckers
cad2be46ac - fixed several Destroy methods which blanketly assumed that the object's pointers were valid to use without checks.
This is not the case if deserialization prematurely aborts. The entire object may be invalid if something in the deserializer I_Error's out.
2016-09-23 08:49:30 +02:00
Christoph Oelckers
657140f985 - fixed: The canvastexture serializer did not call EndArray to close the containing object. 2016-09-23 08:27:31 +02:00
Christoph Oelckers
4964f94de1 - added a destructor zo DFsScript, because if this gets deleted outside the GC process it'll leave an allocated buffer behind, so make sure it always gets destroyed. 2016-09-23 08:26:36 +02:00
Christoph Oelckers
f397a4943c - added OutputDebugString calls to I_Error functions in Win32, so that these messages can be seen in the debug output. 2016-09-23 08:14:40 +02:00
Christoph Oelckers
c17da32dbd - added object deserialization. It seems to work, at least the stuff I sampled looked like it was properly reatored and it triggers no error condition.
- always make the top level object randomaccess when opening a JSON file for reading. Some things won't work right if this is opened for sequential access.
2016-09-23 00:45:41 +02:00
Christoph Oelckers
604b2b316b - we need to save the OF_JustSpawned flag to insert thinkers into the proper list. 2016-09-22 21:17:34 +02:00
Christoph Oelckers
c22e8c50af - fixed some errors with parsing globals.json. It looks like this file is being processed correctly now. 2016-09-22 19:36:23 +02:00
Christoph Oelckers
d9dbf26f63 - do not list savegames for different IWADs. 2016-09-22 17:39:09 +02:00
Christoph Oelckers
f52e2a8cc4 - removed bogus BeginObject call in deferred script serializer. 2016-09-22 12:36:29 +02:00
Christoph Oelckers
d5b771afdd - fixed: Both array serializers need the bounds check. 2016-09-22 11:53:09 +02:00
Christoph Oelckers
68dc75bf9e - fixed: array clamping may only be done when reading a savegame.
- fixed generation of savegame names for level snapshots.
2016-09-22 11:51:29 +02:00
Christoph Oelckers
e01965b747 - fixed deserialization of level.Scrolls. 2016-09-22 11:22:15 +02:00
Christoph Oelckers
f0e8e860f1 Merge branch 'master' into json 2016-09-22 09:09:48 +02:00
nashmuhandes
a49e15c541 Added REOPEN script type. These scripts behave just like OPEN scripts, except they will re-execute themselves every time the level is re-entered (ie as part of a hub). 2016-09-22 08:57:22 +02:00
LordMisfit
715aa80cf2 - Fix for DamageFactor bug w/ PowerDamage & PowerProtection 2016-09-22 08:52:43 +02:00
alexey.lysiuk
2d55f713c2 Fixed support for automatic graphics switching on macOS
The corresponding setting in .plist is wrong but Xcode fixes it automatically
This doesn't happen however when building via makefiles
2016-09-22 08:52:43 +02:00
Major Cooke
1383355be7 Removed the positive-only ripper level requirement.
- Several mods were able to just take advantage of A_SetRipperLevel and the likes, essentially bypassing this gate so there really is no point in doing this anymore.
2016-09-22 08:50:38 +02:00
raa-eruanna
76c5ff29fe If Inventory.MaxAmount > 1 on weapons, allow and track multiple pickups. 2016-09-22 08:47:23 +02:00
alexey.lysiuk
0a24c15445 Added ability to customize path to FluidSynth dynamic library
Use fluid_lib CVAR to set path or default name of dynamic library will be used instead
2016-09-22 08:43:00 +02:00
alexey.lysiuk
4f7e1f0171 FluisSynth dynamic library is now referenced by system specific name on macOS 2016-09-22 08:43:00 +02:00
raa-eruanna
bc0624e3b2 Fixed my error where I was using a local session variable rather than the proper user info for the weapon bob speed. 2016-09-22 08:42:59 +02:00
raa-eruanna
780d672b25 Adds user-definable weapon bob speed 2016-09-22 08:42:59 +02:00
Leonard2
b5b9baaa87 The VM now aborts when a wrong self pointer is used with user variables to avoid random crashes 2016-09-22 08:42:59 +02:00
Christoph Oelckers
5dfc396bb9 - read snapshots from zip. 2016-09-22 01:28:05 +02:00
Christoph Oelckers
f93e4813d1 - removed farchive.cpp and .h 2016-09-22 00:48:22 +02:00
Christoph Oelckers
1c9dbc3c36 - converted the basic savegame loader so that all remnant of FArchive have been removed now. 2016-09-22 00:18:31 +02:00
Christoph Oelckers
88c27e2cc0 - allow the compact and pretty writers for JSON to coexist by wrapping the whole stuff into another class that calls the proper one as needed. Due to the implementation it is not possible to decide at run time how this should behave so there have to be two different objects for either mode.
- savegame code handles new format.
2016-09-21 21:57:24 +02:00
Christoph Oelckers
ac3c00883d - implemented saving of new format savegames as zips. The code for that was adapted from zipdir.c. 2016-09-21 17:37:56 +02:00
Christoph Oelckers
810ef8f775 - save global savegame data to JSON as well.
This is incomplete and untested, just a safety commit before going on.
2016-09-21 12:19:13 +02:00
Christoph Oelckers
dbea80e943 - put savegame extension in version.h 2016-09-21 09:06:04 +02:00
Christoph Oelckers
67239cd623 - added a FileWriter class (taken from another project of mine) and changed m_png.cpp to use it.
This is so that PNGs can be written to memory, not just to an external file. stdio's FILE cannot be easily redirected but a C++ class can.
The writer is very simple and primitive right now, allowing no seeking, but for the job at hand it is sufficient.

Note that large parts of savegame creation have been disabled, because they are about to be rewritten and it makes no sense to adjust them all before.
2016-09-21 09:01:12 +02:00
Braden Obrzut
8aa09768f0 - Fixed: Memory(Array)Reader's seek range didn't include the end of file. Since GetLength exists this is inconsequential for ZDoom, but still incorrect. 2016-09-20 21:23:37 -04:00
Christoph Oelckers
075e98c967 - use FCompressedBuffer to store level snapshots. FCompressedMemFile has been removed. 2016-09-21 01:48:23 +02:00
Christoph Oelckers
da83d9e2bd - converted player serializer and everything it needs.
This means that everything belonging to the level snapshot will be generated in the JSON output.
2016-09-21 01:18:29 +02:00
Christoph Oelckers
3a1191281f - some preparations for converting the player serialization code.
- converted sound and canvas texture serialization.
- refactored file_zip, so that it can be used to load loose zip files and extract their compressed data directly.
- added handling to FSerializer to generate and consume compressed Zip file entries.

If all goes well this will allow saving savegames as Zips when the rework is done, which will make analyzing them a lot easier.
2016-09-20 23:13:12 +02:00
Christoph Oelckers
970c168b13 - re-added serialization of treanslations.
- removed more dead code.
2016-09-20 19:45:32 +02:00
Christoph Oelckers
e101014432 - converted the user variable serializer. 2016-09-20 18:27:47 +02:00
Christoph Oelckers
e41296a64d - added some separators to dobject.cpp
- added restore code for subsector automap info.
2016-09-20 13:30:31 +02:00
Christoph Oelckers
f3e8c7c241 - fixed incomplete hudmessage serialization.
- fixed a few errors in the ACS module serializer.
- reordered a few things to how they were in the old code.
- optimized serialization of the level.Scrolls array to happen within the sector. This is to allow skipping 0-entries which normally constitute the vast majority of them.
2016-09-20 13:21:41 +02:00
Christoph Oelckers
cf1e6d5275 - converted FBehavior::StaticSerializeModuleStates.
- removed some code which is no longer needed.
2016-09-20 11:35:25 +02:00
Christoph Oelckers
42e38f6cc1 - more cleanup to reduce references to FArchive. 2016-09-20 10:59:48 +02:00