Merge branch 'master' into placeholder

This commit is contained in:
Ferner
2021-02-24 17:57:09 +01:00
66 changed files with 439 additions and 284 deletions
+1
View File
@@ -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"
+2 -2
View File
@@ -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,
+2 -2
View File
@@ -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)
+31 -43
View File
@@ -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
+3
View File
@@ -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
+2 -2
View File
@@ -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
..()
+4
View File
@@ -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
+8 -4
View File
@@ -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))
+3 -3
View File
@@ -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))
+6 -9
View File
@@ -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.
+10 -7
View File
@@ -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)
+2 -2
View File
@@ -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(
+13 -9
View File
@@ -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
+20 -20
View File
@@ -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)
+10 -2
View File
@@ -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
+19 -7
View File
@@ -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
+58 -33
View File
@@ -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)
+29 -9
View File
@@ -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()
+10 -2
View File
@@ -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
+19 -63
View File
@@ -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"
+5 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
+33
View File
@@ -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">
+33
View File
@@ -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&#x27;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.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 636 B

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 877 B

After

Width:  |  Height:  |  Size: 840 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 B

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 848 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 958 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 953 B

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 B

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 559 B

After

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 B

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB