diff --git a/code/__DEFINES/move_force.dm b/code/__DEFINES/move_force.dm index d291e95579d..64d1a8f1f1b 100644 --- a/code/__DEFINES/move_force.dm +++ b/code/__DEFINES/move_force.dm @@ -18,3 +18,4 @@ #define MOVE_FORCE_WEAK (MOVE_FORCE_DEFAULT / 2) #define MOVE_FORCE_VERY_WEAK ((MOVE_FORCE_DEFAULT / MOVE_FORCE_CRUSH_RATIO) + 1) #define MOVE_FORCE_EXTREMELY_WEAK (MOVE_FORCE_DEFAULT / (MOVE_FORCE_CRUSH_RATIO * 3)) +#define MOVE_FORCE_NONE 0 diff --git a/code/_onclick/click_ctrl.dm b/code/_onclick/click_ctrl.dm index 19c86970aee..e80f8fa05cb 100644 --- a/code/_onclick/click_ctrl.dm +++ b/code/_onclick/click_ctrl.dm @@ -41,7 +41,7 @@ if(grab(target) != GRAB_SKIP) changeNext_move(CLICK_CD_MELEE) return - start_pulling(target) + pulled(target) /** * Ctrl mouse wheel click diff --git a/code/datums/elements/move_force_on_death.dm b/code/datums/elements/move_force_on_death.dm index af2560d000c..481f9358133 100644 --- a/code/datums/elements/move_force_on_death.dm +++ b/code/datums/elements/move_force_on_death.dm @@ -39,11 +39,11 @@ if(!isnull(move_resist)) source.move_resist = move_resist if(!isnull(pull_force)) - source.pull_force = pull_force + source.set_pull_force(pull_force) /datum/element/change_force_on_death/proc/on_revive(mob/living/source) SIGNAL_HANDLER source.move_force = initial(source.move_force) source.move_resist = initial(source.move_resist) - source.pull_force = initial(source.pull_force) + source.set_pull_force(initial(source.pull_force)) diff --git a/code/modules/mob/living/basic/blob_minions/blob_mob.dm b/code/modules/mob/living/basic/blob_minions/blob_mob.dm index ef7184d09ac..b13e9f69345 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_mob.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_mob.dm @@ -21,7 +21,7 @@ initial_language_holder = /datum/language_holder/empty can_buckle_to = FALSE damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) - pull_force = 0 + pull_force = MOVE_FORCE_NONE /// Size of cloud produced from a dying spore var/death_cloud_size = BLOBMOB_CLOUD_NONE var/loot = /obj/item/food/spore_sack diff --git a/code/modules/mob/living/basic/pets/orbie/orbie.dm b/code/modules/mob/living/basic/pets/orbie/orbie.dm index fbbdfd89d22..a75f1f5b0a2 100644 --- a/code/modules/mob/living/basic/pets/orbie/orbie.dm +++ b/code/modules/mob/living/basic/pets/orbie/orbie.dm @@ -21,7 +21,7 @@ pass_flags = PASSMOB move_force = 0 move_resist = 0 - pull_force = 0 + pull_force = MOVE_FORCE_NONE minimum_survivable_temperature = TCMB maximum_survivable_temperature = INFINITY death_message = "fades out of existence!" diff --git a/code/modules/mob/living/basic/space_fauna/lightgeist.dm b/code/modules/mob/living/basic/space_fauna/lightgeist.dm index 50d59efbf2a..b86d50e2efb 100644 --- a/code/modules/mob/living/basic/space_fauna/lightgeist.dm +++ b/code/modules/mob/living/basic/space_fauna/lightgeist.dm @@ -41,7 +41,7 @@ minimum_survivable_temperature = 0 maximum_survivable_temperature = 1500 obj_damage = 0 - pull_force = 0 + pull_force = MOVE_FORCE_NONE environment_smash = ENVIRONMENT_SMASH_NONE ai_controller = /datum/ai_controller/basic_controller/lightgeist diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 34579f82174..39525bd46ab 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -186,11 +186,13 @@ mobility_flags &= ~(MOBILITY_PULL) if(pulling) stop_pulling() + pull_force_change() /// Called when [TRAIT_PULL_BLOCKED] is removed from the mob. /mob/living/proc/on_pull_blocked_trait_loss(datum/source) SIGNAL_HANDLER mobility_flags |= MOBILITY_PULL + pull_force_change() /// Called when [TRAIT_INCAPACITATED] is added to the mob. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 17c77733e22..f7d0ebfc15f 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2093,10 +2093,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) update_transform(var_value/current_size) . = TRUE if(NAMEOF(src, pull_force)) - if(var_value == 0) //no more pulling - remove_verb(src, /mob/living/verb/pulled) - else - add_verb(src, /mob/living/verb/pulled) + set_pull_force(var_value) . = TRUE @@ -3041,3 +3038,15 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(HAS_TRAIT(src, TRAIT_ANALGESIA) && !force) return INVOKE_ASYNC(src, PROC_REF(emote), "scream") + +/mob/living/proc/set_pull_force(new_pull_force) + if(pull_force == new_pull_force) + return + pull_force = new_pull_force + pull_force_change() + +/mob/living/proc/pull_force_change() + if(!pull_force || HAS_TRAIT(src, TRAIT_PULL_BLOCKED)) + remove_verb(src, /mob/living/verb/pulled) + else + add_verb(src, /mob/living/verb/pulled) diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 2573d75f5e8..37c9e943deb 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -25,7 +25,7 @@ move_resist = 0 name = "pAI" pass_flags = PASSTABLE | PASSMOB - pull_force = 0 + pull_force = MOVE_FORCE_NONE radio = /obj/item/radio/headset/silicon/pai worn_slot_flags = ITEM_SLOT_HEAD