diff --git a/src/actor.h b/src/actor.h index 05a7c0965..bcb894071 100644 --- a/src/actor.h +++ b/src/actor.h @@ -800,6 +800,7 @@ public: SDWORD tics; // state tic counter FState *state; SDWORD Damage; // For missiles and monster railgun + int projectileKickback; DWORD flags; DWORD flags2; // Heretic flags DWORD flags3; // [RH] Hexen/Heretic actor-dependant behavior made flaggable diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 0306f866a..c8dca95ec 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -1029,7 +1029,9 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage { int kickback; - if (!source || !source->player || !source->player->ReadyWeapon) + if (inflictor && inflictor->projectileKickback) + kickback = inflictor->projectileKickback; + else if (!source || !source->player || !source->player->ReadyWeapon) kickback = gameinfo.defKickback; else kickback = source->player->ReadyWeapon->Kickback; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index eba8ce570..5592e87b8 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -227,8 +227,12 @@ void AActor::Serialize (FArchive &arc) << velz << tics << state - << Damage - << flags + << Damage; + if (SaveVersion >= 3227) + { + arc << projectileKickback; + } + arc << flags << flags2 << flags3 << flags4 diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index b7a352ed6..8e94e7817 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -447,6 +447,16 @@ DEFINE_PROPERTY(damage, X, Actor) defaults->Damage = id; } +//========================================================================== +// +//========================================================================== +DEFINE_PROPERTY(projectilekickback, I, Actor) +{ + PROP_INT_PARM(id, 0); + + defaults->projectileKickback = id; +} + //========================================================================== // //==========================================================================