From 72877e30126ef31076b961175df4b4c67fbf3a33 Mon Sep 17 00:00:00 2001 From: Cruix Date: Mon, 8 Aug 2016 19:33:54 -0700 Subject: [PATCH] Action Buttons and fixes for minebots (#19718) * Added verbs for sentient minebots. * Changed minebot verbs into action buttons. --- code/modules/mining/minebot.dm | 125 +++++++++++++++++++++++++++++---- icons/mob/actions.dmi | Bin 86422 -> 87004 bytes 2 files changed, 110 insertions(+), 15 deletions(-) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index becc9b8cc76..4b0c8d34a8b 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -1,4 +1,6 @@ /**********************Mining drone**********************/ +#define MINEDRONE_COLLECT 1 +#define MINEDRONE_ATTACK 2 /mob/living/simple_animal/hostile/mining_drone name = "nanotrasen minebot" @@ -37,6 +39,30 @@ /obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron, /obj/item/weapon/ore/bananium, /obj/item/weapon/ore/titanium) healable = 0 + var/mode = MINEDRONE_COLLECT + var/light_on = 0 + + var/datum/action/innate/minedrone/toggle_light/toggle_light_action + var/datum/action/innate/minedrone/toggle_meson_vision/toggle_meson_vision_action + var/datum/action/innate/minedrone/toggle_mode/toggle_mode_action + var/datum/action/innate/minedrone/dump_ore/dump_ore_action + +/mob/living/simple_animal/hostile/mining_drone/New() + ..() + toggle_light_action = new() + toggle_light_action.Grant(src) + toggle_meson_vision_action = new() + toggle_meson_vision_action.Grant(src) + toggle_mode_action = new() + toggle_mode_action.Grant(src) + dump_ore_action = new() + dump_ore_action.Grant(src) + + SetCollectBehavior() + +/mob/living/simple_animal/hostile/mining_drone/sentience_act() + AIStatus = AI_OFF + check_friendly_fire = 0 /mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/weldingtool)) @@ -61,27 +87,23 @@ ..() visible_message("[src] is destroyed!") new /obj/effect/decal/cleanable/robot_debris(src.loc) - DropOre() + DropOre(0) qdel(src) return -/mob/living/simple_animal/hostile/mining_drone/New() - ..() - SetCollectBehavior() - /mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M) if(M.a_intent == "help") - switch(search_objects) - if(0) - SetCollectBehavior() + toggle_mode() + switch(mode) + if(MINEDRONE_COLLECT) M << "[src] has been set to search and store loose ore." - if(2) - SetOffenseBehavior() + if(MINEDRONE_ATTACK) M << "[src] has been set to attack hostile wildlife." return ..() /mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior() + mode = MINEDRONE_COLLECT idle_vision_range = 9 search_objects = 2 wander = 1 @@ -89,8 +111,10 @@ minimum_distance = 1 retreat_distance = null icon_state = "mining_drone" + src << "You are set to collect mode. You can now collect loose ore." /mob/living/simple_animal/hostile/mining_drone/proc/SetOffenseBehavior() + mode = MINEDRONE_ATTACK idle_vision_range = 7 search_objects = 0 wander = 0 @@ -98,9 +122,10 @@ retreat_distance = 1 minimum_distance = 2 icon_state = "mining_drone_offense" + src << "You are set to attack mode. You can now attack from range." /mob/living/simple_animal/hostile/mining_drone/AttackingTarget() - if(istype(target, /obj/item/weapon/ore)) + if(istype(target, /obj/item/weapon/ore) && mode == MINEDRONE_COLLECT) CollectOre() return ..() @@ -115,19 +140,86 @@ O.loc = src return -/mob/living/simple_animal/hostile/mining_drone/proc/DropOre() +/mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1) if(!contents.len) + if(message) + src << "You attempt to dump your stored ore, but you have none." return + if(message) + src << "You dump your stored ore." for(var/obj/item/weapon/ore/O in contents) contents -= O O.loc = src.loc return -/mob/living/simple_animal/hostile/mining_drone/adjustHealth() - if(search_objects) +/mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount) + if(mode != MINEDRONE_ATTACK && amount > 0) SetOffenseBehavior() . = ..() +/mob/living/simple_animal/hostile/mining_drone/proc/toggle_mode() + switch(mode) + if(MINEDRONE_COLLECT) + SetOffenseBehavior() + if(MINEDRONE_ATTACK) + SetCollectBehavior() + else //This should never happen. + mode = MINEDRONE_COLLECT + SetCollectBehavior() + +//Actions for sentient minebots + +/datum/action/innate/minedrone + check_flags = AB_CHECK_CONSCIOUS + background_icon_state = "bg_default" + +/datum/action/innate/minedrone/toggle_light + name = "Toggle Light" + button_icon_state = "mech_lights_off" + +/datum/action/innate/minedrone/toggle_light/Activate() + var/mob/living/simple_animal/hostile/mining_drone/user = owner + + if(user.light_on) + user.AddLuminosity(-6) + else + user.AddLuminosity(6) + user.light_on = !user.light_on + user << "You toggle your light [user.light_on ? "on" : "off"]." + +/datum/action/innate/minedrone/toggle_meson_vision + name = "Toggle Meson Vision" + button_icon_state = "meson" + +/datum/action/innate/minedrone/toggle_meson_vision/Activate() + var/mob/living/simple_animal/hostile/mining_drone/user = owner + + if(user.sight & SEE_TURFS) + user.sight &= ~SEE_TURFS + user.see_invisible = SEE_INVISIBLE_LIVING + else + user.sight |= SEE_TURFS + user.see_invisible = SEE_INVISIBLE_MINIMUM + + user << "You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"]." + +/datum/action/innate/minedrone/toggle_mode + name = "Toggle Mode" + button_icon_state = "mech_cycle_equip_off" + +/datum/action/innate/minedrone/toggle_mode/Activate() + var/mob/living/simple_animal/hostile/mining_drone/user = owner + user.toggle_mode() + +/datum/action/innate/minedrone/dump_ore + name = "Dump Ore" + button_icon_state = "mech_eject" + +/datum/action/innate/minedrone/dump_ore/Activate() + var/mob/living/simple_animal/hostile/mining_drone/user = owner + user.DropOre() + + /**********************Minebot Upgrades**********************/ //Melee @@ -185,4 +277,7 @@ icon_state = "door_electronics" icon = 'icons/obj/module.dmi' sentience_type = SENTIENCE_MINEBOT - origin_tech = "programming=6" \ No newline at end of file + origin_tech = "programming=6" + +#undef MINEDRONE_COLLECT +#undef MINEDRONE_ATTACK \ No newline at end of file diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 99a3b626469b7379b400f8fa27f0802314f61124..1b7d74e43411daf7401d87540d5cedcefe8a9a48 100644 GIT binary patch delta 9293 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 C-OI}W delta 8735 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