mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 23:01:50 +00:00
- Added limit parameter to A_RailAttack and A_CustomRailgun.
This commit is contained in:
parent
f1597a5d26
commit
2d4eb8dde4
5 changed files with 16 additions and 4 deletions
|
@ -334,6 +334,7 @@ struct FRailParams
|
||||||
double drift = 1.0;
|
double drift = 1.0;
|
||||||
PClassActor *spawnclass = nullptr;
|
PClassActor *spawnclass = nullptr;
|
||||||
int SpiralOffset = 270;
|
int SpiralOffset = 270;
|
||||||
|
int limit = 0;
|
||||||
}; // [RH] Shoot a railgun
|
}; // [RH] Shoot a railgun
|
||||||
|
|
||||||
void P_RailAttack(FRailParams *params);
|
void P_RailAttack(FRailParams *params);
|
||||||
|
|
|
@ -4610,6 +4610,8 @@ struct RailData
|
||||||
bool ThruSpecies;
|
bool ThruSpecies;
|
||||||
bool MThruSpecies;
|
bool MThruSpecies;
|
||||||
bool ThruActors;
|
bool ThruActors;
|
||||||
|
int limit;
|
||||||
|
int count;
|
||||||
};
|
};
|
||||||
|
|
||||||
static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata)
|
static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata)
|
||||||
|
@ -4664,7 +4666,11 @@ static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata)
|
||||||
}
|
}
|
||||||
data->RailHits.Push(newhit);
|
data->RailHits.Push(newhit);
|
||||||
|
|
||||||
return data->StopAtOne ? TRACE_Stop : TRACE_Continue;
|
if (data->limit)
|
||||||
|
{
|
||||||
|
data->count++;
|
||||||
|
}
|
||||||
|
return (data->StopAtOne || (data->limit && (data->count >= data->limit))) ? TRACE_Stop : TRACE_Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -4706,7 +4712,8 @@ void P_RailAttack(FRailParams *p)
|
||||||
|
|
||||||
RailData rail_data;
|
RailData rail_data;
|
||||||
rail_data.Caller = source;
|
rail_data.Caller = source;
|
||||||
|
rail_data.limit = p->limit;
|
||||||
|
rail_data.count = 0;
|
||||||
rail_data.StopAtOne = !!(p->flags & RAF_NOPIERCE);
|
rail_data.StopAtOne = !!(p->flags & RAF_NOPIERCE);
|
||||||
start.X = xy.X;
|
start.X = xy.X;
|
||||||
start.Y = xy.Y;
|
start.Y = xy.Y;
|
||||||
|
|
|
@ -1996,6 +1996,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RailAttack)
|
||||||
PARAM_CLASS_OPT (spawnclass, AActor){ spawnclass = NULL; }
|
PARAM_CLASS_OPT (spawnclass, AActor){ spawnclass = NULL; }
|
||||||
PARAM_FLOAT_OPT (spawnofs_z) { spawnofs_z = 0; }
|
PARAM_FLOAT_OPT (spawnofs_z) { spawnofs_z = 0; }
|
||||||
PARAM_INT_OPT (SpiralOffset) { SpiralOffset = 270; }
|
PARAM_INT_OPT (SpiralOffset) { SpiralOffset = 270; }
|
||||||
|
PARAM_INT_OPT (limit) { limit = 0; }
|
||||||
|
|
||||||
if (range == 0) range = 8192;
|
if (range == 0) range = 8192;
|
||||||
if (sparsity == 0) sparsity=1.0;
|
if (sparsity == 0) sparsity=1.0;
|
||||||
|
@ -2036,6 +2037,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RailAttack)
|
||||||
p.drift = driftspeed;
|
p.drift = driftspeed;
|
||||||
p.spawnclass = spawnclass;
|
p.spawnclass = spawnclass;
|
||||||
p.SpiralOffset = SpiralOffset;
|
p.SpiralOffset = SpiralOffset;
|
||||||
|
p.limit = limit;
|
||||||
P_RailAttack(&p);
|
P_RailAttack(&p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2073,6 +2075,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun)
|
||||||
PARAM_CLASS_OPT (spawnclass, AActor){ spawnclass = NULL; }
|
PARAM_CLASS_OPT (spawnclass, AActor){ spawnclass = NULL; }
|
||||||
PARAM_FLOAT_OPT (spawnofs_z) { spawnofs_z = 0; }
|
PARAM_FLOAT_OPT (spawnofs_z) { spawnofs_z = 0; }
|
||||||
PARAM_INT_OPT (SpiralOffset) { SpiralOffset = 270; }
|
PARAM_INT_OPT (SpiralOffset) { SpiralOffset = 270; }
|
||||||
|
PARAM_INT_OPT (limit) { limit = 0; }
|
||||||
|
|
||||||
if (range == 0) range = 8192.;
|
if (range == 0) range = 8192.;
|
||||||
if (sparsity == 0) sparsity = 1;
|
if (sparsity == 0) sparsity = 1;
|
||||||
|
@ -2155,6 +2158,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun)
|
||||||
p.drift = driftspeed;
|
p.drift = driftspeed;
|
||||||
p.spawnclass = spawnclass;
|
p.spawnclass = spawnclass;
|
||||||
p.SpiralOffset = SpiralOffset;
|
p.SpiralOffset = SpiralOffset;
|
||||||
|
p.limit = 0;
|
||||||
P_RailAttack(&p);
|
P_RailAttack(&p);
|
||||||
|
|
||||||
self->SetXYZ(savedpos);
|
self->SetXYZ(savedpos);
|
||||||
|
|
|
@ -190,7 +190,7 @@ ACTOR Actor native //: Thinker
|
||||||
native state A_Jump(int chance = 256, state label, ...);
|
native state A_Jump(int chance = 256, state label, ...);
|
||||||
native void A_CustomMissile(class<Actor> missiletype, float spawnheight = 32, float spawnofs_xy = 0, float angle = 0, int flags = 0, float pitch = 0, int ptr = AAPTR_TARGET);
|
native void A_CustomMissile(class<Actor> missiletype, float spawnheight = 32, float spawnofs_xy = 0, float angle = 0, int flags = 0, float pitch = 0, int ptr = AAPTR_TARGET);
|
||||||
native void A_CustomBulletAttack(float/*angle*/ spread_xy, float/*angle*/ spread_z, int numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", float range = 0, int flags = 0, int ptr = AAPTR_TARGET);
|
native void A_CustomBulletAttack(float/*angle*/ spread_xy, float/*angle*/ spread_z, int numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", float range = 0, int flags = 0, int ptr = AAPTR_TARGET);
|
||||||
native void A_CustomRailgun(int damage, int spawnofs_xy = 0, color color1 = "", color color2 = "", int flags = 0, int aim = 0, float maxdiff = 0, class<Actor> pufftype = "BulletPuff", float/*angle*/ spread_xy = 0, float/*angle*/ spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class<Actor> spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270);
|
native void A_CustomRailgun(int damage, int spawnofs_xy = 0, color color1 = "", color color2 = "", int flags = 0, int aim = 0, float maxdiff = 0, class<Actor> pufftype = "BulletPuff", float/*angle*/ spread_xy = 0, float/*angle*/ spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class<Actor> spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270, int limit = 0);
|
||||||
native state A_JumpIfHealthLower(int health, state label, int ptr_selector = AAPTR_DEFAULT);
|
native state A_JumpIfHealthLower(int health, state label, int ptr_selector = AAPTR_DEFAULT);
|
||||||
native state A_JumpIfCloser(float distance, state label, bool noz = false);
|
native state A_JumpIfCloser(float distance, state label, bool noz = false);
|
||||||
native state A_JumpIfTracerCloser(float distance, state label, bool noz = false);
|
native state A_JumpIfTracerCloser(float distance, state label, bool noz = false);
|
||||||
|
|
|
@ -11,7 +11,7 @@ ACTOR Inventory native
|
||||||
action native A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class<Actor> pufftype = "BulletPuff", float range = 0, float lifesteal = 0, int lifestealmax = 0, class<BasicArmorBonus> armorbonustype = "ArmorBonus", sound MeleeSound = "", sound MissSound = "");
|
action native A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class<Actor> pufftype = "BulletPuff", float range = 0, float lifesteal = 0, int lifestealmax = 0, class<BasicArmorBonus> armorbonustype = "ArmorBonus", sound MeleeSound = "", sound MissSound = "");
|
||||||
action native A_FireBullets(float/*angle*/ spread_xy, float/*angle*/ spread_z, int numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", int flags = 1, float range = 0);
|
action native A_FireBullets(float/*angle*/ spread_xy, float/*angle*/ spread_z, int numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", int flags = 1, float range = 0);
|
||||||
action native A_FireCustomMissile(class<Actor> missiletype, float angle = 0, bool useammo = true, float spawnofs_xy = 0, float spawnheight = 0, int flags = 0, float pitch = 0);
|
action native A_FireCustomMissile(class<Actor> missiletype, float angle = 0, bool useammo = true, float spawnofs_xy = 0, float spawnheight = 0, int flags = 0, float pitch = 0);
|
||||||
action native A_RailAttack(int damage, int spawnofs_xy = 0, bool useammo = true, color color1 = "", color color2 = "", int flags = 0, float maxdiff = 0, class<Actor> pufftype = "BulletPuff", float/*angle*/ spread_xy = 0, float/*angle*/ spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class<Actor> spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270);
|
action native A_RailAttack(int damage, int spawnofs_xy = 0, bool useammo = true, color color1 = "", color color2 = "", int flags = 0, float maxdiff = 0, class<Actor> pufftype = "BulletPuff", float/*angle*/ spread_xy = 0, float/*angle*/ spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class<Actor> spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270, int limit = 0);
|
||||||
action native A_Light(int extralight);
|
action native A_Light(int extralight);
|
||||||
action native A_Light0();
|
action native A_Light0();
|
||||||
action native A_Light1();
|
action native A_Light1();
|
||||||
|
|
Loading…
Reference in a new issue