mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Changed A_ChangeFlag so that it doesn't need to alter the flag
string. With strings being passed as names this is unsafe. - Removed unused parameter types from the function parameter parser for DECORATE. - Changed: All actor name parameters in DECORATE are now passed as FNames, not as strings. - Fixed: The MAPINFO parser stored the RedirectType as a type pointer. But at this point DECORATE hasn't been read yet so this was limited to the internal classes. - Fixed: TXT_NEED_IDCARD wasn't terminated with a ';'. - Fixed: Strife's DeadRebel was missing its DoomEdNum. - With names as type identifiers it is no longer necessary to remap the monster types to internal constants in A_BossDeath. - Fixed: A_BossDeath got the string from a name - just to get a name from the string. Using the name directly is sufficient. SVN r103 (trunk)
This commit is contained in:
parent
032526340a
commit
159c548c5a
14 changed files with 115 additions and 120 deletions
|
@ -1,3 +1,20 @@
|
||||||
|
May 10, 2006 (Changes by Graf Zahl)
|
||||||
|
- Changed A_ChangeFlag so that it doesn't need to alter the flag
|
||||||
|
string. With strings being passed as names this is unsafe.
|
||||||
|
- Removed unused parameter types from the function parameter parser for
|
||||||
|
DECORATE.
|
||||||
|
- Changed: All actor name parameters in DECORATE are now passed as
|
||||||
|
FNames, not as strings.
|
||||||
|
- Fixed: The MAPINFO parser stored the RedirectType as a type pointer.
|
||||||
|
But at this point DECORATE hasn't been read yet so this was limited to
|
||||||
|
the internal classes.
|
||||||
|
- Fixed: TXT_NEED_IDCARD wasn't terminated with a ';'.
|
||||||
|
- Fixed: Strife's DeadRebel was missing its DoomEdNum.
|
||||||
|
- With names as type identifiers it is no longer necessary to remap
|
||||||
|
the monster types to internal constants in A_BossDeath.
|
||||||
|
- Fixed: A_BossDeath got the string from a name - just to get a name from
|
||||||
|
the string. Using the name directly is sufficient.
|
||||||
|
|
||||||
May 9, 2006
|
May 9, 2006
|
||||||
- Redid ClearLcoks() fix that I accidentally removed.
|
- Redid ClearLcoks() fix that I accidentally removed.
|
||||||
- Added a new setting for am_rotate: 2 will enable rotation only for the
|
- Added a new setting for am_rotate: 2 will enable rotation only for the
|
||||||
|
|
10
src/a.nas
10
src/a.nas
|
@ -8,6 +8,7 @@
|
||||||
%ifndef M_TARGET_LINUX
|
%ifndef M_TARGET_LINUX
|
||||||
%define ylookup _ylookup
|
%define ylookup _ylookup
|
||||||
%define vince _vince
|
%define vince _vince
|
||||||
|
%define vplce _vplce
|
||||||
%define palookupoffse _palookupoffse
|
%define palookupoffse _palookupoffse
|
||||||
%define bufplce _bufplce
|
%define bufplce _bufplce
|
||||||
%define dc_iscale _dc_iscale
|
%define dc_iscale _dc_iscale
|
||||||
|
@ -26,7 +27,6 @@
|
||||||
%define mvlineasm1 _mvlineasm1
|
%define mvlineasm1 _mvlineasm1
|
||||||
%define mvlineasm4 _mvlineasm4
|
%define mvlineasm4 _mvlineasm4
|
||||||
%endif
|
%endif
|
||||||
%define vplce _vplce
|
|
||||||
|
|
||||||
EXTERN ylookup ; near
|
EXTERN ylookup ; near
|
||||||
|
|
||||||
|
@ -453,10 +453,10 @@ fixchain2mb: add edi, 320
|
||||||
|
|
||||||
ALIGN 16
|
ALIGN 16
|
||||||
endmvlineasm4:
|
endmvlineasm4:
|
||||||
mov [_vplce], ecx
|
mov [vplce], ecx
|
||||||
mov [_vplce+4], edx
|
mov [vplce+4], edx
|
||||||
mov [_vplce+8], esi
|
mov [vplce+8], esi
|
||||||
mov [_vplce+12], ebp
|
mov [vplce+12], ebp
|
||||||
pop ecx
|
pop ecx
|
||||||
pop ebp
|
pop ebp
|
||||||
pop edi
|
pop edi
|
||||||
|
|
|
@ -1356,7 +1356,7 @@ void A_BFGSpray (AActor *mo)
|
||||||
int index = CheckIndex (3, NULL);
|
int index = CheckIndex (3, NULL);
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
spraytype = PClass::FindClass ((const char *)StateParameters[index]);
|
spraytype = PClass::FindClass ((ENamedName)StateParameters[index]);
|
||||||
numrays = EvalExpressionI (StateParameters[index+1], mo);
|
numrays = EvalExpressionI (StateParameters[index+1], mo);
|
||||||
if (numrays <= 0)
|
if (numrays <= 0)
|
||||||
numrays = 40;
|
numrays = 40;
|
||||||
|
|
|
@ -173,7 +173,7 @@ void A_FatAttack1 (AActor *self)
|
||||||
|
|
||||||
const PClass *spawntype = NULL;
|
const PClass *spawntype = NULL;
|
||||||
int index = CheckIndex (1, NULL);
|
int index = CheckIndex (1, NULL);
|
||||||
if (index >= 0) spawntype = PClass::FindClass ((const char *)StateParameters[index]);
|
if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]);
|
||||||
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
||||||
|
|
||||||
A_FaceTarget (self);
|
A_FaceTarget (self);
|
||||||
|
@ -201,7 +201,7 @@ void A_FatAttack2 (AActor *self)
|
||||||
|
|
||||||
const PClass *spawntype = NULL;
|
const PClass *spawntype = NULL;
|
||||||
int index = CheckIndex (1, NULL);
|
int index = CheckIndex (1, NULL);
|
||||||
if (index >= 0) spawntype = PClass::FindClass ((const char *)StateParameters[index]);
|
if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]);
|
||||||
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
||||||
|
|
||||||
A_FaceTarget (self);
|
A_FaceTarget (self);
|
||||||
|
@ -229,7 +229,7 @@ void A_FatAttack3 (AActor *self)
|
||||||
|
|
||||||
const PClass *spawntype = NULL;
|
const PClass *spawntype = NULL;
|
||||||
int index = CheckIndex (1, NULL);
|
int index = CheckIndex (1, NULL);
|
||||||
if (index >= 0) spawntype = PClass::FindClass ((const char *)StateParameters[index]);
|
if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]);
|
||||||
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot);
|
||||||
|
|
||||||
A_FaceTarget (self);
|
A_FaceTarget (self);
|
||||||
|
@ -266,7 +266,7 @@ void A_Mushroom (AActor *actor)
|
||||||
int index = CheckIndex (1, NULL);
|
int index = CheckIndex (1, NULL);
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
spawntype = PClass::FindClass((const char *)StateParameters[index]);
|
spawntype = PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
n = EvalExpressionI (StateParameters[index+1], actor);
|
n = EvalExpressionI (StateParameters[index+1], actor);
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
n = actor->damage;
|
n = actor->damage;
|
||||||
|
|
|
@ -115,7 +115,7 @@ void A_PainShootSkull (AActor *self, angle_t angle)
|
||||||
int index=CheckIndex(1, NULL);
|
int index=CheckIndex(1, NULL);
|
||||||
if (index>=0)
|
if (index>=0)
|
||||||
{
|
{
|
||||||
spawntype = PClass::FindClass((const char *)StateParameters[index]);
|
spawntype = PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
}
|
}
|
||||||
if (spawntype == NULL) spawntype = RUNTIME_CLASS(ALostSoul);
|
if (spawntype == NULL) spawntype = RUNTIME_CLASS(ALostSoul);
|
||||||
|
|
||||||
|
|
|
@ -772,12 +772,14 @@ static void ParseMapInfoLower (MapInfoHandler *handlers,
|
||||||
|
|
||||||
case MITYPE_REDIRECT:
|
case MITYPE_REDIRECT:
|
||||||
SC_MustGetString ();
|
SC_MustGetString ();
|
||||||
levelinfo->RedirectType = PClass::FindClass (sc_String);
|
levelinfo->RedirectType = sc_String;
|
||||||
|
/*
|
||||||
if (levelinfo->RedirectType == NULL ||
|
if (levelinfo->RedirectType == NULL ||
|
||||||
!(levelinfo->RedirectType->IsDescendantOf (RUNTIME_CLASS(AInventory))))
|
!(levelinfo->RedirectType->IsDescendantOf (RUNTIME_CLASS(AInventory))))
|
||||||
{
|
{
|
||||||
SC_ScriptError ("%s is not an inventory item", sc_String);
|
SC_ScriptError ("%s is not an inventory item", sc_String);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// Intentional fall-through
|
// Intentional fall-through
|
||||||
|
|
||||||
case MITYPE_MAPNAME: {
|
case MITYPE_MAPNAME: {
|
||||||
|
@ -2168,18 +2170,22 @@ level_info_t *FindLevelByNum (int num)
|
||||||
|
|
||||||
level_info_t *CheckLevelRedirect (level_info_t *info)
|
level_info_t *CheckLevelRedirect (level_info_t *info)
|
||||||
{
|
{
|
||||||
if (info->RedirectType != NULL)
|
if (info->RedirectType != NAME_None)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAXPLAYERS; ++i)
|
const PClass *type = PClass::FindClass(info->RedirectType);
|
||||||
|
if (type != NULL)
|
||||||
{
|
{
|
||||||
if (playeringame[i] && players[i].mo->FindInventory (info->RedirectType))
|
for (int i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
level_info_t *newinfo = FindLevelInfo (info->RedirectMap);
|
if (playeringame[i] && players[i].mo->FindInventory (type))
|
||||||
if (newinfo != NULL)
|
|
||||||
{
|
{
|
||||||
info = newinfo;
|
level_info_t *newinfo = FindLevelInfo (info->RedirectMap);
|
||||||
|
if (newinfo != NULL)
|
||||||
|
{
|
||||||
|
info = newinfo;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,7 +148,7 @@ struct level_info_s
|
||||||
|
|
||||||
// Redirection: If any player is carrying the specified item, then
|
// Redirection: If any player is carrying the specified item, then
|
||||||
// you go to the RedirectMap instead of this one.
|
// you go to the RedirectMap instead of this one.
|
||||||
const PClass *RedirectType;
|
FName RedirectType;
|
||||||
char RedirectMap[9];
|
char RedirectMap[9];
|
||||||
|
|
||||||
char enterpic[9];
|
char enterpic[9];
|
||||||
|
|
|
@ -86,7 +86,7 @@ const BYTE SF_BIGTIC = 0x80;
|
||||||
// The first 2 parameters for each function call represent
|
// The first 2 parameters for each function call represent
|
||||||
// the old misc1/misc2 values, even for non-weapons
|
// the old misc1/misc2 values, even for non-weapons
|
||||||
|
|
||||||
extern TArray<intptr_t> StateParameters;
|
extern TArray<int> StateParameters;
|
||||||
|
|
||||||
struct FState
|
struct FState
|
||||||
{
|
{
|
||||||
|
|
|
@ -79,7 +79,27 @@ xx(Mauler)
|
||||||
xx(Chicken)
|
xx(Chicken)
|
||||||
xx(Pig)
|
xx(Pig)
|
||||||
|
|
||||||
|
|
||||||
|
// Damage types
|
||||||
|
xx(Fire)
|
||||||
|
//xx(Ice) already defined above
|
||||||
|
xx(Disintegrate)
|
||||||
#if 0
|
#if 0
|
||||||
|
xx(Water)
|
||||||
|
xx(Slime)
|
||||||
|
xx(Crush)
|
||||||
|
xx(Telefrag)
|
||||||
|
xx(Falling)
|
||||||
|
xx(Suicide)
|
||||||
|
xx(Exit)
|
||||||
|
xx(Railgun)
|
||||||
|
xx(Poison)
|
||||||
|
xx(Electric)
|
||||||
|
xx(BFGSplash)
|
||||||
|
xx(DrainLife) // A weapon like the Sigil that drains your life away.
|
||||||
|
xx(Massacre) // For death by a cheater!
|
||||||
|
//(Melee) already defined above, so don't define it again
|
||||||
|
|
||||||
|
|
||||||
// Standard animator names.
|
// Standard animator names.
|
||||||
xx(Spawn)
|
xx(Spawn)
|
||||||
|
@ -106,25 +126,6 @@ xx(AltHoldAttack)
|
||||||
// a damage type if you wanted to force an extreme death.
|
// a damage type if you wanted to force an extreme death.
|
||||||
xx(Extreme)
|
xx(Extreme)
|
||||||
|
|
||||||
// Damage types
|
|
||||||
xx(Fire)
|
|
||||||
//xx(Ice) already defined above
|
|
||||||
xx(Disintegrate)
|
|
||||||
xx(Water)
|
|
||||||
xx(Slime)
|
|
||||||
xx(Crush)
|
|
||||||
xx(Telefrag)
|
|
||||||
xx(Falling)
|
|
||||||
xx(Suicide)
|
|
||||||
xx(Exit)
|
|
||||||
xx(Railgun)
|
|
||||||
xx(Poison)
|
|
||||||
xx(Electric)
|
|
||||||
xx(BFGSplash)
|
|
||||||
xx(DrainLife) // A weapon like the Sigil that drains your life away.
|
|
||||||
xx(Massacre) // For death by a cheater!
|
|
||||||
//(Melee) already defined above, so don't define it again
|
|
||||||
|
|
||||||
// Compatible death names for the decorate parser.
|
// Compatible death names for the decorate parser.
|
||||||
xx(XDeath)
|
xx(XDeath)
|
||||||
xx(BDeath)
|
xx(BDeath)
|
||||||
|
|
|
@ -2349,25 +2349,14 @@ bool CheckBossDeath (AActor *actor)
|
||||||
//
|
//
|
||||||
void A_BossDeath (AActor *actor)
|
void A_BossDeath (AActor *actor)
|
||||||
{
|
{
|
||||||
enum
|
FName type = actor->GetClass()->TypeName;
|
||||||
{
|
|
||||||
MT_FATSO,
|
|
||||||
MT_BABY,
|
|
||||||
MT_BRUISER,
|
|
||||||
MT_CYBORG,
|
|
||||||
MT_SPIDER,
|
|
||||||
|
|
||||||
MT_HEAD,
|
|
||||||
MT_MINOTAUR,
|
|
||||||
MT_SORCERER2
|
|
||||||
} type;
|
|
||||||
|
|
||||||
// Do generic special death actions first
|
// Do generic special death actions first
|
||||||
bool checked = false;
|
bool checked = false;
|
||||||
FSpecialAction *sa = level.info->specialactions;
|
FSpecialAction *sa = level.info->specialactions;
|
||||||
while (sa)
|
while (sa)
|
||||||
{
|
{
|
||||||
if (FName(actor->GetClass()->TypeName.GetChars()) == sa->Type)
|
if (type == sa->Type)
|
||||||
{
|
{
|
||||||
if (!checked && !CheckBossDeath(actor))
|
if (!checked && !CheckBossDeath(actor))
|
||||||
{
|
{
|
||||||
|
@ -2393,28 +2382,14 @@ void A_BossDeath (AActor *actor)
|
||||||
LEVEL_SORCERER2SPECIAL)) == 0)
|
LEVEL_SORCERER2SPECIAL)) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const PClass *actorType = actor->GetClass();
|
|
||||||
switch (actorType->TypeName)
|
|
||||||
{
|
|
||||||
case NAME_Fatso: type = MT_FATSO; break;
|
|
||||||
case NAME_Arachnotron: type = MT_BABY; break;
|
|
||||||
case NAME_BaronOfHell: type = MT_BRUISER; break;
|
|
||||||
case NAME_Cyberdemon: type = MT_CYBORG; break;
|
|
||||||
case NAME_SpiderMastermind: type = MT_SPIDER; break;
|
|
||||||
case NAME_Ironlich: type = MT_HEAD; break;
|
|
||||||
case NAME_Minotaur: type = MT_MINOTAUR; break;
|
|
||||||
case NAME_Sorcerer2: type = MT_SORCERER2; break;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
((level.flags & LEVEL_MAP07SPECIAL) && (type == MT_FATSO || type == MT_BABY)) ||
|
((level.flags & LEVEL_MAP07SPECIAL) && (type == NAME_Fatso || type == NAME_Arachnotron)) ||
|
||||||
((level.flags & LEVEL_BRUISERSPECIAL) && (type == MT_BRUISER)) ||
|
((level.flags & LEVEL_BRUISERSPECIAL) && (type == NAME_BaronOfHell)) ||
|
||||||
((level.flags & LEVEL_CYBORGSPECIAL) && (type == MT_CYBORG)) ||
|
((level.flags & LEVEL_CYBORGSPECIAL) && (type == NAME_Cyberdemon)) ||
|
||||||
((level.flags & LEVEL_SPIDERSPECIAL) && (type == MT_SPIDER)) ||
|
((level.flags & LEVEL_SPIDERSPECIAL) && (type == NAME_SpiderMastermind)) ||
|
||||||
((level.flags & LEVEL_HEADSPECIAL) && (type == MT_HEAD)) ||
|
((level.flags & LEVEL_HEADSPECIAL) && (type == NAME_Ironlich)) ||
|
||||||
((level.flags & LEVEL_MINOTAURSPECIAL) && (type == MT_MINOTAUR)) ||
|
((level.flags & LEVEL_MINOTAURSPECIAL) && (type == NAME_Minotaur)) ||
|
||||||
((level.flags & LEVEL_SORCERER2SPECIAL) && (type == MT_SORCERER2))
|
((level.flags & LEVEL_SORCERER2SPECIAL) && (type == NAME_Sorcerer2))
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
else
|
else
|
||||||
|
@ -2432,13 +2407,13 @@ void A_BossDeath (AActor *actor)
|
||||||
}
|
}
|
||||||
if (level.flags & LEVEL_MAP07SPECIAL)
|
if (level.flags & LEVEL_MAP07SPECIAL)
|
||||||
{
|
{
|
||||||
if (type == MT_FATSO)
|
if (type == NAME_Fatso)
|
||||||
{
|
{
|
||||||
EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0);
|
EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == MT_BABY)
|
if (type == NAME_Arachnotron)
|
||||||
{
|
{
|
||||||
EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, FRACUNIT, 0, 0, 0);
|
EV_DoFloor (DFloor::floorRaiseByTexture, NULL, 667, FRACUNIT, 0, 0, 0);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -77,7 +77,7 @@ extern TArray<FActorInfo *> Decorations;
|
||||||
// allow decal specifications in DECORATE. Decals are loaded after DECORATE so the names must be stored here.
|
// allow decal specifications in DECORATE. Decals are loaded after DECORATE so the names must be stored here.
|
||||||
TArray<char*> DecalNames;
|
TArray<char*> DecalNames;
|
||||||
// all state parameters
|
// all state parameters
|
||||||
TArray<intptr_t> StateParameters;
|
TArray<int> StateParameters;
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
@ -362,17 +362,16 @@ int EvalExpressionI (int id, AActor *self);
|
||||||
void A_ChangeFlag(AActor * self)
|
void A_ChangeFlag(AActor * self)
|
||||||
{
|
{
|
||||||
int index=CheckIndex(2);
|
int index=CheckIndex(2);
|
||||||
char * flagname = (char *)StateParameters[index]; // the string is changed but that doesn't really matter
|
const char * flagname = FName((ENamedName)StateParameters[index]).GetChars();
|
||||||
int expression = EvalExpressionI (StateParameters[index+1], self);
|
int expression = EvalExpressionI (StateParameters[index+1], self);
|
||||||
|
|
||||||
char *dot = strchr (flagname, '.');
|
const char *dot = strchr (flagname, '.');
|
||||||
flagdef *fd;
|
flagdef *fd;
|
||||||
|
|
||||||
if (dot != NULL)
|
if (dot != NULL)
|
||||||
{
|
{
|
||||||
*dot = '\0';
|
FString part1(flagname, dot-flagname);
|
||||||
fd = FindFlag (self->GetClass(), flagname, dot+1);
|
fd = FindFlag (self->GetClass(), part1, dot+1);
|
||||||
*dot = '.';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -665,7 +664,7 @@ AFuncDesc AFTable[]=
|
||||||
FUNC(A_ExtChase, "XXyx")
|
FUNC(A_ExtChase, "XXyx")
|
||||||
FUNC(A_Jiggle, "XX")
|
FUNC(A_Jiggle, "XX")
|
||||||
FUNC(A_DropInventory, "M")
|
FUNC(A_DropInventory, "M")
|
||||||
FUNC(A_SetBlend, "DXXd")
|
FUNC(A_SetBlend, "CXXc")
|
||||||
FUNC(A_ChangeFlag, "TX")
|
FUNC(A_ChangeFlag, "TX")
|
||||||
FUNC(A_JumpIf, "XL")
|
FUNC(A_JumpIf, "XL")
|
||||||
FUNC(A_KillMaster, NULL)
|
FUNC(A_KillMaster, NULL)
|
||||||
|
@ -1629,7 +1628,7 @@ do_stop:
|
||||||
const char * params = afd->parameters;
|
const char * params = afd->parameters;
|
||||||
int numparams = (int)strlen(params);
|
int numparams = (int)strlen(params);
|
||||||
int paramindex = PrepareStateParameters(&state, numparams);
|
int paramindex = PrepareStateParameters(&state, numparams);
|
||||||
intptr_t v;
|
int v;
|
||||||
|
|
||||||
if (!islower(*params))
|
if (!islower(*params))
|
||||||
{
|
{
|
||||||
|
@ -1643,10 +1642,11 @@ do_stop:
|
||||||
{
|
{
|
||||||
switch(*params)
|
switch(*params)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
case 'A':
|
case 'A':
|
||||||
case 'a': // Angle
|
case 'a': // Angle
|
||||||
SC_MustGetFloat();
|
SC_MustGetFloat();
|
||||||
v=angle_t(sc_Float*ANGLE_1);
|
v=(int)angle_t(sc_Float*ANGLE_1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
|
@ -1672,6 +1672,13 @@ do_stop:
|
||||||
v=fixed_t(sc_Float*FRACUNIT);
|
v=fixed_t(sc_Float*FRACUNIT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '!': // not boolean (to simulate parameters which default to 1)
|
||||||
|
SC_MustGetNumber();
|
||||||
|
v=!sc_Number;
|
||||||
|
break;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
case 's': // Sound name
|
case 's': // Sound name
|
||||||
SC_MustGetString();
|
SC_MustGetString();
|
||||||
|
@ -1683,7 +1690,7 @@ do_stop:
|
||||||
case 'T':
|
case 'T':
|
||||||
case 't': // String
|
case 't': // String
|
||||||
SC_MustGetString();
|
SC_MustGetString();
|
||||||
v = (intptr_t)(sc_String[0] ? copystring(sc_String) : NULL);
|
v = (int)(sc_String[0] ? FName(sc_String) : NAME_None);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'L':
|
case 'L':
|
||||||
|
@ -1708,11 +1715,6 @@ do_stop:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '!': // not boolean (to simulate parameters which default to 1)
|
|
||||||
SC_MustGetNumber();
|
|
||||||
v=!sc_Number;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'C':
|
case 'C':
|
||||||
case 'c':
|
case 'c':
|
||||||
SC_MustGetString ();
|
SC_MustGetString ();
|
||||||
|
@ -1728,13 +1730,6 @@ do_stop:
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'D':
|
|
||||||
case 'd':
|
|
||||||
SC_MustGetString ();
|
|
||||||
v = V_GetColor (NULL, sc_String);
|
|
||||||
((PalEntry *)&v)->a = 255;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'X':
|
case 'X':
|
||||||
case 'x':
|
case 'x':
|
||||||
v = ParseExpression (false);
|
v = ParseExpression (false);
|
||||||
|
|
|
@ -413,7 +413,7 @@ void DoJumpIfInventory(AActor * self, AActor * owner)
|
||||||
int index=CheckIndex(3, &CallingState);
|
int index=CheckIndex(3, &CallingState);
|
||||||
if (index<0 || owner == NULL) return;
|
if (index<0 || owner == NULL) return;
|
||||||
|
|
||||||
const char * ItemType=(const char *)StateParameters[index];
|
ENamedName ItemType=(ENamedName)StateParameters[index];
|
||||||
int ItemAmount = EvalExpressionI (StateParameters[index+1], self);
|
int ItemAmount = EvalExpressionI (StateParameters[index+1], self);
|
||||||
int JumpOffset = StateParameters[index+2];
|
int JumpOffset = StateParameters[index+2];
|
||||||
const PClass * Type=PClass::FindClass(ItemType);
|
const PClass * Type=PClass::FindClass(ItemType);
|
||||||
|
@ -514,7 +514,7 @@ void A_CustomMissile(AActor * self)
|
||||||
int index=CheckIndex(6);
|
int index=CheckIndex(6);
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
|
|
||||||
const char * MissileName=(const char*)StateParameters[index];
|
ENamedName MissileName=(ENamedName)StateParameters[index];
|
||||||
fixed_t SpawnHeight=fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
fixed_t SpawnHeight=fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
||||||
int Spawnofs_XY=EvalExpressionI (StateParameters[index+2], self);
|
int Spawnofs_XY=EvalExpressionI (StateParameters[index+2], self);
|
||||||
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+3], self) * ANGLE_1);
|
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+3], self) * ANGLE_1);
|
||||||
|
@ -629,7 +629,7 @@ void A_CustomBulletAttack (AActor *self)
|
||||||
angle_t Spread_Z=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
angle_t Spread_Z=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
||||||
int NumBullets=EvalExpressionI (StateParameters[index+2], self);
|
int NumBullets=EvalExpressionI (StateParameters[index+2], self);
|
||||||
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
||||||
const char * PuffType=(const char *)StateParameters[index+4];
|
ENamedName PuffType=(ENamedName)StateParameters[index+4];
|
||||||
fixed_t Range = fixed_t(EvalExpressionF (StateParameters[index+5], self) * FRACUNIT);
|
fixed_t Range = fixed_t(EvalExpressionF (StateParameters[index+5], self) * FRACUNIT);
|
||||||
|
|
||||||
if(Range==0) Range=MISSILERANGE;
|
if(Range==0) Range=MISSILERANGE;
|
||||||
|
@ -675,15 +675,14 @@ void A_CustomMeleeAttack (AActor *self)
|
||||||
int Modulus = EvalExpressionI (StateParameters[index+1], self);
|
int Modulus = EvalExpressionI (StateParameters[index+1], self);
|
||||||
int Adder = EvalExpressionI (StateParameters[index+2], self);
|
int Adder = EvalExpressionI (StateParameters[index+2], self);
|
||||||
int MeleeSound=StateParameters[index+3];
|
int MeleeSound=StateParameters[index+3];
|
||||||
const char * DamageType = (const char*)StateParameters[index+4];
|
ENamedName DamageType = (ENamedName)StateParameters[index+4];
|
||||||
bool bleed = EvalExpressionN (StateParameters[index+5], self);
|
bool bleed = EvalExpressionN (StateParameters[index+5], self);
|
||||||
int mod;
|
int mod;
|
||||||
|
|
||||||
// This needs to be redesigned once the customizable damage type system is working
|
// This needs to be redesigned once the customizable damage type system is working
|
||||||
if (DamageType == NULL) mod=MOD_HIT;
|
if (DamageType==NAME_Fire) mod=MOD_FIRE;
|
||||||
else if (!stricmp(DamageType, "Fire")) mod=MOD_FIRE;
|
else if (DamageType==NAME_Ice) mod=MOD_ICE;
|
||||||
else if (!stricmp(DamageType, "Ice")) mod=MOD_ICE;
|
else if (DamageType==NAME_Disintegrate) mod=MOD_DISINTEGRATE;
|
||||||
else if (!stricmp(DamageType, "Disintegrate")) mod=MOD_DISINTEGRATE;
|
|
||||||
else mod=MOD_HIT;
|
else mod=MOD_HIT;
|
||||||
|
|
||||||
if (!self->target)
|
if (!self->target)
|
||||||
|
@ -729,7 +728,7 @@ void A_FireBullets (AActor *self)
|
||||||
angle_t Spread_Z=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
angle_t Spread_Z=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
||||||
int NumberOfBullets=EvalExpressionI (StateParameters[index+2], self);
|
int NumberOfBullets=EvalExpressionI (StateParameters[index+2], self);
|
||||||
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
||||||
const char * PuffTypeName=(const char *)StateParameters[index+4];
|
ENamedName PuffTypeName=(ENamedName)StateParameters[index+4];
|
||||||
bool UseAmmo=EvalExpressionN (StateParameters[index+5], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+5], self);
|
||||||
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+6], self) * FRACUNIT);
|
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+6], self) * FRACUNIT);
|
||||||
|
|
||||||
|
@ -789,7 +788,7 @@ void A_FireCustomMissile (AActor * self)
|
||||||
int index=CheckIndex(5);
|
int index=CheckIndex(5);
|
||||||
if (index<0 || !self->player) return;
|
if (index<0 || !self->player) return;
|
||||||
|
|
||||||
const char * MissileName=(const char *)StateParameters[index];
|
ENamedName MissileName=(ENamedName)StateParameters[index];
|
||||||
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
||||||
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
||||||
int SpawnOfs_XY=EvalExpressionI (StateParameters[index+3], self);
|
int SpawnOfs_XY=EvalExpressionI (StateParameters[index+3], self);
|
||||||
|
@ -844,7 +843,7 @@ void A_CustomPunch (AActor *self)
|
||||||
int Damage=EvalExpressionI (StateParameters[index], self);
|
int Damage=EvalExpressionI (StateParameters[index], self);
|
||||||
bool norandom=!!EvalExpressionI (StateParameters[index+1], self);
|
bool norandom=!!EvalExpressionI (StateParameters[index+1], self);
|
||||||
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
||||||
const char * PuffTypeName=(const char *)StateParameters[index+3];
|
ENamedName PuffTypeName=(ENamedName)StateParameters[index+3];
|
||||||
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
||||||
|
|
||||||
const PClass * PuffType;
|
const PClass * PuffType;
|
||||||
|
@ -984,7 +983,7 @@ static void DoGiveInventory(AActor * self, AActor * receiver)
|
||||||
int index=CheckIndex(2);
|
int index=CheckIndex(2);
|
||||||
if (index<0 || receiver == NULL) return;
|
if (index<0 || receiver == NULL) return;
|
||||||
|
|
||||||
const char * item =(const char*)StateParameters[index];
|
ENamedName item =(ENamedName)StateParameters[index];
|
||||||
int amount=EvalExpressionI (StateParameters[index+1], self);
|
int amount=EvalExpressionI (StateParameters[index+1], self);
|
||||||
|
|
||||||
if (amount==0) amount=1;
|
if (amount==0) amount=1;
|
||||||
|
@ -1037,7 +1036,7 @@ void DoTakeInventory(AActor * self, AActor * receiver)
|
||||||
int index=CheckIndex(2);
|
int index=CheckIndex(2);
|
||||||
if (index<0 || receiver == NULL) return;
|
if (index<0 || receiver == NULL) return;
|
||||||
|
|
||||||
const char * item =(const char*)StateParameters[index];
|
ENamedName item =(ENamedName)StateParameters[index];
|
||||||
int amount=EvalExpressionI (StateParameters[index+1], self);
|
int amount=EvalExpressionI (StateParameters[index+1], self);
|
||||||
|
|
||||||
const PClass * mi=PClass::FindClass(item);
|
const PClass * mi=PClass::FindClass(item);
|
||||||
|
@ -1083,7 +1082,7 @@ void A_SpawnItem(AActor * self)
|
||||||
int index=CheckIndex(4, &CallingState);
|
int index=CheckIndex(4, &CallingState);
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
|
|
||||||
const PClass * missile= PClass::FindClass((const char *)StateParameters[index]);
|
const PClass * missile= PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
fixed_t distance = EvalExpressionF (StateParameters[index+1], self);
|
fixed_t distance = EvalExpressionF (StateParameters[index+1], self);
|
||||||
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||||
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
||||||
|
@ -1180,7 +1179,7 @@ void A_ThrowGrenade(AActor * self)
|
||||||
int index=CheckIndex(5, &CallingState);
|
int index=CheckIndex(5, &CallingState);
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
|
|
||||||
const PClass * missile= PClass::FindClass((const char *)StateParameters[index]);
|
const PClass * missile= PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
||||||
fixed_t xymom = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
fixed_t xymom = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||||
fixed_t zmom = fixed_t(EvalExpressionF (StateParameters[index+3], self) * FRACUNIT);
|
fixed_t zmom = fixed_t(EvalExpressionF (StateParameters[index+3], self) * FRACUNIT);
|
||||||
|
@ -1251,7 +1250,7 @@ void A_SelectWeapon(AActor * actor)
|
||||||
int index=CheckIndex(1, NULL);
|
int index=CheckIndex(1, NULL);
|
||||||
if (index<0 || actor->player == NULL) return;
|
if (index<0 || actor->player == NULL) return;
|
||||||
|
|
||||||
const PClass * weapon= PClass::FindClass((const char *)StateParameters[index]);
|
const PClass * weapon= PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
AWeapon * weaponitem = static_cast<AWeapon*>(actor->FindInventory(weapon));
|
AWeapon * weaponitem = static_cast<AWeapon*>(actor->FindInventory(weapon));
|
||||||
|
|
||||||
if (weaponitem != NULL && weaponitem->IsKindOf(RUNTIME_CLASS(AWeapon)))
|
if (weaponitem != NULL && weaponitem->IsKindOf(RUNTIME_CLASS(AWeapon)))
|
||||||
|
@ -1278,7 +1277,7 @@ void A_Print(AActor * actor)
|
||||||
if (actor->CheckLocalView (consoleplayer) ||
|
if (actor->CheckLocalView (consoleplayer) ||
|
||||||
(actor->target!=NULL && actor->target->CheckLocalView (consoleplayer)))
|
(actor->target!=NULL && actor->target->CheckLocalView (consoleplayer)))
|
||||||
{
|
{
|
||||||
C_MidPrint((const char *)StateParameters[index]);
|
C_MidPrint(FName((ENamedName)StateParameters[index]).GetChars());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1362,7 +1361,7 @@ void A_SpawnDebris(AActor * self)
|
||||||
int index=CheckIndex(1, NULL);
|
int index=CheckIndex(1, NULL);
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
|
|
||||||
debris = PClass::FindClass((const char *)StateParameters[index]);
|
debris = PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
if (debris == NULL) return;
|
if (debris == NULL) return;
|
||||||
|
|
||||||
for (i = 0; i < GetDefaultByType(debris)->health; i++)
|
for (i = 0; i < GetDefaultByType(debris)->health; i++)
|
||||||
|
@ -1454,7 +1453,7 @@ void A_DropInventory(AActor * self)
|
||||||
{
|
{
|
||||||
int index=CheckIndex(1, &CallingState);
|
int index=CheckIndex(1, &CallingState);
|
||||||
if (index<0) return;
|
if (index<0) return;
|
||||||
const PClass * ti = PClass::FindClass((const char*)StateParameters[index]);
|
const PClass * ti = PClass::FindClass((ENamedName)StateParameters[index]);
|
||||||
if (ti)
|
if (ti)
|
||||||
{
|
{
|
||||||
AInventory * inv = self->FindInventory(ti);
|
AInventory * inv = self->FindInventory(ti);
|
||||||
|
@ -1480,6 +1479,8 @@ void A_SetBlend(AActor * self)
|
||||||
int tics = EvalExpressionI (StateParameters[index+2], self);
|
int tics = EvalExpressionI (StateParameters[index+2], self);
|
||||||
PalEntry color2 = StateParameters[index+3];
|
PalEntry color2 = StateParameters[index+3];
|
||||||
|
|
||||||
|
if (color==-1) color=0;
|
||||||
|
if (color2==-1) color2=0;
|
||||||
if (!color2.a)
|
if (!color2.a)
|
||||||
color2 = color;
|
color2 = color;
|
||||||
|
|
||||||
|
|
|
@ -671,7 +671,7 @@ ACTOR DeadReaver 20
|
||||||
|
|
||||||
// Dead Rebel ---------------------------------------------------------------
|
// Dead Rebel ---------------------------------------------------------------
|
||||||
|
|
||||||
ACTOR DeadRebel
|
ACTOR DeadRebel 19
|
||||||
{
|
{
|
||||||
Game Strife
|
Game Strife
|
||||||
ConversationID 235, -1, -1
|
ConversationID 235, -1, -1
|
||||||
|
|
|
@ -975,7 +975,7 @@ TXT_BLOODSCOURGE_PIECE = "SEGMENT OF BLOODSCOURGE";
|
||||||
TXT_NEEDKEY = "You don't have the key";
|
TXT_NEEDKEY = "You don't have the key";
|
||||||
TXT_NEED_PASSCARD = "You need a passcard";
|
TXT_NEED_PASSCARD = "You need a passcard";
|
||||||
TXT_NEED_PASSCARD_DOOR = "You need a pass card key to open this door";
|
TXT_NEED_PASSCARD_DOOR = "You need a pass card key to open this door";
|
||||||
TXT_NEED_IDCARD = "You need an ID card"
|
TXT_NEED_IDCARD = "You need an ID card";
|
||||||
TXT_NEED_PRISONKEY = "You don't have the key to the prison";
|
TXT_NEED_PRISONKEY = "You don't have the key to the prison";
|
||||||
TXT_NEED_HANDPRINT = "Hand print not on file";
|
TXT_NEED_HANDPRINT = "Hand print not on file";
|
||||||
TXT_NEED_GOLDKEY = "You need the Gold Key";
|
TXT_NEED_GOLDKEY = "You need the Gold Key";
|
||||||
|
|
Loading…
Reference in a new issue