diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm
index 4b9d061cd8a..157e199b2ad 100644
--- a/code/controllers/subsystem/shuttles/emergency.dm
+++ b/code/controllers/subsystem/shuttles/emergency.dm
@@ -43,7 +43,10 @@
else
return
- SSshuttle.emergencyLastCallLoc = signalOrigin
+ if(prob(70))
+ SSshuttle.emergencyLastCallLoc = signalOrigin
+ else
+ SSshuttle.emergencyLastCallLoc = null
priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
@@ -56,6 +59,8 @@
if(prob(70))
SSshuttle.emergencyLastCallLoc = signalOrigin
+ else
+ SSshuttle.emergencyLastCallLoc = null
priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority")
/*
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 958edb93f01..42fad40c682 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -111,7 +111,7 @@
user << "It is empty."
/obj/item/toy/crayon/spraycan/attack_self(mob/living/user as mob)
- var/choice = input(user,"Spraycan options") in list("Toggle Cap","Change Drawing","Change Color","Cancel")
+ var/choice = input(user,"Spraycan options") as null|anything in list("Toggle Cap","Change Drawing","Change Color")
switch(choice)
if("Toggle Cap")
user << "You [capped ? "Remove" : "Replace"] the cap of the [src]"
diff --git a/code/game/objects/items/devices/recaller.dm b/code/game/objects/items/devices/recaller.dm
index 1fdf9794b96..b5bed586c4c 100644
--- a/code/game/objects/items/devices/recaller.dm
+++ b/code/game/objects/items/devices/recaller.dm
@@ -31,15 +31,16 @@
if(user.mind in (ticker.mode.A_bosses | ticker.mode.B_bosses))
dat += "Give this device to another member of your organization to use.
"
else
- dat += "Register Device
"
+ dat += "Register Device
"
else
var/gang_size = ((gang == "A")? (ticker.mode.A_gang.len + ticker.mode.A_bosses.len) : (ticker.mode.B_gang.len + ticker.mode.B_bosses.len))
var/gang_territory = ((gang == "A")? ticker.mode.A_territory.len : ticker.mode.B_territory.len)
var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B)
- dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Member"]
"
+ dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Lieutenant"]
"
dat += "Organization Size: [gang_size]
"
dat += "Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
"
+ dat += "Summon Gang to Your Location
"
dat += "Recall Emergency Shuttle
"
dat += "
"
dat += "Influence: [points]
"
@@ -99,6 +100,12 @@
add_fingerprint(usr)
+ if(href_list["register"])
+ register_device(usr)
+
+ else if(!gang) //Gangtool must be registered before you can use the functions below
+ return
+
if(href_list["purchase"])
var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B)
var/item_type
@@ -144,12 +151,34 @@
switch(href_list["choice"])
if("recall")
recall(usr)
- if("register")
- register_device(usr)
-
+ if("ping")
+ ping_gang(usr)
attack_self(usr)
+
+/obj/item/device/gangtool/proc/ping_gang(var/mob/user)
+ if(!user)
+ return
+ var/area/location = get_area(user)
+ if(location && location.z != 1)
+ user << "\icon[src]Error: Signal out of range of station."
+ return
+ var/list/members = list()
+ if(gang == "A")
+ members += ticker.mode.A_bosses | ticker.mode.A_gang
+ else if(gang == "B")
+ members += ticker.mode.B_bosses | ticker.mode.B_gang
+ if(members.len)
+ for(var/datum/mind/ganger in members)
+ ganger.current << "[user] summons the gang to [location]!"
+ log_game("[key_name(user)] summoned the [gang_name(gang)] Gang ([gang]) to [location].")
+
+
/obj/item/device/gangtool/proc/register_device(var/mob/user)
+ if(jobban_isbanned(user, "gangster") || jobban_isbanned(user, "Syndicate"))
+ user << "\icon[src] ACCESS DENIED: Blacklisted user."
+ return 0
+
var/promoted
if(user.mind in (ticker.mode.A_gang | ticker.mode.A_bosses))
ticker.mode.A_tools += src
@@ -185,26 +214,39 @@
if(recalling || !can_use(user))
return
- var/turf/userturf = get_turf(user)
- if(userturf.z != 1)
- user << "\icon[src]Error: Device out of range of station communication arrays."
- return
+ recalling = 1
+ loc << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal..."
- if(SSshuttle.emergency.mode == SHUTTLE_CALL)
- recalling = 1
- loc << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal..."
- sleep(rand(10,30))
- loc << "\icon[src]Shuttle recall order generated. Accessing station long-range communication arrays..."
- sleep(rand(10,30))
- loc << "\icon[src]Comm arrays accessed. Broadcasting recall signal..."
- sleep(rand(10,30))
+ sleep(rand(10,30))
+
+ if(SSshuttle.emergency.mode != SHUTTLE_CALL) //Shuttle can only be recalled when it's moving to the station
+ user << "\icon[src]Emergency shuttle cannot be recalled at this time."
recalling = 0
- log_game("[key_name(user)] has recalled the shuttle with a gangtool.")
- message_admins("[key_name_admin(user)] has recalled the shuttle with a gangtool.", 1)
- if(!SSshuttle.cancelEvac(user))
- loc << "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time."
return
- user << "\icon[src]Emergency shuttle cannot be recalled at this time."
+ loc << "\icon[src]Shuttle recall order generated. Accessing station long-range communication arrays..."
+
+ sleep(rand(10,30))
+
+ var/turf/userturf = get_turf(user)
+ if(userturf.z != 1) //Shuttle can only be recalled while on station
+ user << "\icon[src]Error: Device out of range of station communication arrays."
+ recalling = 0
+ return
+ var/datum/station_state/end_state = new /datum/station_state()
+ end_state.count()
+ if((100 * start_state.score(end_state)) < 70) //Shuttle cannot be recalled if the station is too damaged
+ user << "\icon[src]Error: Station communication systems compromised. Unable to establish connection."
+ recalling = 0
+ return
+ loc << "\icon[src]Comm arrays accessed. Broadcasting recall signal..."
+
+ sleep(rand(10,30))
+
+ recalling = 0
+ log_game("[key_name(user)] has tried to recall the shuttle with a gangtool.")
+ message_admins("[key_name_admin(user)] has tried to recall the shuttle with a gangtool.", 1)
+ if(!SSshuttle.cancelEvac(user))
+ loc << "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time."
/obj/item/device/gangtool/proc/can_use(mob/living/carbon/human/user)
if(!istype(user))