Merge branch 'master' into placeholder
@@ -2,6 +2,7 @@
|
||||
#define ACCESSORY_SLOT_UTILITY "utility"
|
||||
#define ACCESSORY_SLOT_CAPE "cape"
|
||||
#define ACCESSORY_SLOT_ARMBAND "armband"
|
||||
#define ACCESSORY_SLOT_BADGE "badge"
|
||||
#define ACCESSORY_SLOT_ARMOR_PLATE "armor plate"
|
||||
#define ACCESSORY_SLOT_LEG_GUARDS "leg guards"
|
||||
#define ACCESSORY_SLOT_ARM_GUARDS "arm guards"
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
/obj/item/clothing/head/plaguedoctorhat = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/head/helmet/unathi = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/head/helmet/tank = TRADER_ALL,
|
||||
/obj/item/clothing/head/helmet/tajara = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/head/helmet/amohda = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/glasses/monocle = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/mask/smokable/pipe = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/mask/gas/plaguedoctor = TRADER_THIS_TYPE,
|
||||
@@ -149,7 +149,7 @@
|
||||
/obj/item/clothing/suit/wizrobe/magusred = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/suit/wizrobe/magusblue = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/suit/armor/unathi = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/suit/armor/tajara = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/suit/armor/amohda = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/under/gladiator = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/under/kilt = TRADER_THIS_TYPE,
|
||||
/obj/item/material/harpoon = TRADER_THIS_TYPE,
|
||||
|
||||
@@ -94,9 +94,9 @@
|
||||
qdel(src)
|
||||
else if(istype(P, /obj/item/gun/energy/plasmacutter))
|
||||
var/obj/item/gun/energy/plasmacutter/PC = P
|
||||
if(!PC.power_supply)
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!"))
|
||||
if(PC.check_power_and_message(user))
|
||||
return
|
||||
PC.use_resource(1)
|
||||
playsound(get_turf(src), PC.fire_sound, 75, TRUE)
|
||||
to_chat(user, SPAN_NOTICE("You dismantle the blueprint."))
|
||||
new /obj/item/stack/material/steel(get_turf(src), 2)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/machinery/mecha_part_fabricator
|
||||
name = "mechatronic fabricator"
|
||||
desc = "A general purpose fabricator that can be used to fabricate robotic equipment."
|
||||
icon = 'icons/obj/robotics.dmi'
|
||||
icon_state = "fab-idle"
|
||||
name = "Mechatronic Fabricator"
|
||||
desc = "A general purpose fabricator that can be used to fabricate robotic equipment."
|
||||
density = 1
|
||||
anchored = 1
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
use_power = 1
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 5000
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/attackby(var/obj/item/I, var/mob/user)
|
||||
if(busy)
|
||||
to_chat(user, "<span class='notice'>\The [src] is busy. Please wait for completion of previous operation.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation."))
|
||||
return 1
|
||||
if(default_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
@@ -159,44 +159,32 @@
|
||||
if(default_part_replacement(user, I))
|
||||
return
|
||||
|
||||
var/material
|
||||
switch(I.type)
|
||||
if(/obj/item/stack/material/gold)
|
||||
material = MATERIAL_GOLD
|
||||
if(/obj/item/stack/material/silver)
|
||||
material = MATERIAL_SILVER
|
||||
if(/obj/item/stack/material/diamond)
|
||||
material = MATERIAL_DIAMOND
|
||||
if(/obj/item/stack/material/phoron)
|
||||
material = MATERIAL_PHORON
|
||||
if(/obj/item/stack/material/steel)
|
||||
material = DEFAULT_WALL_MATERIAL
|
||||
if(/obj/item/stack/material/glass)
|
||||
material = MATERIAL_GLASS
|
||||
if(/obj/item/stack/material/uranium)
|
||||
material = MATERIAL_URANIUM
|
||||
else
|
||||
return ..()
|
||||
if(!istype(I, /obj/item/stack/material))
|
||||
return ..()
|
||||
|
||||
var/obj/item/stack/material/stack = I
|
||||
var/sname = "[stack.name]"
|
||||
var/amnt = stack.perunit
|
||||
var/obj/item/stack/material/M = I
|
||||
if(!M.material)
|
||||
return ..()
|
||||
if(!(M.material.name in list(MATERIAL_STEEL, MATERIAL_GLASS, MATERIAL_GOLD, MATERIAL_SILVER, MATERIAL_DIAMOND, MATERIAL_PHORON, MATERIAL_URANIUM)))
|
||||
to_chat(user, SPAN_WARNING("\The [src] cannot hold [M.material.name]."))
|
||||
return
|
||||
|
||||
if(materials[material] + amnt <= res_max_amount)
|
||||
if(stack && stack.amount >= 1)
|
||||
var/sname = "[M.name]"
|
||||
if(materials[M.material.name] + M.perunit <= res_max_amount)
|
||||
if(M.amount >= 1)
|
||||
var/count = 0
|
||||
|
||||
add_overlay("fab-load-[material]")
|
||||
CUT_OVERLAY_IN("fab-load-[material]", 6)
|
||||
add_overlay("fab-load-[M.material.name]")
|
||||
CUT_OVERLAY_IN("fab-load-[M.material.name]", 6)
|
||||
|
||||
while(materials[material] + amnt <= res_max_amount && stack.amount >= 1)
|
||||
materials[material] += amnt
|
||||
stack.use(1)
|
||||
while(materials[M.material.name] + M.perunit <= res_max_amount && M.amount >= 1)
|
||||
materials[M.material.name] += M.perunit
|
||||
M.use(1)
|
||||
count++
|
||||
to_chat(user, "You insert [count] [sname] into the fabricator.")
|
||||
to_chat(user, SPAN_NOTICE("You insert [count] [sname] into \the [src]."))
|
||||
update_busy()
|
||||
else
|
||||
to_chat(user, "The fabricator cannot hold more [sname].")
|
||||
to_chat(user, SPAN_NOTICE("\The [src] cannot hold more [sname]."))
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/MouseDrop_T(mob/living/carbon/human/target as mob, mob/user as mob)
|
||||
if (!istype(target) || target.buckled_to || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
|
||||
@@ -218,7 +206,7 @@
|
||||
if(hair_style.length < 4)
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] starts feeding [target]'s hair into \the [src]!</span>", "<span class='warning'>You start feeding [target]'s hair into \the [src]!</span>")
|
||||
user.visible_message(SPAN_WARNING("[user] starts feeding [target]'s hair into \the [src]!"), SPAN_WARNING("You start feeding [target]'s hair into \the [src]!"))
|
||||
if(!do_after(usr, 50))
|
||||
return
|
||||
if(target_loc != target.loc)
|
||||
@@ -353,19 +341,19 @@
|
||||
material = lowertext(material)
|
||||
var/mattype
|
||||
switch(material)
|
||||
if(DEFAULT_WALL_MATERIAL)
|
||||
if(MATERIAL_STEEL)
|
||||
mattype = /obj/item/stack/material/steel
|
||||
if("glass")
|
||||
if(MATERIAL_GLASS)
|
||||
mattype = /obj/item/stack/material/glass
|
||||
if("gold")
|
||||
if(MATERIAL_GOLD)
|
||||
mattype = /obj/item/stack/material/gold
|
||||
if("silver")
|
||||
if(MATERIAL_SILVER)
|
||||
mattype = /obj/item/stack/material/silver
|
||||
if("diamond")
|
||||
if(MATERIAL_DIAMOND)
|
||||
mattype = /obj/item/stack/material/diamond
|
||||
if("phoron")
|
||||
if(MATERIAL_PHORON)
|
||||
mattype = /obj/item/stack/material/phoron
|
||||
if("uranium")
|
||||
if(MATERIAL_URANIUM)
|
||||
mattype = /obj/item/stack/material/uranium
|
||||
else
|
||||
return
|
||||
|
||||
@@ -875,3 +875,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
. += "Dismemberment: [edge ? "likely to dismember" : "unlikely to dismember"]<br>"
|
||||
. += "Penetration: [armor_penetration]<br>"
|
||||
. += "Throw Force: [throwforce]<br>"
|
||||
|
||||
/obj/item/proc/use_resource(var/mob/user, var/use_amount)
|
||||
return
|
||||
@@ -81,7 +81,7 @@
|
||||
if(W.isscrewdriver()) // Turning it into a crossbow
|
||||
crafting = !crafting
|
||||
if(!crafting)
|
||||
to_chat(user, SPAN_NOTICE("You reassemble the RFD"))
|
||||
to_chat(user, SPAN_NOTICE("You reassemble the RFD."))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("The RFD can now be modified."))
|
||||
src.add_fingerprint(user)
|
||||
@@ -110,9 +110,9 @@
|
||||
var/obj/item/gun/launcher/crossbow/RFD/CB = new(get_turf(user)) // can be found in crossbow.dm
|
||||
forceMove(CB)
|
||||
CB.stored_matter = src.stored_matter
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
user.put_in_hands(CB)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -465,6 +465,10 @@
|
||||
to_chat(M, SPAN_NOTICE("You need more welding fuel to complete this task."))
|
||||
return 0
|
||||
|
||||
/obj/item/weldingtool/use_resource(mob/user, var/use_amount)
|
||||
if(get_fuel() >= use_amount)
|
||||
reagents.remove_reagent(/decl/reagent/fuel, use_amount)
|
||||
|
||||
//Returns whether or not the welding tool is currently on.
|
||||
/obj/item/weldingtool/proc/isOn()
|
||||
return src.welding
|
||||
|
||||
@@ -87,10 +87,14 @@
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/gun/energy/plasmacutter))
|
||||
to_chat(user, "<span class='notice'>Now slicing apart the girder...</span>")
|
||||
if(do_after(user,30/W.toolspeed))
|
||||
if(!src) return
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder!</span>")
|
||||
var/obj/item/gun/energy/plasmacutter/PC = W
|
||||
to_chat(user, SPAN_NOTICE("You start lining up \the [PC] to the joints of \the [src]..."))
|
||||
if(do_after(user, 2 SECONDS))
|
||||
if(!src)
|
||||
return
|
||||
playsound(loc, PC.fire_sound, 100, 1)
|
||||
to_chat(user, SPAN_NOTICE("You blast apart the girder!"))
|
||||
W.use_resource(user, 1)
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/melee/energy))
|
||||
|
||||
@@ -102,10 +102,10 @@
|
||||
qdel(src)
|
||||
else if(istype(W, /obj/item/gun/energy/plasmacutter))
|
||||
var/obj/item/gun/energy/plasmacutter/PC = W
|
||||
if(!PC.power_supply)
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!"))
|
||||
if(PC.check_power_and_message(user))
|
||||
return
|
||||
playsound(get_turf(src), PC.fire_sound, 100, TRUE)
|
||||
PC.use_resource(user, 1)
|
||||
playsound(loc, PC.fire_sound, 100, TRUE)
|
||||
new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2)
|
||||
qdel(src)
|
||||
else if((W.isscrewdriver()) && (istype(loc, /turf/simulated) || anchored))
|
||||
|
||||
@@ -204,10 +204,9 @@
|
||||
cut_delay *= 0.7
|
||||
else if(istype(W, /obj/item/gun/energy/plasmacutter))
|
||||
var/obj/item/gun/energy/plasmacutter/PC = W
|
||||
if(!PC.power_supply)
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!"))
|
||||
if(PC.check_power_and_message(user))
|
||||
return
|
||||
dismantle_sound = "zapping and melting"
|
||||
dismantle_sound = PC.fire_sound
|
||||
dismantle_verb = "slicing"
|
||||
cut_delay *= 0.8
|
||||
else if(istype(W,/obj/item/melee/energy))
|
||||
@@ -243,10 +242,7 @@
|
||||
cut_delay *= 1.5
|
||||
|
||||
if(dismantle_verb)
|
||||
|
||||
to_chat(user, SPAN_NOTICE("You begin [dismantle_verb] through the outer plating."))
|
||||
if(dismantle_sound)
|
||||
playsound(src, dismantle_sound, 100, 1)
|
||||
|
||||
if(cut_delay<0)
|
||||
cut_delay = 1
|
||||
@@ -254,14 +250,15 @@
|
||||
if(!do_after(user,cut_delay/W.toolspeed))
|
||||
return
|
||||
|
||||
|
||||
//This prevents runtime errors if someone clicks the same wall more than once
|
||||
if (!istype(src, /turf/simulated/wall))
|
||||
return
|
||||
|
||||
to_chat(user, SPAN_NOTICE("You remove the outer plating."))
|
||||
if(dismantle_sound)
|
||||
playsound(src, dismantle_sound, 100, 1)
|
||||
W.use_resource(user, 1)
|
||||
dismantle_wall()
|
||||
user.visible_message(SPAN_WARNING("The wall was torn open by [user]!"))
|
||||
user.visible_message(SPAN_WARNING("The wall was torn open by \the [user]!"), SPAN_NOTICE("You remove the outer plating."))
|
||||
return
|
||||
|
||||
//Reinforced dismantling.
|
||||
|
||||
@@ -83,8 +83,8 @@
|
||||
icon_state = "nka_consularhat"
|
||||
item_state = "nka_consularhat"
|
||||
|
||||
/obj/item/clothing/head/helmet/tajara
|
||||
name = "amohdan swordsmen helmet"
|
||||
/obj/item/clothing/head/helmet/amohda
|
||||
name = "amohdan swordsman helmet"
|
||||
desc = "A helmet used by the traditional warriors of Amohda."
|
||||
icon = 'icons/obj/tajara_items.dmi'
|
||||
icon_state = "amohdan_helmet"
|
||||
@@ -97,13 +97,15 @@
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_MINOR
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_MINOR
|
||||
)
|
||||
allow_hair_covering = FALSE
|
||||
desc_fluff = "The Feudal Era of Amohda is famous for the steel swords which became common. Many renowned swordsmen and famous warriors would travel the land fighting duels of \
|
||||
single combat in their quests to become the greatest swordsman. Modern Amohda is a mix between loyalists to the NKA and to the DPRA, with almost universal praise for a return to \
|
||||
traditional culture, yet often violent disagreement about the course of the island's political future. A sizable third party of monarchists which advocate the reestablishment of the \
|
||||
Imperial Amohdan dynasty also exists, fragmenting the monarchist factions on the island and further complicating political violence in the area."
|
||||
single combat in their quests to become the greatest swordsman. Modern Amohda is under the control of the DPRA's Adhomai Liberation Army, further solidified after the defeat \
|
||||
of a Nationalist revolt vying for a truly independent Amohda. The region is still beset by trouble within and without as a deeply divided Amohdan people continue to struggle in the \
|
||||
bloody conflict to stamp out Nationalistic and to a lesser extent, divided Monarchistic sentiments while their rivals from the New Kingdom of Adhomai watch from the seas they rule \
|
||||
and the People's Republic of Adhomai looms over the southern end of the island..."
|
||||
siemens_coefficient = 0.35
|
||||
|
||||
/obj/item/clothing/head/helmet/kettle
|
||||
@@ -117,5 +119,6 @@
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_MINOR
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_MINOR
|
||||
)
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
var/list/extra_mobs = list()
|
||||
if(holder.wearer != user)
|
||||
extra_mobs += holder.wearer
|
||||
gun.attack_self(user, extra_mobs)
|
||||
gun.toggle_firing_mode(user)
|
||||
return TRUE
|
||||
|
||||
gun.Fire(target, user)
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
item_state = "plate_carrier"
|
||||
blood_overlay_type = "armor"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE)
|
||||
valid_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE)
|
||||
restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE, ACCESSORY_SLOT_BADGE)
|
||||
valid_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE, ACCESSORY_SLOT_BADGE)
|
||||
|
||||
/obj/item/clothing/suit/armor/carrier/officer
|
||||
starting_accessories = list(
|
||||
|
||||
@@ -137,8 +137,8 @@
|
||||
contained_sprite = TRUE
|
||||
species_restricted = list(BODYTYPE_TAJARA)
|
||||
|
||||
/obj/item/clothing/suit/armor/tajara
|
||||
name = "amohdan swordsmen armor"
|
||||
/obj/item/clothing/suit/armor/amohda
|
||||
name = "amohdan swordsman armor"
|
||||
desc = "A suit of armor used by the traditional warriors of Amohda."
|
||||
icon = 'icons/obj/tajara_items.dmi'
|
||||
icon_state = "amohdan_armor"
|
||||
@@ -152,13 +152,15 @@
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_MINOR
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_MINOR
|
||||
)
|
||||
siemens_coefficient = 0.35
|
||||
desc_fluff = "The Feudal Era of Amohda is famous for the steel swords which became common. Many renowned swordsmen and famous warriors would travel the land fighting duels of \
|
||||
single combat in their quests to become the greatest swordsman. Modern Amohda is a mix between loyalists to the NKA and to the DPRA, with almost universal praise for a return to \
|
||||
traditional culture, yet often violent disagreement about the course of the island's political future. A sizable third party of monarchists which advocate the reestablishment of the \
|
||||
Imperial Amohdan dynasty also exists, fragmenting the monarchist factions on the island and further complicating political violence in the area."
|
||||
single combat in their quests to become the greatest swordsman. Modern Amohda is under the control of the DPRA's Adhomai Liberation Army, further solidified after the defeat \
|
||||
of a Nationalist revolt vying for a truly independent Amohda. The region is still beset by trouble within and without as a deeply divided Amohdan people continue to struggle in the \
|
||||
bloody conflict to stamp out Nationalistic and to a lesser extent, divided Monarchistic sentiments while their rivals from the New Kingdom of Adhomai watch from the seas they rule \
|
||||
and the People's Republic of Adhomai looms over the southern end of the island..."
|
||||
|
||||
/obj/item/clothing/suit/armor/cuirass
|
||||
name = "cuirass"
|
||||
@@ -171,7 +173,8 @@
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_MINOR
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_MINOR
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/storage/tajaran/pra_jacket
|
||||
@@ -184,6 +187,7 @@
|
||||
melee = ARMOR_MELEE_KNIVES,
|
||||
bullet = ARMOR_BALLISTIC_MINOR,
|
||||
laser = ARMOR_LASER_MINOR,
|
||||
energy = ARMOR_ENERGY_MINOR
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_MINOR
|
||||
)
|
||||
siemens_coefficient = 0.50
|
||||
siemens_coefficient = 0.50
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
item_state = "marshalbadge"
|
||||
overlay_state = "marshalbadge"
|
||||
slot_flags = SLOT_BELT | SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_BADGE
|
||||
|
||||
var/stored_name
|
||||
var/badge_string = "Corporate Security"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
/obj/item/mech_component/examine(mob/user)
|
||||
. = ..()
|
||||
if(ready_to_install())
|
||||
to_chat(user, "<span class='notice'>It is ready for installation.</span>")
|
||||
to_chat(user, SPAN_NOTICE("It is ready for installation."))
|
||||
else
|
||||
show_missing_parts(user)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
/obj/item/mech_component/proc/install_component(var/obj/item/thing, var/mob/user)
|
||||
user.drop_from_inventory(thing)
|
||||
thing.forceMove(src)
|
||||
user.visible_message("<span class='notice'>\The [user] installs \the [thing] in \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("\The [user] installs \the [thing] in \the [src]."))
|
||||
return 1
|
||||
|
||||
/obj/item/mech_component/proc/update_health()
|
||||
@@ -97,12 +97,12 @@
|
||||
if(thing.isscrewdriver())
|
||||
if(contents.len)
|
||||
var/obj/item/removed = pick(contents)
|
||||
user.visible_message("<span class='notice'>\The [user] removes \the [removed] from \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("\The [user] removes \the [removed] from \the [src]."))
|
||||
removed.forceMove(user.loc)
|
||||
playsound(user.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||
update_components()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is nothing to remove.</span>")
|
||||
to_chat(user, SPAN_WARNING("There is nothing to remove."))
|
||||
return
|
||||
if(thing.iswelder())
|
||||
repair_brute_generic(thing, user)
|
||||
@@ -119,28 +119,28 @@
|
||||
if(!istype(WT))
|
||||
return
|
||||
if(!brute_damage)
|
||||
to_chat(user, "<span class='notice'>You inspect \the [src] but find nothing to weld.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You inspect \the [src] but find nothing to weld."))
|
||||
return
|
||||
if(!WT.isOn())
|
||||
to_chat(user, "<span class='warning'>Turn \the [WT] on, first.</span>")
|
||||
to_chat(user, SPAN_WARNING("Turn \the [WT] on, first."))
|
||||
return
|
||||
if(WT.remove_fuel(0, user))
|
||||
var/repair_value = 15
|
||||
if(brute_damage)
|
||||
repair_brute_damage(repair_value)
|
||||
to_chat(user, "<span class='notice'>You mend the damage to \the [src].</span>")
|
||||
to_chat(user, SPAN_NOTICE("You mend the damage to \the [src]."))
|
||||
playsound(user.loc, 'sound/items/welder.ogg', 25, 1)
|
||||
|
||||
/obj/item/mech_component/proc/repair_burn_generic(var/obj/item/stack/cable_coil/CC, var/mob/user)
|
||||
if(!istype(CC))
|
||||
return
|
||||
if(!burn_damage)
|
||||
to_chat(user, "<span class='notice'>\The [src]'s wiring doesn't need replacing.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [src]'s wiring doesn't need replacing."))
|
||||
return
|
||||
|
||||
var/needed_amount = 3
|
||||
if(CC.get_amount() < needed_amount)
|
||||
to_chat(user, "<span class='warning'>You need at least [needed_amount] unit\s of cable to repair this section.</span>")
|
||||
to_chat(user, SPAN_WARNING("You need at least [needed_amount] unit\s of cable to repair this section."))
|
||||
return
|
||||
|
||||
user.visible_message("\The [user] begins replacing the wiring of \the [src]...")
|
||||
@@ -150,6 +150,6 @@
|
||||
return
|
||||
|
||||
repair_burn_damage(25)
|
||||
to_chat(user, "<span class='notice'>You mend the damage to \the [src]'s wiring.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You mend the damage to \the [src]'s wiring."))
|
||||
playsound(user.loc, 'sound/items/Deconstruct.ogg', 25, 1)
|
||||
return
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/item/robot_parts/robot_component/armor/mech
|
||||
name = "exosuit armor plating"
|
||||
armor = list(
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_PADDED,
|
||||
bio = ARMOR_BIO_SHIELDED,
|
||||
rad = ARMOR_RAD_MINOR
|
||||
@@ -19,12 +19,12 @@
|
||||
name = "radiation-proof armor plating"
|
||||
desc = "A fully enclosed radiation hardened shell designed to protect the pilot from radiation."
|
||||
armor = list(
|
||||
melee = ARMOR_MELEE_RESISTANT,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
melee = ARMOR_MELEE_RESISTANT,
|
||||
bullet = ARMOR_BALLISTIC_PISTOL,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_PADDED,
|
||||
bio = ARMOR_BIO_SHIELDED,
|
||||
bio = ARMOR_BIO_SHIELDED,
|
||||
rad = ARMOR_RAD_SHIELDED
|
||||
)
|
||||
origin_tech = list(TECH_MATERIAL = 3)
|
||||
@@ -33,12 +33,12 @@
|
||||
name = "EM-shielded armor plating"
|
||||
desc = "A shielded plating that sorrounds the eletronics and protects them from electromagnetic radiation."
|
||||
armor = list(
|
||||
melee = ARMOR_MELEE_RESISTANT ,
|
||||
bullet = ARMOR_BALLISTIC_SMALL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_SHIELDED,
|
||||
bomb = ARMOR_BOMB_MINOR,
|
||||
bio = ARMOR_BIO_SHIELDED,
|
||||
melee = ARMOR_MELEE_RESISTANT ,
|
||||
bullet = ARMOR_BALLISTIC_SMALL,
|
||||
laser = ARMOR_LASER_SMALL,
|
||||
energy = ARMOR_ENERGY_SHIELDED,
|
||||
bomb = ARMOR_BOMB_MINOR,
|
||||
bio = ARMOR_BIO_SHIELDED,
|
||||
rad = ARMOR_RAD_SMALL
|
||||
)
|
||||
origin_tech = list(TECH_MATERIAL = 3)
|
||||
@@ -47,11 +47,11 @@
|
||||
name = "heavy combat plating"
|
||||
desc = "Plating designed to deflect incoming attacks and explosions."
|
||||
armor = list(
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_RESISTANT,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_RESISTANT,
|
||||
melee = ARMOR_MELEE_MAJOR,
|
||||
bullet = ARMOR_BALLISTIC_RESISTANT,
|
||||
laser = ARMOR_LASER_HANDGUNS,
|
||||
energy = ARMOR_ENERGY_MINOR,
|
||||
bomb = ARMOR_BOMB_RESISTANT,
|
||||
bio = ARMOR_BIO_SHIELDED
|
||||
)
|
||||
origin_tech = list(TECH_MATERIAL = 5)
|
||||
@@ -18,7 +18,15 @@
|
||||
|
||||
/obj/item/mech_component/manipulators/show_missing_parts(var/mob/user)
|
||||
if(!motivator)
|
||||
to_chat(user, "<span class='warning'>It is missing an actuator.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing an <a href='?src=\ref[src];info=actuator'>actuator</a>."))
|
||||
|
||||
/obj/item/mech_component/manipulators/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("actuator")
|
||||
to_chat(usr, SPAN_NOTICE("An actuator can be created at a mechatronic fabricator."))
|
||||
|
||||
/obj/item/mech_component/manipulators/return_diagnostics(mob/user)
|
||||
..()
|
||||
@@ -36,7 +44,7 @@
|
||||
/obj/item/mech_component/manipulators/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(istype(thing,/obj/item/robot_parts/robot_component/actuator))
|
||||
if(motivator)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has an actuator installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed."))
|
||||
return
|
||||
if(install_component(thing, user)) motivator = thing
|
||||
else
|
||||
|
||||
@@ -48,11 +48,23 @@
|
||||
|
||||
/obj/item/mech_component/chassis/show_missing_parts(var/mob/user)
|
||||
if(!cell)
|
||||
to_chat(user, "<span class='warning'>It is missing a power cell.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a <a href='?src=\ref[src];info=cell'>power cell</a>."))
|
||||
if(!diagnostics)
|
||||
to_chat(user, "<span class='warning'>It is missing a diagnostics unit.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a <a href='?src=\ref[src];info=diagnostics'>diagnostics unit</a>."))
|
||||
if(!mech_armor)
|
||||
to_chat(user, "<span class='warning'>It is missing armor plating.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing <a href='?src=\ref[src];info=diagnostics'>armor plating</a>."))
|
||||
|
||||
/obj/item/mech_component/chassis/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("cell")
|
||||
to_chat(usr, SPAN_NOTICE("A power cell can be created at a mechatronic fabricator."))
|
||||
if("diagnostics")
|
||||
to_chat(usr, SPAN_NOTICE("A diagnostics unit can be created at a mechatronic fabricator."))
|
||||
if("armor")
|
||||
to_chat(usr, SPAN_NOTICE("Armor plating can be created at a mechatronic fabricator."))
|
||||
|
||||
/obj/item/mech_component/chassis/return_diagnostics(mob/user)
|
||||
..()
|
||||
@@ -103,17 +115,17 @@
|
||||
/obj/item/mech_component/chassis/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(istype(thing,/obj/item/robot_parts/robot_component/diagnosis_unit))
|
||||
if(diagnostics)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a diagnostic system installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a diagnostic system installed."))
|
||||
return
|
||||
if(install_component(thing, user)) diagnostics = thing
|
||||
else if(istype(thing, /obj/item/cell))
|
||||
if(cell)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a cell installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a cell installed."))
|
||||
return
|
||||
if(install_component(thing,user)) cell = thing
|
||||
else if(istype(thing, /obj/item/robot_parts/robot_component/armor/mech))
|
||||
if(mech_armor)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has mech_armor installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has mech_armor installed."))
|
||||
return
|
||||
if(install_component(thing, user))
|
||||
mech_armor = thing
|
||||
@@ -123,7 +135,7 @@
|
||||
/obj/item/mech_component/chassis/MouseDrop_T(atom/dropping, mob/user)
|
||||
var/obj/machinery/portable_atmospherics/canister/C = dropping
|
||||
if(istype(C) && do_after(user, 5, src))
|
||||
to_chat(user, "<span class='notice'>You install the canister in the [src].</span>")
|
||||
to_chat(user, SPAN_NOTICE("You install the canister into \the [src]."))
|
||||
if(air_supply)
|
||||
air_supply.forceMove(get_turf(src))
|
||||
air_supply = null
|
||||
|
||||
@@ -42,24 +42,49 @@
|
||||
/obj/structure/heavy_vehicle_frame/examine(mob/user)
|
||||
. = ..()
|
||||
if(!arms)
|
||||
to_chat(user, "<span class='warning'>It is missing some manipulators.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing some <a href='?src=\ref[src];info=manipulators'>manipulators</a>."))
|
||||
if(!legs)
|
||||
to_chat(user, "<span class='warning'>It is missing a means of propulsion.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a means of <a href='?src=\ref[src];info=propulsion'>propulsion</a>."))
|
||||
if(!head)
|
||||
to_chat(user, "<span class='warning'>It is missing some sensors.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing some <a href='?src=\ref[src];info=sensors'>sensors</a>."))
|
||||
if(!body)
|
||||
to_chat(user, "<span class='warning'>It is missing a chassis.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a <a href='?src=\ref[src];info=chassis'>chassis</a>."))
|
||||
if(is_wired == FRAME_WIRED)
|
||||
to_chat(user, "<span class='warning'>Its wiring is unadjusted.</span>")
|
||||
to_chat(user, SPAN_WARNING("Its wiring is <a href='?src=\ref[src];info=wire'>unadjusted</a>."))
|
||||
else if(!is_wired)
|
||||
to_chat(user, "<span class='warning'>It has not yet been wired.</span>")
|
||||
to_chat(user, SPAN_WARNING("It has not yet been <a href='?src=\ref[src];info=wire'>wired</a>."))
|
||||
if(is_reinforced == FRAME_REINFORCED)
|
||||
to_chat(user, "<span class='warning'>It has not had its internal reinforcement secured.</span>")
|
||||
to_chat(user, SPAN_WARNING("It has not had its <a href='?src=\ref[src];info=reinforcement'>internal reinforcement</a> secured."))
|
||||
else if(is_reinforced == FRAME_REINFORCED_SECURE)
|
||||
to_chat(user, "<span class='warning'>It has not had its internal reinforcement welded in.</span>")
|
||||
to_chat(user, SPAN_WARNING("It has not had its <a href='?src=\ref[src];info=reinforcement'>internal reinforcement</a> welded in."))
|
||||
else if(!is_reinforced)
|
||||
to_chat(user, "<span class='warning'>It does not have any internal reinforcement.</span>")
|
||||
to_chat(user, SPAN_WARNING("It does not have any <a href='?src=\ref[src];info=reinforcement'>internal reinforcement</a>."))
|
||||
|
||||
/obj/structure/heavy_vehicle_frame/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("manipulators")
|
||||
to_chat(usr, SPAN_NOTICE("Manipulators, the arms of the exosuit, can be created at a mechatronic fabricator."))
|
||||
if("propulsion")
|
||||
to_chat(usr, SPAN_NOTICE("Propulsion, the legs of the exosuit, can be created at a mechatronic fabricator."))
|
||||
if("sensors")
|
||||
to_chat(usr, SPAN_NOTICE("Sensors, the head of the exosuit, can be created at a mechatronic fabricator."))
|
||||
if("chassis")
|
||||
to_chat(usr, SPAN_NOTICE("A chassis, the body of the exosuit, can be created at a mechatronic fabricator."))
|
||||
if("wire")
|
||||
if(!is_wired)
|
||||
to_chat(usr, SPAN_NOTICE("The frame requires wiring between its components. This can be added with cable coil."))
|
||||
else if(is_wired == FRAME_WIRED)
|
||||
to_chat(usr, SPAN_NOTICE("The wiring of the frame is messy, and requires a wirecutter to trim it for use."))
|
||||
if("reinforcement")
|
||||
if(!is_reinforced)
|
||||
to_chat(usr, SPAN_NOTICE("The frame requires reinforcement, this can be added with steel sheets."))
|
||||
else if(is_reinforced == FRAME_REINFORCED)
|
||||
to_chat(usr, SPAN_NOTICE("The frame's reinforcement has been installed, now it must be wrenched into place."))
|
||||
else if(is_reinforced == FRAME_REINFORCED_SECURE)
|
||||
to_chat(usr, SPAN_NOTICE("The frame's reinforcement has been installed and secured, now it must be welded into place."))
|
||||
|
||||
/obj/structure/heavy_vehicle_frame/update_icon()
|
||||
//As mech icons uses a caching system, any changes here, particularly to layers, must be reflected in /mob/living/heavy_vehicle/update_icon().
|
||||
@@ -88,14 +113,14 @@
|
||||
// Removing components.
|
||||
if(thing.iscrowbar())
|
||||
if(is_reinforced == FRAME_REINFORCED)
|
||||
user.visible_message("<span class='notice'>\The [user] crowbars \the reinforcement off \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("\The [user] crowbars the reinforcement off \the [src]."))
|
||||
is_reinforced = 0
|
||||
return
|
||||
|
||||
var/to_remove = input("Which component would you like to remove") as null|anything in list(arms, body, legs, head)
|
||||
|
||||
if(!to_remove)
|
||||
to_chat(user, "<span class='warning'>There are no components to remove..</span>")
|
||||
to_chat(user, SPAN_WARNING("There are no components to remove.."))
|
||||
return
|
||||
|
||||
if(uninstall_component(to_remove, user))
|
||||
@@ -116,25 +141,25 @@
|
||||
|
||||
// Check for basic components.
|
||||
if(!(arms && legs && head && body))
|
||||
to_chat(user, "<span class='warning'>There are still parts missing from \the [src].</span>")
|
||||
to_chat(user, SPAN_WARNING("There are still parts missing from \the [src]."))
|
||||
return
|
||||
|
||||
// Check for wiring.
|
||||
if(is_wired < FRAME_WIRED_ADJUSTED)
|
||||
if(is_wired == FRAME_WIRED)
|
||||
to_chat(user, "<span class='warning'>\The [src]'s wiring has not been adjusted!</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s wiring has not been adjusted!"))
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is not wired!</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] is not wired!"))
|
||||
return
|
||||
|
||||
// Check for basing metal internal plating.
|
||||
if(is_reinforced < FRAME_REINFORCED_WELDED)
|
||||
if(is_reinforced == FRAME_REINFORCED)
|
||||
to_chat(user, "<span class='warning'>\The [src]'s internal reinforcement has not been secured!</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcement has not been secured!"))
|
||||
else if(is_reinforced == FRAME_REINFORCED_SECURE)
|
||||
to_chat(user, "<span class='warning'>\The [src]'s internal reinforcement has not been welded down!</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcement has not been welded down!"))
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] has no internal reinforcement!</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] has no internal reinforcement!"))
|
||||
return
|
||||
|
||||
if(is_reinforced < FRAME_REINFORCED_WELDED || is_wired < FRAME_WIRED_ADJUSTED || !(arms && legs && head && body) || QDELETED(src) || QDELETED(user))
|
||||
@@ -157,12 +182,12 @@
|
||||
else if(thing.iscoil())
|
||||
|
||||
if(is_wired)
|
||||
to_chat(user, "<span class='warning'>\The [src] has already been wired.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] has already been wired."))
|
||||
return
|
||||
|
||||
var/obj/item/stack/cable_coil/CC = thing
|
||||
if(CC.amount < 10)
|
||||
to_chat(user, "<span class='warning'>You need at least ten units of cable to complete the exosuit.</span>")
|
||||
to_chat(user, SPAN_WARNING("You need at least ten units of cable to complete the exosuit."))
|
||||
return
|
||||
|
||||
user.visible_message("\The [user] begins wiring \the [src]...")
|
||||
@@ -189,12 +214,12 @@
|
||||
// Installing metal.
|
||||
else if(istype(thing, /obj/item/stack/material))
|
||||
var/obj/item/stack/material/M = thing
|
||||
if(M.material && M.material.name == "steel")
|
||||
if(M.material?.name == MATERIAL_STEEL)
|
||||
if(is_reinforced)
|
||||
to_chat(user, "<span class='warning'>There is already metal reinforcement installed in \the [src].</span>")
|
||||
to_chat(user, SPAN_WARNING("There is already metal reinforcement installed in \the [src]."))
|
||||
return
|
||||
if(M.amount < 15)
|
||||
to_chat(user, "<span class='warning'>You need at least fifteen sheets of steel to reinforce \the [src].</span>")
|
||||
to_chat(user, SPAN_WARNING("You need at least fifteen sheets of steel to reinforce \the [src]."))
|
||||
return
|
||||
visible_message("\The [user] reinforces \the [src] with \the [M].")
|
||||
playsound(user.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -205,10 +230,10 @@
|
||||
// Securing metal.
|
||||
else if(thing.iswrench())
|
||||
if(!is_reinforced)
|
||||
to_chat(user, "<span class='warning'>There is no metal to secure inside \the [src].</span>")
|
||||
to_chat(user, SPAN_WARNING("There is no metal to secure inside \the [src]."))
|
||||
return
|
||||
if(is_reinforced == FRAME_REINFORCED_WELDED)
|
||||
to_chat(user, "<span class='warning'>\The [src]'s internal reinforcement has been welded in.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcement has been welded in."))
|
||||
return
|
||||
visible_message("\The [user] [(is_reinforced == 2) ? "unsecures" : "secures"] the metal reinforcement in \the [src].")
|
||||
playsound(user.loc, thing.usesound, 100, 1)
|
||||
@@ -217,25 +242,25 @@
|
||||
else if(thing.iswelder())
|
||||
var/obj/item/weldingtool/WT = thing
|
||||
if(!is_reinforced)
|
||||
to_chat(user, "<span class='warning'>There is no metal to secure inside \the [src].</span>")
|
||||
to_chat(user, SPAN_WARNING("There is no metal to secure inside \the [src]."))
|
||||
return
|
||||
if(is_reinforced == FRAME_REINFORCED)
|
||||
to_chat(user, "<span class='warning'>The reinforcement inside \the [src] has not been secured.</span>")
|
||||
to_chat(user, SPAN_WARNING("The reinforcement inside \the [src] has not been secured."))
|
||||
return
|
||||
if(!WT.isOn())
|
||||
to_chat(user, "<span class='warning'>Turn \the [WT] on, first.</span>")
|
||||
to_chat(user, SPAN_WARNING("Turn \the [WT] on, first."))
|
||||
return
|
||||
if(WT.remove_fuel(1, user))
|
||||
visible_message("\The [user] [(is_reinforced == 3) ? "unwelds the reinforcement from" : "welds the reinforcement into"] \the [src].")
|
||||
is_reinforced = (is_reinforced == FRAME_REINFORCED_WELDED) ? FRAME_REINFORCED_SECURE : FRAME_REINFORCED_WELDED
|
||||
playsound(user.loc, thing.usesound, 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Not enough fuel!</span>")
|
||||
to_chat(user, SPAN_WARNING("Not enough fuel!"))
|
||||
return
|
||||
// Installing basic components.
|
||||
else if(istype(thing,/obj/item/mech_component/manipulators))
|
||||
if(arms)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has manipulators installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has manipulators installed."))
|
||||
return
|
||||
if(install_component(thing, user))
|
||||
if(arms)
|
||||
@@ -244,7 +269,7 @@
|
||||
arms = thing
|
||||
else if(istype(thing,/obj/item/mech_component/propulsion))
|
||||
if(legs)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a propulsion system installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a propulsion system installed."))
|
||||
return
|
||||
if(install_component(thing, user))
|
||||
if(legs)
|
||||
@@ -253,7 +278,7 @@
|
||||
legs = thing
|
||||
else if(istype(thing,/obj/item/mech_component/sensors))
|
||||
if(head)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a sensor array installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a sensor array installed."))
|
||||
return
|
||||
if(install_component(thing, user))
|
||||
if(head)
|
||||
@@ -262,7 +287,7 @@
|
||||
head = thing
|
||||
else if(istype(thing,/obj/item/mech_component/chassis))
|
||||
if(body)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has an outer chassis installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has an outer chassis installed."))
|
||||
return
|
||||
if(install_component(thing, user))
|
||||
if(body)
|
||||
@@ -276,7 +301,7 @@
|
||||
/obj/structure/heavy_vehicle_frame/proc/install_component(var/obj/item/thing, var/mob/user)
|
||||
var/obj/item/mech_component/MC = thing
|
||||
if(istype(MC) && !MC.ready_to_install())
|
||||
if(user) to_chat(user, "<span class='warning'>\The [MC] is not ready to install.</span>")
|
||||
if(user) to_chat(user, SPAN_WARNING("\The [MC] is not ready to install."))
|
||||
return 0
|
||||
user.unEquip(thing)
|
||||
thing.forceMove(src)
|
||||
|
||||
@@ -22,11 +22,23 @@
|
||||
|
||||
/obj/item/mech_component/sensors/show_missing_parts(var/mob/user)
|
||||
if(!radio)
|
||||
to_chat(user, "<span class='warning'>It is missing a radio.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a <a href='?src=\ref[src];info=radio'>radio</a>."))
|
||||
if(!camera)
|
||||
to_chat(user, "<span class='warning'>It is missing a camera.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing a <a href='?src=\ref[src];info=camera'>camera</a>."))
|
||||
if(!software)
|
||||
to_chat(user, "<span class='warning'>It is missing a software control module.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing an <a href='?src=\ref[src];info=module'>exosuit control module</a>."))
|
||||
|
||||
/obj/item/mech_component/sensors/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("radio")
|
||||
to_chat(usr, SPAN_NOTICE("A radio can be created at a mechatronic fabricator."))
|
||||
if("camera")
|
||||
to_chat(usr, SPAN_NOTICE("A camera can be created at a mechatronic fabricator."))
|
||||
if("module")
|
||||
to_chat(usr, SPAN_NOTICE("An exosuit control module can be created at a mechatronic fabricator, while the software chips it uses can be printed at the circuit imprinter."))
|
||||
|
||||
/obj/item/mech_component/sensors/return_diagnostics(mob/user)
|
||||
..()
|
||||
@@ -71,17 +83,17 @@
|
||||
/obj/item/mech_component/sensors/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(istype(thing, /obj/item/mech_component/control_module))
|
||||
if(software)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a control modules installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a control modules installed."))
|
||||
return
|
||||
if(install_component(thing, user)) software = thing
|
||||
else if(istype(thing,/obj/item/robot_parts/robot_component/radio))
|
||||
if(radio)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a radio installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a radio installed."))
|
||||
return
|
||||
if(install_component(thing, user)) radio = thing
|
||||
else if(istype(thing,/obj/item/robot_parts/robot_component/camera))
|
||||
if(camera)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a camera installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has a camera installed."))
|
||||
return
|
||||
if(install_component(thing, user)) camera = thing
|
||||
else
|
||||
@@ -98,7 +110,15 @@
|
||||
|
||||
/obj/item/mech_component/control_module/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].</span>")
|
||||
to_chat(user, SPAN_NOTICE("<a href='?src=\ref[src];info=software'>It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].</a>"))
|
||||
|
||||
/obj/item/mech_component/control_module/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("software")
|
||||
to_chat(usr, SPAN_NOTICE("Software for \the [src] can be created at the circuit imprinter."))
|
||||
|
||||
/obj/item/mech_component/control_module/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(istype(thing, /obj/item/circuitboard/exosystem))
|
||||
@@ -114,10 +134,10 @@
|
||||
/obj/item/mech_component/control_module/proc/install_software(var/obj/item/circuitboard/exosystem/software, var/mob/user)
|
||||
if(installed_software.len >= max_installed_software)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>\The [src] can only hold [max_installed_software] software modules.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] can only hold [max_installed_software] software modules."))
|
||||
return
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>You load \the [software] into \the [src]'s memory.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You load \the [software] into \the [src]'s memory."))
|
||||
user.unEquip(software)
|
||||
software.forceMove(src)
|
||||
update_software()
|
||||
|
||||
@@ -17,7 +17,15 @@
|
||||
|
||||
/obj/item/mech_component/propulsion/show_missing_parts(var/mob/user)
|
||||
if(!motivator)
|
||||
to_chat(user, "<span class='warning'>It is missing a motivator.</span>")
|
||||
to_chat(user, SPAN_WARNING("It is missing an <a href='?src=\ref[src];info=actuator'>actuator</a>."))
|
||||
|
||||
/obj/item/mech_component/propulsion/Topic(href, href_list)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(href_list["info"])
|
||||
if("actuator")
|
||||
to_chat(usr, SPAN_NOTICE("An actuator can be created at a mechatronic fabricator."))
|
||||
|
||||
/obj/item/mech_component/propulsion/return_diagnostics(mob/user)
|
||||
..()
|
||||
@@ -35,7 +43,7 @@
|
||||
/obj/item/mech_component/propulsion/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(istype(thing,/obj/item/robot_parts/robot_component/actuator))
|
||||
if(motivator)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has an actuator installed.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed."))
|
||||
return
|
||||
motivator = thing
|
||||
install_component(thing, user)
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
var/active_power_use = 1 KILOWATTS
|
||||
var/require_adjacent = TRUE
|
||||
|
||||
/obj/item/mecha_equipment/examine(mob/user, distance)
|
||||
. = ..()
|
||||
if(length(restricted_hardpoints))
|
||||
var/hardpoints = english_list(restricted_hardpoints, and_text = ", ")
|
||||
to_chat(user, SPAN_NOTICE("<b>Exosuit Mounts:</b> [hardpoints]"))
|
||||
if(length(restricted_software))
|
||||
var/software = english_list(restricted_software, and_text = ", ")
|
||||
to_chat(user, SPAN_NOTICE("<b>Exosuit Software Requirement:</b> [software]"))
|
||||
|
||||
/obj/item/mecha_equipment/attack() //Generally it's not desired to be able to attack with items
|
||||
return 0
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
name = "flashbang launcher"
|
||||
desc = "The SGL-6FL grenade launcher is designated to launch primed flashbangs."
|
||||
icon_state = "mech_gl"
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedfl
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedgl/fl
|
||||
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
|
||||
restricted_software = list(MECH_SOFTWARE_WEAPONS)
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
name = "teargas launcher"
|
||||
desc = "The SGL-6TGL grenade launcher is designated to launch primed teargas grenades."
|
||||
icon_state = "mech_gl"
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedtgl
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedgl/tg
|
||||
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
|
||||
restricted_software = list(MECH_SOFTWARE_WEAPONS)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
name = "smoke grenade launcher"
|
||||
desc = "The SGL-6SGL grenade launcher is designated to launch primed smoke grenades."
|
||||
icon_state = "mech_gl"
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedsgl
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedgl/sm
|
||||
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
|
||||
restricted_software = list(MECH_SOFTWARE_WEAPONS)
|
||||
|
||||
@@ -189,6 +189,8 @@
|
||||
item_state = "smg"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
var/grenade_type = /obj/item/grenade/frag
|
||||
|
||||
release_force = 5
|
||||
throw_distance = 7
|
||||
proj = 5
|
||||
@@ -197,83 +199,37 @@
|
||||
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedgl/consume_next_projectile()
|
||||
if(proj < 1) return null
|
||||
var/obj/item/grenade/frag/g = new (src)
|
||||
if(proj < 1)
|
||||
return null
|
||||
var/obj/item/grenade/g = new grenade_type(src)
|
||||
g.det_time = 10
|
||||
g.activate(null)
|
||||
proj--
|
||||
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
|
||||
return g
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedfl
|
||||
name = "mounted grenade launcher"
|
||||
/obj/item/gun/launcher/mech/mountedgl/fl
|
||||
desc = "The SGL-6FL grenade launcher is designated to launch primed flashbangs."
|
||||
icon = 'icons/obj/robot_items.dmi'
|
||||
icon_state = "smg"
|
||||
item_state = "smg"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
release_force = 5
|
||||
throw_distance = 7
|
||||
proj = 5
|
||||
max_proj = 5
|
||||
grenade_type = /obj/item/grenade/flashbang
|
||||
proj_gen_time = 200
|
||||
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedfl/consume_next_projectile()
|
||||
if(proj < 1) return null
|
||||
var/obj/item/grenade/flashbang/g = new (src)
|
||||
g.det_time = 10
|
||||
g.activate(null)
|
||||
proj--
|
||||
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
|
||||
return g
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedtgl
|
||||
/obj/item/gun/launcher/mech/mountedgl/tg
|
||||
name = "mounted teargas launcher"
|
||||
desc = "The SGL-6TGL grenade launcher is designated to launch primed teargas grenades."
|
||||
icon = 'icons/obj/robot_items.dmi'
|
||||
icon_state = "smg"
|
||||
item_state = "smg"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
release_force = 5
|
||||
throw_distance = 7
|
||||
proj = 3
|
||||
max_proj = 3
|
||||
grenade_type = /obj/item/grenade/chem_grenade/teargas
|
||||
proj_gen_time = 200
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedtgl/consume_next_projectile()
|
||||
if(proj < 1) return null
|
||||
var/obj/item/grenade/chem_grenade/teargas/tg = new (src)
|
||||
tg.det_time = 10
|
||||
tg.activate(null)
|
||||
proj--
|
||||
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
|
||||
return tg
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedsgl
|
||||
/obj/item/gun/launcher/mech/mountedgl/sm
|
||||
name = "mounted smoke launcher"
|
||||
desc = "The SGL-6SGL grenade launcher is designated to launch primed smoke grenades."
|
||||
icon = 'icons/obj/robot_items.dmi'
|
||||
icon_state = "smg"
|
||||
item_state = "smg"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
release_force = 5
|
||||
throw_distance = 7
|
||||
proj = 3
|
||||
max_proj = 3
|
||||
grenade_type = /obj/item/grenade/smokebomb
|
||||
proj_gen_time = 200
|
||||
|
||||
/obj/item/gun/launcher/mech/mountedsgl/consume_next_projectile()
|
||||
if(proj < 1) return null
|
||||
var/obj/item/grenade/smokebomb/sg = new (src)
|
||||
sg.det_time = 10
|
||||
sg.activate(null)
|
||||
proj--
|
||||
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
|
||||
return sg
|
||||
/obj/item/gun/launcher/mech/mountedgl/cl
|
||||
name = "mounted cleaner launcher"
|
||||
desc = "The SGL-6CL grenade launcher is designed to launch primed cleaner grenades."
|
||||
grenade_type = /obj/item/grenade/chem_grenade/cleaner
|
||||
proj_gen_time = 200
|
||||
|
||||
/obj/item/gun/launcher/mech/get_hardpoint_maptext()
|
||||
return "[proj]/[max_proj]"
|
||||
|
||||
@@ -645,4 +645,13 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_equipment/quick_enter/attack_self()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_equipment/mounted_system/grenadecleaner
|
||||
name = "cleaner grenade launcher"
|
||||
desc = "The SGL-6CL grenade launcher is designed to launch primed cleaner grenades."
|
||||
icon_state = "mech_gl"
|
||||
holding_type = /obj/item/gun/launcher/mech/mountedgl/cl
|
||||
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
|
||||
restricted_software = list(MECH_SOFTWARE_UTILITY)
|
||||
@@ -554,7 +554,7 @@
|
||||
// heavily commented so it doesn't look like one fat chunk of code, which it still does - Geeves
|
||||
/mob/living/heavy_vehicle/proc/handle_hear_say(var/mob/speaker, var/text)
|
||||
var/found_text = findtext(text, name)
|
||||
if(!found_text)
|
||||
if(!found_text && nickname)
|
||||
found_text = findtext(text, nickname)
|
||||
if(found_text)
|
||||
text = copytext(text, found_text) // I'm trimming the text each time so only information stated after eachother is valid
|
||||
|
||||
@@ -18,6 +18,16 @@
|
||||
/mob/living/heavy_vehicle/premade/ripley/cargo
|
||||
h_back = /obj/item/mecha_equipment/autolathe
|
||||
|
||||
/mob/living/heavy_vehicle/premade/ripley/janitorial
|
||||
name = "janitorial power loader"
|
||||
desc = "A standard cargo-handling power loader converted into a cleaning machine."
|
||||
|
||||
e_color = COLOR_PURPLE
|
||||
h_l_hand = /obj/item/mecha_equipment/clamp
|
||||
h_l_shoulder = /obj/item/mecha_equipment/mounted_system/grenadecleaner
|
||||
h_r_shoulder = /obj/item/mecha_equipment/mounted_system/grenadecleaner
|
||||
h_back = /obj/item/mecha_equipment/quick_enter
|
||||
|
||||
/obj/item/mech_component/manipulators/ripley
|
||||
name = "exosuit arms"
|
||||
exosuit_desc_string = "heavy-duty industrial lifters"
|
||||
|
||||
@@ -129,11 +129,15 @@ var/list/mineral_can_smooth_with = list(
|
||||
GetDrilled()
|
||||
|
||||
/turf/simulated/mineral/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(istype(Proj, /obj/item/projectile/beam/plasmacutter))
|
||||
var/obj/item/projectile/beam/plasmacutter/PC_beam = Proj
|
||||
. = PC_beam.pass_check(src)
|
||||
|
||||
// Emitter blasts
|
||||
if(istype(Proj, /obj/item/projectile/beam/emitter))
|
||||
emitter_blasts_taken++
|
||||
|
||||
if(emitter_blasts_taken > 2) // 3 blasts per tile
|
||||
if(emitter_blasts_taken >= 3)
|
||||
GetDrilled()
|
||||
|
||||
/turf/simulated/mineral/CollidedWith(AM)
|
||||
|
||||
@@ -573,4 +573,4 @@ emp_act
|
||||
/mob/living/carbon/human/extinguish_fire()
|
||||
..()
|
||||
for(var/obj/item/I in contents)
|
||||
I.extinguish_fire()
|
||||
I.extinguish_fire()
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
to_chat(src, SPAN_WARNING("Warning: Electromagnetic pulse detected."))
|
||||
..()
|
||||
|
||||
/mob/living/silicon/stun_effect_act()
|
||||
/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon, var/damage_flags)
|
||||
return //immune
|
||||
|
||||
/mob/living/silicon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0, tesla_shock = FALSE, ground_zero)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
icon = 'icons/obj/mining_contained.dmi'
|
||||
icon_state = "plasma"
|
||||
item_state = "plasma"
|
||||
usesound = 'sound/weapons/plasma_cutter.ogg'
|
||||
fire_sound = 'sound/weapons/plasma_cutter.ogg'
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
accuracy = 1
|
||||
@@ -49,6 +50,15 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/gun/energy/plasmacutter/proc/check_power_and_message(var/mob/user, var/use_amount = 1)
|
||||
if(!power_supply)
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!"))
|
||||
return TRUE
|
||||
if(!power_supply.check_charge(charge_cost * use_amount))
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have enough power to do this!"))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/gun/energy/plasmacutter/mounted
|
||||
name = "mounted plasma cutter"
|
||||
self_recharge = TRUE
|
||||
@@ -65,12 +75,21 @@
|
||||
range = 5
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
var/mineral_passes = 2 // amount of mineral turfs it passes through before ending
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter
|
||||
tracer_type = /obj/effect/projectile/tracer/plasma_cutter
|
||||
impact_type = /obj/effect/projectile/impact/plasma_cutter
|
||||
maiming = TRUE
|
||||
maim_rate = 1
|
||||
|
||||
/obj/item/projectile/beam/plasmacutter/proc/pass_check(var/turf/simulated/mineral/mine_turf)
|
||||
if(mineral_passes <= 0)
|
||||
return null // the projectile stops
|
||||
mineral_passes--
|
||||
on_impact(mine_turf)
|
||||
return PROJECTILE_CONTINUE // the projectile tunnels deeper
|
||||
|
||||
/obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A)
|
||||
if(istype(A, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = A
|
||||
@@ -81,3 +100,12 @@
|
||||
M.emitter_blasts_taken += 2
|
||||
M.emitter_blasts_taken += 1
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/energy/plasmacutter/use_resource(mob/user, var/use_amount)
|
||||
if(use_external_power)
|
||||
var/obj/item/cell/external = get_external_power_supply()
|
||||
if(external)
|
||||
external.use(use_amount * charge_cost)
|
||||
return
|
||||
if(power_supply)
|
||||
power_supply.use(use_amount * charge_cost)
|
||||
@@ -6,8 +6,8 @@
|
||||
in your hand. To recharge this weapon, use a weapon recharger."
|
||||
desc_fluff = "The NT EC-4 is an energy carbine developed and produced by Nanotrasen. Compact, light and durable, used by security forces and law enforcement for its ability to fire stun or lethal beams, depending on selection. It is widely sold and distributed across the galaxy."
|
||||
icon = 'icons/obj/guns/ecarbine.dmi'
|
||||
icon_state = "energystun100"
|
||||
item_state = "energystun100"
|
||||
icon_state = "energystun"
|
||||
item_state = "energystun"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
slot_flags = SLOT_BELT
|
||||
accuracy = 1
|
||||
@@ -27,6 +27,8 @@
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/laser1.ogg')
|
||||
)
|
||||
|
||||
has_item_ratio = FALSE
|
||||
|
||||
var/crit_fail = 0 //Added crit_fail as a local variable
|
||||
|
||||
/obj/item/gun/energy/gun/mounted
|
||||
|
||||
@@ -165,3 +165,35 @@
|
||||
toggle_scope(2.0, usr)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You can't look through the scope without stabilizing the rifle!</span>")
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle
|
||||
name = "ion rifle"
|
||||
desc = "The NT Mk70 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by Nanotrasen."
|
||||
icon = 'icons/obj/guns/ionrifle.dmi'
|
||||
icon_state = "ionrifle"
|
||||
item_state = "ionrifle"
|
||||
has_item_ratio = FALSE
|
||||
modifystate = null
|
||||
projectile_type = /obj/item/projectile/ion/stun
|
||||
fire_sound = 'sound/weapons/laser1.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
accuracy = 1
|
||||
force = 10
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 300
|
||||
max_shots = 4
|
||||
can_turret = 1
|
||||
turret_sprite_set = "ion"
|
||||
firemodes = list()
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle/emp_act(severity)
|
||||
..(max(severity, 2)) //so it doesn't EMP itself, I guess
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle/mounted
|
||||
name = "mounted ion rifle"
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
can_turret = 0
|
||||
@@ -1,48 +1,3 @@
|
||||
/obj/item/gun/energy/rifle/ionrifle
|
||||
name = "ion rifle"
|
||||
desc = "The NT Mk70 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by Nanotrasen."
|
||||
icon = 'icons/obj/guns/ionrifle.dmi'
|
||||
icon_state = "ionriflestun100"
|
||||
item_state = "ionriflestun100" // so the human update icon uses the icon_state instead.
|
||||
modifystate = "ionriflestun"
|
||||
projectile_type = /obj/item/projectile/ion/stun
|
||||
fire_sound = 'sound/weapons/laser1.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
accuracy = 1
|
||||
force = 10
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 300
|
||||
max_shots = 4
|
||||
can_turret = 1
|
||||
turret_sprite_set = "ion"
|
||||
firemodes = list()
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle/emp_act(severity)
|
||||
..(max(severity, 2)) //so it doesn't EMP itself, I guess
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle/update_icon()
|
||||
if(charge_meter && power_supply && power_supply.maxcharge)
|
||||
var/ratio = power_supply.charge / power_supply.maxcharge
|
||||
|
||||
//make sure that rounding down will not give us the empty state even if we have charge for a shot left.
|
||||
if(power_supply.charge < charge_cost)
|
||||
ratio = 0
|
||||
else
|
||||
ratio = max(round(ratio, 0.25) * 100, 25)
|
||||
|
||||
icon_state = "[modifystate][ratio]"
|
||||
item_state = "[modifystate][ratio]"
|
||||
update_held_icon()
|
||||
|
||||
/obj/item/gun/energy/rifle/ionrifle/mounted
|
||||
name = "mounted ion rifle"
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
can_turret = 0
|
||||
|
||||
/obj/item/gun/energy/decloner
|
||||
name = "biological demolecularisor"
|
||||
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium
|
||||
damage = 35
|
||||
damage = 30
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong
|
||||
damage = 45
|
||||
|
||||
@@ -78,6 +78,12 @@
|
||||
build_path = /obj/item/mecha_equipment/mounted_system/grenadeflash
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GOLD = 6000, MATERIAL_PHORON = 6000)
|
||||
|
||||
/datum/design/item/mechfab/exosuit_equipment/cleaner
|
||||
name = "Mounted Cleaner Grenade Launcher"
|
||||
req_tech = list(TECH_MATERIAL = 2)
|
||||
build_path = /obj/item/mecha_equipment/mounted_system/grenadecleaner
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GLASS = 10000)
|
||||
|
||||
/datum/design/item/mechfab/exosuit_equipment/crisisdrone
|
||||
name = "Mounted Crisis Drone"
|
||||
build_path = /obj/item/mecha_equipment/crisis_drone
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5000)
|
||||
|
||||
/datum/design/item/mechfab/exosuit/diagnosis_unit
|
||||
name = "Diagnosis unit"
|
||||
name = "Diagnostics Unit"
|
||||
build_path = /obj/item/robot_parts/robot_component/diagnosis_unit
|
||||
time = 10
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 5000)
|
||||
|
||||
@@ -35,7 +35,38 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">24 February 2021</h2>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added cleaning grenade launchers to the exosuit equipment list in the mechfab.</li>
|
||||
<li class="rscadd">Examining the equipment you can attach to exosuits will now show you to which hardpoints it can be attached, and which software it requires to function.</li>
|
||||
<li class="bugfix">Fixes exosuits responding to their commands without invoking their names first.</li>
|
||||
<li class="rscadd">Examining in-construction exosuit parts will now add hyperlinks to certain words, which can be clicked to provide some info on the steps to take to complete it.</li>
|
||||
<li class="bugfix">Using a plasma cutter to cut down walls, grilles, and girders, now properly plays the sound and uses its charge.</li>
|
||||
<li class="rscadd">Using welding tools on walls will now drain their fuel.</li>
|
||||
<li class="rscadd">Plasma cutters beams can now hit three asteroid walls per shot, making them more useful for mining.</li>
|
||||
</ul>
|
||||
<h3 class="author">MattAtlas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Badges can now be attached to plate carriers.</li>
|
||||
<li class="bugfix">Crossbows are no longer duplicated when attached to an RFD.</li>
|
||||
<li class="bugfix">Fixed hardsuit weapon configuration.</li>
|
||||
<li class="bugfix">Fixed riot armguards worn sprite.</li>
|
||||
</ul>
|
||||
<h3 class="author">WickedCybs updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Revised some fluff descriptions and resistances to a few pieces of Tajaran gear.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">23 February 2021</h2>
|
||||
<h3 class="author">Alberyk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Reduced the medium bullet damage to 30 from 35.</li>
|
||||
</ul>
|
||||
<h3 class="author">Alberyk, Kyres1 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">Added new sprites to blaster guns, gauss thumper, pump shotgun, ion rifle, disruptor guns, laser rifle, bolt action rifle, energy carbines, security handguns, revolvers, machine gun, marksman rifle, and some others.</li>
|
||||
</ul>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added the ability for ore detectors to find minor xenoarch finds, as well as major artifacts.</li>
|
||||
@@ -45,6 +76,8 @@
|
||||
<li class="bugfix">Fixed exosuits that do attack animations being off centre.</li>
|
||||
<li class="bugfix">Fixed exosuit hardpoints losing their cooldown colour before the cooldown actually completed.</li>
|
||||
<li class="bugfix">Climbing out of an exosuit with a closed hatch now properly updates the HUD.</li>
|
||||
<li class="tweak">Made the mech fab name lowercase.</li>
|
||||
<li class="refactor">Tweaked how the mechfab accepts materials, no user-facing changes should be noticeable.</li>
|
||||
</ul>
|
||||
<h3 class="author">MattAtlas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -18443,6 +18443,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- bugfix: Fixed being in an exosuit not letting you override its assigned leader.
|
||||
- bugfix: Fixed various bugs regarding tying nooses and attach people to them.
|
||||
2021-02-23:
|
||||
Alberyk:
|
||||
- tweak: Reduced the medium bullet damage to 30 from 35.
|
||||
Alberyk, Kyres1:
|
||||
- imageadd: Added new sprites to blaster guns, gauss thumper, pump shotgun, ion
|
||||
rifle, disruptor guns, laser rifle, bolt action rifle, energy carbines, security
|
||||
handguns, revolvers, machine gun, marksman rifle, and some others.
|
||||
Geeves:
|
||||
- rscadd: Added the ability for ore detectors to find minor xenoarch finds, as well
|
||||
as major artifacts.
|
||||
@@ -18455,6 +18461,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
actually completed.
|
||||
- bugfix: Climbing out of an exosuit with a closed hatch now properly updates the
|
||||
HUD.
|
||||
- tweak: Made the mech fab name lowercase.
|
||||
- refactor: Tweaked how the mechfab accepts materials, no user-facing changes should
|
||||
be noticeable.
|
||||
MattAtlas:
|
||||
- tweak: Tear gas should now be much more effective.
|
||||
- tweak: Stun batons now disperse pain all over the body. What happened previously
|
||||
@@ -18467,3 +18476,27 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
A superfluous pixel was removed.
|
||||
- tweak: The rescue RIG's chemical injector has had its mortaphenyl replaced
|
||||
with perconol due to the changes with medical reagents recently.
|
||||
2021-02-24:
|
||||
Geeves:
|
||||
- rscadd: Added cleaning grenade launchers to the exosuit equipment list in the
|
||||
mechfab.
|
||||
- rscadd: Examining the equipment you can attach to exosuits will now show you to
|
||||
which hardpoints it can be attached, and which software it requires to function.
|
||||
- bugfix: Fixes exosuits responding to their commands without invoking their names
|
||||
first.
|
||||
- rscadd: Examining in-construction exosuit parts will now add hyperlinks to certain
|
||||
words, which can be clicked to provide some info on the steps to take to complete
|
||||
it.
|
||||
- bugfix: Using a plasma cutter to cut down walls, grilles, and girders, now properly
|
||||
plays the sound and uses its charge.
|
||||
- rscadd: Using welding tools on walls will now drain their fuel.
|
||||
- rscadd: Plasma cutters beams can now hit three asteroid walls per shot, making
|
||||
them more useful for mining.
|
||||
MattAtlas:
|
||||
- bugfix: Badges can now be attached to plate carriers.
|
||||
- bugfix: Crossbows are no longer duplicated when attached to an RFD.
|
||||
- bugfix: Fixed hardsuit weapon configuration.
|
||||
- bugfix: Fixed riot armguards worn sprite.
|
||||
WickedCybs:
|
||||
- tweak: Revised some fluff descriptions and resistances to a few pieces of Tajaran
|
||||
gear.
|
||||
|
||||
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 636 B After Width: | Height: | Size: 612 B |
|
Before Width: | Height: | Size: 877 B After Width: | Height: | Size: 840 B |
|
Before Width: | Height: | Size: 868 B After Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 787 B After Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 501 B After Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 848 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 958 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 706 B After Width: | Height: | Size: 553 B |
|
Before Width: | Height: | Size: 953 B After Width: | Height: | Size: 822 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 591 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 876 B |
|
Before Width: | Height: | Size: 499 B After Width: | Height: | Size: 574 B |
|
Before Width: | Height: | Size: 559 B After Width: | Height: | Size: 617 B |
|
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 962 B After Width: | Height: | Size: 774 B |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 832 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.9 KiB |