Commit graph

499 commits

Author SHA1 Message Date
Rachael Alexanderson
8192ad73bd - changed fall damage so it is max 'TELEFRAG_DAMAGE - 1' instead of a flat 999 (it used to check for >=1000). 2017-05-16 09:52:50 +02:00
Rachael Alexanderson
c6946cc672 - removed all instances of CF_POWERBUDDHA 2017-05-16 09:52:50 +02:00
Major Cooke
795f8f0578 - Added a separate cheat flag to handle buddha powerups. Currently, Buddha powerups could interfere and disable the actual player cheat unintentionally, when the player may not want their actual cheat to be turned off.
- Set some overlooked 1000000 damage points to TELEFRAG_DAMAGE inside the falling damage code.
2017-05-14 17:22:46 +02:00
Christoph Oelckers
b84f7bcada - scriptified the weapon firing logic. 2017-05-01 01:55:35 +02:00
Christoph Oelckers
abee2805cb - the last scriptified bits of P_PlayerThink. 2017-05-01 00:27:58 +02:00
Christoph Oelckers
6e25c34fda - more player code exported 2017-04-30 22:17:51 +02:00
Christoph Oelckers
10deb5ce56 - exported P_PlayerThink to ZScript. 2017-04-30 22:17:50 +02:00
Christoph Oelckers
96d328de9b - removed all Doom Source license and all default Raven copyright headers and replaced them with GPLv3. Also fixed the license in a few other files.
For some files that had the Doom Source license attached but saw heavy external contributions over the years I added a special note to license all original ZDoom code under BSD.
2017-04-17 13:33:19 +02:00
Christoph Oelckers
6599e2c425 - moved the VM types into their own file and only include it where really needed. 2017-04-13 01:12:04 +02:00
Christoph Oelckers
fc9e304189 - separated class descriptors from VM types.
Combining these two groups of data has been the cause of many hard to detect errors because it allowed liberal casting between types that are used for completely different things.
2017-04-12 22:46:49 +02:00
Christoph Oelckers
e4d2380775 - moved all remaining fields from PClassActor to FActorInfo.
- added a few access functions for FActorInfo variables.

With PClassActor now empty the class descriptors can finally be converted back to static data outside the class hierarchy, like they were before the scripting merge, and untangle the game data from VM internals.
2017-04-12 00:07:41 +02:00
Christoph Oelckers
e1698c6d41 - split P_PlayerThink into several smaller functions.
This is for a future script export where overriding the actions separately may be interesting.
2017-04-08 15:45:11 +02:00
Christoph Oelckers
1d4ab0cc2a - implemented proper scaling for the status bar itself.
This allows using the UI scale or its own value, like all other scaling values.
In addition there is a choice between preserving equal pixel size or aspect ratio because the squashed non-corrected versions tend to look odd, but since proper scaling requires ununiform pixel sizes it is an option.

- changed how status bar sizes are being handled.

