diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint.dm b/modular_skyrat/modules/gunpoint/code/gunpoint.dm
index bcd316f894e..85db5326812 100644
--- a/modular_skyrat/modules/gunpoint/code/gunpoint.dm
+++ b/modular_skyrat/modules/gunpoint/code/gunpoint.dm
@@ -30,7 +30,7 @@
return
var/mob/living/L = A
if(gunpointing && L == gunpointing.target) //Cancelling a gunpoint by shift + MMB on the target
- gunpointing.ClickDestroy()
+ gunpointing.click_destroy()
else
if(!CanGunpointAt(L, TRUE))
return
diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm b/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm
index c1dd3d27f3b..7dd0eeb2c77 100644
--- a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm
+++ b/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm
@@ -9,26 +9,14 @@
/datum/gunpoint
var/mob/living/source
var/mob/living/target
- var/datum/radial_menu/gunpoint/gunpoint_gui
- var/allow_move = FALSE
- var/allow_radio = FALSE
- var/allow_use = FALSE
var/obj/item/gun/aimed_gun
- var/safeguard_time = 0
- var/next_autoshot = 0
var/locked = FALSE
var/was_running = FALSE
var/moved_counter = 0
- var/static/radio_forbid = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_radio_forbid")
- var/static/radio_allow = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_radio")
- var/static/use_forbid = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_use_forbid")
- var/static/use_allow = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_use")
- var/static/move_forbid = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_move_forbid")
- var/static/move_allow = image(icon = 'modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi', icon_state = "radial_move")
/datum/gunpoint/New(user, tar, gun)
source = user
@@ -49,45 +37,25 @@
target.gp_effect = new
target.vis_contents += target.gp_effect
- RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/MovedReact)
- RegisterSignal(source, COMSIG_MOVABLE_MOVED, .proc/SourceMoved)
+ RegisterSignal(source, COMSIG_MOVABLE_MOVED, .proc/source_moved)
- RegisterSignal(target, COMSIG_MOB_FIRED_GUN, .proc/UseReact)
+ RegisterSignal(source, COMSIG_LIVING_STATUS_STUN, .proc/source_cc)
+ RegisterSignal(source, COMSIG_LIVING_STATUS_KNOCKDOWN, .proc/source_cc)
+ RegisterSignal(source, COMSIG_LIVING_STATUS_PARALYZE, .proc/source_cc)
+ RegisterSignal(source, COMSIG_LIVING_UPDATED_RESTING, .proc/source_updated_resting)
- RegisterSignal(source, COMSIG_LIVING_STATUS_STUN, .proc/SourceCC)
- RegisterSignal(source, COMSIG_LIVING_STATUS_KNOCKDOWN, .proc/SourceCC)
- RegisterSignal(source, COMSIG_LIVING_STATUS_PARALYZE, .proc/SourceCC)
- RegisterSignal(source, COMSIG_LIVING_UPDATED_RESTING, .proc/SourceUpdatedResting)
-
- RegisterSignal(aimed_gun, COMSIG_ITEM_EQUIPPED,.proc/ClickDestroy)
- RegisterSignal(aimed_gun, COMSIG_ITEM_DROPPED,.proc/ClickDestroy)
-
- RegisterSignal(target, COMSIG_MOVABLE_RADIO_TALK_INTO,.proc/RadioReact)
-
- RegisterSignal(target, COMSIG_MOB_ITEM_ATTACK, .proc/UseReact)
- RegisterSignal(target, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/MeleeAttackReact)
- RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, .proc/UseReact)
- RegisterSignal(target, COMSIG_MOB_ITEM_AFTERATTACK, .proc/UseReact)
+ RegisterSignal(aimed_gun, COMSIG_ITEM_EQUIPPED,.proc/click_destroy)
+ RegisterSignal(aimed_gun, COMSIG_ITEM_DROPPED,.proc/click_destroy)
RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Destroy)
RegisterSignal(source, COMSIG_PARENT_QDELETING, .proc/Destroy)
- addtimer(CALLBACK(src, .proc/LockOn), 7)
+ addtimer(CALLBACK(src, .proc/lock_on), 7)
-/datum/gunpoint/proc/MeleeAttackReact(datum/source_datum, atom/target)
- SIGNAL_HANDLER
- if(!CheckContinuity())
- qdel(src)
- return
- if(!allow_use && CanReact())
- source.log_message("[source] shot [target] because they attacked/disarmed/pulled", LOG_ATTACK)
- to_chat(source, span_warning("You pull the trigger instinctively to [target.name] actions!"))
- INVOKE_ASYNC(src, .proc/ShootTarget)
-
-/datum/gunpoint/proc/LockOn()
+/datum/gunpoint/proc/lock_on()
if(src) //if we're not present then locking on failed and this datum is deleted
- if(!CheckContinuity())
+ if(!check_continuity())
qdel(src)
return
locked = TRUE
@@ -96,15 +64,11 @@
to_chat(source, span_notice("You lock onto [target.name]!"))
target.visible_message(span_warning("[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!"), span_userdanger("[source.name] holds you at gunpoint with the [aimed_gun.name]!"))
if(target.gunpointed.len == 1)//First case
- to_chat(target, span_danger("You'll get shot if you use radio, move or interact with items!"))
- to_chat(target, span_notice("You can however take items out, toss harmless items or drop them."))
- var/list/choice_list = ConstructChoiceList()
- gunpoint_gui = show_radial_menu_gunpoint(source, target , choice_list, select_proc = CALLBACK(src, .proc/GunpointGuiReact, source), radius = 42)
+ to_chat(target, span_danger("You can move, but you see that [source.name] has a gun pointed at you!"))
if(target.gp_effect.icon_state != "locked")
target.gp_effect.icon_state = "locked"
- safeguard_time = world.time + 30
-/datum/gunpoint/proc/CheckContinuity()
+/datum/gunpoint/proc/check_continuity()
if(!target)
return FALSE
if(source.CanGunpointAt(target))
@@ -113,7 +77,7 @@
return FALSE
/datum/gunpoint/proc/CanReact()
- if(locked && (world.time >= safeguard_time) && !(target.stat == DEAD || target.stat == HARD_CRIT || target.stat == SOFT_CRIT) && source.next_move <= world.time && next_autoshot <= world.time)
+ if(locked && !(target.stat == DEAD || target.stat == HARD_CRIT || target.stat == SOFT_CRIT) && source.next_move <= world.time)
return TRUE
return FALSE
@@ -131,138 +95,29 @@
target.gunpointed -= src
source.gunpointing = null
if(locked)
- QDEL_NULL(gunpoint_gui)
target.visible_message(span_notice("[source.name] no longer holds [target.name] at gunpoint."), span_notice("[source.name] no longer holds you at gunpoint."))
source = null
target = null
aimed_gun = null
return ..()
-/datum/gunpoint/proc/ClickDestroy()
+/datum/gunpoint/proc/click_destroy()
SIGNAL_HANDLER
if(locked)
playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targetoff.ogg', 50,1)
qdel(src)
-/datum/gunpoint/proc/SourceCC(datum/source, amount, update, ignore)
+/datum/gunpoint/proc/source_cc(datum/source, amount, update, ignore)
SIGNAL_HANDLER
if(amount && !ignore)
qdel(src)
-/datum/gunpoint/proc/ShootTarget()
- next_autoshot = world.time + 5
- log_combat(target, source, "auto-shot with aim")
- aimed_gun.afterattack(target, source)
-
-/datum/gunpoint/proc/RadioReact(datum/datum_source, obj/item/radio/radio, message, channel, list/spans, datum/language/language, direct)
+/datum/gunpoint/proc/source_moved(datum/datum_source)
SIGNAL_HANDLER
- if(!allow_radio && CanReact())
- if(direct)
- source.log_message("[source] shot [target] because they spoke on radio", LOG_ATTACK)
- to_chat(source, span_warning("You pull the trigger instinctively as [target.name] speaks on the radio!"))
- INVOKE_ASYNC(src, .proc/ShootTarget)
-
-/datum/gunpoint/proc/MovedReact(datum/datum_source, atom/moved, direction, forced)
- SIGNAL_HANDLER
- if(!CheckContinuity())
- qdel(src)
- return
- if(!allow_move && CanReact() && !(target.pulledby && target.pulledby == source)) //Don't shoot him if we're pulling them
- INVOKE_ASYNC(src, .proc/MovedShootProc)
-
-/datum/gunpoint/proc/MovedShootProc() //This exists in case of someone moving several tiles in one tick, such as dashes or diagonal movement
- moved_counter += 1
- var/count = moved_counter
- sleep(1)
- if(src && count == moved_counter)
- source.log_message("[source] shot [target] because they moved", LOG_ATTACK)
- ShootTarget()
-
-/datum/gunpoint/proc/UseReact(datum/datum_source)
- if(!CheckContinuity())
- qdel(src)
- return
- if(!allow_use && CanReact())
- source.log_message("[source] shot [target] because they used an item", LOG_ATTACK)
- to_chat(source, span_warning("You pull the trigger instinctively as [target.name] uses an item!"))
- ShootTarget()
-
-/datum/gunpoint/proc/SourceMoved(datum/datum_source)
- SIGNAL_HANDLER
- if(!CheckContinuity())
+ if(!check_continuity())
qdel(src)
-/datum/gunpoint/proc/SourceUpdatedResting(datum/datum_source, resting)
+/datum/gunpoint/proc/source_updated_resting(datum/datum_source, resting)
SIGNAL_HANDLER
if(resting)
qdel(src)
-
-/datum/gunpoint/proc/ConstructChoiceList()
- var/image/radio_image = (allow_radio ? radio_allow : radio_forbid)
- var/image/use_image = (allow_use ? use_allow : use_forbid)
- var/image/move_image = (allow_move ? move_allow : move_forbid)
- var/list/L = list("radio" = radio_image, "use" = use_image, "move" = move_image)
- return L
-
-/datum/gunpoint/proc/GunpointGuiReact(mob/living/user,choice)
- switch(choice)
- if("radio")
- allow_radio = !allow_radio
- if(allow_radio)
- var/safe = TRUE
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_radio == FALSE)
- safe = FALSE
- break
- if(safe)
- to_chat(target, span_notice("[source.name] signals you can use radio."))
- else
- to_chat(target, span_danger("[source.name] signals you can use radio, however other people still don't"))
- else
- var/forbid_counts = 0
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_radio == FALSE)
- forbid_counts += 1
- if(forbid_counts == 1) //Only first one warns the victim
- to_chat(target, span_danger("[source.name] signals you can't use radio."))
- if("use")
- allow_use = !allow_use
- if(allow_use)
- var/safe = TRUE
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_use == FALSE)
- safe = FALSE
- break
- if(safe)
- to_chat(target, span_notice("[source.name] signals you can interact with items."))
- else
- to_chat(target, span_danger("[source.name] signals you can interact with items, however other people still don't"))
- else
- var/forbid_counts = 0
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_use == FALSE)
- forbid_counts += 1
- if(forbid_counts == 1) //Only first one warns the victim
- to_chat(target, span_danger("[source.name] signals you can't interact with items."))
- if("move")
- allow_move = !allow_move
- if(allow_move)
- var/safe = TRUE
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_move == FALSE)
- safe = FALSE
- break
- if(safe)
- to_chat(target, span_notice("[source.name] signals you can move."))
- else
- to_chat(target, span_danger("[source.name] signals you can move, however other people still don't"))
- else
- var/forbid_counts = 0
- for(var/datum/gunpoint/gp in target.gunpointed)
- if(gp.allow_move == FALSE)
- forbid_counts += 1
- if(forbid_counts == 1) //Only first one warns the victim
- to_chat(target, span_danger("[source.name] signals you can't move."))
- var/list/new_choices = ConstructChoiceList()
- gunpoint_gui.entry_animation = FALSE
- gunpoint_gui.change_choices(new_choices,FALSE)