Improves mining voucher choices and minebots (#35633)

cl Joan
tweak: The crusher kit now includes an advanced mining scanner.
tweak: The resonator kit now includes webbing and a small extinguisher.
tweak: The minebot kit now includes a minebot passthrough kinetic accelerator module, which will cause kinetic accelerator shots to pass through minebots. The welding goggles have been replaced with a welding helmet, allowing you to wear mesons and still be able to repair the minebot without eye damage.
feature: You can now install kinetic accelerator modkits on minebots. Some exceptions may apply. Crowbar to remove modkits.
balance: Minebots now shoot 33% faster by default(3 seconds to 2). The minebot cooldown upgrade still produces a fire rate of 1 second.
balance: Minebots are now slightly less likely to sit in melee like idiots, and are now healed for 15 instead of 10 when welded.
balance: Sentient minebots are penalized; they cannot have armor and melee upgrades installed, and making them sentient will override those upgrades if they were installed. In addition, they move very slightly slower and have their kinetic accelerator's cooldown increased by 1 second.
/cl

the basic scanner sucks ass and nobody wants to use it, it's actually hilarious
also in those stats: minebot picked a mere 6 more times than the conscription kit, because it's an idiot drone, easy to accidentally hit, and did I mention how much it likes going into melee?

tbh it's quite possible the extra buffs aren't needed, just the passthrough module, but it's better to go a little too far rather than not far enough.
This commit is contained in:
Joan Lung
2018-02-19 22:08:34 -06:00
committed by CitadelStationBot
parent fef23bd7cc
commit 8e592f77a2
5 changed files with 181 additions and 107 deletions
+1 -1
View File
@@ -338,7 +338,7 @@ update_label("John Doe", "Clowny")
/obj/item/card/id/mining /obj/item/card/id/mining
name = "mining ID" name = "mining ID"
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
/obj/item/card/id/away /obj/item/card/id/away
name = "a perfectly generic identification card" name = "a perfectly generic identification card"
+27 -21
View File
@@ -45,11 +45,12 @@
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500), new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_upgrade, 400), new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/device/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_upgrade/health, 400), new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/device/mine_bot_upgrade/health, 400),
new /datum/data/mining_equipment("Drone Ranged Upgrade", /obj/item/device/mine_bot_upgrade/cooldown, 600), new /datum/data/mining_equipment("Minebot Cooldown Upgrade", /obj/item/borg/upgrade/modkit/cooldown/minebot, 600),
new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/slime/sentience/mining, 1000), new /datum/data/mining_equipment("Minebot AI Upgrade", /obj/item/slimepotion/slime/sentience/mining, 1000),
new /datum/data/mining_equipment("KA Minebot Passthrough", /obj/item/borg/upgrade/modkit/minebot_passthrough, 100),
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100), new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150), new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250), new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
@@ -166,31 +167,36 @@
return ..() return ..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer) /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator and Advanced Scanner", "Mining Drone", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit") var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer) if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
return return
var/drop_location = drop_location()
switch(selection) switch(selection)
if("Survival Capsule and Explorer's Webbing") if("Survival Capsule and Explorer's Webbing")
new /obj/item/storage/belt/mining/vendor(src.loc) new /obj/item/storage/belt/mining/vendor(drop_location)
if("Resonator and Advanced Scanner") if("Resonator Kit")
new /obj/item/resonator(src.loc) new /obj/item/storage/belt/mining/alt(drop_location)
new /obj/item/device/t_scanner/adv_mining_scanner(src.loc) new /obj/item/device/t_scanner/adv_mining_scanner(drop_location)
if("Mining Drone") new /obj/item/extinguisher/mini(drop_location)
new /mob/living/simple_animal/hostile/mining_drone(src.loc) new /obj/item/resonator(drop_location)
new /obj/item/weldingtool/hugetank(src.loc) if("Minebot Kit")
new /obj/item/clothing/glasses/welding(src.loc) new /mob/living/simple_animal/hostile/mining_drone(drop_location)
new /obj/item/weldingtool/hugetank(drop_location)
new /obj/item/clothing/head/welding(drop_location)
new /obj/item/borg/upgrade/modkit/minebot_passthrough(drop_location)
if("Extraction and Rescue Kit") if("Extraction and Rescue Kit")
new /obj/item/extraction_pack(loc) new /obj/item/extraction_pack(drop_location)
new /obj/item/fulton_core(loc) new /obj/item/fulton_core(drop_location)
new /obj/item/stack/marker_beacon/thirty(loc) new /obj/item/stack/marker_beacon/thirty(drop_location)
if("Crusher Kit") if("Crusher Kit")
new /obj/item/twohanded/required/kinetic_crusher(loc) new /obj/item/storage/belt/mining/alt(drop_location)
new /obj/item/storage/belt/mining/alt(loc) new /obj/item/device/t_scanner/adv_mining_scanner(drop_location)
new /obj/item/extinguisher/mini(loc) new /obj/item/extinguisher/mini(drop_location)
new /obj/item/twohanded/required/kinetic_crusher(drop_location)
if("Mining Conscription Kit") if("Mining Conscription Kit")
new /obj/item/storage/backpack/duffelbag/mining_conscript(loc) new /obj/item/storage/backpack/duffelbag/mining_conscript(drop_location)
SSblackbox.record_feedback("tally", "mining_voucher_redeemed", 1, selection) SSblackbox.record_feedback("tally", "mining_voucher_redeemed", 1, selection)
qdel(voucher) qdel(voucher)
+102 -73
View File
@@ -4,7 +4,8 @@
/mob/living/simple_animal/hostile/mining_drone /mob/living/simple_animal/hostile/mining_drone
name = "nanotrasen minebot" name = "nanotrasen minebot"
desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife. A mining scanner can instruct it to drop loose ore. Field repairs can be done with a welder." desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife."
gender = NEUTER
icon = 'icons/mob/aibots.dmi' icon = 'icons/mob/aibots.dmi'
icon_state = "mining_drone" icon_state = "mining_drone"
icon_living = "mining_drone" icon_living = "mining_drone"
@@ -14,47 +15,48 @@
a_intent = INTENT_HARM a_intent = INTENT_HARM
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0 minbodytemp = 0
wander = 0
idle_vision_range = 5
move_to_delay = 10 move_to_delay = 10
retreat_distance = 1
minimum_distance = 2
health = 125 health = 125
maxHealth = 125 maxHealth = 125
melee_damage_lower = 15 melee_damage_lower = 15
melee_damage_upper = 15 melee_damage_upper = 15
obj_damage = 0 obj_damage = 10
environment_smash = ENVIRONMENT_SMASH_NONE environment_smash = ENVIRONMENT_SMASH_NONE
check_friendly_fire = 1 check_friendly_fire = TRUE
stop_automated_movement_when_pulled = 1 stop_automated_movement_when_pulled = TRUE
attacktext = "drills" attacktext = "drills"
attack_sound = 'sound/weapons/circsawhit.ogg' attack_sound = 'sound/weapons/circsawhit.ogg'
ranged = 1
sentience_type = SENTIENCE_MINEBOT sentience_type = SENTIENCE_MINEBOT
ranged_message = "shoots"
ranged_cooldown_time = 30
projectiletype = /obj/item/projectile/kinetic
projectilesound = 'sound/weapons/gunshot4.ogg'
speak_emote = list("states") speak_emote = list("states")
wanted_objects = list(/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver, wanted_objects = list(/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver,
/obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron, /obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron,
/obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium) /obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium)
healable = 0 healable = 0
loot = list(/obj/effect/decal/cleanable/robot_debris)
del_on_death = TRUE
var/mode = MINEDRONE_COLLECT var/mode = MINEDRONE_COLLECT
var/light_on = 0 var/light_on = 0
var/datum/action/innate/minedrone/toggle_light/toggle_light_action var/datum/action/innate/minedrone/toggle_light/toggle_light_action
var/datum/action/innate/minedrone/toggle_mode/toggle_mode_action var/datum/action/innate/minedrone/toggle_mode/toggle_mode_action
var/datum/action/innate/minedrone/dump_ore/dump_ore_action var/datum/action/innate/minedrone/dump_ore/dump_ore_action
var/obj/item/gun/energy/kinetic_accelerator/minebot/stored_gun
/mob/living/simple_animal/hostile/mining_drone/Initialize() /mob/living/simple_animal/hostile/mining_drone/Initialize()
. = ..() . = ..()
stored_gun = new(src)
toggle_light_action = new() toggle_light_action = new()
toggle_light_action.Grant(src) toggle_light_action.Grant(src)
toggle_mode_action = new() toggle_mode_action = new()
toggle_mode_action.Grant(src) toggle_mode_action.Grant(src)
dump_ore_action = new() dump_ore_action = new()
dump_ore_action.Grant(src) dump_ore_action.Grant(src)
var/obj/item/implant/radio/mining/imp = new(src)
imp.implant(src)
access_card = new /obj/item/card/id(src)
var/datum/job/mining/M = new
access_card.access = M.get_access()
SetCollectBehavior() SetCollectBehavior()
@@ -62,36 +64,55 @@
..() ..()
check_friendly_fire = 0 check_friendly_fire = 0
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params) /mob/living/simple_animal/hostile/mining_drone/examine(mob/user)
if(istype(I, /obj/item/weldingtool)) ..()
if(stat) var/t_He = p_they(TRUE)
return var/t_him = p_them()
if(AIStatus != AI_OFF && AIStatus != AI_IDLE) var/t_s = p_s()
to_chat(user, "<span class='info'>[src] is moving around too much to repair!</span>") if(health < maxHealth)
return if(health >= maxHealth * 0.5)
to_chat(user, "<span class='warning'>[t_He] look[t_s] slightly dented.</span>")
else
to_chat(user, "<span class='boldwarning'>[t_He] look[t_s] severely dented!</span>")
to_chat(user, "<span class='notice'>Using a mining scanner on [t_him] will instruct [t_him] to drop stored ore. <b>[max(0, LAZYLEN(contents) - 1)] Stored Ore</b>\n\
Field repairs can be done with a welder.")
if(stored_gun && stored_gun.max_mod_capacity)
to_chat(user, "<b>[stored_gun.get_remaining_mod_capacity()]%</b> mod capacity remaining.")
for(var/A in stored_gun.get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
to_chat(user, "<span class='notice'>There is \a [M] installed, using <b>[M.cost]%</b> capacity.</span>")
if(maxHealth == health) /mob/living/simple_animal/hostile/mining_drone/welder_act(mob/living/user, obj/item/I)
to_chat(user, "<span class='info'>[src] is at full integrity.</span>") . = TRUE
return if(mode == MINEDRONE_ATTACK)
to_chat(user, "<span class='info'>[src] can't be repaired while in attack mode!</span>")
if(I.use_tool(src, user, 0, volume=40))
adjustBruteLoss(-10)
to_chat(user, "<span class='info'>You repair some of the armor on [src].</span>")
return return
if(maxHealth == health)
to_chat(user, "<span class='info'>[src] is at full integrity.</span>")
return
if(I.use_tool(src, user, 0, volume=40))
adjustBruteLoss(-15)
to_chat(user, "<span class='info'>You repair some of the armor on [src].</span>")
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner)) if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner))
to_chat(user, "<span class='info'>You instruct [src] to drop any collected ore.</span>") to_chat(user, "<span class='info'>You instruct [src] to drop any collected ore.</span>")
DropOre() DropOre()
return return
if(istype(I, /obj/item/crowbar) || istype(I, /obj/item/borg/upgrade/modkit))
I.melee_attack_chain(user, stored_gun, params)
return
..() ..()
/mob/living/simple_animal/hostile/mining_drone/death() /mob/living/simple_animal/hostile/mining_drone/death()
..()
visible_message("<span class='danger'>[src] is destroyed!</span>")
new /obj/effect/decal/cleanable/robot_debris(loc)
DropOre(0) DropOre(0)
qdel(src) if(stored_gun)
return for(var/obj/item/borg/upgrade/modkit/M in stored_gun.modkits)
M.uninstall(stored_gun)
deathmessage = "blows apart!"
..()
/mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M) /mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M)
if(M.a_intent == INTENT_HELP) if(M.a_intent == INTENT_HELP)
@@ -104,12 +125,24 @@
return return
..() ..()
/mob/living/simple_animal/hostile/mining_drone/CanPass(atom/movable/O)
if(istype(O, /obj/item/projectile/kinetic))
var/obj/item/projectile/kinetic/K = O
if(K.kinetic_gun)
for(var/A in K.kinetic_gun.get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
if(istype(M, /obj/item/borg/upgrade/modkit/minebot_passthrough))
return TRUE
if(istype(O, /obj/item/projectile/destabilizer))
return TRUE
return ..()
/mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior() /mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior()
mode = MINEDRONE_COLLECT mode = MINEDRONE_COLLECT
idle_vision_range = 9 idle_vision_range = 9
search_objects = 2 search_objects = 2
wander = 1 wander = TRUE
ranged = 0 ranged = FALSE
minimum_distance = 1 minimum_distance = 1
retreat_distance = null retreat_distance = null
icon_state = "mining_drone" icon_state = "mining_drone"
@@ -119,19 +152,26 @@
mode = MINEDRONE_ATTACK mode = MINEDRONE_ATTACK
idle_vision_range = 7 idle_vision_range = 7
search_objects = 0 search_objects = 0
wander = 0 wander = FALSE
ranged = 1 ranged = TRUE
retreat_distance = 1 retreat_distance = 2
minimum_distance = 2 minimum_distance = 1
icon_state = "mining_drone_offense" icon_state = "mining_drone_offense"
to_chat(src, "<span class='info'>You are set to attack mode. You can now attack from range.</span>") to_chat(src, "<span class='info'>You are set to attack mode. You can now attack from range.</span>")
/mob/living/simple_animal/hostile/mining_drone/AttackingTarget() /mob/living/simple_animal/hostile/mining_drone/AttackingTarget()
if(istype(target, /obj/item/stack/ore) && mode == MINEDRONE_COLLECT) if(istype(target, /obj/item/stack/ore) && mode == MINEDRONE_COLLECT)
CollectOre() CollectOre()
return return
if(isliving(target))
SetOffenseBehavior()
return ..() return ..()
/mob/living/simple_animal/hostile/mining_drone/OpenFire(atom/A)
if(CheckFriendlyFire(A))
return
stored_gun.afterattack(A, src) //of the possible options to allow minebots to have KA mods, would you believe this is the best?
/mob/living/simple_animal/hostile/mining_drone/proc/CollectOre() /mob/living/simple_animal/hostile/mining_drone/proc/CollectOre()
for(var/obj/item/stack/ore/O in range(1, src)) for(var/obj/item/stack/ore/O in range(1, src))
O.forceMove(src) O.forceMove(src)
@@ -144,9 +184,7 @@
if(message) if(message)
to_chat(src, "<span class='notice'>You dump your stored ore.</span>") to_chat(src, "<span class='notice'>You dump your stored ore.</span>")
for(var/obj/item/stack/ore/O in contents) for(var/obj/item/stack/ore/O in contents)
contents -= O
O.forceMove(drop_location()) O.forceMove(drop_location())
return
/mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount) /mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount)
if(mode != MINEDRONE_ATTACK && amount > 0) if(mode != MINEDRONE_ATTACK && amount > 0)
@@ -155,13 +193,10 @@
/mob/living/simple_animal/hostile/mining_drone/proc/toggle_mode() /mob/living/simple_animal/hostile/mining_drone/proc/toggle_mode()
switch(mode) switch(mode)
if(MINEDRONE_COLLECT)
SetOffenseBehavior()
if(MINEDRONE_ATTACK) if(MINEDRONE_ATTACK)
SetCollectBehavior() SetCollectBehavior()
else //This should never happen. else
mode = MINEDRONE_COLLECT SetOffenseBehavior()
SetCollectBehavior()
//Actions for sentient minebots //Actions for sentient minebots
@@ -220,51 +255,45 @@
if(M.melee_damage_upper != initial(M.melee_damage_upper)) if(M.melee_damage_upper != initial(M.melee_damage_upper))
to_chat(user, "[src] already has a combat upgrade installed!") to_chat(user, "[src] already has a combat upgrade installed!")
return return
M.melee_damage_lower = 22 M.melee_damage_lower += 7
M.melee_damage_upper = 22 M.melee_damage_upper += 7
qdel(src) qdel(src)
//Health //Health
/obj/item/device/mine_bot_upgrade/health /obj/item/device/mine_bot_upgrade/health
name = "minebot chassis upgrade" name = "minebot armor upgrade"
/obj/item/device/mine_bot_upgrade/health/upgrade_bot(mob/living/simple_animal/hostile/mining_drone/M, mob/user) /obj/item/device/mine_bot_upgrade/health/upgrade_bot(mob/living/simple_animal/hostile/mining_drone/M, mob/user)
if(M.maxHealth != initial(M.maxHealth)) if(M.maxHealth != initial(M.maxHealth))
to_chat(user, "[src] already has a reinforced chassis!") to_chat(user, "[src] already has reinforced armor!")
return return
M.maxHealth = 170 M.maxHealth += 45
M.updatehealth()
qdel(src) qdel(src)
//Cooldown
/obj/item/device/mine_bot_upgrade/cooldown
name = "minebot cooldown upgrade"
/obj/item/device/mine_bot_upgrade/cooldown/upgrade_bot(mob/living/simple_animal/hostile/mining_drone/M, mob/user)
name = "minebot cooldown upgrade"
if(M.ranged_cooldown_time != initial(M.ranged_cooldown_time))
to_chat(user, "[src] already has a decreased weapon cooldown!")
return
M.ranged_cooldown_time = 10
qdel(src)
//AI //AI
/obj/item/slimepotion/slime/sentience/mining /obj/item/slimepotion/slime/sentience/mining
name = "minebot AI upgrade" name = "minebot AI upgrade"
desc = "Can be used to grant sentience to minebots." desc = "Can be used to grant sentience to minebots. Is incompatable with minebot armor and melee upgrades, and will override them."
icon_state = "door_electronics" icon_state = "door_electronics"
icon = 'icons/obj/module.dmi' icon = 'icons/obj/module.dmi'
sentience_type = SENTIENCE_MINEBOT sentience_type = SENTIENCE_MINEBOT
var/base_health_add = 5 //sentient minebots are penalized for beign sentient; they have their stats reset to normal plus these values
var/base_damage_add = 1 //this thus disables other minebot upgrades
var/base_speed_add = 1
var/base_cooldown_add = 10 //base cooldown isn't reset to normal, it's just added on, since it's not practical to disable the cooldown module
/obj/item/slimepotion/slime/sentience/mining/after_success(mob/living/user, mob/living/simple_animal/SM) /obj/item/slimepotion/slime/sentience/mining/after_success(mob/living/user, mob/living/simple_animal/SM)
var/obj/item/implant/radio/mining/imp = new(src) if(istype(SM, /mob/living/simple_animal/hostile/mining_drone))
imp.implant(SM, user) var/mob/living/simple_animal/hostile/mining_drone/M = SM
M.maxHealth = initial(M.maxHealth) + base_health_add
SM.access_card = new /obj/item/card/id/mining(SM) M.melee_damage_lower = initial(M.melee_damage_lower) + base_damage_add
SM.access_card.flags_1 |= NODROP_1 M.melee_damage_upper = initial(M.melee_damage_upper) + base_damage_add
M.move_to_delay = initial(M.move_to_delay) + base_speed_add
if(M.stored_gun)
M.stored_gun.overheat_time += base_cooldown_add
#undef MINEDRONE_COLLECT #undef MINEDRONE_COLLECT
#undef MINEDRONE_ATTACK #undef MINEDRONE_ATTACK
@@ -324,14 +324,18 @@
else else
M.Goto(src,M.move_to_delay,M.minimum_distance) M.Goto(src,M.move_to_delay,M.minimum_distance)
/mob/living/simple_animal/hostile/proc/OpenFire(atom/A) /mob/living/simple_animal/hostile/proc/CheckFriendlyFire(atom/A)
if(check_friendly_fire) if(check_friendly_fire)
for(var/turf/T in getline(src,A)) // Not 100% reliable but this is faster than simulating actual trajectory for(var/turf/T in getline(src,A)) // Not 100% reliable but this is faster than simulating actual trajectory
for(var/mob/living/L in T) for(var/mob/living/L in T)
if(L == src || L == A) if(L == src || L == A)
continue continue
if(faction_check_mob(L) && !attack_same) if(faction_check_mob(L) && !attack_same)
return return TRUE
/mob/living/simple_animal/hostile/proc/OpenFire(atom/A)
if(CheckFriendlyFire(A))
return
visible_message("<span class='danger'><b>[src]</b> [ranged_message] at [A]!</span>") visible_message("<span class='danger'><b>[src]</b> [ranged_message] at [A]!</span>")
if(rapid) if(rapid)
@@ -33,16 +33,18 @@
var/obj/item/borg/upgrade/modkit/M = A var/obj/item/borg/upgrade/modkit/M = A
to_chat(user, "<span class='notice'>There is \a [M] installed, using <b>[M.cost]%</b> capacity.</span>") to_chat(user, "<span class='notice'>There is \a [M] installed, using <b>[M.cost]%</b> capacity.</span>")
/obj/item/gun/energy/kinetic_accelerator/crowbar_act(mob/living/user, obj/item/I)
. = TRUE
if(modkits.len)
to_chat(user, "<span class='notice'>You pry the modifications out.</span>")
I.play_tool_sound(src, 100)
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
else
to_chat(user, "<span class='notice'>There are no modifications currently installed.</span>")
/obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user) /obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/crowbar)) if(istype(I, /obj/item/borg/upgrade/modkit))
if(modkits.len)
to_chat(user, "<span class='notice'>You pry the modifications out.</span>")
I.play_tool_sound(src, 100)
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
else
to_chat(user, "<span class='notice'>There are no modifications currently installed.</span>")
else if(istype(I, /obj/item/borg/upgrade/modkit))
var/obj/item/borg/upgrade/modkit/MK = I var/obj/item/borg/upgrade/modkit/MK = I
MK.install(src, user) MK.install(src, user)
else else
@@ -71,6 +73,12 @@
unique_frequency = TRUE unique_frequency = TRUE
max_mod_capacity = 80 max_mod_capacity = 80
/obj/item/gun/energy/kinetic_accelerator/minebot
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
overheat_time = 20
holds_charge = TRUE
unique_frequency = TRUE
/obj/item/gun/energy/kinetic_accelerator/Initialize() /obj/item/gun/energy/kinetic_accelerator/Initialize()
. = ..() . = ..()
if(!holds_charge) if(!holds_charge)
@@ -222,6 +230,8 @@
var/maximum_of_type = 1 var/maximum_of_type = 1
var/cost = 30 var/cost = 30
var/modifier = 1 //For use in any mod kit that has numerical modifiers var/modifier = 1 //For use in any mod kit that has numerical modifiers
var/minebot_upgrade = TRUE
var/minebot_exclusive = FALSE
/obj/item/borg/upgrade/modkit/examine(mob/user) /obj/item/borg/upgrade/modkit/examine(mob/user)
..() ..()
@@ -242,6 +252,13 @@
/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) /obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
. = TRUE . = TRUE
if(minebot_upgrade)
if(minebot_exclusive && !istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
to_chat(user, "<span class='notice'>The modkit you're trying to install is only rated for minebot use.</span>")
return FALSE
else if(istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
to_chat(user, "<span class='notice'>The modkit you're trying to install is not rated for minebot use.</span>")
return FALSE
if(denied_type) if(denied_type)
var/number_of_denied = 0 var/number_of_denied = 0
for(var/A in KA.get_modkits()) for(var/A in KA.get_modkits())
@@ -301,8 +318,9 @@
//Cooldown //Cooldown
/obj/item/borg/upgrade/modkit/cooldown /obj/item/borg/upgrade/modkit/cooldown
name = "cooldown decrease" name = "cooldown decrease"
desc = "Decreases the cooldown of a kinetic accelerator." desc = "Decreases the cooldown of a kinetic accelerator. Not rated for minebot use."
modifier = 2.5 modifier = 2.5
minebot_upgrade = FALSE
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) /obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..() . = ..()
@@ -313,6 +331,17 @@
KA.overheat_time += modifier KA.overheat_time += modifier
..() ..()
/obj/item/borg/upgrade/modkit/cooldown/minebot
name = "minebot cooldown decrease"
desc = "Decreases the cooldown of a kinetic accelerator. Only rated for minebot use."
icon_state = "door_electronics"
icon = 'icons/obj/module.dmi'
denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot
modifier = 10
cost = 0
minebot_upgrade = TRUE
minebot_exclusive = TRUE
//AoE blasts //AoE blasts
/obj/item/borg/upgrade/modkit/aoe /obj/item/borg/upgrade/modkit/aoe
@@ -373,6 +402,12 @@
desc = "Causes the kinetic accelerator to damage mobs in an AoE." desc = "Causes the kinetic accelerator to damage mobs in an AoE."
modifier = 0.2 modifier = 0.2
//Minebot passthrough
/obj/item/borg/upgrade/modkit/minebot_passthrough
name = "minebot passthrough"
desc = "Causes kinetic accelerator shots to pass through minebots."
cost = 0
//Tendril-unique modules //Tendril-unique modules
/obj/item/borg/upgrade/modkit/cooldown/repeater /obj/item/borg/upgrade/modkit/cooldown/repeater
name = "rapid repeater" name = "rapid repeater"