This has to recalculate all scaling and positioning factors, which can cause problems if the drawer leaves with some temporary values that do not reflect the status bar as a whole.
Changed it so that the status bar stores the base values and restores them after drawing is complete.
2017-03-29 19:23:40 +02:00
Christoph Oelckers
bdf761e457 - moved th player resurrection code into a player_t method. 2017-03-28 21:29:14 +02:00
Christoph Oelckers
e791c957d9 - implemented the regular Doom status bar.
The DOOM status bar and HUD are complete, except the inventory bar.
2017-03-26 22:04:58 +02:00
Christoph Oelckers
a2f2be17ef - status screen fully scriptified but not active yet. 2017-03-18 19:35:26 +01:00
Christoph Oelckers
745b96beec - made the status screen a class and scriptified a few more functions. 2017-03-18 15:45:36 +01:00
Rachael Alexanderson
55b95e68db - Restored a file that apparently worked fine back at a certain commit (0176c29). 2017-03-16 13:55:10 -04:00
Christoph Oelckers
4ed5b91b0f - added a few missing includes which were not triggered as error in a debug build. 2017-03-10 09:57:10 +01:00
Rachael Alexanderson
cc9a2e5121 Merge https://github.com/coelckers/gzdoom 2017-03-08 21:25:24 -05:00
Christoph Oelckers
ad41b23506 - replaced the homegrown integer types in all p* sources and headers. 2017-03-08 18:55:52 +01:00
Christoph Oelckers
b8f7e305db - changed TObjPtr to take a pointer as its template argument and not the class it points to.
This addresses the main issue with TObjPtr, namely that using it required pulling in the entire class hierarchy in basic headers like r_defs which polluted nearly every single source file in the project.
2017-03-08 13:35:21 +01:00
Rachael Alexanderson
b3a69e1df8 Merge https://github.com/coelckers/gzdoom 2017-03-02 18:13:33 -05:00
Christoph Oelckers
b194ba205a - backported Zandronum's MaxHealth base class for the MaxHealthBonus item. 2017-03-02 11:39:52 +01:00
Rachael Alexanderson
d6169ea75e Merge https://github.com/coelckers/gzdoom 2017-02-28 18:55:17 -05:00
Christoph Oelckers
cb295e0441 - added parameter to PLayerPawn::GetMaxHealth to return the real maximum health, including stamina upgrades. 2017-03-01 00:04:17 +01:00
Christoph Oelckers
314a642527 Merge branch 'meta' 2017-02-28 14:47:00 +01:00
nashmuhandes
bb1709228c Changed FOV from a CCMD to a CVar, allowing players' FOV settings to persist. Also exported SetFOV to PlayerInfo for ZScript. 2017-02-28 14:46:30 +01:00
Christoph Oelckers
bc0ffc4185 - removed access to the PlayerPawn's DisplayName variable. This one has implicit semantics, so wherever a displayable name is needed GetPrintableDisplayName should be called instead to allow later refactoring of the internal handling. 2017-02-28 14:33:46 +01:00
Christoph Oelckers
a93a7e1cac - handle player meta properties.
Only two really make sense, the rest is never used from scripts and may just remain where it was.
2017-02-28 01:23:12 +01:00
Rachael Alexanderson
7a5df2bc28 Merge commit 'b0eb19b' 2017-02-26 13:41:02 -05:00
Christoph Oelckers
e6b31dde27 - added some flexibility to some Skulltag powerups.
- handle these powerups by actual item checks instead of cheat flags. (The same should also be done for the Frightener and Buddha but those are a bit more complex because they are also real cheats.)
2017-02-26 16:23:22 +01:00
Rachael Alexanderson
65122ed19e Merge https://github.com/coelckers/gzdoom 2017-02-18 00:18:45 -05:00
Christoph Oelckers
5f1241a55c - scriptified the rest of the player menu. This compiles and runs but doesn't work yet, it will be fixed in the next commit. 2017-02-18 01:20:07 +01:00
Christoph Oelckers
50d2846e40 - scriptified UpdateColorsets. 2017-02-17 23:16:07 +01:00
Christoph Oelckers
97eed1e6df - scriptified UpdateSkins. 2017-02-17 22:12:56 +01:00
Christoph Oelckers
498da825a5 - made the Skins array scripting friendly and exported it. 2017-02-17 21:51:23 +01:00
Christoph Oelckers
b375657509 - scriptified DPlayerMenu::SkinChanged. 2017-02-17 20:49:04 +01:00
Christoph Oelckers
f4e9cd0009 - scriptified DPlayerMenu::MouseEvent. 2017-02-17 18:21:59 +01:00
Rachael Alexanderson
e01895bf80 Merge https://github.com/coelckers/gzdoom 2017-02-15 07:06:52 -05:00
Christoph Oelckers
c8db1f151e - fixed: All FNames inside actor classes need to be FNameNoInit or their constructor will overwrite them after copying the defaults. 2017-02-15 12:16:24 +01:00
Rachael Alexanderson
8c176575c8 Merge https://github.com/coelckers/gzdoom 2017-02-12 21:39:20 -05:00
Christoph Oelckers
947b625c50 - all menu items scriptified, but not yet active. 2017-02-11 16:11:48 +01:00
Rachael Alexanderson
5948c7b0da Merge https://github.com/coelckers/gzdoom 2017-02-08 18:42:24 -05:00
Christoph Oelckers
4e685f2b78 - fixed: for unpositioned sounds the play position was never initialized and depended on random memory contents. 2017-02-08 23:29:52 +01:00
Christoph Oelckers
8277299135 - Turned DropItem into a plain struct again like it was before the scripting branch got merged.
Making this an object had little to no advantage, except being able to remove the deleter code. Now, with some of the class data already being allocated in a memory arena so that freeing it is easier, this can also be used for the drop item lists which makes it unnecessary to subject them to the GC. This also merges the memory arenas for VM functions and flat pointers because both get deleted at the same time so they can share the same one.
2017-02-08 20:37:22 +01:00
Christoph Oelckers
17a2666bd4 - moved DisplayName, the last remaining PlayerPawn meta property, to PClassActor so that PClassPlayerPawn could be removed.
Now all actors have the same metaclass and therefore it will always be the same size which will finally allow some needed changes to the type system which couldn't be done because it was occasionally necessary to replace tentatively created classes due to size mismatches.
2017-02-08 19:42:24 +01:00
Christoph Oelckers
68e9918ed5 - moved player color sets and pain flashes into global variables.
There's simply never enough of them and they are used far too infrequently to justify the hassle of tagging along two TMaps per class.
For what they provide, single global lists that handle all player classes at once are fully sufficient.
2017-02-08 19:10:11 +01:00
Christoph Oelckers
c77f6636f8 - moved the three remaining variables from PClassInventory to PClassActor so that PClassInventory can be removed. 2017-02-08 18:11:23 +01:00
Christoph Oelckers
2ca0e34785 - turned many of PClassPlayerPawn's strings into names and moved all scalar properties into APlayerPawn.
The goal is to get rid of PClassPlayerPawn and PClassInventory so that the old assumption that all actor class descriptors have the same size can be restored
This is important to remove some code that seriously blocks optimization of the type table because that can only be done if types do not need to be replaced.
2017-02-08 16:42:13 +01:00
Christoph Oelckers
a6785afddb - optimized the FName versions of IsDescendantOf and IsKindOf. These can be done without first looking up the class type itself. 2017-02-08 15:47:22 +01:00
Rachael Alexanderson
3ea27cd996 Merge https://github.com/coelckers/gzdoom 2017-01-23 22:12:55 -05:00
Christoph Oelckers
17ed23bfcc - don't read the full height of a player from the defaults, because that cannot be changed by A_SetHeight.
Instead a new member, FullHeight is used for this now.
2017-01-24 00:12:06 +01:00
Rachael Alexanderson
8a198591f4 Merge https://github.com/coelckers/gzdoom 2017-01-19 11:58:53 -05:00
Christoph Oelckers
19b1c10ba8 - scriptified a large part of the weapon code. 2017-01-19 17:40:34 +01:00
Rachael Alexanderson
9333ce1888 Merge https://github.com/coelckers/gzdoom 2017-01-18 21:15:08 -05:00
Christoph Oelckers
8256f25a84 - no need to keep AArmor native, now that all child classes have been scriptified. 2017-01-18 23:46:19 +01:00
Christoph Oelckers
632a29e365 - scriptified HexenArmor. 2017-01-18 23:42:08 +01:00
Christoph Oelckers
2fcffd1fc1 - removed the remaining native parts of ABasicArmor.
- simplified some FindInventory calls using PClass::FindActor to call the variant taking a name directly.
2017-01-18 22:57:47 +01:00
Christoph Oelckers
2dd6fb9595 - scriptified BasicArmorBonus. 2017-01-18 20:23:13 +01:00
Christoph Oelckers
d8acf774a6 - scriptified the remains of AKey.
- replaced Key.KeyNumber with special1. This is only for internal bookkeeping purposes so there's really no need to complicate this with a new variable when this one works just as well.
2017-01-18 15:17:12 +01:00
Christoph Oelckers
d9fd2d509f - scriptified the remains of AAmmo. 2017-01-18 14:18:17 +01:00
Magnus Norddahl
53a79ca215 Merge remote-tracking branch 'gzdoom/master' into qzdoom
# Conflicts:
#	src/r_things.cpp
2017-01-18 04:09:16 +01:00
Christoph Oelckers
232b64d332 - eliminated the native PowerupGiver class.
- scriptified the respawn invulnerability code into a virtual OnRespawn function for PlayerPawn so that custom effects can be implemented.
2017-01-18 00:11:04 +01:00
Christoph Oelckers
14f2c39e58 - scriptified cht_Give and cht_Take and made them virtual function of PlayerPawn so that this can be better configured for mods that want other options in here.
- improved the class pointer to string cast to print the actual type it describes and not the class pointer's own type.
- fixed: The 'is' operator created non-working code when checking the inheritance of a class pointer, it only worked for objects.
2017-01-17 17:34:39 +01:00
Magnus Norddahl
1c3440e391 Merge remote-tracking branch 'gzdoom/master' into qzdoom
# Conflicts:
#	src/r_plane.cpp
#	src/r_plane.h
2017-01-16 06:03:21 +01:00
Christoph Oelckers
d2d6e5d486 - scriptified PowerFlight and PowerWeaponLevel2. 2017-01-15 23:21:38 +01:00
Christoph Oelckers
a597979738 - scriptified ammo.
- moved inventory stuff into its own directory.
2017-01-14 21:27:31 +01:00
Magnus Norddahl
1d941c9839 Merge remote-tracking branch 'gzdoom/master' into qzdoom
# Conflicts:
#	src/r_plane.cpp
#	src/win32/zdoom.rc
2017-01-13 13:21:10 +01:00
Christoph Oelckers
23482735a0 - removed PClassAmmo.
No need to maintain these clunky meta class for one single property. The overhead the mere existence of this class creates is far more than 100 spawned ammo items would cost.
There is no need to serialize AAmmo::DropAmount, this value has no meaning on an already spawned item.
2017-01-12 11:44:33 +01:00
Rachael Alexanderson
05662e5c4d Merge https://github.com/coelckers/gzdoom
# Conflicts:
#	src/r_bsp.cpp
#	src/r_plane.cpp
#	src/r_things.cpp
2017-01-09 09:51:06 -05:00
Christoph Oelckers
cd7986b1b1 - refactored global sides array to be more VM friendly.
- moved FLevelLocals to its own header to resolve some circular include conflicts.
2017-01-08 18:46:17 +01:00
Rachael Alexanderson
6e06adb795 Merge https://github.com/coelckers/gzdoom 2017-01-07 16:04:46 -05:00
Christoph Oelckers
c02281a439 - refactored the global sectors array into a more VM friendly type and moved it into FLevelLocals. 2017-01-07 19:32:24 +01:00
Rachael Alexanderson
de5f5a1221 Merge https://github.com/coelckers/gzdoom 2017-01-06 22:06:25 -05:00
Christoph Oelckers
62ea83a35a - let the prediction code handle all 4 threaded lists an actor gets linked into.
This is mostly a straight refactoring of the existing code to work independently of specific member variables in the involved classes, using a bit of template magic to avoid redundancy and moving the work code into subfunctions.
It still needs some testing to see if it a) helps fix the crash issues and b) doesn't break anything-
2017-01-06 15:06:17 +01:00
Rachael Alexanderson
7ea4c9508f Merge https://github.com/rheit/zdoom 2016-12-26 15:46:17 -05:00
Christoph Oelckers
7f72de6b71 - use msecnode_t's for the touching_renderlists instead of std::forward_list.
- preparations for checking the proper sector to get a sprite's lighting info.
2016-12-26 11:58:08 +01:00
Christoph Oelckers
04ff4282ef - removed the global 'sector_list' variable.
If the calling code wants to recycle this it will have to pass a container variable to AActor::UnlinkFromWorld and AActor::LinkToWorld.
This was changed because keeping such data in a global variable is dangerous for a set of functions that can be called from a script.
Note that the scripted versions do not yet support saving of the touching_sectorlist.
2016-12-25 22:40:26 +01:00
Rachael Alexanderson
0b4fd6c766 Merge https://github.com/rheit/zdoom 2016-12-15 20:07:10 -05:00
Christoph Oelckers
9ef551b84a - fixed: Start items for players were never actually checked for their type and could cause crashes if non-inventories were given. 2016-12-16 00:28:16 +01:00
Christoph Oelckers
5d210c64e0 - got rid of ksgn.
Because every bit of Build code that can be removed is a good thing.
This was only used in two places, one of which could be done better, the other one in the voxel drawer setup now uses a local C-inline version.

