From 91f8f5b55665f3a1639e5ba075abfd52150c53f8 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Thu, 23 Feb 2017 10:20:02 +0200 Subject: [PATCH 1/7] Restored EndGameMenu as a pseudo-class Fixes the following error: Attempting to open menu of unknown type 'EndGameMenu' At least Adventures of Square is using this class in main menu --- src/menu/menu.cpp | 5 +++++ src/menu/messagebox.cpp | 27 ++++++++++++++++----------- src/namedef.h | 1 + 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/menu/menu.cpp b/src/menu/menu.cpp index fe5af62686..e4920ef55a 100644 --- a/src/menu/menu.cpp +++ b/src/menu/menu.cpp @@ -411,6 +411,11 @@ void M_SetMenu(FName menu, int param) C_DoCommand("menu_quit"); return; + case NAME_EndGameMenu: + // The separate menu class no longer exists but the name still needs support for existing mods. + void ActivateEndGameMenu(); + ActivateEndGameMenu(); + return; } // End of special checks diff --git a/src/menu/messagebox.cpp b/src/menu/messagebox.cpp index 795bb60e4d..b3b0e1fe78 100644 --- a/src/menu/messagebox.cpp +++ b/src/menu/messagebox.cpp @@ -125,17 +125,8 @@ CCMD (menu_quit) // //============================================================================= -CCMD (menu_endgame) -{ // F7 - if (!usergame) - { - S_Sound (CHAN_VOICE | CHAN_UI, "menu/invalid", snd_menuvolume, ATTN_NONE); - return; - } - - //M_StartControlPanel (true); - S_Sound (CHAN_VOICE | CHAN_UI, "menu/activate", snd_menuvolume, ATTN_NONE); - +void ActivateEndGameMenu() +{ FString tempstring = GStrings(netgame ? "NETEND" : "ENDGAME"); DMenu *newmenu = CreateMessageBoxMenu(CurrentMenu, tempstring, 0, false, NAME_None, []() { @@ -149,6 +140,20 @@ CCMD (menu_endgame) M_ActivateMenu(newmenu); } +CCMD (menu_endgame) +{ // F7 + if (!usergame) + { + S_Sound (CHAN_VOICE | CHAN_UI, "menu/invalid", snd_menuvolume, ATTN_NONE); + return; + } + + //M_StartControlPanel (true); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/activate", snd_menuvolume, ATTN_NONE); + + ActivateEndGameMenu(); +} + //============================================================================= // // diff --git a/src/namedef.h b/src/namedef.h index efc70273fb..105d29cddf 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -671,6 +671,7 @@ xx(Optionsmenu) xx(Quitmenu) xx(Savemenu) xx(Playermenu) +xx(EndGameMenu) xx(Playerbox) xx(Team) From 17f04c5043197968622539b98a2f73cc8f4ea6f0 Mon Sep 17 00:00:00 2001 From: Thomas Hume Date: Thu, 23 Feb 2017 00:58:08 +0100 Subject: [PATCH 2/7] Correct two overflows in PInt ctor --- src/dobjtype.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 211c73e824..6684776da5 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -501,7 +501,7 @@ PInt::PInt(unsigned int size, bool unsign, bool compatible) MemberOnly = (size < 4); if (!unsign) { - int maxval = (1 << ((8 * size) - 1)) - 1; + int maxval = (1u << ((8 * size) - 1)) - 1; // compute as unsigned to prevent overflow before -1 int minval = -maxval - 1; Symbols.AddSymbol(new PSymbolConstNumeric(NAME_Min, this, minval)); Symbols.AddSymbol(new PSymbolConstNumeric(NAME_Max, this, maxval)); @@ -509,7 +509,7 @@ PInt::PInt(unsigned int size, bool unsign, bool compatible) else { Symbols.AddSymbol(new PSymbolConstNumeric(NAME_Min, this, 0u)); - Symbols.AddSymbol(new PSymbolConstNumeric(NAME_Max, this, (1u << (8 * size)) - 1)); + Symbols.AddSymbol(new PSymbolConstNumeric(NAME_Max, this, (1u << ((8 * size) - 1)))); } SetOps(); } From 4bae6e81db91923da8578554fccd911510b8fded Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 23 Feb 2017 18:33:49 +0100 Subject: [PATCH 3/7] - turned the texture pointers in wbstartstruct_t into scripting compatible texture IDs. --- src/g_level.cpp | 6 +++--- src/wi_stuff.cpp | 4 ++-- src/wi_stuff.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/g_level.cpp b/src/g_level.cpp index 5bc7d44e05..5f074ddb35 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -776,7 +776,7 @@ void G_DoCompleted (void) AM_Stop (); wminfo.finished_ep = level.cluster - 1; - wminfo.LName0 = TexMan[TexMan.CheckForTexture(level.info->PName, FTexture::TEX_MiscPatch)]; + wminfo.LName0 = TexMan.CheckForTexture(level.info->PName, FTexture::TEX_MiscPatch); wminfo.current = level.MapName; if (deathmatch && @@ -792,12 +792,12 @@ void G_DoCompleted (void) if (nextinfo == NULL || strncmp (nextlevel, "enDSeQ", 6) == 0) { wminfo.next = nextlevel; - wminfo.LName1 = NULL; + wminfo.LName1.SetInvalid(); } else { wminfo.next = nextinfo->MapName; - wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->PName, FTexture::TEX_MiscPatch)]; + wminfo.LName1 = TexMan.CheckForTexture(nextinfo->PName, FTexture::TEX_MiscPatch); } } diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index 5bb1786655..e695e1ca0e 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -836,7 +836,7 @@ public: { int y = WI_TITLEY * CleanYfac; - y = WI_DrawName(y, wbs->LName0, lnametexts[0]); + y = WI_DrawName(y, TexMan(wbs->LName0), lnametexts[0]); // Adjustment for different font sizes for map name and 'finished'. y -= ((mapname.mFont->GetHeight() - finished.mFont->GetHeight()) * CleanYfac) / 4; @@ -866,7 +866,7 @@ public: y = WI_DrawPatchText(y, &entering, "WI_ENTERING"); y += entering.mFont->GetHeight() * CleanYfac / 4; - WI_DrawName(y, wbs->LName1, lnametexts[1]); + WI_DrawName(y, TexMan(wbs->LName1), lnametexts[1]); } diff --git a/src/wi_stuff.h b/src/wi_stuff.h index 7eefb9ee5f..8670b759f7 100644 --- a/src/wi_stuff.h +++ b/src/wi_stuff.h @@ -51,8 +51,8 @@ struct wbstartstruct_t FString current; // [RH] Name of map just finished FString next; // next level, [RH] actual map name - FTexture *LName0; - FTexture *LName1; + FTextureID LName0; + FTextureID LName1; int maxkills; int maxitems; From 65c4653f59b23d5ecc9de17360fbf42ba2ade66c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 23 Feb 2017 19:03:31 +0100 Subject: [PATCH 4/7] - restored some code in PClass::CreateDerivedClass that accidentally got removed. --- src/dobjtype.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 6684776da5..75193b868b 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -3219,16 +3219,24 @@ PClass *PClass::CreateDerivedClass(FName name, unsigned int size) const PClass *existclass = FindClass(name); - // This is a placeholder so fill it in - if (existclass != NULL && existclass->Size == (unsigned)-1) + if (existclass != nullptr) { - type = const_cast(existclass); - if (!IsDescendantOf(type->ParentClass)) + // This is a placeholder so fill it in + if (existclass->Size == TentativeClass) { - I_Error("%s must inherit from %s but doesn't.", name.GetChars(), type->ParentClass->TypeName.GetChars()); + type = const_cast(existclass); + if (!IsDescendantOf(type->ParentClass)) + { + I_Error("%s must inherit from %s but doesn't.", name.GetChars(), type->ParentClass->TypeName.GetChars()); + } + DPrintf(DMSG_SPAMMY, "Defining placeholder class %s\n", name.GetChars()); + notnew = true; + } + else + { + // a different class with the same name already exists. Let the calling code deal with this. + return nullptr; } - DPrintf(DMSG_SPAMMY, "Defining placeholder class %s\n", name.GetChars()); - notnew = true; } else { From fc101049c68ed1b47b25606489fcd3ee7b8aa8e8 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 23 Feb 2017 19:29:43 +0100 Subject: [PATCH 5/7] - exported gamestate variable and forced it to 32 bit internally. - forced gameaction_t to 32 bit to avoid problems with undefined size issues. --- src/d_event.h | 4 ++-- src/doomdef.h | 4 ++-- src/scripting/thingdef_data.cpp | 5 ++++- wadsrc/static/zscript/constants.txt | 12 ++++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/d_event.h b/src/d_event.h index 9e90054a33..962286b8f2 100644 --- a/src/d_event.h +++ b/src/d_event.h @@ -55,7 +55,7 @@ struct event_t }; -typedef enum +enum gameaction_t : int { ga_nothing, ga_loadlevel, @@ -75,7 +75,7 @@ typedef enum ga_screenshot, ga_togglemap, ga_fullconsole, -} gameaction_t; +}; diff --git a/src/doomdef.h b/src/doomdef.h index 5a1d1f95f4..a07985bb65 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -64,7 +64,7 @@ typedef enum // The current state of the game: whether we are // playing, gazing at the intermission screen, // the game final animation, or a demo. -typedef enum +enum gamestate_t : int { GS_LEVEL, GS_INTERMISSION, @@ -79,7 +79,7 @@ typedef enum GS_FORCEWIPEFADE = -2, GS_FORCEWIPEBURN = -3, GS_FORCEWIPEMELT = -4 -} gamestate_t; +}; extern gamestate_t gamestate; diff --git a/src/scripting/thingdef_data.cpp b/src/scripting/thingdef_data.cpp index 41d8644ea8..735fddba78 100644 --- a/src/scripting/thingdef_data.cpp +++ b/src/scripting/thingdef_data.cpp @@ -851,7 +851,10 @@ void InitThingdef() fieldptr = new PField("playeringame", parray, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&playeringame); Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr); - fieldptr = new PField("gameaction", TypeUInt8, VARF_Native | VARF_Static, (intptr_t)&gameaction); + fieldptr = new PField("gameaction", TypeUInt32, VARF_Native | VARF_Static, (intptr_t)&gameaction); + Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr); + + fieldptr = new PField("gamestate", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&gamestate); Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr); fieldptr = new PField("skyflatnum", TypeTextureID, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&skyflatnum); diff --git a/wadsrc/static/zscript/constants.txt b/wadsrc/static/zscript/constants.txt index 6996da6cc8..e2390cfd1f 100644 --- a/wadsrc/static/zscript/constants.txt +++ b/wadsrc/static/zscript/constants.txt @@ -1029,6 +1029,18 @@ enum PaletteFlashFlags PF_HAZARD = 8, }; +enum EGameState +{ + GS_LEVEL, + GS_INTERMISSION, + GS_FINALE, + GS_DEMOSCREEN, + GS_FULLCONSOLE, + GS_HIDECONSOLE, + GS_STARTUP, + GS_TITLELEVEL, +} + enum EGameAction { ga_nothing, From e2d5a708f8d2e7e4765451aa2ec5e38ee6196d26 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 23 Feb 2017 20:18:02 +0100 Subject: [PATCH 6/7] - added an amount parameter to the 'drop' CCMD. --- src/actor.h | 2 +- src/d_net.cpp | 10 ++++++++-- src/g_game.cpp | 5 +++++ src/g_game.h | 1 + src/p_mobj.cpp | 9 +++++---- wadsrc/static/zscript/inventory/ammo.txt | 8 ++++---- wadsrc/static/zscript/inventory/armor.txt | 2 +- wadsrc/static/zscript/inventory/health.txt | 4 ++-- wadsrc/static/zscript/inventory/inventory.txt | 10 ++++++---- wadsrc/static/zscript/inventory/powerups.txt | 2 +- wadsrc/static/zscript/inventory/weapons.txt | 6 +++--- wadsrc/static/zscript/strife/coin.txt | 13 ++++++++----- 12 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/actor.h b/src/actor.h index d3c430759e..d387da2c88 100644 --- a/src/actor.h +++ b/src/actor.h @@ -713,7 +713,7 @@ public: virtual bool UseInventory (AInventory *item); // Tosses an item out of the inventory. - AInventory *DropInventory (AInventory *item); + AInventory *DropInventory (AInventory *item, int amt = -1); // Removes all items from the inventory. void ClearInventory(); diff --git a/src/d_net.cpp b/src/d_net.cpp index a480ae0ae7..7163cdd55d 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -2271,6 +2271,9 @@ void Net_DoCommand (int type, BYTE **stream, int player) case DEM_INVDROP: { DWORD which = ReadLong (stream); + int amt = -1; + + if (type == DEM_INVDROP) amt = ReadLong(stream); if (gamestate == GS_LEVEL && !paused && players[player].playerstate != PST_DEAD) @@ -2288,7 +2291,7 @@ void Net_DoCommand (int type, BYTE **stream, int player) } else { - players[player].mo->DropInventory (item); + players[player].mo->DropInventory (item, amt); } } } @@ -2764,10 +2767,13 @@ void Net_SkipCommand (int type, BYTE **stream) break; case DEM_INVUSE: - case DEM_INVDROP: skip = 4; break; + case DEM_INVDROP: + skip = 8; + break; + case DEM_GENERICCHEAT: case DEM_DROPPLAYER: case DEM_FOV: diff --git a/src/g_game.cpp b/src/g_game.cpp index e5a48c245e..d93d6743bf 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -241,6 +241,7 @@ FString BackupSaveName; bool SendLand; const AInventory *SendItemUse, *SendItemDrop; +int SendItemDropAmount; EXTERN_CVAR (Int, team) @@ -457,12 +458,14 @@ CCMD (invdrop) if (players[consoleplayer].mo) { SendItemDrop = players[consoleplayer].mo->InvSel; + SendItemDropAmount = -1; } } CCMD (weapdrop) { SendItemDrop = players[consoleplayer].ReadyWeapon; + SendItemDropAmount = -1; } CCMD (drop) @@ -470,6 +473,7 @@ CCMD (drop) if (argv.argc() > 1 && who != NULL) { SendItemDrop = who->FindInventory(argv[1]); + SendItemDropAmount = argv.argc() > 2 ? atoi(argv[2]) : -1; } } @@ -762,6 +766,7 @@ void G_BuildTiccmd (ticcmd_t *cmd) { Net_WriteByte (DEM_INVDROP); Net_WriteLong (SendItemDrop->InventoryID); + Net_WriteLong(SendItemDropAmount); SendItemDrop = NULL; } diff --git a/src/g_game.h b/src/g_game.h index 0a11527fd7..f3f7740398 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -94,6 +94,7 @@ extern AActor *bodyque[BODYQUESIZE]; extern int bodyqueslot; class AInventory; extern const AInventory *SendItemUse, *SendItemDrop; +extern int SendItemDropAmount; #endif diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index f9a62892a9..e2f7b18c35 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -1035,14 +1035,14 @@ DEFINE_ACTION_FUNCTION(AActor, UseInventory) // //=========================================================================== -AInventory *AActor::DropInventory (AInventory *item) +AInventory *AActor::DropInventory (AInventory *item, int amt) { AInventory *drop = nullptr; IFVIRTUALPTR(item, AInventory, CreateTossable) { - VMValue params[1] = { (DObject*)item }; + VMValue params[] = { (DObject*)item, amt }; VMReturn ret((void**)&drop); - GlobalVMStack.Call(func, params, 1, &ret, 1, nullptr); + GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr); } if (drop == nullptr) return NULL; drop->SetOrigin(PosPlusZ(10.), false); @@ -1059,7 +1059,8 @@ DEFINE_ACTION_FUNCTION(AActor, DropInventory) { PARAM_SELF_PROLOGUE(AActor); PARAM_OBJECT_NOT_NULL(item, AInventory); - ACTION_RETURN_OBJECT(self->DropInventory(item)); + PARAM_INT(amt); + ACTION_RETURN_OBJECT(self->DropInventory(item, amt)); } //============================================================================ diff --git a/wadsrc/static/zscript/inventory/ammo.txt b/wadsrc/static/zscript/inventory/ammo.txt index ba087a8942..e742e806d9 100644 --- a/wadsrc/static/zscript/inventory/ammo.txt +++ b/wadsrc/static/zscript/inventory/ammo.txt @@ -173,9 +173,9 @@ class Ammo : Inventory // //=========================================================================== - override Inventory CreateTossable() + override Inventory CreateTossable(int amt) { - Inventory copy = Super.CreateTossable(); + Inventory copy = Super.CreateTossable(amt); if (copy != null) { // Do not increase ammo by dropping it and picking it back up at // certain skill levels. @@ -306,9 +306,9 @@ class BackpackItem : Inventory // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amount) { - let pack = BackpackItem(Super.CreateTossable()); + let pack = BackpackItem(Super.CreateTossable(-1)); if (pack != NULL) { pack.bDepleted = true; diff --git a/wadsrc/static/zscript/inventory/armor.txt b/wadsrc/static/zscript/inventory/armor.txt index 50161e8af2..ae9ab562e2 100644 --- a/wadsrc/static/zscript/inventory/armor.txt +++ b/wadsrc/static/zscript/inventory/armor.txt @@ -489,7 +489,7 @@ class HexenArmor : Armor // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amount) { return NULL; } diff --git a/wadsrc/static/zscript/inventory/health.txt b/wadsrc/static/zscript/inventory/health.txt index 88bf6b133c..230b3575be 100644 --- a/wadsrc/static/zscript/inventory/health.txt +++ b/wadsrc/static/zscript/inventory/health.txt @@ -120,9 +120,9 @@ class HealthPickup : Inventory // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amount) { - Inventory copy = Super.CreateTossable (); + Inventory copy = Super.CreateTossable (-1); if (copy != NULL) { copy.health = health; diff --git a/wadsrc/static/zscript/inventory/inventory.txt b/wadsrc/static/zscript/inventory/inventory.txt index 28b20cdd5d..06caedad73 100644 --- a/wadsrc/static/zscript/inventory/inventory.txt +++ b/wadsrc/static/zscript/inventory/inventory.txt @@ -440,7 +440,7 @@ class Inventory : Actor native // //=========================================================================== - virtual Inventory CreateTossable () + virtual Inventory CreateTossable (int amt = -1) { // If self actor lacks a SpawnState, don't drop it. (e.g. A base weapon // like the fist can't be dropped because you'll never see it.) @@ -448,7 +448,7 @@ class Inventory : Actor native { return NULL; } - if (bUndroppable || bUntossable || Owner == NULL || Amount <= 0) + if (bUndroppable || bUntossable || Owner == NULL || Amount <= 0 || amt == 0) { return NULL; } @@ -462,11 +462,13 @@ class Inventory : Actor native let copy = Inventory(Spawn (GetClass(), Owner.Pos, NO_REPLACE)); if (copy != NULL) { + amt = clamp(amt, 1, Amount); + copy.MaxAmount = MaxAmount; - copy.Amount = 1; + copy.Amount = amt; copy.DropTime = 30; copy.bSpecial = copy.bSolid = false; - Amount--; + Amount -= amt; } return copy; } diff --git a/wadsrc/static/zscript/inventory/powerups.txt b/wadsrc/static/zscript/inventory/powerups.txt index 828113ac8b..346f3d1a76 100644 --- a/wadsrc/static/zscript/inventory/powerups.txt +++ b/wadsrc/static/zscript/inventory/powerups.txt @@ -174,7 +174,7 @@ class Powerup : Inventory // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amount) { return NULL; } diff --git a/wadsrc/static/zscript/inventory/weapons.txt b/wadsrc/static/zscript/inventory/weapons.txt index c1fbf43846..c76aaef54c 100644 --- a/wadsrc/static/zscript/inventory/weapons.txt +++ b/wadsrc/static/zscript/inventory/weapons.txt @@ -435,7 +435,7 @@ class Weapon : StateProvider native // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amt) { // Only drop the weapon that is meant to be placed in a level. That is, // only drop the weapon that normally gives you ammo. @@ -443,9 +443,9 @@ class Weapon : StateProvider native Default.AmmoGive1 == 0 && Default.AmmoGive2 == 0 && (SisterWeapon.Default.AmmoGive1 > 0 || SisterWeapon.Default.AmmoGive2 > 0)) { - return SisterWeapon.CreateTossable (); + return SisterWeapon.CreateTossable (amt); } - let copy = Weapon(Super.CreateTossable ()); + let copy = Weapon(Super.CreateTossable (-1)); if (copy != NULL) { diff --git a/wadsrc/static/zscript/strife/coin.txt b/wadsrc/static/zscript/strife/coin.txt index b6a83ecf2a..6f7815cac2 100644 --- a/wadsrc/static/zscript/strife/coin.txt +++ b/wadsrc/static/zscript/strife/coin.txt @@ -79,7 +79,7 @@ class Coin : Inventory // //=========================================================================== - override Inventory CreateTossable () + override Inventory CreateTossable (int amt) { Coin tossed; @@ -87,17 +87,20 @@ class Coin : Inventory { return NULL; } - if (Amount >= 50) + if (amt == -1) amt = Amount >= 50? 50 : Amount >= 25? 25 : Amount >= 10? 10 : 1; + else if (amt > Amount) amt = Amount; + if (amt > 25) { - Amount -= 50; + Amount -= amt; tossed = Coin(Spawn("Gold50")); + tossed.Amount = amt; } - else if (Amount >= 25) + else if (amt > 10) { Amount -= 25; tossed = Coin(Spawn("Gold25")); } - else if (Amount >= 10) + else if (amt > 1) { Amount -= 10; tossed = Coin(Spawn("Gold10")); From 73cceea99413ce805a73609266ef38d8794ac40f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 23 Feb 2017 20:55:12 +0100 Subject: [PATCH 7/7] - also added the 'amount' parameter to DropInventroy and A_DropInventory script functions. --- src/p_actionfunctions.cpp | 3 ++- src/p_mobj.cpp | 2 +- wadsrc/static/zscript/actor.txt | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/p_actionfunctions.cpp b/src/p_actionfunctions.cpp index 8a062cd189..8f916614bb 100644 --- a/src/p_actionfunctions.cpp +++ b/src/p_actionfunctions.cpp @@ -3663,13 +3663,14 @@ DEFINE_ACTION_FUNCTION(AActor, A_DropInventory) { PARAM_SELF_PROLOGUE(AActor); PARAM_CLASS(drop, AInventory); + PARAM_INT_DEF(amount); if (drop) { AInventory *inv = self->FindInventory(drop); if (inv) { - self->DropInventory(inv); + self->DropInventory(inv, amount); } } return 0; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index e2f7b18c35..ef5908fda4 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -1059,7 +1059,7 @@ DEFINE_ACTION_FUNCTION(AActor, DropInventory) { PARAM_SELF_PROLOGUE(AActor); PARAM_OBJECT_NOT_NULL(item, AInventory); - PARAM_INT(amt); + PARAM_INT_DEF(amt); ACTION_RETURN_OBJECT(self->DropInventory(item, amt)); } diff --git a/wadsrc/static/zscript/actor.txt b/wadsrc/static/zscript/actor.txt index 0666fce8ba..fc31b75d9e 100644 --- a/wadsrc/static/zscript/actor.txt +++ b/wadsrc/static/zscript/actor.txt @@ -496,7 +496,7 @@ class Actor : Thinker native native bool TakeInventory(class itemclass, int amount, bool fromdecorate = false, bool notakeinfinite = false); native Inventory FindInventory(class itemtype, bool subclass = false); native Inventory GiveInventoryType(class itemtype); - native Inventory DropInventory (Inventory item); + native Inventory DropInventory (Inventory item, int amt = -1); native bool UseInventory(Inventory item); native void ObtainInventory(Actor other); native bool GiveAmmo (Class type, int amount); @@ -787,7 +787,7 @@ class Actor : Thinker native native void A_SpawnDebris(class spawntype, bool transfer_translation = false, double mult_h = 1, double mult_v = 1); native void A_SpawnParticle(color color1, int flags = 0, int lifetime = 35, double size = 1, double angle = 0, double xoff = 0, double yoff = 0, double zoff = 0, double velx = 0, double vely = 0, double velz = 0, double accelx = 0, double accely = 0, double accelz = 0, double startalphaf = 1, double fadestepf = -1, double sizestep = 0); native void A_ExtChase(bool usemelee, bool usemissile, bool playactive = true, bool nightmarefast = false); - native void A_DropInventory(class itemtype); + native void A_DropInventory(class itemtype, int amount); native void A_SetBlend(color color1, double alpha, int tics, color color2 = 0); deprecated native void A_ChangeFlag(string flagname, bool value); native void A_ChangeCountFlags(int kill = FLAG_NO_CHANGE, int item = FLAG_NO_CHANGE, int secret = FLAG_NO_CHANGE);