@@ -9,7 +9,7 @@
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=600, MAT_GLASS=200)
|
||||
custom_materials = list(/datum/material/iron=600, /datum/material/glass=200)
|
||||
var/uses = 2
|
||||
|
||||
/obj/item/overthrow_converter/proc/convert(mob/living/carbon/human/target, mob/living/carbon/human/user) // Should probably also delete any mindshield implant. Not sure.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A shell of swarmer that was completely powered down. It can no longer activate itself."
|
||||
icon = 'icons/mob/swarmer.dmi'
|
||||
icon_state = "swarmer_unactivated"
|
||||
materials = list(MAT_METAL=10000, MAT_GLASS=4000)
|
||||
custom_materials = list(/datum/material/iron=10000, /datum/material/glass=4000)
|
||||
|
||||
/obj/effect/mob_spawn/swarmer
|
||||
name = "unactivated swarmer"
|
||||
@@ -191,7 +191,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item
|
||||
if(materials[MAT_METAL] || materials[MAT_GLASS])
|
||||
if(custom_materials[getmaterialref(/datum/material/iron)] || custom_materials[getmaterialref(/datum/material/glass)])
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = ""
|
||||
flags_1 = CONDUCT_1
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=100)
|
||||
custom_materials = list(/datum/material/iron=100)
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 300)
|
||||
custom_materials = list(/datum/material/iron = 300, /datum/material/glass = 300)
|
||||
crit_fail = FALSE //Is the flash burnt out?
|
||||
light_color = LIGHT_COLOR_WHITE
|
||||
light_power = FLASH_LIGHT_POWER
|
||||
@@ -267,7 +267,7 @@
|
||||
throw_speed = 2
|
||||
throw_range = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_GLASS=7500, MAT_METAL=1000)
|
||||
custom_materials = list(/datum/material/glass=7500, /datum/material/iron=1000)
|
||||
attack_verb = list("shoved", "bashed")
|
||||
block_chance = 50
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "health sensor"
|
||||
desc = "Used for scanning and monitoring health."
|
||||
icon_state = "health"
|
||||
materials = list(MAT_METAL=800, MAT_GLASS=200)
|
||||
custom_materials = list(/datum/material/iron=800, /datum/material/glass=200)
|
||||
attachable = TRUE
|
||||
secured = FALSE
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "igniter"
|
||||
desc = "A small electronic device able to ignite combustible substances."
|
||||
icon_state = "igniter"
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||
custom_materials = list(/datum/material/iron=500, /datum/material/glass=50)
|
||||
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
||||
heat = 1000
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared"
|
||||
materials = list(MAT_METAL=1000, MAT_GLASS=500)
|
||||
custom_materials = list(/datum/material/iron=1000, /datum/material/glass=500)
|
||||
is_position_sensitive = TRUE
|
||||
|
||||
var/on = FALSE
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
item_state = "mousetrap"
|
||||
materials = list(MAT_METAL=100)
|
||||
custom_materials = list(/datum/material/iron=100)
|
||||
attachable = TRUE
|
||||
var/armed = FALSE
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "playback device"
|
||||
desc = "A small electronic device able to record a voice sample, and repeat that sample when it receive a signal."
|
||||
icon_state = "radio"
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||
custom_materials = list(/datum/material/iron = 500, /datum/material/glass = 50)
|
||||
flags_1 = HEAR_1
|
||||
attachable = TRUE
|
||||
verb_say = "beeps"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "prox"
|
||||
materials = list(MAT_METAL=800, MAT_GLASS=200)
|
||||
custom_materials = list(/datum/material/iron=800, /datum/material/glass=200)
|
||||
attachable = TRUE
|
||||
|
||||
var/scanning = FALSE
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "signaler"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
materials = list(MAT_METAL=400, MAT_GLASS=120)
|
||||
custom_materials = list(/datum/material/iron=400, /datum/material/glass=120)
|
||||
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
|
||||
attachable = TRUE
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "timer"
|
||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||
icon_state = "timer"
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||
custom_materials = list(/datum/material/iron=500, /datum/material/glass=50)
|
||||
attachable = TRUE
|
||||
|
||||
var/timing = FALSE
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
name = "voice analyzer"
|
||||
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
|
||||
icon_state = "voice"
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||
custom_materials = list(/datum/material/iron=500, /datum/material/glass=50)
|
||||
flags_1 = HEAR_1
|
||||
attachable = TRUE
|
||||
verb_say = "beeps"
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
power_channel = ENVIRON
|
||||
req_access = list(ACCESS_ATMOSPHERICS)
|
||||
max_integrity = 250
|
||||
integrity_failure = 80
|
||||
integrity_failure = 0.33
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50)
|
||||
max_integrity = 250
|
||||
integrity_failure = 100
|
||||
integrity_failure = 0.4
|
||||
pressure_resistance = 7 * ONE_ATMOSPHERE
|
||||
var/temperature_resistance = 1000 + T0C
|
||||
var/starter_temp
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
icon_state = "rupee"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_GLASS = 500)
|
||||
custom_materials = list(/datum/material/glass = 500)
|
||||
|
||||
/obj/item/rupee/New()
|
||||
var/newcolor = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple"))
|
||||
|
||||
@@ -15,16 +15,13 @@
|
||||
if(!isitem(O))
|
||||
return 0
|
||||
var/obj/item/I = O
|
||||
if(!(material_id in I.materials))
|
||||
if(!(getmaterialref(material_id) in I.custom_materials))
|
||||
return 0
|
||||
|
||||
var/amount = I.materials[material_id]
|
||||
var/amount = I.custom_materials[getmaterialref(material_id)]
|
||||
|
||||
if(istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/S = I
|
||||
amount *= S.amount
|
||||
if(istype(I, /obj/item/stack/ore))
|
||||
amount *= 0.8 // Station's ore redemption equipment is really goddamn good.
|
||||
if(istype(I, /obj/item/stack/ore))
|
||||
amount *= 0.8 // Station's ore redemption equipment is really goddamn good.
|
||||
|
||||
return round(amount/MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
@@ -32,48 +29,48 @@
|
||||
|
||||
/datum/export/material/bananium
|
||||
cost = 500
|
||||
material_id = MAT_BANANIUM
|
||||
material_id = /datum/material/bananium
|
||||
message = "cm3 of bananium"
|
||||
|
||||
/datum/export/material/diamond
|
||||
cost = 250
|
||||
material_id = MAT_DIAMOND
|
||||
material_id = /datum/material/diamond
|
||||
message = "cm3 of diamonds"
|
||||
|
||||
/datum/export/material/plasma
|
||||
cost = 100
|
||||
material_id = MAT_PLASMA
|
||||
material_id = /datum/material/plasma
|
||||
message = "cm3 of plasma"
|
||||
|
||||
/datum/export/material/uranium
|
||||
cost = 50
|
||||
material_id = MAT_URANIUM
|
||||
material_id = /datum/material/uranium
|
||||
message = "cm3 of uranium"
|
||||
|
||||
/datum/export/material/gold
|
||||
cost = 60
|
||||
material_id = MAT_GOLD
|
||||
material_id = /datum/material/gold
|
||||
message = "cm3 of gold"
|
||||
|
||||
/datum/export/material/silver
|
||||
cost = 25
|
||||
material_id = MAT_SILVER
|
||||
material_id = /datum/material/silver
|
||||
message = "cm3 of silver"
|
||||
|
||||
/datum/export/material/titanium
|
||||
cost = 60
|
||||
material_id = MAT_TITANIUM
|
||||
material_id = /datum/material/titanium
|
||||
message = "cm3 of titanium"
|
||||
|
||||
/datum/export/material/plastic
|
||||
cost = 5
|
||||
material_id = MAT_PLASTIC
|
||||
material_id = /datum/material/plastic
|
||||
message = "cm3 of plastic"
|
||||
|
||||
/datum/export/material/metal
|
||||
cost = 3
|
||||
message = "cm3 of metal"
|
||||
material_id = MAT_METAL
|
||||
material_id = /datum/material/iron
|
||||
export_types = list(
|
||||
/obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel,
|
||||
/obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin)
|
||||
@@ -81,6 +78,26 @@
|
||||
/datum/export/material/glass
|
||||
cost = 3
|
||||
message = "cm3 of glass"
|
||||
material_id = MAT_GLASS
|
||||
material_id = /datum/material/glass
|
||||
export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore,
|
||||
/obj/item/shard)
|
||||
|
||||
/datum/export/material/adamantine
|
||||
cost = 300
|
||||
material_id = /datum/material/adamantine
|
||||
message = "cm3 of adamantine"
|
||||
|
||||
/datum/export/material/mythril
|
||||
cost = 1000
|
||||
material_id = /datum/material/mythril
|
||||
message = "cm3 of mythril"
|
||||
|
||||
/datum/export/material/bscrystal
|
||||
cost = 150
|
||||
message = "cm3 of bluespace crystals"
|
||||
material_id = /datum/material/bluespace
|
||||
|
||||
/datum/export/material/runite
|
||||
cost = 300
|
||||
message = "cm3 of runite"
|
||||
material_id = /datum/material/runite
|
||||
@@ -83,10 +83,10 @@
|
||||
message = "of reinforced glass"
|
||||
export_types = list(/obj/item/stack/sheet/rglass)
|
||||
|
||||
/datum/export/stack/bscrystal
|
||||
cost = 150
|
||||
message = "of bluespace crystals"
|
||||
export_types = list(/obj/item/stack/sheet/bluespace_crystal)
|
||||
/datum/export/stack/plastitanium
|
||||
cost = 165 // plasma + titanium costs
|
||||
message = "of plastitanium"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/plastitanium)
|
||||
|
||||
/datum/export/stack/wood
|
||||
cost = 15
|
||||
@@ -139,12 +139,6 @@
|
||||
message = "of alien alloy"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/abductor)
|
||||
|
||||
/datum/export/stack/adamantine
|
||||
unit_name = "bar"
|
||||
cost = 250
|
||||
message = "of adamantine"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/adamantine)
|
||||
|
||||
/datum/export/stack/bone
|
||||
cost = 20
|
||||
message = "of bones"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "clothing"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 200
|
||||
integrity_failure = 80
|
||||
integrity_failure = 0.4
|
||||
var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var
|
||||
var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
|
||||
var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
strip_delay = 20
|
||||
equip_delay_other = 25
|
||||
resistance_flags = NONE
|
||||
materials = list(MAT_GLASS = 250)
|
||||
custom_materials = list(/datum/material/glass = 250)
|
||||
var/vision_flags = 0
|
||||
var/darkness_view = 2//Base human is 2
|
||||
var/invis_view = SEE_INVISIBLE_LIVING //admin only for now
|
||||
@@ -286,7 +286,7 @@
|
||||
icon_state = "welding-g"
|
||||
item_state = "welding-g"
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
materials = list(MAT_METAL = 250)
|
||||
custom_materials = list(/datum/material/iron = 250)
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
||||
|
||||
@@ -237,6 +237,14 @@
|
||||
icon_state = "knight_red"
|
||||
item_state = "knight_red"
|
||||
|
||||
/obj/item/clothing/head/helmet/knight/greyscale
|
||||
name = "knight helmet"
|
||||
desc = "A classic medieval helmet, if you hold it upside down you could see that it's actually a bucket."
|
||||
icon_state = "knight_greyscale"
|
||||
item_state = "knight_greyscale"
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR //Can change color and add prefix
|
||||
|
||||
/obj/item/clothing/head/helmet/skull
|
||||
name = "skull helmet"
|
||||
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
icon_state = "welding"
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
item_state = "welding"
|
||||
materials = list(MAT_METAL=1750, MAT_GLASS=400)
|
||||
custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400)
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
name = "welding mask"
|
||||
desc = "A gas mask with built-in welding goggles and a face shield. Looks like a skull - clearly designed by a nerd."
|
||||
icon_state = "weldingmask"
|
||||
materials = list(MAT_METAL=4000, MAT_GLASS=2000)
|
||||
custom_materials = list(/datum/material/iron=4000, /datum/material/glass=2000)
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/material_container, list(MAT_BANANIUM), 200000, TRUE, /obj/item/stack)
|
||||
AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
|
||||
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75)
|
||||
if(always_noslip)
|
||||
clothing_flags |= NOSLIP
|
||||
@@ -19,7 +19,7 @@
|
||||
. = ..()
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
if(on)
|
||||
if(bananium.amount(MAT_BANANIUM) < 100)
|
||||
if(bananium.get_material_amount(/datum/material/bananium) < 100)
|
||||
on = !on
|
||||
if(!always_noslip)
|
||||
clothing_flags &= ~NOSLIP
|
||||
@@ -27,7 +27,7 @@
|
||||
to_chat(loc, "<span class='warning'>You ran out of bananium!</span>")
|
||||
else
|
||||
new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(usr.dir, 180))) //honk
|
||||
bananium.use_amount_type(100, MAT_BANANIUM)
|
||||
bananium.use_amount_mat(100, /datum/material/bananium)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
if(bananium.amount(MAT_BANANIUM))
|
||||
if(bananium.get_material_amount(/datum/material/bananium))
|
||||
on = !on
|
||||
update_icon()
|
||||
to_chat(user, "<span class='notice'>You [on ? "activate" : "deactivate"] the prototype shoes.</span>")
|
||||
|
||||
@@ -261,6 +261,14 @@
|
||||
icon_state = "knight_red"
|
||||
item_state = "knight_red"
|
||||
|
||||
/obj/item/clothing/suit/armor/riot/knight/greyscale
|
||||
name = "knight armour"
|
||||
desc = "A classic suit of armour, able to be made from many different materials."
|
||||
icon_state = "knight_greyscale"
|
||||
item_state = "knight_greyscale"
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
|
||||
material_flags = MATERIAL_ADD_PREFIX //Can change color and add prefix
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/durathread
|
||||
name = "makeshift vest"
|
||||
desc = "A vest made of durathread with strips of leather acting as trauma plates."
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
desc = "A bronze medal."
|
||||
icon_state = "bronze"
|
||||
item_color = "bronze"
|
||||
materials = list(MAT_METAL=1000)
|
||||
custom_materials = list(/datum/material/iron=1000)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/medaltype = "medal" //Sprite used for medalbox
|
||||
var/commended = FALSE
|
||||
@@ -190,7 +190,7 @@
|
||||
icon_state = "silver"
|
||||
item_color = "silver"
|
||||
medaltype = "medal-silver"
|
||||
materials = list(MAT_SILVER=1000)
|
||||
custom_materials = list(/datum/material/silver=1000)
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver/valor
|
||||
name = "medal of valor"
|
||||
@@ -206,7 +206,7 @@
|
||||
icon_state = "gold"
|
||||
item_color = "gold"
|
||||
medaltype = "medal-gold"
|
||||
materials = list(MAT_GOLD=1000)
|
||||
custom_materials = list(/datum/material/gold=1000)
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/captain
|
||||
name = "medal of captaincy"
|
||||
@@ -217,7 +217,7 @@
|
||||
name = "old medal of captaincy"
|
||||
desc = "A rustic badge pure gold, has been through hell and back by the looks, the syndcate have been after these by the looks of it for generations..."
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 10) //Pure gold
|
||||
materials = list(MAT_GOLD=2000)
|
||||
custom_materials = list(/datum/material/gold=2000)
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/heroism
|
||||
name = "medal of exceptional heroism"
|
||||
@@ -230,7 +230,7 @@
|
||||
item_color = "plasma"
|
||||
medaltype = "medal-plasma"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable.
|
||||
materials = list(MAT_PLASMA=1000)
|
||||
custom_materials = list(/datum/material/plasma=1000)
|
||||
|
||||
/obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
|
||||
@@ -158,6 +158,23 @@
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
|
||||
name = "paramedic jumpsuit"
|
||||
icon_state = "paramedic"
|
||||
item_state = "w_suit"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/skirt
|
||||
name = "paramedic jumpskirt"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
|
||||
icon_state = "paramedic_skirt"
|
||||
item_state = "w_suit"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
|
||||
/obj/item/clothing/under/rank/nursesuit
|
||||
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
|
||||
name = "nurse's suit"
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
icon_state = "trek_engsec"
|
||||
item_color = "trek_engsec"
|
||||
item_state = "r_suit"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //more sec than eng, but w/e.
|
||||
strip_delay = 50
|
||||
|
||||
/obj/item/clothing/under/trek/medsci
|
||||
@@ -69,4 +68,4 @@
|
||||
desc = "Something about it feels off..."
|
||||
icon_state = "trek_Q"
|
||||
item_color = "trek_Q"
|
||||
item_state = "r_suit"
|
||||
item_state = "r_suit"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
jobs_to_revolt = list("Assistant")
|
||||
nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
|
||||
if("white")
|
||||
jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist")
|
||||
jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Virologist")
|
||||
nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Geneti", "Viro", "Psych")
|
||||
if("yellow")
|
||||
jobs_to_revolt = list("Chief Engineer", "Station Engineer", "Atmospheric Technician")
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
force = 1
|
||||
throwforce = 1
|
||||
amount_per_transfer_from_this = 5
|
||||
materials = list(MAT_METAL=100)
|
||||
custom_materials = list(/datum/material/iron=100)
|
||||
possible_transfer_amounts = list()
|
||||
volume = 5
|
||||
flags_1 = CONDUCT_1
|
||||
@@ -218,7 +218,7 @@
|
||||
force = 14
|
||||
throwforce = 10
|
||||
amount_per_transfer_from_this = 20
|
||||
materials = list(MAT_GOLD=1000)
|
||||
custom_materials = list(/datum/material/gold=1000)
|
||||
volume = 150
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/trophy/silver_cup
|
||||
@@ -229,7 +229,7 @@
|
||||
force = 10
|
||||
throwforce = 8
|
||||
amount_per_transfer_from_this = 15
|
||||
materials = list(MAT_SILVER=800)
|
||||
custom_materials = list(/datum/material/silver=800)
|
||||
volume = 100
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/trophy/bronze_cup
|
||||
@@ -240,7 +240,7 @@
|
||||
force = 5
|
||||
throwforce = 4
|
||||
amount_per_transfer_from_this = 10
|
||||
materials = list(MAT_METAL=400)
|
||||
custom_materials = list(/datum/material/iron=400)
|
||||
volume = 25
|
||||
|
||||
///////////////////////////////////////////////Drinks/////////////////////////////////////////
|
||||
@@ -400,7 +400,7 @@
|
||||
name = "shaker"
|
||||
desc = "A metal shaker to mix drinks in."
|
||||
icon_state = "shaker"
|
||||
materials = list(MAT_METAL=1500)
|
||||
custom_materials = list(/datum/material/iron=1500)
|
||||
amount_per_transfer_from_this = 10
|
||||
volume = 100
|
||||
isGlass = FALSE
|
||||
@@ -409,7 +409,7 @@
|
||||
name = "flask"
|
||||
desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
|
||||
icon_state = "flask"
|
||||
materials = list(MAT_METAL=250)
|
||||
custom_materials = list(/datum/material/iron=250)
|
||||
volume = 60
|
||||
isGlass = FALSE
|
||||
|
||||
@@ -417,7 +417,7 @@
|
||||
name = "captain's flask"
|
||||
desc = "A gold flask belonging to the captain."
|
||||
icon_state = "flask_gold"
|
||||
materials = list(MAT_GOLD=500)
|
||||
custom_materials = list(/datum/material/gold=500)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/det
|
||||
name = "detective's flask"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "glass_empty"
|
||||
amount_per_transfer_from_this = 10
|
||||
volume = 50
|
||||
materials = list(MAT_GLASS=500)
|
||||
custom_materials = list(/datum/material/glass=500)
|
||||
max_integrity = 20
|
||||
spillable = TRUE
|
||||
resistance_flags = ACID_PROOF
|
||||
@@ -45,7 +45,7 @@
|
||||
amount_per_transfer_from_this = 15
|
||||
possible_transfer_amounts = list()
|
||||
volume = 15
|
||||
materials = list(MAT_GLASS=100)
|
||||
custom_materials = list(/datum/material/glass=100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change(changetype)
|
||||
cut_overlays()
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
icon = 'icons/obj/food/soupsalad.dmi'
|
||||
icon_state = "bowl"
|
||||
reagent_flags = OPENCONTAINER
|
||||
materials = list(MAT_GLASS = 500)
|
||||
custom_materials = list(/datum/material/glass = 500)
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/reagent_containers/glass/bowl/attackby(obj/item/I,mob/user, params)
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/corndog
|
||||
name = "corndog plate"
|
||||
desc = "A plate with two small corn dogs, with two dimples of ketchup and mustard to dip them in."
|
||||
icon_state = "dorndog"
|
||||
icon_state = "corndog"
|
||||
trash = /obj/item/trash/plate/alt
|
||||
tastes = list("hotdog" = 2, "mustard and ketchup" = 1, "fryed bread" = 1)
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/mustard = 5, /datum/reagent/consumable/ketchup = 5)
|
||||
@@ -359,4 +359,4 @@
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/bbqsauce = 5)
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
tastes = list("meat" = 3, "smokey sauce" = 1)
|
||||
foodtype = MEAT
|
||||
foodtype = MEAT
|
||||
|
||||
@@ -309,8 +309,8 @@
|
||||
var/metal = 0
|
||||
for(var/obj/item/O in ingredients)
|
||||
O.microwave_act(src)
|
||||
if(O.materials[MAT_METAL])
|
||||
metal += O.materials[MAT_METAL]
|
||||
if(O.custom_materials?.len)
|
||||
metal += O.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
|
||||
if(metal)
|
||||
spark()
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=5'>x5</A>"
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=10'>x10</A>"
|
||||
dat += "([D.materials[MAT_BIOMASS]/efficiency])<br>"
|
||||
dat += "([D.materials[getmaterialref(/datum/material/biomass)]/efficiency])<br>"
|
||||
dat += "</div>"
|
||||
else
|
||||
dat += "<div class='statusDisplay'>No container inside, please insert container.</div>"
|
||||
@@ -232,15 +232,15 @@
|
||||
else
|
||||
menustat = "void"
|
||||
|
||||
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1)
|
||||
if(materials.len != 1 || materials[1] != MAT_BIOMASS)
|
||||
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = TRUE)
|
||||
if(materials.len != 1 || materials[1] != getmaterialref(/datum/material/biomass))
|
||||
return FALSE
|
||||
if (materials[MAT_BIOMASS]*multiplier/efficiency > points)
|
||||
if (materials[getmaterialref(/datum/material/biomass)]*multiplier/efficiency > points)
|
||||
menustat = "nopoints"
|
||||
return FALSE
|
||||
else
|
||||
if(remove_points)
|
||||
points -= materials[MAT_BIOMASS]*multiplier/efficiency
|
||||
points -= materials[getmaterialref(/datum/material/biomass)]*multiplier/efficiency
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return TRUE
|
||||
|
||||
@@ -418,7 +418,7 @@
|
||||
name = "plant data disk"
|
||||
desc = "A disk for storing plant genetic data."
|
||||
icon_state = "datadisk_hydro"
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=10)
|
||||
custom_materials = list(/datum/material/iron=30, /datum/material/glass=10)
|
||||
var/datum/plant_gene/gene
|
||||
var/read_only = 0 //Well, it's still a floppy disk
|
||||
obj_flags = UNIQUE_RENAME
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=20)
|
||||
custom_materials = list(/datum/material/iron=30, /datum/material/glass=20)
|
||||
|
||||
// *************************************
|
||||
// Hydroponics Tools
|
||||
@@ -57,7 +57,7 @@
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=50)
|
||||
custom_materials = list(/datum/material/iron=50)
|
||||
attack_verb = list("slashed", "sliced", "cut", "clawed")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
throwforce = 15
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
materials = list(MAT_METAL = 15000)
|
||||
custom_materials = list(/datum/material/iron = 15000)
|
||||
attack_verb = list("chopped", "torn", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = IS_SHARP
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon = 'icons/obj/assemblies/electronic_setups.dmi'
|
||||
icon_state = "setup_small"
|
||||
item_flags = NOBLUDGEON
|
||||
materials = list() // To be filled later
|
||||
custom_materials = null // To be filled later
|
||||
datum_flags = DF_USE_TAG
|
||||
var/list/assembly_components = list()
|
||||
var/list/ckeys_allowed_to_scan = list() // Players who built the circuit can scan it as a ghost.
|
||||
@@ -95,9 +95,9 @@
|
||||
D.open()
|
||||
|
||||
/obj/item/electronic_assembly/Initialize()
|
||||
LAZYSET(custom_materials, /datum/material/iron, round((max_complexity + max_components) * 0.25) * SScircuit.cost_multiplier)
|
||||
.=..()
|
||||
START_PROCESSING(SScircuit, src)
|
||||
materials[MAT_METAL] = round((max_complexity + max_components) / 4) * SScircuit.cost_multiplier
|
||||
|
||||
//sets up diagnostic hud view
|
||||
prepare_huds()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies/electronic_components.dmi'
|
||||
icon_state = "template"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
materials = list() // To be filled later
|
||||
custom_materials = null // To be filled later
|
||||
var/obj/item/electronic_assembly/assembly // Reference to the assembly holding this circuit, if any.
|
||||
var/extended_desc
|
||||
var/list/inputs = list()
|
||||
@@ -84,7 +84,7 @@ a creative player the means to solve many problems. Circuits are held inside an
|
||||
setup_io(inputs, /datum/integrated_io, inputs_default, IC_INPUT)
|
||||
setup_io(outputs, /datum/integrated_io, outputs_default, IC_OUTPUT)
|
||||
setup_io(activators, /datum/integrated_io/activate, null, IC_ACTIVATOR)
|
||||
materials[MAT_METAL] = w_class * SScircuit.cost_multiplier
|
||||
LAZYSET(custom_materials, /datum/material/iron, w_class * SScircuit.cost_multiplier)
|
||||
. = ..()
|
||||
|
||||
/obj/item/integrated_circuit/proc/on_data_written() //Override this for special behaviour when new data gets pushed to the circuit.
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
|
||||
/obj/item/integrated_circuit_printer/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly))
|
||||
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(/datum/material/iron), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly))
|
||||
materials.precise_insertion = TRUE
|
||||
|
||||
/obj/item/integrated_circuit_printer/proc/print_program(mob/user)
|
||||
if(!cloning)
|
||||
@@ -189,16 +190,16 @@
|
||||
var/cost = 400
|
||||
if(ispath(build_type, /obj/item/electronic_assembly))
|
||||
var/obj/item/electronic_assembly/E = SScircuit.cached_assemblies[build_type]
|
||||
cost = E.materials[MAT_METAL]
|
||||
cost = E.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
else if(ispath(build_type, /obj/item/integrated_circuit))
|
||||
var/obj/item/integrated_circuit/IC = SScircuit.cached_components[build_type]
|
||||
cost = IC.materials[MAT_METAL]
|
||||
cost = IC.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
else if(!(build_type in SScircuit.circuit_fabricator_recipe_list["Tools"]))
|
||||
return
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
if(!debug && !materials.use_amount_type(cost, MAT_METAL))
|
||||
if(!debug && !materials.use_amount_mat(cost, /datum/material/iron))
|
||||
to_chat(usr, "<span class='warning'>You need [cost] metal to build that!</span>")
|
||||
return TRUE
|
||||
|
||||
@@ -270,14 +271,14 @@
|
||||
return
|
||||
else if(fast_clone)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(debug || materials.use_amount_type(program["metal_cost"], MAT_METAL))
|
||||
if(debug || materials.use_amount_mat(program["metal_cost"], /datum/material/iron))
|
||||
cloning = TRUE
|
||||
print_program(usr)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You need [program["metal_cost"]] metal to build that!</span>")
|
||||
else
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(!materials.use_amount_type(program["metal_cost"], MAT_METAL))
|
||||
if(!materials.use_amount_mat(program["metal_cost"], /datum/material/iron))
|
||||
to_chat(usr, "<span class='warning'>You need [program["metal_cost"]] metal to build that!</span>")
|
||||
return
|
||||
var/cloning_time = round(program["metal_cost"] / 15)
|
||||
@@ -295,7 +296,7 @@
|
||||
to_chat(usr, "<span class='notice'>Cloning has been canceled. Metal cost has been refunded.</span>")
|
||||
cloning = FALSE
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.use_amount_type(-program["metal_cost"], MAT_METAL) //use negative amount to regain the cost
|
||||
materials.use_amount_mat(-program["metal_cost"], /datum/material/iron) //use negative amount to regain the cost
|
||||
|
||||
|
||||
interact(usr)
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
blocks["max_space"] = assembly.max_components
|
||||
|
||||
// Start keeping track of total metal cost
|
||||
blocks["metal_cost"] = assembly.materials[MAT_METAL]
|
||||
blocks["metal_cost"] = assembly.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
|
||||
|
||||
// Block 2. Components.
|
||||
@@ -291,7 +291,7 @@
|
||||
// Update estimated assembly complexity, taken space and material cost
|
||||
blocks["complexity"] += component.complexity
|
||||
blocks["used_space"] += component.size
|
||||
blocks["metal_cost"] += component.materials[MAT_METAL]
|
||||
blocks["metal_cost"] += component.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
|
||||
// Check if the assembly requires printer upgrades
|
||||
if(!(component.spawn_flags & IC_SPAWN_DEFAULT))
|
||||
|
||||
@@ -1090,6 +1090,7 @@
|
||||
"Titanium" = IC_PINTYPE_NUMBER,
|
||||
"Bluespace Mesh" = IC_PINTYPE_NUMBER,
|
||||
"Biomass" = IC_PINTYPE_NUMBER,
|
||||
"Plastic" = IC_PINTYPE_NUMBER
|
||||
)
|
||||
activators = list(
|
||||
"scan" = IC_PINTYPE_PULSE_IN,
|
||||
@@ -1098,7 +1099,7 @@
|
||||
)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
power_draw_per_use = 40
|
||||
var/list/mtypes = list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_BIOMASS)
|
||||
var/list/mtypes = list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/biomass, /datum/material/plastic)
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/input/matscan/do_work()
|
||||
@@ -1108,10 +1109,9 @@
|
||||
if(!mt) //Invalid input
|
||||
return
|
||||
if(H in view(T)) // This is a camera. It can't examine thngs,that it can't see.
|
||||
for(var/I in 1 to mtypes.len)
|
||||
var/datum/material/M = mt.materials[mtypes[I]]
|
||||
if(M)
|
||||
set_pin_data(IC_OUTPUT, I, M.amount)
|
||||
for(var/I in mtypes)
|
||||
if(I in mt.materials)
|
||||
set_pin_data(IC_OUTPUT, I, mt.materials[I])
|
||||
else
|
||||
set_pin_data(IC_OUTPUT, I, null)
|
||||
push_data()
|
||||
|
||||
@@ -373,6 +373,7 @@
|
||||
"Bluespace Mesh" = IC_PINTYPE_NUMBER,
|
||||
"Bananium" = IC_PINTYPE_NUMBER,
|
||||
"Titanium" = IC_PINTYPE_NUMBER,
|
||||
"Plastic" = IC_PINTYPE_NUMBER
|
||||
)
|
||||
outputs = list(
|
||||
"self ref" = IC_PINTYPE_REF,
|
||||
@@ -386,7 +387,8 @@
|
||||
"Solid Plasma" = IC_PINTYPE_NUMBER,
|
||||
"Bluespace Mesh" = IC_PINTYPE_NUMBER,
|
||||
"Bananium" = IC_PINTYPE_NUMBER,
|
||||
"Titanium" = IC_PINTYPE_NUMBER
|
||||
"Titanium" = IC_PINTYPE_NUMBER,
|
||||
"Plastic" = IC_PINTYPE_NUMBER
|
||||
)
|
||||
activators = list(
|
||||
"insert sheet" = IC_PINTYPE_PULSE_IN,
|
||||
@@ -400,13 +402,11 @@
|
||||
power_draw_per_use = 40
|
||||
ext_cooldown = 1
|
||||
cooldown_per_use = 10
|
||||
var/list/mtypes = list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)
|
||||
var/list/mtypes = list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/uranium, /datum/material/plasma, /datum/material/bluespace, /datum/material/bananium, /datum/material/titanium, /datum/material/plastic)
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/matman/Initialize()
|
||||
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container,
|
||||
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0,
|
||||
FALSE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials.max_amount =100000
|
||||
mtypes, 100000, FALSE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials.precise_insertion = TRUE
|
||||
.=..()
|
||||
|
||||
@@ -414,9 +414,10 @@
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
set_pin_data(IC_OUTPUT, 2, materials.total_amount)
|
||||
for(var/I in 1 to mtypes.len)
|
||||
var/datum/material/M = materials.materials[mtypes[I]]
|
||||
var/datum/material/M = materials.materials[getmaterialref(I)]
|
||||
var/amount = materials[M]
|
||||
if(M)
|
||||
set_pin_data(IC_OUTPUT, I+2, M.amount)
|
||||
set_pin_data(IC_OUTPUT, I+2, amount)
|
||||
push_data()
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/matman/proc/is_insertion_ready(mob/user)
|
||||
@@ -435,7 +436,7 @@
|
||||
if(!S)
|
||||
activate_pin(4)
|
||||
return
|
||||
if(materials.insert_stack(S, CLAMP(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) )
|
||||
if(materials.insert_item(S, CLAMP(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) )
|
||||
AfterMaterialInsert()
|
||||
activate_pin(3)
|
||||
else
|
||||
@@ -451,7 +452,7 @@
|
||||
continue
|
||||
if(!mt) //Invalid input
|
||||
if(U>0)
|
||||
if(materials.retrieve_amount(U, mtypes[I], T))
|
||||
if(materials.retrieve_sheets(U, getmaterialref(mtypes[I]), T))
|
||||
suc = TRUE
|
||||
else
|
||||
if(mt.transer_amt_to(materials, U, mtypes[I]))
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
/proc/get_all_jobs()
|
||||
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
|
||||
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
|
||||
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
|
||||
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic",
|
||||
"Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/proc/get_all_job_icons() //For all existing HUD icons
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/datum/job/paramedic
|
||||
title = "Paramedic"
|
||||
flag = PARAMEDIC
|
||||
department_head = list("Chief Medical Officer")
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#74b5e0"
|
||||
|
||||
outfit = /datum/outfit/job/paramedic
|
||||
|
||||
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_MAINT_TUNNELS)
|
||||
minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_MAINT_TUNNELS)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_PARAMEDIC
|
||||
|
||||
/datum/outfit/job/paramedic
|
||||
name = "Paramedic"
|
||||
jobtype = /datum/job/paramedic
|
||||
|
||||
ears = /obj/item/radio/headset/headset_med
|
||||
gloves = /obj/item/clothing/gloves/color/latex/nitrile
|
||||
uniform = /obj/item/clothing/under/rank/medical/paramedic
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
head = /obj/item/clothing/head/soft/emt
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/emt
|
||||
belt = /obj/item/storage/belt/medical
|
||||
l_hand = /obj/item/storage/firstaid/regular
|
||||
suit_store = /obj/item/flashlight/pen
|
||||
id = /obj/item/card/id
|
||||
r_pocket = /obj/item/pinpointer/crew
|
||||
l_pocket = /obj/item/pda/medical
|
||||
backpack_contents = list(/obj/item/roller=1)
|
||||
pda_slot = ITEM_SLOT_POCKET
|
||||
|
||||
backpack = /obj/item/storage/backpack/medic
|
||||
satchel = /obj/item/storage/backpack/satchel/med
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/med
|
||||
|
||||
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
|
||||
|
||||
chameleon_extras = /obj/item/gun/syringe
|
||||
@@ -18,6 +18,7 @@ GLOBAL_LIST_INIT(medical_positions, list(
|
||||
"Medical Doctor",
|
||||
"Geneticist",
|
||||
"Virologist",
|
||||
"Paramedic",
|
||||
"Chemist"))
|
||||
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
/datum/language_holder/synthetic
|
||||
languages = list(/datum/language/common)
|
||||
shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic, /datum/language/slime)
|
||||
shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic, /datum/language/slime, /datum/language/dwarf)
|
||||
|
||||
/datum/language_holder/empty
|
||||
languages = list()
|
||||
|
||||
@@ -53,7 +53,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
Unit | Condition | Status | Direction | Distance<br>"
|
||||
for(var/PDT in turrets)
|
||||
var/obj/machinery/porta_turret/aux_base/T = PDT
|
||||
var/integrity = max((T.obj_integrity-T.integrity_failure)/(T.max_integrity-T.integrity_failure)*100, 0)
|
||||
var/integrity = max((T.obj_integrity-T.integrity_failure * T.max_integrity)/(T.max_integrity-T.integrity_failure * max_integrity)*100, 0)
|
||||
var/status
|
||||
if(T.stat & BROKEN)
|
||||
status = "<span class='bad'>ERROR</span>"
|
||||
@@ -151,7 +151,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
if(!is_mining_level(T.z))
|
||||
return BAD_ZLEVEL
|
||||
|
||||
|
||||
|
||||
var/list/colony_turfs = base_dock.return_ordered_turfs(T.x,T.y,T.z,base_dock.dir)
|
||||
for(var/i in 1 to colony_turfs.len)
|
||||
CHECK_TICK
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
armour_penetration = 10
|
||||
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
|
||||
custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075)
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped")
|
||||
sharpness = IS_SHARP
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
|
||||
custom_materials = list(/datum/material/iron=2000) //one sheet, but where can you make them?
|
||||
tool_behaviour = TOOL_MINING
|
||||
toolspeed = 1
|
||||
usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
|
||||
@@ -46,7 +46,7 @@
|
||||
throwforce = 7
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=1000)
|
||||
custom_materials = list(/datum/material/iron=1000)
|
||||
|
||||
/obj/item/pickaxe/silver
|
||||
name = "silver-plated pickaxe"
|
||||
@@ -55,7 +55,7 @@
|
||||
toolspeed = 0.5 //mines faster than a normal pickaxe, bought from mining vendor
|
||||
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
|
||||
force = 17
|
||||
materials = list(MAT_SILVER=4000)
|
||||
custom_materials = list(/datum/material/silver=4000)
|
||||
|
||||
/obj/item/pickaxe/diamond
|
||||
name = "diamond-tipped pickaxe"
|
||||
@@ -64,7 +64,7 @@
|
||||
toolspeed = 0.3
|
||||
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
|
||||
force = 19
|
||||
materials = list(MAT_DIAMOND=4000)
|
||||
custom_materials = list(/datum/material/diamond=4000)
|
||||
|
||||
/obj/item/pickaxe/plasteel
|
||||
name = "plasteel-tipped pickaxe"
|
||||
@@ -72,7 +72,7 @@
|
||||
toolspeed = 0.5
|
||||
desc = "A pickaxe with a plasteel pick head. Less robust at cracking rock walls and digging up dirt than the titanium pickaxe, but better at cracking open skulls."
|
||||
force = 19
|
||||
materials = list(MAT_METAL=2000, MAT_PLASMA=2000)
|
||||
custom_materials = list(/datum/material/iron=2000, /datum/material/plasma=2000)
|
||||
|
||||
/obj/item/pickaxe/titanium
|
||||
name = "titanium-tipped pickaxe"
|
||||
@@ -80,7 +80,7 @@
|
||||
toolspeed = 0.3
|
||||
desc = "A pickaxe with a titanium pick head. Extremely robust at cracking rock walls and digging up dirt, but less than the plasteel pickaxe at cracking open skulls."
|
||||
force = 17
|
||||
materials = list(MAT_TITANIUM=4000)
|
||||
custom_materials = list(/datum/material/titanium=4000)
|
||||
|
||||
/obj/item/pickaxe/drill
|
||||
name = "mining drill"
|
||||
@@ -141,7 +141,7 @@
|
||||
throwforce = 4
|
||||
item_state = "shovel"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=350)
|
||||
custom_materials = list(/datum/material/iron=350)
|
||||
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
|
||||
sharpness = IS_SHARP
|
||||
|
||||
@@ -166,5 +166,5 @@
|
||||
toolspeed = 0.5
|
||||
force = 5
|
||||
throwforce = 7
|
||||
materials = list(MAT_METAL=50)
|
||||
custom_materials = list(/datum/material/iron=50)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
@@ -114,28 +114,28 @@
|
||||
name = "Kinetic Accelerator Offensive Mining Explosion Mod"
|
||||
desc = "A device which causes kinetic accelerators to fire AoE blasts that destroy rock and damage creatures."
|
||||
id = "hyperaoemod"
|
||||
materials = list(MAT_METAL = 7000, MAT_GLASS = 3000, MAT_SILVER = 3000, MAT_GOLD = 3000, MAT_DIAMOND = 4000)
|
||||
materials = list(/datum/material/iron = 7000, /datum/material/glass = 3000, /datum/material/silver = 3000, /datum/material/gold = 3000, /datum/material/diamond = 4000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
|
||||
|
||||
/datum/design/unique_modkit/rapid_repeater
|
||||
name = "Kinetic Accelerator Rapid Repeater Mod"
|
||||
desc = "A device which greatly reduces a kinetic accelerator's cooldown on striking a living target or rock, but greatly increases its base cooldown."
|
||||
id = "repeatermod"
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_URANIUM = 8000, MAT_BLUESPACE = 2000)
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 5000, /datum/material/uranium = 8000, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/cooldown/repeater
|
||||
|
||||
/datum/design/unique_modkit/resonator_blast
|
||||
name = "Kinetic Accelerator Resonator Blast Mod"
|
||||
desc = "A device which causes kinetic accelerators to fire shots that leave and detonate resonator blasts."
|
||||
id = "resonatormod"
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_SILVER = 5000, MAT_URANIUM = 5000)
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 5000, /datum/material/silver = 5000, /datum/material/uranium = 5000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/resonator_blasts
|
||||
|
||||
/datum/design/unique_modkit/bounty
|
||||
name = "Kinetic Accelerator Death Syphon Mod"
|
||||
desc = "A device which causes kinetic accelerators to permanently gain damage against creature types killed with it."
|
||||
id = "bountymod"
|
||||
materials = list(MAT_METAL = 4000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_BLUESPACE = 4000)
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/silver = 4000, /datum/material/gold = 4000, /datum/material/bluespace = 4000)
|
||||
reagents_list = list("blood" = 40)
|
||||
build_path = /obj/item/borg/upgrade/modkit/bounty
|
||||
|
||||
|
||||
@@ -47,8 +47,10 @@
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(href_list["material"])
|
||||
machine.selected_material = href_list["material"]
|
||||
machine.selected_alloy = null
|
||||
var/datum/material/new_material = locate(href_list["material"])
|
||||
if(istype(new_material))
|
||||
machine.selected_material = new_material
|
||||
machine.selected_alloy = null
|
||||
|
||||
if(href_list["alloy"])
|
||||
machine.selected_material = null
|
||||
@@ -75,15 +77,16 @@
|
||||
density = TRUE
|
||||
var/obj/machinery/mineral/CONSOLE = null
|
||||
var/on = FALSE
|
||||
var/selected_material = MAT_METAL
|
||||
var/datum/material/selected_material = null
|
||||
var/selected_alloy = null
|
||||
var/datum/techweb/stored_research
|
||||
|
||||
/obj/machinery/mineral/processing_unit/Initialize()
|
||||
. = ..()
|
||||
proximity_monitor = new(src, 1)
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack)
|
||||
AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
|
||||
stored_research = new /datum/techweb/specialized/autounlocking/smelter
|
||||
selected_material = getmaterialref(/datum/material/iron)
|
||||
|
||||
/obj/machinery/mineral/processing_unit/Destroy()
|
||||
CONSOLE = null
|
||||
@@ -108,13 +111,13 @@
|
||||
/obj/machinery/mineral/processing_unit/proc/get_machine_data()
|
||||
var/dat = "<b>Smelter control console</b><br><br>"
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
dat += "<span class=\"res_name\">[M.name]: </span>[M.amount] cm³"
|
||||
if (selected_material == mat_id)
|
||||
for(var/datum/material/M in materials.materials)
|
||||
var/amount = materials.materials[M]
|
||||
dat += "<span class=\"res_name\">[M.name]: </span>[amount] cm³"
|
||||
if (selected_material == M)
|
||||
dat += " <i>Smelting</i>"
|
||||
else
|
||||
dat += " <A href='?src=[REF(CONSOLE)];material=[mat_id]'><b>Not Smelting</b></A> "
|
||||
dat += " <A href='?src=[REF(CONSOLE)];material=[REF(M)]'><b>Not Smelting</b></A> "
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<br><br>"
|
||||
@@ -153,14 +156,14 @@
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/smelt_ore()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/datum/material/mat = materials.materials[selected_material]
|
||||
var/datum/material/mat = selected_material
|
||||
if(mat)
|
||||
var/sheets_to_remove = (mat.amount >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT) ) ? SMELT_AMOUNT : round(mat.amount / MINERAL_MATERIAL_AMOUNT)
|
||||
var/sheets_to_remove = (materials.materials[mat] >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT) ) ? SMELT_AMOUNT : round(materials.materials[mat] / MINERAL_MATERIAL_AMOUNT)
|
||||
if(!sheets_to_remove)
|
||||
on = FALSE
|
||||
else
|
||||
var/out = get_step(src, output_dir)
|
||||
materials.retrieve_sheets(sheets_to_remove, selected_material, out)
|
||||
materials.retrieve_sheets(sheets_to_remove, mat, out)
|
||||
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/smelt_alloy()
|
||||
@@ -176,7 +179,7 @@
|
||||
return
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.use_amount(alloy.materials, amount)
|
||||
materials.use_materials(alloy.materials, amount)
|
||||
|
||||
generate_mineral(alloy.build_path)
|
||||
|
||||
@@ -188,14 +191,11 @@
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
for(var/mat_id in D.materials)
|
||||
var/M = D.materials[mat_id]
|
||||
var/datum/material/smelter_mat = materials.materials[mat_id]
|
||||
for(var/mat_cat in D.materials)
|
||||
var/required_amount = D.materials[mat_cat]
|
||||
var/amount = materials.materials[mat_cat]
|
||||
|
||||
if(!M || !smelter_mat)
|
||||
return FALSE
|
||||
|
||||
build_amount = min(build_amount, round(smelter_mat.amount / M))
|
||||
build_amount = min(build_amount, round(amount / required_amount))
|
||||
|
||||
return build_amount
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/points = 0
|
||||
var/ore_pickup_rate = 15
|
||||
var/sheet_per_ore = 1
|
||||
var/ore_multiplier = 1
|
||||
var/point_upgrade = 1
|
||||
var/list/ore_values = list(MAT_GLASS = 1, MAT_METAL = 1, MAT_PLASMA = 15, MAT_SILVER = 16, MAT_GOLD = 18, MAT_TITANIUM = 30, MAT_URANIUM = 30, MAT_DIAMOND = 50, MAT_BLUESPACE = 50, MAT_BANANIUM = 60)
|
||||
var/list/ore_values = list(/datum/material/glass = 1, /datum/material/iron = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50, /datum/material/bananium = 60)
|
||||
var/message_sent = FALSE
|
||||
var/list/ore_buffer = list()
|
||||
var/datum/techweb/stored_research
|
||||
@@ -31,26 +31,27 @@
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/Destroy()
|
||||
QDEL_NULL(stored_research)
|
||||
materials = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/RefreshParts()
|
||||
var/ore_pickup_rate_temp = 15
|
||||
var/point_upgrade_temp = 1
|
||||
var/sheet_per_ore_temp = 1
|
||||
var/ore_multiplier_temp = 1
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
sheet_per_ore_temp = 0.65 + (0.35 * B.rating)
|
||||
ore_multiplier_temp = 0.65 + (0.35 * B.rating)
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
ore_pickup_rate_temp = 15 * M.rating
|
||||
for(var/obj/item/stock_parts/micro_laser/L in component_parts)
|
||||
point_upgrade_temp = 0.65 + (0.35 * L.rating)
|
||||
ore_pickup_rate = ore_pickup_rate_temp
|
||||
point_upgrade = point_upgrade_temp
|
||||
sheet_per_ore = sheet_per_ore_temp
|
||||
ore_multiplier = round(ore_multiplier_temp, 0.01)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/examine(mob/user)
|
||||
. = ..()
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Smelting <b>[sheet_per_ore]</b> sheet(s) per piece of ore.<br>Reward point generation at <b>[point_upgrade*100]%</b>.<br>Ore pickup speed at <b>[ore_pickup_rate]</b>.</span>"
|
||||
. += "<span class='notice'>The status display reads: Smelting <b>[ore_multiplier]</b> sheet(s) per piece of ore.<br>Reward point generation at <b>[point_upgrade*100]%</b>.<br>Ore pickup speed at <b>[ore_pickup_rate]</b>.</span>"
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
@@ -70,13 +71,13 @@
|
||||
if(!material_amount)
|
||||
qdel(O) //no materials, incinerate it
|
||||
|
||||
else if(!mat_container.has_space(material_amount * sheet_per_ore * O.amount)) //if there is no space, eject it
|
||||
else if(!mat_container.has_space(material_amount * O.amount)) //if there is no space, eject it
|
||||
unload_mineral(O)
|
||||
|
||||
else
|
||||
var/mats = O.materials & mat_container.materials
|
||||
var/mats = O.custom_materials & mat_container.materials
|
||||
var/amount = O.amount
|
||||
mat_container.insert_item(O, sheet_per_ore) //insert it
|
||||
mat_container.insert_item(O, ore_multiplier) //insert it
|
||||
materials.silo_log(src, "smelted", amount, "ores", mats)
|
||||
qdel(O)
|
||||
|
||||
@@ -87,14 +88,14 @@
|
||||
|
||||
var/build_amount = 0
|
||||
|
||||
for(var/mat_id in D.materials)
|
||||
var/M = D.materials[mat_id]
|
||||
var/datum/material/redemption_mat = mat_container.materials[mat_id]
|
||||
for(var/mat in D.materials)
|
||||
var/amount = D.materials[mat]
|
||||
var/datum/material/redemption_mat_amount = mat_container.materials[mat]
|
||||
|
||||
if(!M || !redemption_mat)
|
||||
if(!amount || !redemption_mat_amount)
|
||||
return FALSE
|
||||
|
||||
var/smeltable_sheets = FLOOR(redemption_mat.amount / M, 1)
|
||||
var/smeltable_sheets = FLOOR(redemption_mat_amount / amount, 1)
|
||||
|
||||
if(!smeltable_sheets)
|
||||
return FALSE
|
||||
@@ -124,9 +125,9 @@
|
||||
|
||||
var/has_minerals = FALSE
|
||||
|
||||
for(var/mat_id in mat_container.materials)
|
||||
var/datum/material/M = mat_container.materials[mat_id]
|
||||
var/mineral_amount = M.amount / MINERAL_MATERIAL_AMOUNT
|
||||
for(var/mat in mat_container.materials)
|
||||
var/datum/material/M = mat
|
||||
var/mineral_amount = mat_container.materials[mat] / MINERAL_MATERIAL_AMOUNT
|
||||
if(mineral_amount)
|
||||
has_minerals = TRUE
|
||||
msg += "[capitalize(M.name)]: [mineral_amount] sheets<br>"
|
||||
@@ -202,10 +203,12 @@
|
||||
data["materials"] = list()
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
if (mat_container)
|
||||
for(var/mat_id in mat_container.materials)
|
||||
var/datum/material/M = mat_container.materials[mat_id]
|
||||
var/sheet_amount = M.amount ? M.amount / MINERAL_MATERIAL_AMOUNT : "0"
|
||||
data["materials"] += list(list("name" = M.name, "id" = M.id, "amount" = sheet_amount, "value" = ore_values[M.id] * point_upgrade))
|
||||
for(var/mat in mat_container.materials)
|
||||
var/datum/material/M = mat
|
||||
var/amount = mat_container.materials[M]
|
||||
var/sheet_amount = amount / MINERAL_MATERIAL_AMOUNT
|
||||
var/ref = REF(M)
|
||||
data["materials"] += list(list("name" = M.name, "id" = ref, "amount" = sheet_amount, "value" = ore_values[M.type]))
|
||||
|
||||
data["alloys"] = list()
|
||||
for(var/v in stored_research.researched_designs)
|
||||
@@ -251,16 +254,18 @@
|
||||
if("Release")
|
||||
if(!mat_container)
|
||||
return
|
||||
|
||||
if(materials.on_hold())
|
||||
to_chat(usr, "<span class='warning'>Mineral access is on hold, please contact the quartermaster.</span>")
|
||||
else if(!allowed(usr)) //Check the ID inside, otherwise check the user
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
else
|
||||
var/mat_id = params["id"]
|
||||
if(!mat_container.materials[mat_id])
|
||||
var/datum/material/mat = locate(params["id"])
|
||||
|
||||
var/amount = mat_container.materials[mat]
|
||||
if(!amount)
|
||||
return
|
||||
var/datum/material/mat = mat_container.materials[mat_id]
|
||||
var/stored_amount = mat.amount / MINERAL_MATERIAL_AMOUNT
|
||||
var/stored_amount = CEILING(amount / MINERAL_MATERIAL_AMOUNT, 0.1)
|
||||
|
||||
if(!stored_amount)
|
||||
return
|
||||
@@ -272,9 +277,10 @@
|
||||
desired = input("How many sheets?", "How many sheets would you like to smelt?", 1) as null|num
|
||||
|
||||
var/sheets_to_remove = round(min(desired,50,stored_amount))
|
||||
var/count = mat_container.retrieve_sheets(sheets_to_remove, mat_id, get_step(src, output_dir))
|
||||
|
||||
var/count = mat_container.retrieve_sheets(sheets_to_remove, mat, get_step(src, output_dir))
|
||||
var/list/mats = list()
|
||||
mats[mat_id] = MINERAL_MATERIAL_AMOUNT
|
||||
mats[mat] = MINERAL_MATERIAL_AMOUNT
|
||||
materials.silo_log(src, "released", -count, "sheets", mats)
|
||||
//Logging deleted for quick coding
|
||||
return TRUE
|
||||
@@ -315,7 +321,7 @@
|
||||
else
|
||||
desired = input("How many sheets?", "How many sheets would you like to smelt?", 1) as null|num
|
||||
var/amount = round(min(desired,50,smelt_amount))
|
||||
mat_container.use_amount(alloy.materials, amount)
|
||||
mat_container.use_materials(alloy.materials, amount)
|
||||
materials.silo_log(src, "released", -amount, "sheets", alloy.materials)
|
||||
var/output
|
||||
if(ispath(alloy.build_path, /obj/item/stack/sheet))
|
||||
|
||||
@@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
/obj/machinery/ore_silo/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/material_container,
|
||||
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC),
|
||||
list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic),
|
||||
INFINITY,
|
||||
FALSE,
|
||||
/obj/item/stack,
|
||||
@@ -34,6 +34,8 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
var/datum/component/remote_materials/mats = C
|
||||
mats.disconnect_from(src)
|
||||
|
||||
connected = null
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
|
||||
@@ -49,7 +51,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
if(!istype(I) || (I.flags_1 & HOLOGRAM_1) || (I.item_flags & NO_MAT_REDEMPTION))
|
||||
to_chat(user, "<span class='warning'>[M] won't accept [I]!</span>")
|
||||
return
|
||||
var/item_mats = I.materials & materials.materials
|
||||
var/item_mats = I.custom_materials & materials.materials
|
||||
if(!length(item_mats))
|
||||
to_chat(user, "<span class='warning'>[I] does not contain sufficient materials to be accepted by [M].</span>")
|
||||
return
|
||||
@@ -75,15 +77,17 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
var/list/ui = list("<head><title>Ore Silo</title></head><body><div class='statusDisplay'><h2>Stored Material:</h2>")
|
||||
var/any = FALSE
|
||||
for(var/M in materials.materials)
|
||||
var/datum/material/mat = materials.materials[M]
|
||||
var/sheets = round(mat.amount) / MINERAL_MATERIAL_AMOUNT
|
||||
var/datum/material/mat = M
|
||||
var/amount = materials.materials[M]
|
||||
var/sheets = round(amount) / MINERAL_MATERIAL_AMOUNT
|
||||
var/ref = REF(M)
|
||||
if (sheets)
|
||||
if (sheets >= 1)
|
||||
ui += "<a href='?src=[REF(src)];ejectsheet=[mat.id];eject_amt=1'>Eject</a>"
|
||||
ui += "<a href='?src=[REF(src)];ejectsheet=[ref];eject_amt=1'>Eject</a>"
|
||||
else
|
||||
ui += "<span class='linkOff'>Eject</span>"
|
||||
if (sheets >= 20)
|
||||
ui += "<a href='?src=[REF(src)];ejectsheet=[mat.id];eject_amt=20'>20x</a>"
|
||||
ui += "<a href='?src=[REF(src)];ejectsheet=[ref];eject_amt=20'>20x</a>"
|
||||
else
|
||||
ui += "<span class='linkOff'>20x</span>"
|
||||
ui += "<b>[mat.name]</b>: [sheets] sheets<br>"
|
||||
@@ -148,7 +152,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
updateUsrDialog()
|
||||
return TRUE
|
||||
else if(href_list["ejectsheet"])
|
||||
var/eject_sheet = href_list["ejectsheet"]
|
||||
var/datum/material/eject_sheet = locate(href_list["ejectsheet"])
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/count = materials.retrieve_sheets(text2num(href_list["eject_amt"]), eject_sheet, drop_location())
|
||||
var/list/matlist = list()
|
||||
@@ -227,8 +231,9 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
var/list/msg = list("([timestamp]) <b>[machine_name]</b> in [area_name]<br>[action] [abs(amount)]x [noun]<br>")
|
||||
var/sep = ""
|
||||
for(var/key in materials)
|
||||
var/datum/material/M = key
|
||||
var/val = round(materials[key]) / MINERAL_MATERIAL_AMOUNT
|
||||
msg += sep
|
||||
sep = ", "
|
||||
msg += "[amount < 0 ? "-" : "+"][val] [copytext(key, length(key[1]) + 1)]"
|
||||
msg += "[amount < 0 ? "-" : "+"][val] [M.name]"
|
||||
formatted = msg.Join()
|
||||
|
||||
@@ -86,6 +86,11 @@
|
||||
proximity_monitor = new(src, 1)
|
||||
materials = AddComponent(/datum/component/remote_materials, "stacking", mapload, FALSE, mapload && force_connect)
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/Destroy()
|
||||
CONSOLE = null
|
||||
materials = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/HasProximity(atom/movable/AM)
|
||||
if(istype(AM, /obj/item/stack/sheet) && AM.loc == get_step(src, input_dir))
|
||||
process_sheet(AM)
|
||||
@@ -107,9 +112,9 @@
|
||||
qdel(inp)
|
||||
|
||||
if(materials.silo && !materials.on_hold()) //Dump the sheets to the silo
|
||||
var/matlist = storage.materials & materials.mat_container.materials
|
||||
var/matlist = storage.custom_materials & materials.mat_container.materials
|
||||
if (length(matlist))
|
||||
var/inserted = materials.mat_container.insert_stack(storage)
|
||||
var/inserted = materials.mat_container.insert_item(storage)
|
||||
materials.silo_log(src, "collected", inserted, "sheets", matlist)
|
||||
if (QDELETED(storage))
|
||||
stack_list -= key
|
||||
|
||||
+44
-23
@@ -8,14 +8,28 @@
|
||||
density = TRUE
|
||||
var/newCoins = 0 //how many coins the machine made in it's last load
|
||||
var/processing = FALSE
|
||||
var/chosen = MAT_METAL //which material will be used to make coins
|
||||
var/chosen = /datum/material/iron //which material will be used to make coins
|
||||
var/coinsToProduce = 10
|
||||
speed_process = TRUE
|
||||
|
||||
|
||||
/obj/machinery/mineral/mint/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM), MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack)
|
||||
AddComponent(/datum/component/material_container, list(
|
||||
/datum/material/iron,
|
||||
/datum/material/plasma,
|
||||
/datum/material/silver,
|
||||
/datum/material/gold,
|
||||
/datum/material/uranium,
|
||||
/datum/material/titanium,
|
||||
/datum/material/diamond,
|
||||
/datum/material/bananium,
|
||||
/datum/material/adamantine,
|
||||
/datum/material/mythril,
|
||||
/datum/material/plastic,
|
||||
/datum/material/runite
|
||||
), MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack)
|
||||
chosen = getmaterialref(chosen)
|
||||
|
||||
/obj/machinery/mineral/mint/process()
|
||||
var/turf/T = get_step(src, input_dir)
|
||||
@@ -24,7 +38,9 @@
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/obj/item/stack/sheet/O in T)
|
||||
materials.insert_stack(O, O.amount)
|
||||
var/inserted = materials.insert_item(O)
|
||||
if(inserted)
|
||||
qdel(O)
|
||||
|
||||
/obj/machinery/mineral/mint/attack_hand(mob/user)
|
||||
. = ..()
|
||||
@@ -33,17 +49,17 @@
|
||||
var/dat = "<b>Coin Press</b><br>"
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
if(!M.amount && chosen != mat_id)
|
||||
for(var/datum/material/M in materials.materials)
|
||||
var/amount = materials.get_material_amount(M)
|
||||
if(!amount && chosen != M)
|
||||
continue
|
||||
dat += "<br><b>[M.name] amount:</b> [M.amount] cm<sup>3</sup> "
|
||||
if (chosen == mat_id)
|
||||
dat += "<br><b>[M.name] amount:</b> [amount] cm<sup>3</sup> "
|
||||
if (chosen == M)
|
||||
dat += "<b>Chosen</b>"
|
||||
else
|
||||
dat += "<A href='?src=[REF(src)];choose=[mat_id]'>Choose</A>"
|
||||
dat += "<A href='?src=[REF(src)];choose=[REF(M)]'>Choose</A>"
|
||||
|
||||
var/datum/material/M = materials.materials[chosen]
|
||||
var/datum/material/M = chosen
|
||||
|
||||
dat += "<br><br>Will produce [coinsToProduce] [lowertext(M.name)] coins if enough materials are available.<br>"
|
||||
dat += "<A href='?src=[REF(src)];chooseAmt=-10'>-10</A> "
|
||||
@@ -67,22 +83,24 @@
|
||||
return
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(href_list["choose"])
|
||||
if(materials.materials[href_list["choose"]])
|
||||
chosen = href_list["choose"]
|
||||
var/datum/material/new_material = locate(href_list["choose"])
|
||||
if(istype(new_material))
|
||||
chosen = new_material
|
||||
if(href_list["chooseAmt"])
|
||||
coinsToProduce = CLAMP(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000)
|
||||
updateUsrDialog()
|
||||
if(href_list["makeCoins"])
|
||||
var/temp_coins = coinsToProduce
|
||||
processing = TRUE
|
||||
icon_state = "coinpress1"
|
||||
var/coin_mat = MINERAL_MATERIAL_AMOUNT * 0.2
|
||||
var/datum/material/M = materials.materials[chosen]
|
||||
if(!M || !M.coin_type)
|
||||
var/datum/material/M = chosen
|
||||
if(!M)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
while(coinsToProduce > 0 && materials.use_amount_type(coin_mat, chosen))
|
||||
create_coins(M.coin_type)
|
||||
while(coinsToProduce > 0 && materials.use_amount_mat(coin_mat, chosen))
|
||||
create_coins()
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
@@ -94,12 +112,15 @@
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/mint/proc/create_coins(P)
|
||||
/obj/machinery/mineral/mint/proc/create_coins()
|
||||
var/turf/T = get_step(src,output_dir)
|
||||
var/temp_list = list()
|
||||
temp_list[chosen] = 400
|
||||
if(T)
|
||||
var/obj/item/O = new P(src)
|
||||
var/obj/item/storage/bag/money/M = locate(/obj/item/storage/bag/money, T)
|
||||
if(!M)
|
||||
M = new /obj/item/storage/bag/money(src)
|
||||
unload_mineral(M)
|
||||
O.forceMove(M)
|
||||
var/obj/item/O = new /obj/item/coin(src)
|
||||
var/obj/item/storage/bag/money/B = locate(/obj/item/storage/bag/money, T)
|
||||
O.set_custom_materials(temp_list)
|
||||
if(!B)
|
||||
B = new /obj/item/storage/bag/money(src)
|
||||
unload_mineral(B)
|
||||
O.forceMove(B)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/points = 0 //How many points this ore gets you from the ore redemption machine
|
||||
var/refined_type = null //What this ore defaults to being refined into
|
||||
novariants = TRUE // Ore stacks handle their icon updates themselves to keep the illusion that there's more going
|
||||
mats_per_stack = MINERAL_MATERIAL_AMOUNT
|
||||
var/list/stack_overlays
|
||||
|
||||
/obj/item/stack/ore/update_icon()
|
||||
@@ -69,7 +70,8 @@
|
||||
item_state = "Uranium ore"
|
||||
singular_name = "uranium ore chunk"
|
||||
points = 30
|
||||
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT)
|
||||
material_flags = MATERIAL_NO_EFFECTS
|
||||
refined_type = /obj/item/stack/sheet/mineral/uranium
|
||||
|
||||
/obj/item/stack/ore/iron
|
||||
@@ -78,7 +80,7 @@
|
||||
item_state = "Iron ore"
|
||||
singular_name = "iron ore chunk"
|
||||
points = 1
|
||||
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/stack/ore/glass
|
||||
@@ -87,17 +89,17 @@
|
||||
item_state = "Glass ore"
|
||||
singular_name = "sand pile"
|
||||
points = 1
|
||||
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/glass
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50)\
|
||||
))
|
||||
new/datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50),\
|
||||
))
|
||||
|
||||
/obj/item/stack/ore/glass/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.sand_recipes
|
||||
/obj/item/stack/ore/glass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.sand_recipes
|
||||
|
||||
/obj/item/stack/ore/glass/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
if(..() || !ishuman(hit_atom))
|
||||
@@ -135,21 +137,20 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
item_state = "Plasma ore"
|
||||
singular_name = "plasma ore chunk"
|
||||
points = 15
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/plasma
|
||||
|
||||
/obj/item/stack/ore/plasma/welder_act(mob/living/user, obj/item/I)
|
||||
to_chat(user, "<span class='warning'>You can't hit a high enough temperature to smelt [src] properly!</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/stack/ore/silver
|
||||
name = "silver ore"
|
||||
icon_state = "Silver ore"
|
||||
item_state = "Silver ore"
|
||||
singular_name = "silver ore chunk"
|
||||
points = 16
|
||||
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/silver
|
||||
|
||||
/obj/item/stack/ore/gold
|
||||
@@ -158,7 +159,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
icon_state = "Gold ore"
|
||||
singular_name = "gold ore chunk"
|
||||
points = 18
|
||||
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/gold
|
||||
|
||||
/obj/item/stack/ore/diamond
|
||||
@@ -167,7 +168,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
item_state = "Diamond ore"
|
||||
singular_name = "diamond ore chunk"
|
||||
points = 50
|
||||
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/diamond
|
||||
|
||||
/obj/item/stack/ore/bananium
|
||||
@@ -176,7 +177,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
item_state = "Bananium ore"
|
||||
singular_name = "bananium ore chunk"
|
||||
points = 60
|
||||
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/bananium
|
||||
|
||||
/obj/item/stack/ore/titanium
|
||||
@@ -185,7 +186,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
item_state = "Titanium ore"
|
||||
singular_name = "titanium ore chunk"
|
||||
points = 50
|
||||
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT)
|
||||
refined_type = /obj/item/stack/sheet/mineral/titanium
|
||||
|
||||
/obj/item/stack/ore/slag
|
||||
@@ -313,17 +314,33 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
/obj/item/coin
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
name = "coin"
|
||||
icon_state = "coin__heads"
|
||||
icon_state = "coin"
|
||||
flags_1 = CONDUCT_1
|
||||
force = 1
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
custom_materials = list(/datum/material/iron = 400)
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR
|
||||
var/string_attached
|
||||
var/list/sideslist = list("heads","tails")
|
||||
var/cmineral = null
|
||||
var/cooldown = 0
|
||||
var/value = 1
|
||||
var/value
|
||||
var/coinflip
|
||||
item_flags = NO_MAT_REDEMPTION //You know, it's kind of a problem that money is worth more extrinsicly than intrinsically in this universe.
|
||||
|
||||
/obj/item/coin/Initialize()
|
||||
. = ..()
|
||||
coinflip = pick(sideslist)
|
||||
icon_state = "coin_[coinflip]"
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
/obj/item/coin/set_custom_materials(list/materials, multiplier = 1)
|
||||
. = ..()
|
||||
value = 0
|
||||
for(var/i in custom_materials)
|
||||
var/datum/material/M = i
|
||||
value += M.value_per_unit * custom_materials[M]
|
||||
|
||||
/obj/item/coin/suicide_act(mob/living/user)
|
||||
user.visible_message("<span class='suicide'>[user] contemplates suicide with \the [src]!</span>")
|
||||
@@ -342,101 +359,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
else
|
||||
user.visible_message("<span class='suicide'>\the [src] lands on [coinflip]! [user] keeps on living!</span>")
|
||||
|
||||
/obj/item/coin/Initialize()
|
||||
. = ..()
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
/obj/item/coin/examine(mob/user)
|
||||
. = ..()
|
||||
if(value)
|
||||
. += "<span class='info'>It's worth [value] credit\s.</span>"
|
||||
|
||||
/obj/item/coin/gold
|
||||
name = "gold coin"
|
||||
cmineral = "gold"
|
||||
icon_state = "coin_gold_heads"
|
||||
value = 50
|
||||
materials = list(MAT_GOLD = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/gold = 4)
|
||||
|
||||
/obj/item/coin/silver
|
||||
name = "silver coin"
|
||||
cmineral = "silver"
|
||||
icon_state = "coin_silver_heads"
|
||||
value = 20
|
||||
materials = list(MAT_SILVER = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/silver = 4)
|
||||
|
||||
/obj/item/coin/diamond
|
||||
name = "diamond coin"
|
||||
cmineral = "diamond"
|
||||
icon_state = "coin_diamond_heads"
|
||||
value = 500
|
||||
materials = list(MAT_DIAMOND = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/carbon = 4)
|
||||
|
||||
/obj/item/coin/iron
|
||||
name = "iron coin"
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
value = 1
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/iron = 4)
|
||||
|
||||
/obj/item/coin/plasma
|
||||
name = "plasma coin"
|
||||
cmineral = "plasma"
|
||||
icon_state = "coin_plasma_heads"
|
||||
value = 100
|
||||
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/toxin/plasma = 4)
|
||||
|
||||
/obj/item/coin/uranium
|
||||
name = "uranium coin"
|
||||
cmineral = "uranium"
|
||||
icon_state = "coin_uranium_heads"
|
||||
value = 80
|
||||
materials = list(MAT_URANIUM = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/uranium = 4)
|
||||
|
||||
/obj/item/coin/bananium
|
||||
name = "bananium coin"
|
||||
cmineral = "bananium"
|
||||
icon_state = "coin_bananium_heads"
|
||||
value = 1000 //makes the clown cry
|
||||
materials = list(MAT_BANANIUM = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
grind_results = list(/datum/reagent/consumable/banana = 4)
|
||||
|
||||
/obj/item/coin/adamantine
|
||||
name = "adamantine coin"
|
||||
cmineral = "adamantine"
|
||||
icon_state = "coin_adamantine_heads"
|
||||
value = 1500
|
||||
|
||||
/obj/item/coin/mythril
|
||||
name = "mythril coin"
|
||||
cmineral = "mythril"
|
||||
icon_state = "coin_mythril_heads"
|
||||
value = 3000
|
||||
|
||||
/obj/item/coin/twoheaded
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
desc = "Hey, this coin's the same on both sides!"
|
||||
sideslist = list("heads")
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT*0.2)
|
||||
value = 1
|
||||
grind_results = list(/datum/reagent/iron = 4)
|
||||
|
||||
/obj/item/coin/antagtoken
|
||||
name = "antag token"
|
||||
icon_state = "coin_valid_valid"
|
||||
cmineral = "valid"
|
||||
desc = "A novelty coin that helps the heart know what hard evidence cannot prove."
|
||||
sideslist = list("valid", "salad")
|
||||
value = 0
|
||||
grind_results = list(/datum/reagent/consumable/sodiumchloride = 4)
|
||||
. += "<span class='info'>It's worth [value] credit\s.</span>"
|
||||
|
||||
/obj/item/coin/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
@@ -470,10 +395,10 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
if(string_attached) //does the coin have a wire attached
|
||||
to_chat(user, "<span class='warning'>The coin won't flip very well with something attached!</span>" )
|
||||
return FALSE//do not flip the coin
|
||||
coinflip = pick(sideslist)
|
||||
cooldown = world.time + 15
|
||||
flick("coin_[cmineral]_flip", src)
|
||||
icon_state = "coin_[cmineral]_[coinflip]"
|
||||
flick("coin_[coinflip]_flip", src)
|
||||
coinflip = pick(sideslist)
|
||||
icon_state = "coin_[coinflip]"
|
||||
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
|
||||
var/oldloc = loc
|
||||
sleep(15)
|
||||
@@ -483,5 +408,51 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
"<span class='italics'>You hear the clattering of loose change.</span>")
|
||||
return TRUE//did the coin flip? useful for suicide_act
|
||||
|
||||
/obj/item/coin/gold
|
||||
custom_materials = list(/datum/material/gold = 400)
|
||||
|
||||
/obj/item/coin/silver
|
||||
custom_materials = list(/datum/material/silver = 400)
|
||||
|
||||
/obj/item/coin/diamond
|
||||
custom_materials = list(/datum/material/diamond = 400)
|
||||
|
||||
/obj/item/coin/plasma
|
||||
custom_materials = list(/datum/material/plasma = 400)
|
||||
|
||||
/obj/item/coin/uranium
|
||||
custom_materials = list(/datum/material/uranium = 400)
|
||||
|
||||
/obj/item/coin/titanium
|
||||
custom_materials = list(/datum/material/titanium = 400)
|
||||
|
||||
/obj/item/coin/bananium
|
||||
custom_materials = list(/datum/material/bananium = 400)
|
||||
|
||||
/obj/item/coin/adamantine
|
||||
custom_materials = list(/datum/material/adamantine = 400)
|
||||
|
||||
/obj/item/coin/mythril
|
||||
custom_materials = list(/datum/material/mythril = 400)
|
||||
|
||||
/obj/item/coin/plastic
|
||||
custom_materials = list(/datum/material/plastic = 400)
|
||||
|
||||
/obj/item/coin/runite
|
||||
custom_materials = list(/datum/material/runite = 400)
|
||||
|
||||
/obj/item/coin/twoheaded
|
||||
desc = "Hey, this coin's the same on both sides!"
|
||||
sideslist = list("heads")
|
||||
|
||||
/obj/item/coin/antagtoken
|
||||
name = "antag token"
|
||||
desc = "A novelty coin that helps the heart know what hard evidence cannot prove."
|
||||
icon_state = "coin_valid"
|
||||
custom_materials = list(/datum/material/plastic = 400)
|
||||
sideslist = list("valid", "salad")
|
||||
material_flags = NONE
|
||||
|
||||
/obj/item/coin/iron
|
||||
|
||||
#undef ORESTACK_OVERLAYS_MAX
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/ore_box/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, 0.01) //please datum mats no more cancer
|
||||
|
||||
/obj/structure/ore_box/crowbar_act(mob/living/user, obj/item/I)
|
||||
if(I.use_tool(src, user, 50, volume=50))
|
||||
user.visible_message("[user] pries \the [src] apart.",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
|
||||
var/hit_percent = (100-blocked)/100
|
||||
if(!forced && hit_percent <= 0)
|
||||
return 0
|
||||
|
||||
@@ -397,7 +397,7 @@
|
||||
var/flavor = print_flavor_text(flavor_text)
|
||||
if(flavor)
|
||||
. += flavor
|
||||
var/temp_flavor = print_flavor_text(flavor_text_2)
|
||||
var/temp_flavor = print_flavor_text(flavor_text_2,TRUE)
|
||||
if(temp_flavor)
|
||||
. += temp_flavor
|
||||
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
|
||||
|
||||
@@ -1924,6 +1924,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
log_combat(user, target, "shoved", append_message)
|
||||
|
||||
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
|
||||
var/hit_percent = (100-(blocked+armor))/100
|
||||
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
|
||||
if(!forced && hit_percent <= 0)
|
||||
|
||||
@@ -13,7 +13,13 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
//Just robo looking parts.
|
||||
mutant_heart = /obj/item/organ/heart/ipc
|
||||
mutantlungs = /obj/item/organ/lungs/ipc
|
||||
mutantliver = /obj/item/organ/liver/ipc
|
||||
mutantstomach = /obj/item/organ/stomach/ipc
|
||||
mutanteyes = /obj/item/organ/eyes/ipc
|
||||
|
||||
exotic_bloodtype = "HF"
|
||||
|
||||
var/datum/action/innate/monitor_change/screen
|
||||
|
||||
@@ -546,6 +546,12 @@
|
||||
/mob/living/proc/update_damage_overlays()
|
||||
return
|
||||
|
||||
/mob/living/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
for(var/i in get_equipped_items())
|
||||
var/obj/item/item = i
|
||||
SEND_SIGNAL(item, COMSIG_ITEM_WEARERCROSSED, AM)
|
||||
|
||||
/mob/living/Move(atom/newloc, direct)
|
||||
if (buckled && buckled.loc != newloc) //not updating position
|
||||
if (!buckled.anchored)
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
|
||||
|
||||
aiMulti = new(src)
|
||||
radio = new /obj/item/radio/headset/ai(src)
|
||||
radio = new /obj/item/radio/headset/silicon/ai(src)
|
||||
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
|
||||
|
||||
deploy_action.Grant(src)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
health = 500
|
||||
maxHealth = 500
|
||||
layer = BELOW_MOB_LAYER
|
||||
var/obj/item/instrument/piano_synth/internal_instrument
|
||||
silicon_privileges = PRIVILEDGES_PAI
|
||||
var/datum/element/mob_holder/current_mob_holder //because only a few of their chassis can be actually held.
|
||||
|
||||
@@ -27,6 +28,7 @@
|
||||
var/speakDoubleExclamation = "alarms"
|
||||
var/speakQuery = "queries"
|
||||
|
||||
var/obj/item/radio/headset // The pAI's headset
|
||||
var/obj/item/pai_cable/cable // The cable we produce and use when door or camera jacking
|
||||
|
||||
var/master // Name of the one who commands us
|
||||
@@ -54,6 +56,7 @@
|
||||
|
||||
var/obj/item/integrated_signaler/signaler // AI's signaller
|
||||
|
||||
var/encryptmod = FALSE
|
||||
var/holoform = FALSE
|
||||
var/canholo = TRUE
|
||||
var/obj/item/card/id/access_card = null
|
||||
@@ -84,6 +87,7 @@
|
||||
var/icon/custom_holoform_icon
|
||||
|
||||
/mob/living/silicon/pai/Destroy()
|
||||
QDEL_NULL(internal_instrument)
|
||||
if (loc != card)
|
||||
card.forceMove(drop_location())
|
||||
card.pai = null
|
||||
@@ -106,7 +110,7 @@
|
||||
card = P
|
||||
signaler = new(src)
|
||||
if(!radio)
|
||||
radio = new /obj/item/radio(src)
|
||||
radio = new /obj/item/radio/headset/silicon/pai(src)
|
||||
|
||||
//PDA
|
||||
pda = new(src)
|
||||
@@ -296,6 +300,17 @@
|
||||
/mob/living/silicon/pai/process()
|
||||
emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth)
|
||||
|
||||
/obj/item/paicard/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
user.set_machine(src)
|
||||
if(pai.encryptmod == TRUE)
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
pai.radio.attackby(W, user, params)
|
||||
else if(istype(W, /obj/item/encryptionkey))
|
||||
pai.radio.attackby(W, user, params)
|
||||
else
|
||||
to_chat(user, "Encryption Key ports not configured.")
|
||||
|
||||
/mob/living/silicon/pai/proc/short_radio()
|
||||
if(radio_short_timerid)
|
||||
deltimer(radio_short_timerid)
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
"universal translator" = 35,
|
||||
//"projection array" = 15
|
||||
"remote signaller" = 5,
|
||||
"loudness booster" = 25,
|
||||
"encryption keys" = 20
|
||||
)
|
||||
|
||||
/mob/living/silicon/pai/proc/paiInterface()
|
||||
@@ -50,6 +52,8 @@
|
||||
left_part = softwareMedicalRecord()
|
||||
if("securityrecord")
|
||||
left_part = softwareSecurityRecord()
|
||||
if("encryptionkeys")
|
||||
left_part = softwareEncryptionKeys()
|
||||
if("translator")
|
||||
left_part = softwareTranslator()
|
||||
if("atmosensor")
|
||||
@@ -64,6 +68,8 @@
|
||||
left_part = softwareCamera()
|
||||
if("signaller")
|
||||
left_part = softwareSignal()
|
||||
if("loudness")
|
||||
left_part = softwareLoudness()
|
||||
|
||||
//usr << browse_rsc('windowbak.png') // This has been moved to the mob's Login() proc
|
||||
|
||||
@@ -256,6 +262,9 @@
|
||||
else
|
||||
var/datum/atom_hud/med = GLOB.huds[med_hud]
|
||||
med.remove_hud_from(src)
|
||||
if("encryptionkeys")
|
||||
if(href_list["toggle"])
|
||||
encryptmod = TRUE
|
||||
if("translator")
|
||||
if(href_list["toggle"])
|
||||
grant_all_languages(TRUE)
|
||||
@@ -271,6 +280,12 @@
|
||||
var/turf/T = get_turf(loc)
|
||||
cable = new /obj/item/pai_cable(T)
|
||||
T.visible_message("<span class='warning'>A port on [src] opens to reveal [cable], which promptly falls to the floor.</span>", "<span class='italics'>You hear the soft click of something light and hard falling to the ground.</span>")
|
||||
if("loudness")
|
||||
if(subscreen == 1) // Open Instrument
|
||||
internal_instrument.interact(src)
|
||||
if(subscreen == 2) // Change Instrument type
|
||||
internal_instrument.selectInstrument()
|
||||
|
||||
//updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
|
||||
paiInterface() // So we'll just call the update directly rather than doing some default checks
|
||||
return
|
||||
@@ -306,6 +321,8 @@
|
||||
dat += "<a href='byond://?src=[REF(src)];software=[s]'>Camera Jack</a> <br>"
|
||||
if(s == "remote signaller")
|
||||
dat += "<a href='byond://?src=[REF(src)];software=signaller;sub=0'>Remote Signaller</a> <br>"
|
||||
if(s == "loudness booster")
|
||||
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=0'>Loudness Booster</a> <br>"
|
||||
dat += "<br>"
|
||||
|
||||
// Advanced
|
||||
@@ -319,6 +336,8 @@
|
||||
dat += "<a href='byond://?src=[REF(src)];software=securityhud;sub=0'>Facial Recognition Suite</a>[(secHUD) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
|
||||
if(s == "medical HUD")
|
||||
dat += "<a href='byond://?src=[REF(src)];software=medicalhud;sub=0'>Medical Analysis Suite</a>[(medHUD) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
|
||||
if(s == "encryption keys")
|
||||
dat += "<a href='byond://?src=[REF(src)];software=encryptionkeys;sub=0'>Channel Encryption Firmware</a>[(encryptmod) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
|
||||
if(s == "universal translator")
|
||||
var/datum/language_holder/H = get_language_holder()
|
||||
dat += "<a href='byond://?src=[REF(src)];software=translator;sub=0'>Universal Translator</a>[H.omnitongue ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
|
||||
@@ -469,6 +488,14 @@
|
||||
. += "<pre>Requested security record not found,</pre><BR>"
|
||||
. += "<BR>\n<A href='?src=[REF(src)];software=securityrecord;sub=0'>Back</A><BR>"
|
||||
return .
|
||||
// Encryption Keys
|
||||
// Encryption kets
|
||||
/mob/living/silicon/pai/proc/softwareEncryptionKeys()
|
||||
var/dat = {"<h3>Encryption Key Firmware</h3><br>
|
||||
When enabled, this device will be able to use up to two (2) encryption keys for departmental channel access.<br><br>
|
||||
The device is currently [encryptmod ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled.</font><br>[encryptmod ? "" : "<a href='byond://?src=[REF(src)];software=encryptionkeys;sub=0;toggle=1'>Activate Encryption Key Ports</a><br>"]"}
|
||||
return dat
|
||||
|
||||
|
||||
// Universal Translator
|
||||
/mob/living/silicon/pai/proc/softwareTranslator()
|
||||
@@ -630,3 +657,12 @@
|
||||
dat += "<br><br>"
|
||||
dat += "Messages: <hr> [pda.tnote]"
|
||||
return dat
|
||||
|
||||
// Loudness Booster
|
||||
/mob/living/silicon/pai/proc/softwareLoudness()
|
||||
if(!internal_instrument)
|
||||
internal_instrument = new(src)
|
||||
var/dat = "<h3>Sound Synthetizer</h3>"
|
||||
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=1'>Open Synthesizer Interface</a><br>"
|
||||
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=2'>Choose Instrument Type</a>"
|
||||
return dat
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
var/obj/item/stack/S = I
|
||||
|
||||
if(is_type_in_list(S, list(/obj/item/stack/sheet/metal, /obj/item/stack/rods, /obj/item/stack/tile/plasteel)))
|
||||
if(S.materials[MAT_METAL])
|
||||
S.cost = S.materials[MAT_METAL] * 0.25
|
||||
if(S.custom_materials?.len && S.custom_materials[getmaterialref(/datum/material/iron)])
|
||||
S.cost = S.custom_materials[getmaterialref(/datum/material/iron)] * 0.25
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/metal)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/glass))
|
||||
@@ -127,7 +127,7 @@
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/wrapping_paper)
|
||||
|
||||
if(S && S.source)
|
||||
S.materials = list()
|
||||
S.custom_materials = null
|
||||
S.is_cyborg = 1
|
||||
|
||||
if(I.loc != src)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/mob/living/simple_animal/hostile/dark_wizard
|
||||
name = "Dark Wizard"
|
||||
desc = "Killing amateurs since the dawn of times."
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "dark_wizard"
|
||||
icon_living = "dark_wizard"
|
||||
move_to_delay = 10
|
||||
projectiletype = /obj/item/projectile/temp/earth_bolt
|
||||
projectilesound = 'sound/magic/ethereal_enter.ogg'
|
||||
ranged = TRUE
|
||||
ranged_message = "earth bolts"
|
||||
ranged_cooldown_time = 20
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
harm_intent_damage = 5
|
||||
obj_damage = 20
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
attacktext = "staves"
|
||||
a_intent = INTENT_HARM
|
||||
speak_emote = list("chants")
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
aggro_vision_range = 9
|
||||
turns_per_move = 5
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
faction = list(ROLE_WIZARD)
|
||||
do_footstep = TRUE
|
||||
weather_immunities = list("lava","ash")
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
loot = list(/obj/effect/decal/remains/human)
|
||||
|
||||
/obj/item/projectile/temp/earth_bolt
|
||||
name = "earth_bolt"
|
||||
icon_state = "declone"
|
||||
damage = 4
|
||||
damage_type = BURN
|
||||
flag = "energy"
|
||||
@@ -81,11 +81,13 @@
|
||||
throw_message = "falls right through the strange body of the"
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
pass_flags = PASSTABLE
|
||||
pass_flags = PASSTABLE | PASSMOB //they shouldn't get stuck behind hivelords.
|
||||
density = FALSE
|
||||
del_on_death = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/swarming) //oh god not the bees
|
||||
addtimer(CALLBACK(src, .proc/death), 100)
|
||||
|
||||
//Legion
|
||||
@@ -174,7 +176,6 @@
|
||||
speak_emote = list("echoes")
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "is shrugged off by"
|
||||
pass_flags = PASSTABLE
|
||||
del_on_death = TRUE
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/max_hardware_size = 0 // Maximal hardware w_class. Tablets/PDAs have 1, laptops 2, consoles 4.
|
||||
var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer.
|
||||
|
||||
integrity_failure = 50
|
||||
integrity_failure = 0.5
|
||||
max_integrity = 100
|
||||
armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
|
||||
/obj/item/modular_computer/examine(mob/user)
|
||||
. = ..()
|
||||
if(obj_integrity <= integrity_failure)
|
||||
if(obj_integrity <= integrity_failure * max_integrity)
|
||||
. += "<span class='danger'>It is heavily damaged!</span>"
|
||||
else if(obj_integrity < max_integrity)
|
||||
. += "<span class='warning'>It is damaged.</span>"
|
||||
@@ -219,7 +219,7 @@
|
||||
else
|
||||
add_overlay(icon_state_menu)
|
||||
|
||||
if(obj_integrity <= integrity_failure)
|
||||
if(obj_integrity <= integrity_failure * max_integrity)
|
||||
add_overlay("bsod")
|
||||
add_overlay("broken")
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
|
||||
/obj/item/modular_computer/proc/turn_on(mob/user)
|
||||
var/issynth = issilicon(user) // Robots and AIs get different activation messages.
|
||||
if(obj_integrity <= integrity_failure)
|
||||
if(obj_integrity <= integrity_failure * max_integrity)
|
||||
if(issynth)
|
||||
to_chat(user, "<span class='warning'>You send an activation signal to \the [src], but it responds with an error code. It must be damaged.</span>")
|
||||
else
|
||||
@@ -265,7 +265,7 @@
|
||||
last_power_usage = 0
|
||||
return 0
|
||||
|
||||
if(obj_integrity <= integrity_failure)
|
||||
if(obj_integrity <= integrity_failure * max_integrity)
|
||||
shutdown_computer()
|
||||
return 0
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
else
|
||||
add_overlay(screen_icon_state_menu)
|
||||
|
||||
if(cpu && cpu.obj_integrity <= cpu.integrity_failure)
|
||||
if(cpu && cpu.obj_integrity <= cpu.integrity_failure * cpu.max_integrity)
|
||||
add_overlay("bsod")
|
||||
add_overlay("broken")
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
steel_sheet_cost = 10
|
||||
light_strength = 2
|
||||
max_integrity = 300
|
||||
integrity_failure = 150
|
||||
integrity_failure = 0.5
|
||||
var/console_department = "" // Used in New() to set network tag according to our area.
|
||||
|
||||
/obj/machinery/modular_computer/console/buildable/Initialize()
|
||||
|
||||
@@ -4,7 +4,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
name = "newscaster frame"
|
||||
desc = "Used to build newscasters, just secure to the wall."
|
||||
icon_state = "newscaster"
|
||||
materials = list(MAT_METAL=14000, MAT_GLASS=8000)
|
||||
custom_materials = list(/datum/material/iron=14000, /datum/material/glass=8000)
|
||||
result_path = /obj/machinery/newscaster
|
||||
|
||||
/obj/machinery/newscaster
|
||||
@@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
verb_exclaim = "beeps"
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
max_integrity = 200
|
||||
integrity_failure = 50
|
||||
integrity_failure = 0.25
|
||||
var/screen = 0
|
||||
var/paper_remaining = 15
|
||||
var/securityCaster = 0
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
materials = list(MAT_METAL=10)
|
||||
custom_materials = list(/datum/material/iron=10)
|
||||
pressure_resistance = 2
|
||||
grind_results = list(/datum/reagent/iron = 2, /datum/reagent/iodine = 1)
|
||||
var/colour = "black" //what colour the ink is!
|
||||
@@ -79,7 +79,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
colour = "crimson"
|
||||
materials = list(MAT_GOLD = 750)
|
||||
custom_materials = list(/datum/material/gold = 750)
|
||||
sharpness = IS_SHARP
|
||||
resistance_flags = FIRE_PROOF
|
||||
unique_reskin = list("Oak" = "pen-fountain-o",
|
||||
@@ -139,6 +139,7 @@
|
||||
O.name = input
|
||||
to_chat(user, "\The [oldname] has been successfully been renamed to \the [input].")
|
||||
O.renamedByPlayer = TRUE
|
||||
log_game("[user] [key_name(user)] has renamed [O] to [input]")
|
||||
|
||||
if(penchoice == "Change description")
|
||||
var/input = stripped_input(user,"Describe \the [O.name] here", ,"", 100)
|
||||
@@ -146,6 +147,7 @@
|
||||
return
|
||||
O.desc = input
|
||||
to_chat(user, "You have successfully changed \the [O.name]'s description.")
|
||||
log_game("[user] [key_name(user)] has changed [O]'s description to to [input]")
|
||||
|
||||
/*
|
||||
* Sleepypens
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
active_power_usage = 200
|
||||
power_channel = EQUIP
|
||||
max_integrity = 300
|
||||
integrity_failure = 100
|
||||
integrity_failure = 0.33
|
||||
var/obj/item/paper/copy = null //what's in the copier!
|
||||
var/obj/item/photo/photocopy = null
|
||||
var/obj/item/documents/doccopy = null
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
materials = list(MAT_METAL=60)
|
||||
custom_materials = list(/datum/material/iron=60)
|
||||
item_color = "cargo"
|
||||
pressure_resistance = 2
|
||||
attack_verb = list("stamped")
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_NECK
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 150)
|
||||
custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 150)
|
||||
var/flash_enabled = TRUE
|
||||
var/state_on = "camera"
|
||||
var/state_off = "camera_off"
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
|
||||
custom_materials = list(/datum/material/iron = 10, /datum/material/glass = 10)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "picture frame"
|
||||
desc = "The perfect showcase for your favorite deathtrap memories."
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
materials = list()
|
||||
custom_materials = null
|
||||
flags_1 = 0
|
||||
icon_state = "frame-empty"
|
||||
result_path = /obj/structure/sign/picture_frame
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
materials = list(MAT_METAL=100)
|
||||
custom_materials = list(/datum/material/iron=100)
|
||||
|
||||
/obj/item/am_shielding_container/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/multitool) && istype(src.loc, /turf))
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
use_power = NO_POWER_USE
|
||||
req_access = null
|
||||
max_integrity = 300
|
||||
integrity_failure = 50
|
||||
integrity_failure = 0.17
|
||||
var/damage_deflection = 10
|
||||
resistance_flags = FIRE_PROOF
|
||||
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
|
||||
|
||||
@@ -488,7 +488,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
materials = list(MAT_METAL=10, MAT_GLASS=5)
|
||||
custom_materials = list(/datum/material/iron=10, /datum/material/glass=5)
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
|
||||
@@ -499,7 +499,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
|
||||
|
||||
/obj/item/stack/cable_coil/cyborg
|
||||
is_cyborg = 1
|
||||
materials = list()
|
||||
custom_materials = null
|
||||
cost = 1
|
||||
|
||||
/obj/item/stack/cable_coil/cyborg/attack_self(mob/user)
|
||||
|
||||
+12
-12
@@ -13,8 +13,8 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/charge = 0 // note %age conveted to actual charge in New
|
||||
var/maxcharge = 1000
|
||||
custom_materials = list(/datum/material/iron=700, /datum/material/glass=50)
|
||||
var/start_charged = TRUE
|
||||
materials = list(MAT_METAL=700, MAT_GLASS=50)
|
||||
grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
|
||||
var/rigged = FALSE // true if rigged to explode
|
||||
var/chargerate = 100 //how much power is given every tick in a recharger
|
||||
@@ -172,7 +172,7 @@
|
||||
name = "\improper Nanotrasen brand rechargeable AA battery"
|
||||
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
|
||||
maxcharge = 500
|
||||
materials = list(MAT_GLASS=40)
|
||||
custom_materials = list(/datum/material/glass=40)
|
||||
|
||||
/obj/item/stock_parts/cell/crap/empty
|
||||
start_charged = FALSE
|
||||
@@ -181,7 +181,7 @@
|
||||
name = "upgraded power cell"
|
||||
desc = "A power cell with a slightly higher capacity than normal!"
|
||||
maxcharge = 2500
|
||||
materials = list(MAT_GLASS=50)
|
||||
custom_materials = list(/datum/material/glass=50)
|
||||
chargerate = 1000
|
||||
|
||||
/obj/item/stock_parts/cell/upgraded/plus
|
||||
@@ -192,7 +192,7 @@
|
||||
/obj/item/stock_parts/cell/secborg
|
||||
name = "security borg rechargeable D battery"
|
||||
maxcharge = 1250 //25/12/6 disabler/laser/taser shots.
|
||||
materials = list(MAT_GLASS=40)
|
||||
custom_materials = list(/datum/material/glass=40)
|
||||
|
||||
/obj/item/stock_parts/cell/secborg/empty
|
||||
start_charged = FALSE
|
||||
@@ -218,7 +218,7 @@
|
||||
name = "high-capacity power cell"
|
||||
icon_state = "hcell"
|
||||
maxcharge = 10000
|
||||
materials = list(MAT_GLASS=60)
|
||||
custom_materials = list(/datum/material/glass=60)
|
||||
chargerate = 1500
|
||||
|
||||
/obj/item/stock_parts/cell/high/plus
|
||||
@@ -235,7 +235,7 @@
|
||||
name = "super-capacity power cell"
|
||||
icon_state = "scell"
|
||||
maxcharge = 20000
|
||||
materials = list(MAT_GLASS=300)
|
||||
custom_materials = list(/datum/material/glass=300)
|
||||
chargerate = 2000
|
||||
|
||||
/obj/item/stock_parts/cell/super/empty
|
||||
@@ -245,7 +245,7 @@
|
||||
name = "hyper-capacity power cell"
|
||||
icon_state = "hpcell"
|
||||
maxcharge = 30000
|
||||
materials = list(MAT_GLASS=400)
|
||||
custom_materials = list(/datum/material/glass=400)
|
||||
chargerate = 3000
|
||||
|
||||
/obj/item/stock_parts/cell/hyper/empty
|
||||
@@ -256,7 +256,7 @@
|
||||
desc = "A rechargeable transdimensional power cell."
|
||||
icon_state = "bscell"
|
||||
maxcharge = 40000
|
||||
materials = list(MAT_GLASS=600)
|
||||
custom_materials = list(/datum/material/glass=600)
|
||||
chargerate = 4000
|
||||
|
||||
/obj/item/stock_parts/cell/bluespace/empty
|
||||
@@ -266,7 +266,7 @@
|
||||
name = "infinite-capacity power cell!"
|
||||
icon_state = "icell"
|
||||
maxcharge = 30000
|
||||
materials = list(MAT_GLASS=1000)
|
||||
custom_materials = list(/datum/material/glass=1000)
|
||||
rating = 100
|
||||
chargerate = 30000
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
icon_state = "potato"
|
||||
charge = 100
|
||||
maxcharge = 300
|
||||
materials = list()
|
||||
custom_materials = null
|
||||
grown_battery = TRUE //it has the overlays for wires
|
||||
|
||||
/obj/item/stock_parts/cell/high/slime
|
||||
@@ -300,7 +300,7 @@
|
||||
desc = "A yellow slime core infused with plasma, it crackles with power."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "yellow slime extract"
|
||||
materials = list()
|
||||
custom_materials = null
|
||||
rating = 5 //self-recharge makes these desirable
|
||||
self_recharge = 1 // Infused slime cores self-recharge, over time
|
||||
|
||||
@@ -339,7 +339,7 @@
|
||||
name = "miniature power cell"
|
||||
desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage."
|
||||
maxcharge = 120 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell
|
||||
materials = list(MAT_GLASS = 20)
|
||||
custom_materials = list(/datum/material/glass = 20)
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/stock_parts/cell/emergency_light/Initialize()
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
icon_state = "floodlight"
|
||||
density = TRUE
|
||||
max_integrity = 100
|
||||
integrity_failure = 80
|
||||
integrity_failure = 0.8
|
||||
idle_power_usage = 100
|
||||
active_power_usage = 1000
|
||||
var/list/light_setting_list = list(0, 5, 10, 15)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
name = "small light fixture frame"
|
||||
icon_state = "bulb-construct-item"
|
||||
result_path = /obj/structure/light_construct/small
|
||||
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/item/wallframe/light_fixture/try_build(turf/on_wall, user)
|
||||
if(!..())
|
||||
@@ -726,7 +726,7 @@
|
||||
var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
|
||||
var/base_state
|
||||
var/switchcount = 0 // number of times switched
|
||||
materials = list(MAT_GLASS=100)
|
||||
custom_materials = list(/datum/material/glass=100)
|
||||
grind_results = list(/datum/reagent/silicon = 5, /datum/reagent/nitrogen = 10) //Nitrogen is used as a cheaper alternative to argon in incandescent lighbulbs
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/brightness = 2 //how much light it gives off
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
req_access = list(ACCESS_ENGINE_EQUIP)
|
||||
// use_power = NO_POWER_USE
|
||||
max_integrity = 350
|
||||
integrity_failure = 80
|
||||
integrity_failure = 0.2
|
||||
circuit = /obj/item/circuitboard/machine/rad_collector
|
||||
var/obj/item/tank/internals/plasma/loaded_tank = null
|
||||
var/stored_power = 0
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
active_power_usage = 0
|
||||
var/id = 0
|
||||
max_integrity = 150
|
||||
integrity_failure = 50
|
||||
integrity_failure = 0.33
|
||||
var/obscured = 0
|
||||
var/sunfrac = 0
|
||||
var/adir = SOUTH // actual dir
|
||||
@@ -265,7 +265,7 @@
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 250
|
||||
max_integrity = 200
|
||||
integrity_failure = 100
|
||||
integrity_failure = 0.5
|
||||
var/icon_screen = "solar"
|
||||
var/icon_keyboard = "power_key"
|
||||
var/id = 0
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
density = TRUE
|
||||
use_power = NO_POWER_USE
|
||||
max_integrity = 250
|
||||
integrity_failure = 50
|
||||
integrity_failure = 0.2
|
||||
|
||||
var/id = 0
|
||||
var/sun_angle = 0 // sun angle as set by sun datum
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
materials = list(MAT_METAL = 500)
|
||||
custom_materials = list(/datum/material/iron = 500)
|
||||
var/fire_sound = null //What sound should play when this ammo is fired
|
||||
var/caliber = list() //Which kind of guns it can be loaded into
|
||||
var/projectile_type = null //The bullet type to create when New() is called
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
icon_state = "blshell"
|
||||
caliber = "shotgun"
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun_slug
|
||||
materials = list(MAT_METAL=4000)
|
||||
custom_materials = list(/datum/material/iron=4000)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/beanbag
|
||||
name = "beanbag slug"
|
||||
desc = "A weak beanbag slug for riot control."
|
||||
icon_state = "bshell"
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun_beanbag
|
||||
materials = list(MAT_METAL=250)
|
||||
custom_materials = list(/datum/material/iron=250)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/incendiary
|
||||
name = "incendiary slug"
|
||||
@@ -34,7 +34,7 @@
|
||||
desc = "A stunning taser slug."
|
||||
icon_state = "stunshell"
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun_stunslug
|
||||
materials = list(MAT_METAL=250)
|
||||
custom_materials = list(/datum/material/iron=250)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/meteorslug
|
||||
name = "meteorslug shell"
|
||||
@@ -71,14 +71,14 @@
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/shotgun_rubbershot
|
||||
pellets = 6
|
||||
variance = 25
|
||||
materials = list(MAT_METAL=4000)
|
||||
custom_materials = list(/datum/material/iron=4000)
|
||||
|
||||
/obj/item/ammo_casing/shotgun/improvised
|
||||
name = "improvised shell"
|
||||
desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
|
||||
icon_state = "improvshell"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/shotgun_improvised
|
||||
materials = list(MAT_METAL=250)
|
||||
custom_materials = list(/datum/material/iron=250)
|
||||
pellets = 10
|
||||
variance = 25
|
||||
|
||||
|
||||
@@ -9,18 +9,18 @@
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/ashen
|
||||
name = "ashen arrow"
|
||||
desc = "Fire harderned wooden arrow."
|
||||
icon_state = "asharrow"
|
||||
desc = "An arrow made of wood, hardened by fire."
|
||||
icon_state = "ashenarrow"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/arrow/ashen
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/bone
|
||||
name = "bone arrow"
|
||||
desc = "Arrow made of bone and sinew. The tip is sharp enough to pierce into a goliath plate."
|
||||
desc = "An arrow made of bone and sinew. The tip is sharp enough to pierce through a goliath plate."
|
||||
icon_state = "bonearrow"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/arrow/bone
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow/bronze
|
||||
name = "bronze arrow"
|
||||
desc = "Bronze tipped arrow."
|
||||
desc = "An arrow made of wood, tipped with bronze. The tip is dense enough to provide some armor penetration."
|
||||
icon_state = "bronzearrow"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/arrow/bronze
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
caliber = "foam_force"
|
||||
icon = 'icons/obj/guns/toy.dmi'
|
||||
icon_state = "foamdart"
|
||||
materials = list(MAT_METAL = 11.25)
|
||||
custom_materials = list(/datum/material/iron = 11.25)
|
||||
harmful = FALSE
|
||||
var/modified = FALSE
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/riot
|
||||
icon_state = "foamdart_riot"
|
||||
materials = list(MAT_METAL = 1125)
|
||||
custom_materials = list(/datum/material/iron = 1125)
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/mag
|
||||
name = "magfoam dart"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
item_state = "syringe_kit"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
materials = list(MAT_METAL = 30000)
|
||||
custom_materials = list(/datum/material/iron = 30000)
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
@@ -26,8 +26,8 @@
|
||||
/obj/item/ammo_box/Initialize()
|
||||
. = ..()
|
||||
if (!bullet_cost)
|
||||
for (var/material in materials)
|
||||
var/material_amount = materials[material]
|
||||
for (var/material in custom_materials)
|
||||
var/material_amount = custom_materials[material]
|
||||
LAZYSET(base_cost, material, (material_amount * 0.10))
|
||||
|
||||
material_amount *= 0.90 // 10% for the container
|
||||
@@ -121,7 +121,8 @@
|
||||
for (var/material in bullet_cost)
|
||||
var/material_amount = bullet_cost[material]
|
||||
material_amount = (material_amount*stored_ammo.len) + base_cost[material]
|
||||
materials[material] = material_amount
|
||||
custom_materials[material] = material_amount
|
||||
set_custom_materials(custom_materials)//make sure we setup the correct properties again
|
||||
|
||||
//Behavior for magazines
|
||||
/obj/item/ammo_box/magazine/proc/ammo_count()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
ammo_type = /obj/item/ammo_casing/c38
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
materials = list(MAT_METAL = 20000)
|
||||
custom_materials = list(/datum/material/iron = 20000)
|
||||
|
||||
/obj/item/ammo_box/c38/lethal
|
||||
name = "speed loader (.38)"
|
||||
@@ -85,7 +85,7 @@
|
||||
icon_state = "foambox"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
|
||||
max_ammo = 40
|
||||
materials = list(MAT_METAL = 500)
|
||||
custom_materials = list(/datum/material/iron = 500)
|
||||
|
||||
/obj/item/ammo_box/foambox/mag
|
||||
name = "ammo box (Magnetic Foam Darts)"
|
||||
@@ -97,4 +97,4 @@
|
||||
/obj/item/ammo_box/foambox/riot
|
||||
icon_state = "foambox_riot"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
materials = list(MAT_METAL = 50000)
|
||||
custom_materials = list(/datum/material/iron = 50000)
|
||||
|
||||
@@ -64,4 +64,4 @@
|
||||
max_ammo = 24
|
||||
multiple_sprites = 2
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
|
||||
materials = list(MAT_METAL = 200)
|
||||
custom_materials = list(/datum/material/iron = 200)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
item_state = "gun"
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
materials = list(MAT_METAL=2000)
|
||||
custom_materials = list(/datum/material/iron=2000)
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
|
||||
@@ -22,11 +22,9 @@
|
||||
/obj/item/gun/ballistic/bow/chamber_round()
|
||||
chambered = magazine.get_round(1)
|
||||
|
||||
/obj/item/gun/ballistic/bow/afterattack()
|
||||
. = ..()
|
||||
if (chambered)
|
||||
chambered = null
|
||||
magazine.get_round(0)
|
||||
/obj/item/gun/ballistic/bow/process_chamber()
|
||||
chambered = null
|
||||
magazine.get_round(0)
|
||||
update_icon()
|
||||
|
||||
/obj/item/gun/ballistic/bow/attack_self(mob/living/user)
|
||||
@@ -47,7 +45,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/gun/ballistic/bow/update_icon()
|
||||
icon_state = "bow_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
|
||||
icon_state = "[initial(icon_state)]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
|
||||
|
||||
/obj/item/gun/ballistic/bow/can_shoot()
|
||||
return chambered
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
slowdown = 1
|
||||
slot_flags = null
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
materials = list()
|
||||
custom_materials = null
|
||||
burst_size = 3
|
||||
automatic = 0
|
||||
fire_delay = 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=2000)
|
||||
custom_materials = list(/datum/material/iron=2000)
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
|
||||
ammo_x_offset = 1
|
||||
shaded_charge = 1
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
icon_state = "crossbow"
|
||||
item_state = "crossbow"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=2000)
|
||||
custom_materials = list(/datum/material/iron=2000)
|
||||
suppressed = TRUE
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/bolt)
|
||||
weapon_weight = WEAPON_LIGHT
|
||||
@@ -108,7 +108,7 @@
|
||||
desc = "A reverse engineered weapon using syndicate technology. This thing seems incredibly unwieldly, and seems to be using similar internals to the Proto-Kinetic Accelerator. It might not play nice when brought near weapons similar to it."
|
||||
icon_state = "crossbowlarge"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL=4000)
|
||||
custom_materials = list(/datum/material/iron=4000)
|
||||
suppressed = null
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/bolt/large)
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user