(cherry picked from commit 5536184bee)
2016-12-09 08:11:45 -05:00
Christoph Oelckers
5536184bee - got rid of ksgn.
Because every bit of Build code that can be removed is a good thing.
This was only used in two places, one of which could be done better, the other one in the voxel drawer setup now uses a local C-inline version.
2016-12-09 00:43:54 +01:00
Rachael Alexanderson
a78b713f4b Merge https://github.com/coelckers/gzdoom
# Conflicts:
#	src/v_video.cpp
2016-12-06 18:19:08 -05:00
Christoph Oelckers
87484950cf - removed an assert from APowerMorph::EndEffect. With some recent changes to DestroyAllInventory it appears that the asserted condition no longer is true at this point when ending a game.
- fixed: When replacing a tentative class, the pointers in the morph objects were not replaced. Instead of adding more ReplaceClassRef methods I chose to integrate this part into the PointerSubstitution mechanism and delete ReplaceClassRef entirely. The code had some oversights anyway that would have caused problems, now that non-actors can be created.
2016-12-01 00:05:23 +01:00
Christoph Oelckers
86544086df - allow the VM to run on one global stack per thread.
It is utterly pointless to require every function that wants to make a VM call to allocate a new stack first. The allocation overhead doubles the time to set up the call.
With one stack, previously allocated memory can be reused. The only important thing is, if this ever gets used in a multithreaded environment to have the stack being declared as thread_local, although for ZDoom this is of no consequence.

