mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Next round of things from Gez's experimental build:
* MBF's dog (definition only, no sprites yet.) * User variables. There's an array of 10. They can be set and checked in both DECORATE and ACS. * Made the tag name changeable but eliminated the redundancy of having both the meta property and the individual actor's one. Having one is fully sufficient. TO BE FIXED: Names are case insensitive but this should better be case sensitive. Unfortunately there's currently nothing better than FName to store a string inside an actor without severely complicating matters. Also bumped savegame version to avoid problems with this change. SVN r1823 (trunk)
This commit is contained in:
parent
ea8c94d637
commit
a59de25107
20 changed files with 213 additions and 66 deletions
|
@ -1,6 +1,16 @@
|
||||||
September 14, 2009 (Changes by Graf Zahl)
|
September 14, 2009 (Changes by Graf Zahl)
|
||||||
- Fixed: Argument count for UsePuzzleItem was wrong.
|
- Fixed: Argument count for UsePuzzleItem was wrong.
|
||||||
- Added a few things from Gez's experimental build:
|
- Added a few things from Gez's experimental build:
|
||||||
|
* MBF's dog (definition only, no sprites yet.)
|
||||||
|
* User variables. There's an array of 10. They can be set and checked in
|
||||||
|
both DECORATE and ACS.
|
||||||
|
* Made the tag name changeable but eliminated the redundancy of having
|
||||||
|
both the meta property and the individual actor's one. Having one is
|
||||||
|
fully sufficient. TO BE FIXED: Names are case insensitive but this
|
||||||
|
should better be case sensitive. Unfortunately there's currently nothing
|
||||||
|
better than FName to store a string inside an actor without severely
|
||||||
|
complicating matters. Also bumped savegame version to avoid problems
|
||||||
|
with this change.
|
||||||
* MBF grenade and bouncing code.
|
* MBF grenade and bouncing code.
|
||||||
* several compatibility options.
|
* several compatibility options.
|
||||||
* info CCMD to print extended actor information (not fully implemented yet)
|
* info CCMD to print extended actor information (not fully implemented yet)
|
||||||
|
|
|
@ -712,6 +712,7 @@ public:
|
||||||
|
|
||||||
fixed_t GetGravity() const;
|
fixed_t GetGravity() const;
|
||||||
bool IsSentient() const;
|
bool IsSentient() const;
|
||||||
|
const char *GetTag(const char *def = NULL) const;
|
||||||
|
|
||||||
|
|
||||||
// info for drawing
|
// info for drawing
|
||||||
|
@ -779,6 +780,7 @@ public:
|
||||||
int tid; // thing identifier
|
int tid; // thing identifier
|
||||||
int special; // special
|
int special; // special
|
||||||
int args[5]; // special arguments
|
int args[5]; // special arguments
|
||||||
|
int uservar[10]; // user variables, accessible by DECORATE and ACS
|
||||||
|
|
||||||
AActor *inext, **iprev;// Links to other mobjs in same bucket
|
AActor *inext, **iprev;// Links to other mobjs in same bucket
|
||||||
TObjPtr<AActor> goal; // Monster's goal if not chasing anything
|
TObjPtr<AActor> goal; // Monster's goal if not chasing anything
|
||||||
|
@ -802,6 +804,7 @@ public:
|
||||||
int lastpush;
|
int lastpush;
|
||||||
int activationtype; // How the thing behaves when activated with USESPECIAL or BUMPSPECIAL
|
int activationtype; // How the thing behaves when activated with USESPECIAL or BUMPSPECIAL
|
||||||
int Score; // manipulated by score items, ACS or DECORATE. The engine doesn't use this itself for anything.
|
int Score; // manipulated by score items, ACS or DECORATE. The engine doesn't use this itself for anything.
|
||||||
|
FNameNoInit Tag; // Strife's tag name. FIXME: should be case sensitive!
|
||||||
|
|
||||||
AActor *BlockingMobj; // Actor that blocked the last move
|
AActor *BlockingMobj; // Actor that blocked the last move
|
||||||
line_t *BlockingLine; // Line that blocked the last move
|
line_t *BlockingLine; // Line that blocked the last move
|
||||||
|
|
|
@ -110,6 +110,24 @@ CVAR (Bool, chasedemo, false, 0);
|
||||||
CVAR (Bool, storesavepic, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, storesavepic, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Bool, longsavemessages, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, longsavemessages, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (String, save_dir, "", CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
|
CVAR (String, save_dir, "", CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
|
||||||
|
EXTERN_CVAR (Float, con_midtime);
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// CVAR displaynametags
|
||||||
|
//
|
||||||
|
// Selects whether to display name tags or not when changing weapons
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
CUSTOM_CVAR (Bool, displaynametags, 0, CVAR_ARCHIVE)
|
||||||
|
{
|
||||||
|
if (self != 0 && self != 1)
|
||||||
|
{
|
||||||
|
self = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gameaction_t gameaction;
|
gameaction_t gameaction;
|
||||||
gamestate_t gamestate = GS_STARTUP;
|
gamestate_t gamestate = GS_STARTUP;
|
||||||
|
@ -335,6 +353,10 @@ CCMD (invnext)
|
||||||
who->InvSel = who->Inventory;
|
who->InvSel = who->Inventory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (displaynametags && StatusBar && SmallFont
|
||||||
|
&& gamestate == GS_LEVEL && level.time > con_midtime && who->InvSel)
|
||||||
|
StatusBar->AttachMessage (new DHUDMessage (SmallFont, who->InvSel->GetTag(),
|
||||||
|
2.5f, 0.375f, 0, 0, CR_YELLOW, con_midtime), MAKE_ID('S','I','N','V'));
|
||||||
}
|
}
|
||||||
who->player->inventorytics = 5*TICRATE;
|
who->player->inventorytics = 5*TICRATE;
|
||||||
}
|
}
|
||||||
|
@ -362,6 +384,10 @@ CCMD (invprev)
|
||||||
}
|
}
|
||||||
who->InvSel = item;
|
who->InvSel = item;
|
||||||
}
|
}
|
||||||
|
if (displaynametags && StatusBar && SmallFont
|
||||||
|
&& gamestate == GS_LEVEL && level.time > con_midtime && who->InvSel)
|
||||||
|
StatusBar->AttachMessage (new DHUDMessage (SmallFont, who->InvSel->GetTag(),
|
||||||
|
2.5f, 0.375f, 0, 0, CR_YELLOW, con_midtime), MAKE_ID('S','I','N','V'));
|
||||||
}
|
}
|
||||||
who->player->inventorytics = 5*TICRATE;
|
who->player->inventorytics = 5*TICRATE;
|
||||||
}
|
}
|
||||||
|
@ -385,9 +411,7 @@ CCMD(invquery)
|
||||||
AInventory *inv = players[consoleplayer].mo->InvSel;
|
AInventory *inv = players[consoleplayer].mo->InvSel;
|
||||||
if (inv != NULL)
|
if (inv != NULL)
|
||||||
{
|
{
|
||||||
const char *description = inv->GetClass()->Meta.GetMetaString(AMETA_StrifeName);
|
Printf(PRINT_HIGH, "%s (%dx)\n", inv->GetTag(), inv->Amount);
|
||||||
if (description == NULL) description = inv->GetClass()->TypeName;
|
|
||||||
Printf(PRINT_HIGH, "%s (%dx)\n", description, inv->Amount);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,15 +58,9 @@ void AWeapon::Serialize (FArchive &arc)
|
||||||
<< MoveCombatDist
|
<< MoveCombatDist
|
||||||
<< Ammo1 << Ammo2 << SisterWeapon << GivenAsMorphWeapon
|
<< Ammo1 << Ammo2 << SisterWeapon << GivenAsMorphWeapon
|
||||||
<< bAltFire
|
<< bAltFire
|
||||||
<< ReloadCounter;
|
<< ReloadCounter
|
||||||
if (SaveVersion >= 1688)
|
<< FOVScale
|
||||||
{
|
<< Crosshair;
|
||||||
arc << FOVScale;
|
|
||||||
if (SaveVersion >= 1700)
|
|
||||||
{
|
|
||||||
arc << Crosshair;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -636,11 +636,7 @@ private:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
label = item->GetClass()->Meta.GetMetaString (AMETA_StrifeName);
|
label = item->GetTag();
|
||||||
if (label == NULL)
|
|
||||||
{
|
|
||||||
label = item->GetClass()->TypeName.GetChars();
|
|
||||||
}
|
|
||||||
|
|
||||||
int colnum = ((i-pos) / 5) & (KeyPopScroll > 0 ? 3 : 1);
|
int colnum = ((i-pos) / 5) & (KeyPopScroll > 0 ? 3 : 1);
|
||||||
int rownum = (i % 5) * 18;
|
int rownum = (i % 5) * 18;
|
||||||
|
|
|
@ -93,6 +93,8 @@ EXTERN_CVAR(Int, showendoom)
|
||||||
EXTERN_CVAR(Bool, hud_althud)
|
EXTERN_CVAR(Bool, hud_althud)
|
||||||
EXTERN_CVAR(Int, compatmode)
|
EXTERN_CVAR(Int, compatmode)
|
||||||
EXTERN_CVAR (Bool, vid_vsync)
|
EXTERN_CVAR (Bool, vid_vsync)
|
||||||
|
EXTERN_CVAR(Bool, displaynametags)
|
||||||
|
|
||||||
//
|
//
|
||||||
// defaulted values
|
// defaulted values
|
||||||
//
|
//
|
||||||
|
@ -499,6 +501,7 @@ static menuitem_t VideoItems[] = {
|
||||||
{ discrete, "Rocket Trails", {&cl_rockettrails}, {4.0}, {0.0}, {0.0}, {RocketTrailTypes} },
|
{ discrete, "Rocket Trails", {&cl_rockettrails}, {4.0}, {0.0}, {0.0}, {RocketTrailTypes} },
|
||||||
{ discrete, "Blood Type", {&cl_bloodtype}, {3.0}, {0.0}, {0.0}, {BloodTypes} },
|
{ discrete, "Blood Type", {&cl_bloodtype}, {3.0}, {0.0}, {0.0}, {BloodTypes} },
|
||||||
{ discrete, "Bullet Puff Type", {&cl_pufftype}, {2.0}, {0.0}, {0.0}, {PuffTypes} },
|
{ discrete, "Bullet Puff Type", {&cl_pufftype}, {2.0}, {0.0}, {0.0}, {PuffTypes} },
|
||||||
|
{ discrete, "Display nametags", {&displaynametags}, {2.0}, {0.0}, {0.0}, {YesNo} },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CROSSHAIR_INDEX 7
|
#define CROSSHAIR_INDEX 7
|
||||||
|
|
|
@ -2426,7 +2426,7 @@ enum
|
||||||
APROP_Dropped = 18,
|
APROP_Dropped = 18,
|
||||||
APROP_Notarget = 19,
|
APROP_Notarget = 19,
|
||||||
APROP_Species = 20,
|
APROP_Species = 20,
|
||||||
// APROP_Nametag
|
APROP_NameTag = 21,
|
||||||
APROP_Score = 22,
|
APROP_Score = 22,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2583,6 +2583,13 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
|
||||||
|
|
||||||
case APROP_Score:
|
case APROP_Score:
|
||||||
actor->Score = value;
|
actor->Score = value;
|
||||||
|
|
||||||
|
case APROP_NameTag:
|
||||||
|
actor->Tag = FBehavior::StaticLookupString(value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// do nothing.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2695,6 +2702,7 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value)
|
||||||
case APROP_DeathSound: string = actor->DeathSound; break;
|
case APROP_DeathSound: string = actor->DeathSound; break;
|
||||||
case APROP_ActiveSound: string = actor->ActiveSound; break;
|
case APROP_ActiveSound: string = actor->ActiveSound; break;
|
||||||
case APROP_Species: string = actor->GetSpecies(); break;
|
case APROP_Species: string = actor->GetSpecies(); break;
|
||||||
|
case APROP_NameTag: string = actor->GetTag(); break;
|
||||||
}
|
}
|
||||||
if (string == NULL) string = "";
|
if (string == NULL) string = "";
|
||||||
return (!stricmp(string, FBehavior::StaticLookupString(value)));
|
return (!stricmp(string, FBehavior::StaticLookupString(value)));
|
||||||
|
@ -2881,6 +2889,8 @@ enum EACSFunctions
|
||||||
ACSF_SpawnSpotFacingForced,
|
ACSF_SpawnSpotFacingForced,
|
||||||
ACSF_CheckActorProperty,
|
ACSF_CheckActorProperty,
|
||||||
ACSF_SetActorVelocity,
|
ACSF_SetActorVelocity,
|
||||||
|
ACSF_SetUserVariable,
|
||||||
|
ACSF_GetUserVariable,
|
||||||
};
|
};
|
||||||
|
|
||||||
int DLevelScript::SideFromID(int id, int side)
|
int DLevelScript::SideFromID(int id, int side)
|
||||||
|
@ -3079,6 +3089,42 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case ACSF_SetUserVariable:
|
||||||
|
{
|
||||||
|
int cnt = 0;
|
||||||
|
if (args[1] >= 0 && args[1] < 10)
|
||||||
|
{
|
||||||
|
if (args[0] == 0)
|
||||||
|
{
|
||||||
|
if (activator != NULL)
|
||||||
|
{
|
||||||
|
activator->uservar[args[1]] = args[2];
|
||||||
|
}
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TActorIterator<AActor> iterator (args[0]);
|
||||||
|
|
||||||
|
while ( (actor = iterator.Next ()) )
|
||||||
|
{
|
||||||
|
actor->uservar[args[1]] = args[2];
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
case ACSF_GetUserVariable:
|
||||||
|
if (args[1] >= 0 && args[1] < 10)
|
||||||
|
{
|
||||||
|
activator = SingleActorFromTID(args[0], NULL);
|
||||||
|
return activator != NULL? activator->uservar[args[1]] : 0;
|
||||||
|
}
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -875,11 +875,7 @@ static void DrawConversationMenu ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
speakerName = cp->ConversationNPC->GetClass()->Meta.GetMetaString (AMETA_StrifeName);
|
speakerName = cp->mo->GetTag("Person");
|
||||||
if (speakerName == NULL)
|
|
||||||
{
|
|
||||||
speakerName = "Person";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dim the screen behind the dialogue (but only if there is no backdrop).
|
// Dim the screen behind the dialogue (but only if there is no backdrop).
|
||||||
|
|
|
@ -280,36 +280,9 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< MeleeState
|
<< MeleeState
|
||||||
<< MissileState
|
<< MissileState
|
||||||
<< MaxDropOffHeight
|
<< MaxDropOffHeight
|
||||||
<< MaxStepHeight;
|
<< MaxStepHeight
|
||||||
if (SaveVersion < 1796)
|
<< BounceFlags
|
||||||
{
|
<< bouncefactor
|
||||||
int BounceFlags, bounceflags;
|
|
||||||
arc << BounceFlags;
|
|
||||||
|
|
||||||
bounceflags = 0;
|
|
||||||
if (BounceFlags & 4)
|
|
||||||
bounceflags |= BOUNCE_UseSeeSound;
|
|
||||||
BounceFlags &= 3;
|
|
||||||
if (BounceFlags == 1) bounceflags |= BOUNCE_Doom;
|
|
||||||
else if (BounceFlags == 2) bounceflags |= BOUNCE_Heretic;
|
|
||||||
else if (BounceFlags == 3) bounceflags |= BOUNCE_Hexen;
|
|
||||||
if (flags3 & 0x00800000)
|
|
||||||
flags3 &= ~0x00800000, bounceflags |= BOUNCE_CanBounceWater;
|
|
||||||
if (flags3 & 0x01000000)
|
|
||||||
flags3 &= ~0x01000000, bounceflags |= BOUNCE_NoWallSound;
|
|
||||||
if (flags4 & 0x80000000)
|
|
||||||
flags4 &= ~0x80000000, bounceflags |= BOUNCE_Quiet;
|
|
||||||
if (flags5 & 0x00000008)
|
|
||||||
flags5 &= ~0x00000008, bounceflags |= BOUNCE_AllActors;
|
|
||||||
if (flags5 & 0x00000010)
|
|
||||||
flags5 &= ~0x00000010, bounceflags |= BOUNCE_ExplodeOnWater;
|
|
||||||
BounceFlags = bounceflags;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arc << BounceFlags;
|
|
||||||
}
|
|
||||||
arc << bouncefactor
|
|
||||||
<< wallbouncefactor
|
<< wallbouncefactor
|
||||||
<< bouncecount
|
<< bouncecount
|
||||||
<< maxtargetrange
|
<< maxtargetrange
|
||||||
|
@ -323,10 +296,11 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< BlockingMobj
|
<< BlockingMobj
|
||||||
<< BlockingLine
|
<< BlockingLine
|
||||||
<< pushfactor
|
<< pushfactor
|
||||||
<< Species;
|
<< Species
|
||||||
|
<< Score
|
||||||
|
<< Tag;
|
||||||
|
|
||||||
if (SaveVersion >= 1819)
|
for(int i=0; i<10; i++) arc << uservar[i];
|
||||||
arc << Score;
|
|
||||||
|
|
||||||
if (arc.IsStoring ())
|
if (arc.IsStoring ())
|
||||||
{
|
{
|
||||||
|
@ -5446,6 +5420,14 @@ bool AActor::IsSentient() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *AActor::GetTag(const char *def) const
|
||||||
|
{
|
||||||
|
if (Tag != NAME_None) return Tag.GetChars();
|
||||||
|
else if (def) return def;
|
||||||
|
else return GetClass()->TypeName.GetChars();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// DropItem handling
|
// DropItem handling
|
||||||
|
|
|
@ -2852,3 +2852,22 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetSpecial)
|
||||||
self->args[4] = arg4;
|
self->args[4] = arg4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// A_SetVar
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetUserVar)
|
||||||
|
{
|
||||||
|
ACTION_PARAM_START(2);
|
||||||
|
ACTION_PARAM_INT(pos, 0);
|
||||||
|
ACTION_PARAM_INT(value, 1);
|
||||||
|
|
||||||
|
if (pos < 0 || pos > 9)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Set the value of the specified arg
|
||||||
|
self->uservar[pos] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ DEFINE_MEMBER_VARIABLE_ALIAS(momy, vely, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE_ALIAS(momz, velz, AActor)
|
DEFINE_MEMBER_VARIABLE_ALIAS(momz, velz, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(Damage, AActor)
|
DEFINE_MEMBER_VARIABLE(Damage, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(Score, AActor)
|
DEFINE_MEMBER_VARIABLE(Score, AActor)
|
||||||
|
DEFINE_MEMBER_VARIABLE(uservar, AActor)
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
|
|
@ -302,7 +302,7 @@ DEFINE_PROPERTY(skip_super, 0, Actor)
|
||||||
DEFINE_PROPERTY(tag, S, Actor)
|
DEFINE_PROPERTY(tag, S, Actor)
|
||||||
{
|
{
|
||||||
PROP_STRING_PARM(str, 0);
|
PROP_STRING_PARM(str, 0);
|
||||||
info->Class->Meta.SetMetaString(AMETA_StrifeName, str);
|
defaults->Tag = str;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -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 1643
|
#define MINSAVEVER 1823
|
||||||
|
|
||||||
#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
|
||||||
|
|
|
@ -26,6 +26,7 @@ ACTOR Actor native //: Thinker
|
||||||
native fixed_t alpha;
|
native fixed_t alpha;
|
||||||
native angle_t angle;
|
native angle_t angle;
|
||||||
native int args[5];
|
native int args[5];
|
||||||
|
native int uservar[10];
|
||||||
native fixed_t ceilingz;
|
native fixed_t ceilingz;
|
||||||
native fixed_t floorz;
|
native fixed_t floorz;
|
||||||
native int health;
|
native int health;
|
||||||
|
@ -254,6 +255,7 @@ ACTOR Actor native //: Thinker
|
||||||
action native A_ScaleVelocity(float scale);
|
action native A_ScaleVelocity(float scale);
|
||||||
action native A_ChangeVelocity(float x = 0, float y = 0, float z = 0, int flags = 0);
|
action native A_ChangeVelocity(float x = 0, float y = 0, float z = 0, int flags = 0);
|
||||||
action native A_SetArg(int pos, int value);
|
action native A_SetArg(int pos, int value);
|
||||||
|
action native A_SetVar(int pos, int value);
|
||||||
action native A_SetSpecial(int spec, int arg0, int arg1, int arg2, int arg3, int arg4);
|
action native A_SetSpecial(int spec, int arg0, int arg1, int arg2, int arg3, int arg4);
|
||||||
|
|
||||||
States
|
States
|
||||||
|
|
45
wadsrc/static/actors/doom/dog.txt
Normal file
45
wadsrc/static/actors/doom/dog.txt
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
ACTOR Dog 888
|
||||||
|
{
|
||||||
|
Game Doom
|
||||||
|
Health 500
|
||||||
|
Speed 10
|
||||||
|
PainChance 180
|
||||||
|
Radius 12
|
||||||
|
Height 28
|
||||||
|
Mass 100
|
||||||
|
Monster
|
||||||
|
+JUMPDOWN
|
||||||
|
ActiveSound "dog/active"
|
||||||
|
AttackSound "dog/attack"
|
||||||
|
DeathSound "dog/death"
|
||||||
|
PainSound "dog/pain"
|
||||||
|
SeeSound "dog/sight"
|
||||||
|
Obituary "$OB_DOG"
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
DOGS AB 10 A_Look
|
||||||
|
Loop
|
||||||
|
See:
|
||||||
|
DOGS AABBCCDD 2 A_Chase
|
||||||
|
Loop
|
||||||
|
Melee:
|
||||||
|
DOGS EF 8 A_FaceTarget
|
||||||
|
DOGS G 8 A_SargAttack
|
||||||
|
Goto See
|
||||||
|
Pain:
|
||||||
|
DOGS H 2
|
||||||
|
DOGS H 2 A_Pain
|
||||||
|
Goto See
|
||||||
|
Death:
|
||||||
|
DOGS I 8
|
||||||
|
DOGS J 8 A_Scream
|
||||||
|
DOGS K 4
|
||||||
|
DOGS L 4 A_Fall
|
||||||
|
DOGS M 4
|
||||||
|
DOGS N -1
|
||||||
|
Raise:
|
||||||
|
DOGS NMLKJI 5
|
||||||
|
Goto See
|
||||||
|
}
|
||||||
|
}
|
|
@ -78,3 +78,15 @@ F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
||||||
{
|
{
|
||||||
anybossdeath
|
anybossdeath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Arch-Vile ghost monster effect is used by the following maps
|
||||||
|
145C4DFCF843F2B92C73036BA0E1D98A // Hell Revealed map26
|
||||||
|
5379C080299EB961792B50AD96821543 // Hell to Pay map14
|
||||||
|
7837B5334A277F107515D649BCEFB682 // Hell to Pay map22
|
||||||
|
2EEB1E12FA9F9545DE9D99990A4A78E5 // Icarus map24
|
||||||
|
65A53A09A09525AE42EA210BF879CD37 // Plutonia 2 map32
|
||||||
|
2499CF9A9351BE9BC4E9C66FC9F291A7 // Requiem map23
|
||||||
|
{
|
||||||
|
corpsegibs
|
||||||
|
vileghosts
|
||||||
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include "actors/doom/spidermaster.txt"
|
#include "actors/doom/spidermaster.txt"
|
||||||
#include "actors/doom/keen.txt"
|
#include "actors/doom/keen.txt"
|
||||||
#include "actors/doom/bossbrain.txt"
|
#include "actors/doom/bossbrain.txt"
|
||||||
|
#include "actors/doom/dog.txt"
|
||||||
|
|
||||||
#include "actors/doom/deadthings.txt"
|
#include "actors/doom/deadthings.txt"
|
||||||
#include "actors/doom/doomammo.txt"
|
#include "actors/doom/doomammo.txt"
|
||||||
|
|
|
@ -172,15 +172,15 @@ ActionList
|
||||||
Chase, Chase, Chase, Chase, Chase, Chase, Chase, Chase,
|
Chase, Chase, Chase, Chase, Chase, Chase, Chase, Chase,
|
||||||
FaceTarget, FaceTarget, SargAttack, NULL, Pain, NULL, Scream,
|
FaceTarget, FaceTarget, SargAttack, NULL, Pain, NULL, Scream,
|
||||||
NULL, Fall, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, BFGsound,
|
NULL, Fall, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, BFGsound,
|
||||||
NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/,
|
FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG,
|
||||||
NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/,
|
FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG,
|
||||||
NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/,
|
FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG,
|
||||||
NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/,
|
FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG,
|
||||||
NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/, NULL/*FireOldBFG*/,
|
FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG, FireOldBFG,
|
||||||
Light0, ReFire, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
Light0, ReFire, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
Look, Chase, Chase, Chase, CHase, FaceTarget,
|
Look, Chase, Chase, Chase, Chase, FaceTarget,
|
||||||
NULL/*BetaSkullAttack*/, NULL, NULL, Pain, NULL,
|
BetaSkullAttack, NULL, NULL, Pain, NULL,
|
||||||
NULL, NULL, NULL, NULL, Scream, NULL, Fall, Stop,
|
NULL, NULL, NULL, NULL, Scream, NULL, Fall, Stop,
|
||||||
Mushroom
|
Mushroom
|
||||||
};
|
};
|
||||||
|
|
|
@ -115,6 +115,10 @@ PD_YELLOWSO = "You need a yellow skull to activate this object";
|
||||||
GGSAVED = "game saved.";
|
GGSAVED = "game saved.";
|
||||||
HUSTR_MSGU = "[Message unsent]";
|
HUSTR_MSGU = "[Message unsent]";
|
||||||
PICKUP_PISTOL_DROPPED = "Picked up a pistol.";
|
PICKUP_PISTOL_DROPPED = "Picked up a pistol.";
|
||||||
|
BETA_BONUS1 = "You pick up a demonic dagger.";
|
||||||
|
BETA_BONUS2 = "You pick up a skullchest.";
|
||||||
|
BETA_BONUS3 = "You pick up an evil sceptre.";
|
||||||
|
BETA_BONUS4 = "You pick up an unholy bible.";
|
||||||
|
|
||||||
// Level names
|
// Level names
|
||||||
HUSTR_E1M1 = "E1M1: Hangar";
|
HUSTR_E1M1 = "E1M1: Hangar";
|
||||||
|
@ -634,6 +638,7 @@ OB_SPIDER = "%o stood in awe of the spider demon.";
|
||||||
OB_BABY = "%o let an arachnotron get %h.";
|
OB_BABY = "%o let an arachnotron get %h.";
|
||||||
OB_CYBORG = "%o was splattered by a cyberdemon.";
|
OB_CYBORG = "%o was splattered by a cyberdemon.";
|
||||||
OB_WOLFSS = "%o met a Nazi.";
|
OB_WOLFSS = "%o met a Nazi.";
|
||||||
|
OB_DOG = "%o was mauled by a dog.";
|
||||||
|
|
||||||
OB_CHICKEN = "%o was pecked to death.";
|
OB_CHICKEN = "%o was pecked to death.";
|
||||||
OB_BEAST = "%o was charred by a weredragon.";
|
OB_BEAST = "%o was charred by a weredragon.";
|
||||||
|
@ -707,6 +712,7 @@ OB_MPBFG_BOOM = "%o was splintered by %k's BFG.";
|
||||||
OB_MPBFG_SPLASH = "%o couldn't hide from %k's BFG.";
|
OB_MPBFG_SPLASH = "%o couldn't hide from %k's BFG.";
|
||||||
OB_MPTELEFRAG = "%o was telefragged by %k.";
|
OB_MPTELEFRAG = "%o was telefragged by %k.";
|
||||||
OB_RAILGUN = "%o was railed by %k.";
|
OB_RAILGUN = "%o was railed by %k.";
|
||||||
|
OB_MPBFG_MBF = "%o was burned by %k's BFG.";
|
||||||
|
|
||||||
// Same as OB_MPTELEFRAG, but shown when a monster telefrags you
|
// Same as OB_MPTELEFRAG, but shown when a monster telefrags you
|
||||||
OB_MONTELEFRAG = "%o was telefragged.";
|
OB_MONTELEFRAG = "%o was telefragged.";
|
||||||
|
|
|
@ -425,6 +425,13 @@ brain/cube dsboscub
|
||||||
brain/cubeboom dsfirxpl
|
brain/cubeboom dsfirxpl
|
||||||
$alias brain/spawn misc/teleport
|
$alias brain/spawn misc/teleport
|
||||||
|
|
||||||
|
// Marine's Best Friend
|
||||||
|
dog/active dsdgact
|
||||||
|
dog/attack dsdgatk
|
||||||
|
dog/death dsdgdth
|
||||||
|
dog/pain dsdgpain
|
||||||
|
dog/sight dsdgsit
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue