- Added Gez's GetArmorType submission

SVN r1636 (trunk)
This commit is contained in:
Christoph Oelckers 2009-06-05 20:23:47 +00:00
parent 9d4c87c18f
commit 8c3a816428
8 changed files with 51 additions and 3 deletions

View file

@ -1,4 +1,7 @@
June 2, 2009 June 5, 2009 (Changes by Graf Zahl)
- Added Gez's GetArmorType submission
June 2, 2009
- Swapped snes_spc out for the full Game Music Emu library. - Swapped snes_spc out for the full Game Music Emu library.
June 2, 2009 (Changes by Graf Zahl) June 2, 2009 (Changes by Graf Zahl)

View file

@ -22,7 +22,7 @@ IMPLEMENT_CLASS (AHexenArmor)
void ABasicArmor::Serialize (FArchive &arc) void ABasicArmor::Serialize (FArchive &arc)
{ {
Super::Serialize (arc); Super::Serialize (arc);
arc << SavePercent << BonusCount << MaxAbsorb << MaxFullAbsorb << AbsorbCount; arc << SavePercent << BonusCount << MaxAbsorb << MaxFullAbsorb << AbsorbCount << ArmorType;
} }
//=========================================================================== //===========================================================================
@ -77,6 +77,7 @@ AInventory *ABasicArmor::CreateCopy (AActor *other)
copy->MaxAmount = MaxAmount; copy->MaxAmount = MaxAmount;
copy->Icon = Icon; copy->Icon = Icon;
copy->BonusCount = BonusCount; copy->BonusCount = BonusCount;
copy->ArmorType = ArmorType;
GoAwayAndDie (); GoAwayAndDie ();
return copy; return copy;
} }
@ -237,6 +238,7 @@ bool ABasicArmorPickup::Use (bool pickup)
armor->Icon = Icon; armor->Icon = Icon;
armor->MaxAbsorb = MaxAbsorb; armor->MaxAbsorb = MaxAbsorb;
armor->MaxFullAbsorb = MaxFullAbsorb; armor->MaxFullAbsorb = MaxFullAbsorb;
armor->ArmorType = this->GetClass()->TypeName;
return true; return true;
} }
@ -320,6 +322,7 @@ bool ABasicArmorBonus::Use (bool pickup)
armor->Icon = Icon; armor->Icon = Icon;
armor->SavePercent = SavePercent; armor->SavePercent = SavePercent;
armor->MaxAbsorb = MaxAbsorb; armor->MaxAbsorb = MaxAbsorb;
armor->ArmorType = this->GetClass()->TypeName;
armor->MaxFullAbsorb = MaxFullAbsorb; armor->MaxFullAbsorb = MaxFullAbsorb;
} }

View file

@ -379,6 +379,7 @@ public:
int MaxAbsorb; int MaxAbsorb;
int MaxFullAbsorb; int MaxFullAbsorb;
int BonusCount; int BonusCount;
FNameNoInit ArmorType;
}; };
// BasicArmorPickup replaces the armor you have. // BasicArmorPickup replaces the armor you have.

View file

@ -101,6 +101,9 @@ xx(ArtiSuperHealth)
xx(MedicalKit) xx(MedicalKit)
xx(MedPatch) xx(MedPatch)
// Armor
xx(BasicArmor)
// The Wings of Wrath // The Wings of Wrath
xx(ArtiFly) xx(ArtiFly)

View file

@ -72,6 +72,8 @@
#include "m_png.h" #include "m_png.h"
#include "p_setup.h" #include "p_setup.h"
#include "g_shared/a_pickups.h"
extern FILE *Logfile; extern FILE *Logfile;
FRandom pr_acs ("ACS"); FRandom pr_acs ("ACS");
@ -2799,6 +2801,7 @@ enum EACSFunctions
ACSF_GetAirSupply, ACSF_GetAirSupply,
ACSF_SetAirSupply, ACSF_SetAirSupply,
ACSF_SetSkyScrollSpeed, ACSF_SetSkyScrollSpeed,
ACSF_GetArmorType,
}; };
int DLevelScript::SideFromID(int id, int side) int DLevelScript::SideFromID(int id, int side)
@ -2942,6 +2945,21 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
return 1; return 1;
} }
case ACSF_GetArmorType:
{
if (args[1] < 0 || args[1] >= MAXPLAYERS || !playeringame[args[1]])
{
return 0;
}
else
{
FName p(FBehavior::StaticLookupString(args[0]));
ABasicArmor * armor = (ABasicArmor *) players[args[1]].mo->FindInventory(NAME_BasicArmor);
if (armor->ArmorType == p) return 1;
}
return 0;
}
default: default:
break; break;
} }

View file

@ -524,6 +524,25 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_JumpIfInTargetInventory)
DoJumpIfInventory(self->target, PUSH_PARAMINFO); DoJumpIfInventory(self->target, PUSH_PARAMINFO);
} }
//==========================================================================
//
// State jump function
//
//==========================================================================
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_JumpIfArmorType)
{
ACTION_PARAM_START(3);
ACTION_PARAM_NAME(Type, 0);
ACTION_PARAM_STATE(JumpOffset, 1);
ACTION_SET_RESULT(false); // Jumps should never set the result for inventory state chains!
ABasicArmor * armor = (ABasicArmor *) self->FindInventory(NAME_BasicArmor);
if (armor && armor->ArmorType == Type)
ACTION_JUMP(JumpOffset);
}
//========================================================================== //==========================================================================
// //
// Parameterized version of A_Explode // Parameterized version of A_Explode

View file

@ -75,7 +75,7 @@
// SAVESIG should match SAVEVER. // SAVESIG should match SAVEVER.
// MINSAVEVER is the minimum level snapshot version that can be loaded. // MINSAVEVER is the minimum level snapshot version that can be loaded.
#define MINSAVEVER 1619 #define MINSAVEVER 1636
#if SVN_REVISION_NUMBER < MINSAVEVER #if SVN_REVISION_NUMBER < MINSAVEVER
// Never write a savegame with a version lower than what we need // Never write a savegame with a version lower than what we need

View file

@ -175,6 +175,7 @@ ACTOR Actor native //: Thinker
action native A_JumpIfHealthLower(int health, state label); action native A_JumpIfHealthLower(int health, state label);
action native A_JumpIfCloser(float distance, state label); action native A_JumpIfCloser(float distance, state label);
action native A_JumpIfInventory(class<Inventory> itemtype, int itemamount, state label); action native A_JumpIfInventory(class<Inventory> itemtype, int itemamount, state label);
action native A_JumpIfArmorType(string Type, state label);
action native A_GiveInventory(class<Inventory> itemtype, int amount = 0); action native A_GiveInventory(class<Inventory> itemtype, int amount = 0);
action native A_TakeInventory(class<Inventory> itemtype, int amount = 0); action native A_TakeInventory(class<Inventory> itemtype, int amount = 0);
action native A_SpawnItem(class<Actor> itemtype, float distance = 0, float zheight = 0, bool useammo = true, bool transfer_translation = false); action native A_SpawnItem(class<Actor> itemtype, float distance = 0, float zheight = 0, bool useammo = true, bool transfer_translation = false);