- eliminated all cases where native code was calling other native code through the VM interface. After scriptifying the game code, only 5 places were left which were quickly eliminated. This was mostly to ensure that the native VM function parameters do not need to be propagated further than absolutely necessary.
2016-11-30 17:15:01 +01:00
Christoph Oelckers
229c55ce61 - moved ammo to its own file, including the backpack.
- moved weapon declarations to their own header.
2016-11-30 12:24:50 +01:00
Christoph Oelckers
78fa076079 - moved armor class declarations to their own file and added necessary #includes only to those files actually using them.
- added copyright headers to a_armor.cpp and a_keys.cpp.
2016-11-30 10:55:03 +01:00
Christoph Oelckers
bbf62132d8 - added a larger batch of function exports.
- cleaned up the virtual function interface of APlayerPawn which still had many virtual declarations from old times when class properties were handled through virtual overrides. None of this makes sense these days anymore.
2016-11-30 01:25:51 +01:00
Christoph Oelckers
3af9232fca - scriptified a_strifeitems.cpp and a_debris.cpp.
- Changed the glass shards so that they do not have to override FloorBounceMissile. It was the only place where this was virtually overridden and provided little usefulness.
- made 'out' variables work.
- fixed virtual call handling for HandlePickup.
2016-11-29 12:17:05 +01:00
Christoph Oelckers
dc9ee0727a - scriptified a_spectral.cpp.
- consolidated A_Tracer and A_Tracer2.

