Allows canister repairs and adds right click tool acts (#58830)

* Allows canister repairs

* Name consistency and some output cleanup
This commit is contained in:
Emmett Gaines
2021-05-02 02:10:54 -07:00
committed by GitHub
parent a8106a64c3
commit b2b15abe6b
4 changed files with 111 additions and 47 deletions
+5 -1
View File
@@ -193,8 +193,12 @@
#define COMSIG_ATOM_CANREACH "atom_can_reach"
#define COMPONENT_ALLOW_REACH (1<<0)
///for any tool behaviors: (mob/living/user, obj/item/I, list/recipes)
#define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_recipe_discovery_[tooltype]"
#define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_act_[tooltype]"
#define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
///for any rightclick tool behaviors: (mob/living/user, obj/item/I)
#define COMSIG_ATOM_SECONDARY_TOOL_ACT(tooltype) "tool_secondary_act_[tooltype]"
// We have the same returns here as COMSIG_ATOM_TOOL_ACT
// #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
///for when an atom has been created through processing (atom/original_atom, list/chosen_processing_option)
#define COMSIG_ATOM_CREATEDBY_PROCESSING "atom_createdby_processing"
///when an atom is processed (mob/living/user, obj/item/I, list/atom/results)
+1 -1
View File
@@ -11,7 +11,7 @@
var/is_right_clicking = LAZYACCESS(params2list(params), RIGHT_CLICK)
if(tool_behaviour && target.tool_act(user, src, tool_behaviour))
if(tool_behaviour && target.tool_act(user, src, tool_behaviour, is_right_clicking))
return TRUE
var/pre_attack_result
+83 -36
View File
@@ -1352,28 +1352,47 @@
*
* Must return parent proc ..() in the end if overridden
*/
/atom/proc/tool_act(mob/living/user, obj/item/I, tool_type)
var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal
var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, I, processing_recipes)
if(processing_recipes.len)
process_recipes(user, I, processing_recipes)
if(QDELETED(I))
return TRUE
switch(tool_type)
if(TOOL_CROWBAR)
. = crowbar_act(user, I)
if(TOOL_MULTITOOL)
. = multitool_act(user, I)
if(TOOL_SCREWDRIVER)
. = screwdriver_act(user, I)
if(TOOL_WRENCH)
. = wrench_act(user, I)
if(TOOL_WIRECUTTER)
. = wirecutter_act(user, I)
if(TOOL_WELDER)
. = welder_act(user, I)
if(TOOL_ANALYZER)
. = analyzer_act(user, I)
/atom/proc/tool_act(mob/living/user, obj/item/I, tool_type, is_right_clicking)
var/signal_result
if(!is_right_clicking) // Left click first for sensibility
var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal
signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, I, processing_recipes)
if(processing_recipes.len)
process_recipes(user, I, processing_recipes)
if(QDELETED(I))
return TRUE
switch(tool_type)
if(TOOL_CROWBAR)
. = crowbar_act(user, I,)
if(TOOL_MULTITOOL)
. = multitool_act(user, I)
if(TOOL_SCREWDRIVER)
. = screwdriver_act(user, I)
if(TOOL_WRENCH)
. = wrench_act(user, I)
if(TOOL_WIRECUTTER)
. = wirecutter_act(user, I)
if(TOOL_WELDER)
. = welder_act(user, I)
if(TOOL_ANALYZER)
. = analyzer_act(user, I)
else
signal_result = SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, I)
switch(tool_type)
if(TOOL_CROWBAR)
. = crowbar_act_secondary(user, I,)
if(TOOL_MULTITOOL)
. = multitool_act_secondary(user, I)
if(TOOL_SCREWDRIVER)
. = screwdriver_act_secondary(user, I)
if(TOOL_WRENCH)
. = wrench_act_secondary(user, I)
if(TOOL_WIRECUTTER)
. = wirecutter_act_secondary(user, I)
if(TOOL_WELDER)
. = welder_act_secondary(user, I)
if(TOOL_ANALYZER)
. = analyzer_act_secondary(user, I)
if(. || signal_result & COMPONENT_BLOCK_TOOL_ATTACK) //Either the proc or the signal handled the tool's events in some way.
return TRUE
@@ -1430,12 +1449,20 @@
//! Tool-specific behavior procs.
///
///Crowbar act
/atom/proc/crowbar_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with crowbar capabilities is used to left click an object
/atom/proc/crowbar_act(mob/living/user, obj/item/tool)
return
///Multitool act
/atom/proc/multitool_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with crowbar capabilities is used to right click an object
/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with multitool capabilities is used to left click an object
/atom/proc/multitool_act(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with multitool capabilities is used to right click an object
/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool)
return
///Check if the multitool has an item in it's data buffer
@@ -1446,24 +1473,44 @@
return FALSE
return TRUE
///Screwdriver act
/atom/proc/screwdriver_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with screwdriver capabilities is used to left click an object
/atom/proc/screwdriver_act(mob/living/user, obj/item/tool)
return
///Wrench act
/atom/proc/wrench_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with screwdriver capabilities is used to right click an object
/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool)
return
///Wirecutter act
/atom/proc/wirecutter_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with wrench capabilities is used to left click an object
/atom/proc/wrench_act(mob/living/user, obj/item/tool)
return
///Welder act
/atom/proc/welder_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with wrench capabilities is used to right click an object
/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool)
return
///Analyzer act
/atom/proc/analyzer_act(mob/living/user, obj/item/I)
/// Called on an object when a tool with wirecutter capabilities is used to left click an object
/atom/proc/wirecutter_act(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with wirecutter capabilities is used to right click an object
/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with welder capabilities is used to left click an object
/atom/proc/welder_act(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with welder capabilities is used to right click an object
/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with analyzer capabilities is used to left click an object
/atom/proc/analyzer_act(mob/living/user, obj/item/tool)
return
/// Called on an object when a tool with analyzer capabilities is used to right click an object
/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool)
return
///Generate a tag for this atom
@@ -323,7 +323,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
greyscale_colors = "#ffffff#a50021#ffffff"
mode = NONE
/obj/machinery/portable_atmospherics/canister/proto/default
name = "prototype canister"
desc = "The best way to fix an atmospheric emergency... or the best way to introduce one."
@@ -334,7 +333,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
can_min_release_pressure = (ONE_ATMOSPHERE / 30)
prototype = TRUE
/obj/machinery/portable_atmospherics/canister/proto/default/oxygen
name = "prototype canister"
desc = "A prototype canister for a prototype bike, what could go wrong?"
@@ -440,23 +438,38 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
new /obj/item/stack/sheet/bluespace_crystal (drop_location(), 1)
qdel(src)
/obj/machinery/portable_atmospherics/canister/welder_act(mob/living/user, obj/item/I)
/obj/machinery/portable_atmospherics/canister/welder_act_secondary(mob/living/user, obj/item/I)
. = ..()
if(user.combat_mode)
return FALSE
if(!I.tool_start_check(user, amount=0))
return TRUE
var/pressure = air_contents.return_pressure()
if(pressure > 300)
to_chat(user, "<span class='alert'>The pressure gauge on \the [src] indicates a high pressure inside... maybe you want to reconsider?</span>")
to_chat(user, "<span class='alert'>The pressure gauge on [src] indicates a high pressure inside... maybe you want to reconsider?</span>")
message_admins("[src] deconstructed by [ADMIN_LOOKUPFLW(user)]")
log_game("[src] deconstructed by [key_name(user)]")
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
to_chat(user, "<span class='notice'>You begin cutting [src] apart...</span>")
if(I.use_tool(src, user, 3 SECONDS, volume=50))
to_chat(user, "<span class='notice'>You cut \the [src] apart.</span>")
to_chat(user, "<span class='notice'>You cut [src] apart.</span>")
deconstruct(TRUE)
return TRUE
/obj/machinery/portable_atmospherics/canister/welder_act(mob/living/user, obj/item/tool)
. = ..()
if(user.combat_mode)
return FALSE
if(obj_integrity >= max_integrity)
return TRUE
if(machine_stat & BROKEN)
return TRUE
if(!tool.tool_start_check(user, amount=0))
return TRUE
to_chat(user, "<span class='notice'>You begin repairing cracks in [src]...</span>")
while(tool.use_tool(src, user, 2.5 SECONDS, volume=40))
obj_integrity = min(obj_integrity + 25, max_integrity)
if(obj_integrity >= max_integrity)
to_chat(user, "<span class='notice'>You've finished repairing [src].</span>")
return TRUE
to_chat(user, "<span class='notice'>You repair some of the cracks in [src]...</span>")
return TRUE
/obj/machinery/portable_atmospherics/canister/obj_break(damage_flag)