diff --git a/library/LuaApi.cpp b/library/LuaApi.cpp index 292db698c..e735eeb4b 100644 --- a/library/LuaApi.cpp +++ b/library/LuaApi.cpp @@ -1633,6 +1633,9 @@ static const LuaWrapper::FunctionReg dfhack_units_module[] = { WRAPM(Units, isGay), WRAPM(Units, isNaked), WRAPM(Units, isUndead), + WRAPM(Units, isGhost), + WRAPM(Units, isActive), + WRAPM(Units, isKilled), WRAPM(Units, isGelded), WRAPM(Units, isDomesticated), WRAPM(Units, getMainSocialActivity), diff --git a/library/include/modules/Units.h b/library/include/modules/Units.h index 7394c5300..b6aa78bad 100644 --- a/library/include/modules/Units.h +++ b/library/include/modules/Units.h @@ -146,6 +146,9 @@ DFHACK_EXPORT bool isTrained(df::unit* unit); DFHACK_EXPORT bool isGay(df::unit* unit); DFHACK_EXPORT bool isNaked(df::unit* unit); DFHACK_EXPORT bool isUndead(df::unit* unit); +DFHACK_EXPORT bool isGhost(df::unit *unit); +DFHACK_EXPORT bool isActive(df::unit *unit); +DFHACK_EXPORT bool isKilled(df::unit *unit); DFHACK_EXPORT bool isGelded(df::unit* unit); DFHACK_EXPORT bool isDomesticated(df::unit* unit); diff --git a/library/modules/Units.cpp b/library/modules/Units.cpp index 41e9f2eba..e8c7cfa88 100644 --- a/library/modules/Units.cpp +++ b/library/modules/Units.cpp @@ -388,7 +388,7 @@ bool Units::isDead(df::unit *unit) { CHECK_NULL_POINTER(unit); - return unit->flags1.bits.dead || + return unit->flags2.bits.killed || unit->flags3.bits.ghostly; } @@ -396,7 +396,7 @@ bool Units::isAlive(df::unit *unit) { CHECK_NULL_POINTER(unit); - return !unit->flags1.bits.dead && + return !unit->flags2.bits.killed && !unit->flags3.bits.ghostly && !unit->curse.add_tags1.bits.NOT_LIVING; } @@ -1568,6 +1568,27 @@ bool Units::isUndead(df::unit* unit) && !unit->curse.add_tags1.bits.BLOODSUCKER )); } +bool Units::isGhost(df::unit *unit) +{ + CHECK_NULL_POINTER(unit); + + return unit->flags3.bits.ghostly; +} + +bool Units::isActive(df::unit *unit) +{ + CHECK_NULL_POINTER(unit); + + return !unit->flags1.bits.dead; +} + +bool Units::isKilled(df::unit *unit) +{ + CHECK_NULL_POINTER(unit); + + return unit->flags2.bits.killed; +} + bool Units::isGelded(df::unit* unit) { CHECK_NULL_POINTER(unit);