Note that this commit temporarily disables a few features in order to make it compile.
2016-11-28 12:55:33 +01:00
Christoph Oelckers
7ea9f60464 - scriptified the Acolyte. 2016-11-28 10:41:36 +01:00
Christoph Oelckers
69d4d36429 - scriptified ArtiHealingRadius.
- allow switch/case with names.
- fixed break jump target handling for switch/case. This only worked when the break was in the outermost compound statement, those in inner ones were missed.
2016-11-27 00:18:07 +01:00
Christoph Oelckers
997e4a2ac4 - scriptified the remaining Cleric weapons. 2016-11-26 19:23:22 +01:00
Christoph Oelckers
7385cd70c0 - scriptified the Minotaur.
Interesting tidbit: The damage calculation in P_MinotaurSlam had been incorrect for the Heretic version since the friendly Hexen Dark Servant was added, but nobody ever noticed in 14 years...
2016-11-26 01:14:47 +01:00
Christoph Oelckers
66d28a24b8 - disabled the scripted virtual function module after finding out that it only works if each single class that may serve as a parent for scripting is explicitly declared.
Needless to say, this is simply too volatile and would require constant active maintenance, not to mention a huge amount of work up front to get going.
It also hid a nasty problem with the Destroy method. Due to the way the garbage collector works, Destroy cannot be exposed to scripts as-is. It may be called from scripts but it may not be overridden from scripts because the garbage collector can call this function after all data needed for calling a scripted override has already been destroyed because if that data is also being collected there is no guarantee that proper order of destruction is observed. So for now Destroy is just a normal native method to scripted classes
2016-11-25 00:25:26 +01:00
Christoph Oelckers
099b9970ef - added proper definitions for all exported native fields.
- synthesize native fields for all declared flags, not just for AActor.
2016-11-22 23:43:32 +01:00
Christoph Oelckers
980c986305 - allow defining native fields through scripts. Internally this only requires exporting the address, but not the entire field.
- added new VARF_Transient flag so that the decision whether to serialize a field does not depend solely on its native status. It may actually make a lot of sense to use the auto-serializer for native fields, too, as this would eliminate a lot of maintenance code.
- defined (u)int8/16 as aliases to the byte and short types (Can't we not just get rid of this naming convention already...?)
- exporting the fields of Actor revealed a few name clashes between them and some global types, so Actor.Sector was renamed to CurSector and Actor.Inventory was renamed to Actor.Inv.
2016-11-22 19:20:31 +01:00
Christoph Oelckers
bbb0778fd4 - scriptified Chicken and Pig - not tested yet, because other things have priority. 2016-11-22 12:21:55 +01:00
Christoph Oelckers
6cc00e79a6 - made all internal struct types NativeStructs so that all variables of their types are made references. 2016-11-21 19:20:27 +01:00