mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
Merge remote-tracking branch 'upstream/master' into hardsuit-helmet
This commit is contained in:
@@ -143,7 +143,7 @@
|
||||
if("5")
|
||||
karma_purchase(karma,45,"species","Slime People")
|
||||
if("6")
|
||||
karma_purchase(karma,100,"species","Plasmaman")
|
||||
karma_purchase(karma,45,"species","Plasmaman")
|
||||
if("7")
|
||||
karma_purchase(karma,30,"species","Drask")
|
||||
if(href_list["KarmaRefund"])
|
||||
@@ -401,7 +401,7 @@
|
||||
|
||||
if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them.
|
||||
to_chat(src, "<span class='warning'>Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.</span>")
|
||||
|
||||
|
||||
//This is down here because of the browse() calls in tooltip/New()
|
||||
if(!tooltips)
|
||||
tooltips = new /datum/tooltip(src)
|
||||
|
||||
@@ -17,8 +17,10 @@
|
||||
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
|
||||
var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets
|
||||
|
||||
var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down
|
||||
var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv
|
||||
var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW //what to toggle when toggled with weldingvisortoggle()
|
||||
|
||||
var/toggle_message = null
|
||||
var/alt_toggle_message = null
|
||||
@@ -29,6 +31,39 @@
|
||||
var/species_disguise = null
|
||||
var/magical = FALSE
|
||||
|
||||
/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc.
|
||||
if(!can_use(user))
|
||||
return FALSE
|
||||
|
||||
visor_toggling()
|
||||
|
||||
to_chat(user, "<span class='notice'>You adjust \the [src] [up ? "up" : "down"].</span>")
|
||||
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.head_update(src, forced = 1)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags
|
||||
up = !up
|
||||
flags ^= visor_flags
|
||||
flags_inv ^= visor_flags_inv
|
||||
flags_cover ^= initial(flags_cover)
|
||||
icon_state = "[initial(icon_state)][up ? "up" : ""]"
|
||||
if(visor_vars_to_toggle & VISOR_FLASHPROTECT)
|
||||
flash_protect ^= initial(flash_protect)
|
||||
if(visor_vars_to_toggle & VISOR_TINT)
|
||||
tint ^= initial(tint)
|
||||
|
||||
/obj/item/clothing/proc/can_use(mob/user)
|
||||
if(user && ismob(user))
|
||||
if(!user.incapacitated())
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//BS12: Species-restricted clothing check.
|
||||
/obj/item/clothing/mob_can_equip(M as mob, slot)
|
||||
|
||||
|
||||
@@ -30,6 +30,21 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/glasses/visor_toggling()
|
||||
..()
|
||||
if(visor_vars_to_toggle & VISOR_VISIONFLAGS)
|
||||
vision_flags ^= initial(vision_flags)
|
||||
if(visor_vars_to_toggle & VISOR_DARKNESSVIEW)
|
||||
see_in_dark ^= initial(see_in_dark)
|
||||
if(visor_vars_to_toggle & VISOR_INVISVIEW)
|
||||
invis_view ^= initial(invis_view)
|
||||
|
||||
/obj/item/clothing/glasses/weldingvisortoggle(mob/user)
|
||||
. = ..()
|
||||
if(. && user)
|
||||
user.update_sight()
|
||||
user.update_inv_glasses()
|
||||
|
||||
/obj/item/clothing/glasses/meson
|
||||
name = "Optical Meson Scanner"
|
||||
desc = "Used for seeing walls, floors, and stuff through anything."
|
||||
@@ -330,40 +345,15 @@
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
|
||||
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/welding/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/glasses/welding/proc/toggle()
|
||||
if(up)
|
||||
up = !up
|
||||
flags_cover |= GLASSESCOVERSEYES
|
||||
flags_inv |= HIDEEYES
|
||||
icon_state = initial(icon_state)
|
||||
to_chat(usr, "You flip the [src] down to protect your eyes.")
|
||||
flash_protect = 2
|
||||
tint = initial(tint) //better than istype
|
||||
else
|
||||
up = !up
|
||||
flags_cover &= ~GLASSESCOVERSEYES
|
||||
flags_inv &= ~HIDEEYES
|
||||
icon_state = "[initial(icon_state)]up"
|
||||
to_chat(usr, "You push the [src] up out of your face.")
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
var/mob/living/carbon/user = usr
|
||||
user.update_tint()
|
||||
user.update_inv_glasses()
|
||||
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
/obj/item/clothing/glasses/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
|
||||
/obj/item/clothing/glasses/welding/superior
|
||||
name = "superior welding goggles"
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
sprite_sheets = list(
|
||||
@@ -34,6 +35,9 @@
|
||||
"Grey" = 'icons/mob/species/grey/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
|
||||
/obj/item/clothing/head/welding/flamedecal
|
||||
name = "flame decal welding helmet"
|
||||
desc = "A welding helmet adorned with flame decals, and several cryptic slogans of varying degrees of legibility."
|
||||
|
||||
@@ -33,34 +33,12 @@
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
origin_tech = "materials=2;engineering=3"
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_cover = MASKCOVERSEYES
|
||||
visor_flags_inv = HIDEEYES
|
||||
|
||||
/obj/item/clothing/mask/gas/welding/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/mask/gas/welding/proc/toggle()
|
||||
if(up)
|
||||
up = !src.up
|
||||
flags_cover |= (MASKCOVERSEYES)
|
||||
flags_inv |= (HIDEEYES)
|
||||
icon_state = initial(icon_state)
|
||||
to_chat(usr, "You flip the [src] down to protect your eyes.")
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
else
|
||||
up = !up
|
||||
flags_cover &= ~(MASKCOVERSEYES)
|
||||
flags_inv &= ~(HIDEEYES)
|
||||
icon_state = "[initial(icon_state)]up"
|
||||
to_chat(usr, "You push the [src] up out of your face.")
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
var/mob/living/carbon/user = usr
|
||||
user.update_tint()
|
||||
user.update_inv_wear_mask() //so our mob-overlays update
|
||||
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
/obj/item/clothing/mask/gas/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
|
||||
/obj/item/clothing/mask/gas/explorer
|
||||
name = "explorer gas mask"
|
||||
|
||||
@@ -1,427 +1,250 @@
|
||||
// PLASMEN SHIT
|
||||
// CAN'T WEAR UNLESS YOU'RE A PINK SKELETON
|
||||
/obj/item/clothing/suit/space/eva/plasmaman
|
||||
name = "plasmaman suit"
|
||||
desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
slowdown = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
|
||||
icon = 'icons/obj/clothing/species/plasmaman/suits.dmi'
|
||||
species_restricted = list("Plasmaman")
|
||||
sprite_sheets = list(
|
||||
"Plasmaman" = 'icons/mob/species/plasmaman/suit.dmi'
|
||||
)
|
||||
flags = STOPSPRESSUREDMAGE
|
||||
icon_state = "plasmaman_suit"
|
||||
item_state = "plasmaman_suit"
|
||||
|
||||
var/next_extinguish = 0
|
||||
var/extinguish_cooldown = 10 SECONDS
|
||||
var/max_extinguishes = 5
|
||||
var/extinguishes_left = 5 // Yeah yeah, reagents, blah blah blah. This should be simple.
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
|
||||
var/mob/living/carbon/human/H=user
|
||||
if(extinguishes_left)
|
||||
if(next_extinguish > world.time)
|
||||
return
|
||||
|
||||
next_extinguish = world.time + extinguish_cooldown
|
||||
extinguishes_left--
|
||||
to_chat(user, "<span class='warning'>You hear a soft click and a hiss from your suit as it automatically extinguishes the fire.</span>")
|
||||
if(!extinguishes_left)
|
||||
to_chat(user, "<span class='warning'>Onboard auto-extinguisher depleted, refill with a cartridge.</span>")
|
||||
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
|
||||
H.ExtinguishMob()
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/attackby(var/obj/item/A as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(A, /obj/item/plasmensuit_cartridge)) //This suit can only be reloaded by the appropriate cartridges, and only if it's got no more extinguishes left.
|
||||
if(!extinguishes_left)
|
||||
extinguishes_left = max_extinguishes //Full replenishment from the cartridge.
|
||||
to_chat(user, "<span class='notice'>You replenish \the [src] with the cartridge.</span>")
|
||||
qdel(A)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The suit must be depleted before it can be refilled.</span>")
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "<span class='info'>There are [extinguishes_left] extinguisher canisters left in this suit.</span>")
|
||||
|
||||
/obj/item/plasmensuit_cartridge //Can be used to refill Plasmaman suits when they run out of autoextinguishes.
|
||||
name = "auto-extinguisher cartridge"
|
||||
desc = "A tiny and light fibreglass-framed auto-extinguisher cartridge."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
hitsound = null //Ultralight and
|
||||
flags = null //non-conductive
|
||||
force = 0
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL //Fits in boxes.
|
||||
materials = list()
|
||||
attack_verb = list("tapped")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman
|
||||
name = "plasmaman helmet"
|
||||
desc = "A special containment helmet designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
|
||||
flags = STOPSPRESSUREDMAGE
|
||||
//I just want the light feature of the hardsuit helmet
|
||||
/obj/item/clothing/head/helmet/space/plasmaman
|
||||
name = "plasma envirosuit helmet"
|
||||
desc = "A special containment helmet that allows plasma-based lifeforms to exist safely in an oxygenated environment. It is space-worthy, and may be worn in tandem with other EVA gear."
|
||||
icon_state = "plasmaman-helm"
|
||||
item_state = "plasmaman-helm"
|
||||
strip_delay = 80
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/brightness_on = 4 //luminosity when the light is on
|
||||
var/on = FALSE
|
||||
var/smile = FALSE
|
||||
var/smile_color = "#FF0000"
|
||||
var/visor_icon = "envisor"
|
||||
var/smile_state = "envirohelm_smile"
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen/plasmaman)
|
||||
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES
|
||||
visor_flags_inv = HIDEEYES|HIDEFACE
|
||||
icon = 'icons/obj/clothing/species/plasmaman/hats.dmi'
|
||||
species_restricted = list("Plasmaman")
|
||||
sprite_sheets = list(
|
||||
"Plasmaman" = 'icons/mob/species/plasmaman/helmet.dmi'
|
||||
)
|
||||
icon_state = "plasmaman_helmet0"
|
||||
item_state = "plasmaman_helmet0"
|
||||
var/base_state = "plasmaman_helmet"
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
sprite_sheets = list("Plasmaman" = 'icons/mob/species/plasmaman/helmet.dmi')
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/New()
|
||||
..()
|
||||
visor_toggling()
|
||||
update_icon()
|
||||
cut_overlays()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/AltClick(mob/user)
|
||||
if(!user.incapacitated() && Adjacent(user))
|
||||
toggle_welding_screen(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/visor_toggling() //handles all the actual toggling of flags
|
||||
up = !up
|
||||
flags ^= visor_flags
|
||||
flags_inv ^= visor_flags_inv
|
||||
icon_state = "[initial(icon_state)]"
|
||||
if(visor_vars_to_toggle & VISOR_FLASHPROTECT)
|
||||
flash_protect ^= initial(flash_protect)
|
||||
if(visor_vars_to_toggle & VISOR_TINT)
|
||||
tint ^= initial(tint)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_welding_screen(mob/living/user)
|
||||
if(weldingvisortoggle(user))
|
||||
if(on)
|
||||
to_chat(user, "<span class='notice'>Your helmet's torch can't pass through your welding visor!</span>")
|
||||
on = FALSE
|
||||
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
|
||||
update_icon()
|
||||
else
|
||||
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/update_icon()
|
||||
cut_overlays()
|
||||
add_overlay(visor_icon)
|
||||
..()
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/attack_self(mob/user)
|
||||
toggle_light(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/proc/toggle_light(mob/user)
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/user)
|
||||
on = !on
|
||||
icon_state = "[base_state][on]"
|
||||
icon_state = "[initial(icon_state)][on ? "-light":""]"
|
||||
item_state = icon_state
|
||||
user.update_inv_head() //So the mob overlay updates
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
if(!up)
|
||||
to_chat(user, "<span class='notice'>Your helmet's torch can't pass through your welding visor!</span>")
|
||||
set_light(0)
|
||||
else
|
||||
set_light(brightness_on)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_head()
|
||||
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
var/datum/action/A=X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/extinguish_light()
|
||||
if(on)
|
||||
toggle_light()
|
||||
visible_message("<span class='danger'>[src]'s light fades and turns off.</span>")
|
||||
|
||||
// ENGINEERING
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
name = "plasmaman atmospheric suit"
|
||||
icon_state = "plasmamanAtmos_suit"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
name = "plasmaman atmospheric helmet"
|
||||
icon_state = "plasmamanAtmos_helmet0"
|
||||
base_state = "plasmamanAtmos_helmet"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
flash_protect = 2
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
name = "plasmaman engineer suit"
|
||||
icon_state = "plasmamanEngineer_suit"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
name = "plasmaman engineer helmet"
|
||||
icon_state = "plasmamanEngineer_helmet0"
|
||||
base_state = "plasmamanEngineer_helmet"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
flash_protect = 2
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
|
||||
name = "plasmaman chief engineer suit"
|
||||
icon_state = "plasmaman_CE"
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
|
||||
name = "plasmaman chief engineer helmet"
|
||||
icon_state = "plasmaman_CE_helmet0"
|
||||
base_state = "plasmaman_CE_helmet"
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
flash_protect = 2
|
||||
|
||||
//SERVICE
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant suit"
|
||||
icon_state = "plasmamanAssistant_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant helmet"
|
||||
icon_state = "plasmamanAssistant_helmet0"
|
||||
base_state = "plasmamanAssistant_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
name = "plasmaman botanist suit"
|
||||
icon_state = "plasmamanBotanist_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
|
||||
name = "plasmaman botanist helmet"
|
||||
icon_state = "plasmamanBotanist_helmet0"
|
||||
base_state = "plasmamanBotanist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/chaplain
|
||||
name = "plasmaman chaplain suit"
|
||||
icon_state = "plasmamanChaplain_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
|
||||
name = "plasmaman chaplain helmet"
|
||||
icon_state = "plasmamanChaplain_helmet0"
|
||||
base_state = "plasmamanChaplain_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/clown
|
||||
name = "plasmaman clown suit"
|
||||
icon_state = "plasmaman_Clown"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
|
||||
name = "plasmaman clown helmet"
|
||||
icon_state = "plasmaman_Clown_helmet0"
|
||||
base_state = "plasmaman_Clown_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/mime
|
||||
name = "plasmaman mime suit"
|
||||
icon_state = "plasmaman_Mime"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
|
||||
name = "plasmaman mime helmet"
|
||||
icon_state = "plasmaman_Mime_helmet0"
|
||||
base_state = "plasmaman_Mime_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
name = "plasmaman service suit"
|
||||
icon_state = "plasmamanService_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
name = "plasmaman service helmet"
|
||||
icon_state = "plasmamanService_helmet0"
|
||||
base_state = "plasmamanService_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/janitor
|
||||
name = "plasmaman janitor suit"
|
||||
icon_state = "plasmamanJanitor_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
|
||||
name = "plasmaman janitor helmet"
|
||||
icon_state = "plasmamanJanitor_helmet0"
|
||||
base_state = "plasmamanJanitor_helmet"
|
||||
|
||||
|
||||
//CARGO
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/cargo
|
||||
name = "plasmaman cargo suit"
|
||||
icon_state = "plasmamanCargo_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
|
||||
name = "plasmaman cargo helmet"
|
||||
icon_state = "plasmamanCargo_helmet0"
|
||||
base_state = "plasmamanCargo_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/miner
|
||||
name = "plasmaman miner suit"
|
||||
icon_state = "plasmamanMiner_suit"
|
||||
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
|
||||
name = "plasmaman miner helmet"
|
||||
icon_state = "plasmamanMiner_helmet0"
|
||||
base_state = "plasmamanMiner_helmet"
|
||||
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/explorer
|
||||
name = "plasmaman explorer suit"
|
||||
icon_state = "plasmamanExplorer_suit"
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer
|
||||
name = "plasmaman explorer helmet"
|
||||
icon_state = "plasmamanExplorer_helmet0"
|
||||
base_state = "plasmamanExplorer_helmet"
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50)
|
||||
|
||||
// MEDSCI
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
name = "plasmaman medical suit"
|
||||
icon_state = "plasmamanMedical_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
name = "plasmaman medical helmet"
|
||||
icon_state = "plasmamanMedical_helmet0"
|
||||
base_state = "plasmamanMedical_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
|
||||
name = "plasmaman paramedic suit"
|
||||
icon_state = "plasmaman_Paramedic"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
|
||||
name = "plasmaman paramedic helmet"
|
||||
icon_state = "plasmaman_Paramedic_helmet0"
|
||||
base_state = "plasmaman_Paramedic_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
|
||||
name = "plasmaman chemist suit"
|
||||
icon_state = "plasmaman_Chemist"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
|
||||
name = "plasmaman chemist helmet"
|
||||
icon_state = "plasmaman_Chemist_helmet0"
|
||||
base_state = "plasmaman_Chemist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
|
||||
name = "plasmaman chief medical officer suit"
|
||||
icon_state = "plasmaman_CMO"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
|
||||
name = "plasmaman chief medical officer helmet"
|
||||
icon_state = "plasmaman_CMO_helmet0"
|
||||
base_state = "plasmaman_CMO_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/coroner
|
||||
name = "plasmaman coroner suit"
|
||||
icon_state = "plasmaman_Coroner"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/coroner
|
||||
name = "plasmaman coroner helmet"
|
||||
icon_state = "plasmaman_Coroner_helmet0"
|
||||
base_state = "plasmaman_Coroner_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical/virologist
|
||||
name = "plasmaman virologist suit"
|
||||
icon_state = "plasmaman_Virologist"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/virologist
|
||||
name = "plasmaman virologist helmet"
|
||||
icon_state = "plasmaman_Virologist_helmet0"
|
||||
base_state = "plasmaman_Virologist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
name = "plasmaman scientist suit"
|
||||
icon_state = "plasmamanScience_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
name = "plasmaman scientist helmet"
|
||||
icon_state = "plasmamanScience_helmet0"
|
||||
base_state = "plasmamanScience_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science/geneticist
|
||||
name = "plasmaman geneticist suit"
|
||||
icon_state = "plasmaman_Geneticist"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science/geneticist
|
||||
name = "plasmaman geneticist helmet"
|
||||
icon_state = "plasmaman_Geneticist_helmet0"
|
||||
base_state = "plasmaman_Geneticist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science/rd
|
||||
name = "plasmaman research director suit"
|
||||
icon_state = "plasmaman_RD"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
|
||||
name = "plasmaman research director helmet"
|
||||
icon_state = "plasmaman_RD_helmet0"
|
||||
base_state = "plasmaman_RD_helmet"
|
||||
|
||||
//MAGISTRATE
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/magistrate
|
||||
name = "plasmaman magistrate suit"
|
||||
icon_state = "plasmaman_HoS"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/magistrate
|
||||
name = "plasmaman magistrate helmet"
|
||||
icon_state = "plasmaman_HoS_helmet0"
|
||||
base_state = "plasmaman_HoS_helmet"
|
||||
|
||||
//NT REP
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/nt_rep
|
||||
name = "plasmaman NT representative suit"
|
||||
icon_state = "plasmaman_rep"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nt_rep
|
||||
name = "plasmaman NT representative helmet"
|
||||
icon_state = "plasmaman_rep_helmet0"
|
||||
base_state = "plasmaman_rep_helmet"
|
||||
|
||||
//SECURITY
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
name = "plasmaman security suit"
|
||||
icon_state = "plasmamanSecurity_suit"
|
||||
armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
name = "plasmaman security helmet"
|
||||
icon_state = "plasmamanSecurity_helmet0"
|
||||
base_state = "plasmamanSecurity_helmet"
|
||||
armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50)
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/hos
|
||||
name = "plasmaman head of security suit"
|
||||
icon_state = "plasmaman_HoS"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
|
||||
name = "plasmaman head of security helmet"
|
||||
icon_state = "plasmaman_HoS_helmet0"
|
||||
base_state = "plasmaman_HoS_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/hop
|
||||
name = "plasmaman head of personnel suit"
|
||||
icon_state = "plasmaman_HoP"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
|
||||
name = "plasmaman head of personnel helmet"
|
||||
icon_state = "plasmaman_HoP_helmet0"
|
||||
base_state = "plasmaman_HoP_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security/captain
|
||||
name = "plasmaman captain suit"
|
||||
icon_state = "plasmaman_Captain"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
|
||||
name = "plasmaman captain helmet"
|
||||
icon_state = "plasmaman_Captain_helmet0"
|
||||
base_state = "plasmaman_Captain_helmet"
|
||||
|
||||
|
||||
//IAA/LAWYER
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/lawyer
|
||||
name = "plasmaman lawyer suit"
|
||||
icon_state = "plasmamanlawyer_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/lawyer
|
||||
name = "plasmaman lawyer helmet"
|
||||
icon_state = "plasmamanlawyer_helmet0"
|
||||
base_state = "plasmamanlawyer_helmet"
|
||||
|
||||
//NUKEOPS
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/nuclear
|
||||
name = "blood red plasmaman suit"
|
||||
icon_state = "plasmaman_Nukeops"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
|
||||
name = "blood red plasmaman helmet"
|
||||
icon_state = "plasmaman_Nukeops_helmet0"
|
||||
base_state = "plasmaman_Nukeops_helmet"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
|
||||
//WIZARD
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/wizard
|
||||
name = "robed plasmaman suit"
|
||||
icon_state = "plasmamanWizardBlue_suit"
|
||||
magical = TRUE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/wizard
|
||||
name = "wizard hat"
|
||||
icon_state = "plasmamanWizardBlue_helmet0"
|
||||
base_state = "plasmamanWizardBlue_helmet"
|
||||
magical = TRUE
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security
|
||||
name = "security plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, along-side other undesirables."
|
||||
icon_state = "security_envirohelm"
|
||||
item_state = "security_envirohelm"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security/warden
|
||||
name = "warden's plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for the warden, a pair of white stripes being added to differeciate them from other members of security."
|
||||
icon_state = "warden_envirohelm"
|
||||
item_state = "warden_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security/hos
|
||||
name = "security plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for the head of security."
|
||||
icon_state = "hos_envirohelm"
|
||||
item_state = "hos_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/medical
|
||||
name = "medical's plasma envirosuit helmet"
|
||||
desc = "An envriohelmet designed for plasmaman medical doctors, having two stripes down it's length to denote as much"
|
||||
icon_state = "doctor_envirohelm"
|
||||
item_state = "doctor_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/cmo
|
||||
name = "chief medical officer's plasma envirosuit helmet"
|
||||
desc = "An envriohelmet designed for plasmaman employed as the cheif medical officer."
|
||||
icon_state = "cmo_envirohelm"
|
||||
item_state = "cmo_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/genetics
|
||||
name = "geneticist's plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for geneticists."
|
||||
icon_state = "geneticist_envirohelm"
|
||||
item_state = "geneticist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/viro
|
||||
name = "virology plasma envirosuit helmet"
|
||||
desc = "The helmet worn by the safest people on the station, those who are completely immune to the monstrosities they create."
|
||||
icon_state = "virologist_envirohelm"
|
||||
item_state = "virologist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/chemist
|
||||
name = "chemistry plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirosuit designed for chemists, two orange stripes going down it's face."
|
||||
icon_state = "chemist_envirohelm"
|
||||
item_state = "chemist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/science
|
||||
name = "science plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for scientists."
|
||||
icon_state = "scientist_envirohelm"
|
||||
item_state = "scientist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/rd
|
||||
name = "research director plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for the research director."
|
||||
icon_state = "rd_envirohelm"
|
||||
item_state = "rd_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/robotics
|
||||
name = "robotics plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for roboticists."
|
||||
icon_state = "roboticist_envirohelm"
|
||||
item_state = "roboticist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/engineering
|
||||
name = "engineering plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange."
|
||||
icon_state = "engineer_envirohelm"
|
||||
item_state = "engineer_envirohelm"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/engineering/ce
|
||||
name = "chief engineer's plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for chief engineer employed plasmamen."
|
||||
icon_state = "ce_envirohelm"
|
||||
item_state = "ce_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/atmospherics
|
||||
name = "atmospherics plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for atmos technician plasmamen, the usual purple stripes being replaced by engineering's blue."
|
||||
icon_state = "atmos_envirohelm"
|
||||
item_state = "atmos_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/cargo
|
||||
name = "cargo plasma envirosuit helmet"
|
||||
desc = "An plasmaman envirohelmet designed for cargo techs and quartermasters."
|
||||
icon_state = "cargo_envirohelm"
|
||||
item_state = "cargo_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/mining
|
||||
name = "mining plasma envirosuit helmet"
|
||||
desc = "A khaki helmet given to plasmamen miners operating on lavaland."
|
||||
icon_state = "explorer_envirohelm"
|
||||
item_state = "explorer_envirohelm"
|
||||
visor_icon = "explorer_envisor"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/chaplain
|
||||
name = "chaplain's plasma envirosuit helmet"
|
||||
desc = "An envirohelmet specially designed for only the most pious of plasmamen."
|
||||
icon_state = "chap_envirohelm"
|
||||
item_state = "chap_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/white
|
||||
name = "white plasma envirosuit helmet"
|
||||
desc = "A generic white envirohelm."
|
||||
icon_state = "white_envirohelm"
|
||||
item_state = "white_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/chef
|
||||
name = "chef plasma envirosuit helmet"
|
||||
desc = "An envirohelm designed for plasmamen chefs."
|
||||
icon_state = "chef_envirohelm"
|
||||
item_state = "chef_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/librarian
|
||||
name = "librarian's plasma envirosuit helmet"
|
||||
desc = "A slight modification on a tradiational voidsuit helmet, this helmet was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historian and old-styled plasmamen alike."
|
||||
icon_state = "prototype_envirohelm"
|
||||
item_state = "prototype_envirohelm"
|
||||
actions_types = list(/datum/action/item_action/toggle_welding_screen/plasmaman)
|
||||
visor_icon = "prototype_envisor"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/botany
|
||||
name = "botany plasma envirosuit helmet"
|
||||
desc = "A green and blue envirohelmet designating it's wearer as a botanist. While not specially designed for it, it would protect against minor planet-related injuries."
|
||||
icon_state = "botany_envirohelm"
|
||||
item_state = "botany_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/janitor
|
||||
name = "janitor's plasma envirosuit helmet"
|
||||
desc = "A grey helmet bearing a pair of purple stripes, designating the wearer as a janitor."
|
||||
icon_state = "janitor_envirohelm"
|
||||
item_state = "janitor_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/mime
|
||||
name = "mime envirosuit helmet"
|
||||
desc = "The make-up is painted on, it's a miracle it doesn't chip. It's not very colourful."
|
||||
icon_state = "mime_envirohelm"
|
||||
item_state = "mime_envirohelm"
|
||||
visor_icon = "mime_envisor"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/clown
|
||||
name = "clown envirosuit helmet"
|
||||
desc = "The make-up is painted on, it's a miracle it doesn't chip. <i>'HONK!'</i>"
|
||||
icon_state = "clown_envirohelm"
|
||||
item_state = "clown_envirohelm"
|
||||
visor_icon = "clown_envisor"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/hop
|
||||
name = "head of personnel envirosuit helmet"
|
||||
desc = "A plasmaman envirohelm that reeks of bureaucracy."
|
||||
icon_state = "hop_envirohelm"
|
||||
item_state = "hop_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/captain
|
||||
name = "captain envirosuit helmet"
|
||||
desc = "A plasmaman envirohelm designed with the insignia and markings befitting a captain."
|
||||
icon_state = "cap_envirohelm"
|
||||
item_state = "cap_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/blueshield
|
||||
name = "blueshield envirosuit helmet"
|
||||
desc = "A plasmaman envirohelm designed for the blueshield."
|
||||
icon_state = "bs_envirohelm"
|
||||
item_state = "bs_envirohelm"
|
||||
@@ -56,7 +56,7 @@
|
||||
interface_desc = "A diamond-tipped industrial drill."
|
||||
suit_overlay_active = "mounted-drill"
|
||||
suit_overlay_inactive = "mounted-drill"
|
||||
device_type = /obj/item/pickaxe/diamonddrill
|
||||
device_type = /obj/item/pickaxe/drill/diamonddrill
|
||||
|
||||
/obj/item/rig_module/device/orescanner
|
||||
name = "ore scanner module"
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/obj/item/clothing/under/plasmaman
|
||||
name = "plasma envirosuit"
|
||||
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
strip_delay = 80
|
||||
var/next_extinguish = 0
|
||||
var/extinguish_cooldown = 100
|
||||
var/extinguishes_left = 5
|
||||
icon = 'icons/obj/clothing/species/plasmaman/uniform.dmi'
|
||||
species_restricted = list("Plasmaman")
|
||||
sprite_sheets = list("Plasmaman" = 'icons/mob/species/plasmaman/uniform.dmi')
|
||||
icon_state = "plasmaman"
|
||||
item_state = "plasmaman"
|
||||
item_color = "plasmaman"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>There are [extinguishes_left] extinguisher charges left in this suit.</span>")
|
||||
|
||||
/obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
|
||||
if(H.on_fire)
|
||||
if(extinguishes_left)
|
||||
if(next_extinguish > world.time)
|
||||
return
|
||||
next_extinguish = world.time + extinguish_cooldown
|
||||
extinguishes_left--
|
||||
H.visible_message("<span class='warning'>[H]'s suit automatically extinguishes [H.p_them()]!</span>","<span class='warning'>Your suit automatically extinguishes you.</span>")
|
||||
if(!extinguishes_left)
|
||||
to_chat(H, "<span class='warning'>Onboard auto-extinguisher depleted, refill with a cartridge.</span>")
|
||||
playsound(H.loc, 'sound/effects/spray.ogg', 10, 1, -3)
|
||||
H.ExtinguishMob()
|
||||
new /obj/effect/particle_effect/water(get_turf(H))
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params)
|
||||
if (istype(E, /obj/item/extinguisher_refill))
|
||||
if (extinguishes_left == 5)
|
||||
to_chat(user, "<span class='notice'>The inbuilt extinguisher is full.</span>")
|
||||
return
|
||||
else
|
||||
extinguishes_left = 5
|
||||
to_chat(user, "<span class='notice'>You refill the suit's built-in extinguisher, using up the cartridge.</span>")
|
||||
qdel(E)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/extinguisher_refill
|
||||
name = "envirosuit extinguisher cartridge"
|
||||
desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits."
|
||||
icon_state = "plasmarefill"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -0,0 +1,107 @@
|
||||
/obj/item/clothing/under/plasmaman/cargo
|
||||
name = "cargo plasma envirosuit"
|
||||
desc = "A joint envirosuit used by plasmamen quartermasters and cargo techs alike, due to the logistical problems of differenciating the two with the length of their pant legs."
|
||||
icon_state = "cargo_envirosuit"
|
||||
item_state = "cargo_envirosuit"
|
||||
item_color = "cargo_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/mining
|
||||
name = "mining plasma envirosuit"
|
||||
desc = "An air-tight khaki suit designed for operations on lavaland by plasmamen."
|
||||
icon_state = "explorer_envirosuit"
|
||||
item_state = "explorer_envirosuit"
|
||||
item_color = "explorer_envirosuit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chef
|
||||
name = "chef's plasma envirosuit"
|
||||
desc = "A white plasmaman envirosuit designed for cullinary practices. One might question why a member of a species that doesn't need to eat would become a chef."
|
||||
icon_state = "chef_envirosuit"
|
||||
item_state = "chef_envirosuit"
|
||||
item_color = "chef_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/enviroslacks
|
||||
name = "enviroslacks"
|
||||
desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nano-Trasen for it's detectives, lawyers, and bar-tenders alike."
|
||||
icon_state = "enviroslacks"
|
||||
item_state = "enviroslacks"
|
||||
item_color = "enviroslacks"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chaplain
|
||||
name = "chaplain's plasma envirosuit"
|
||||
desc = "An envirosuit specially designed for only the most pious of plasmamen."
|
||||
icon_state = "chap_envirosuit"
|
||||
item_state = "chap_envirosuit"
|
||||
item_color = "chap_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/librarian
|
||||
name = "librarian's plasma envirosuit"
|
||||
desc = "Made out of a modified voidsuit, this suit was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike."
|
||||
icon_state = "prototype_envirosuit"
|
||||
item_state = "prototype_envirosuit"
|
||||
item_color = "prototype_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/janitor
|
||||
name = "janitor's plasma envirosuit"
|
||||
desc = "A grey and purple envirosuit designated for plasmamen janitors."
|
||||
icon_state = "janitor_envirosuit"
|
||||
item_state = "janitor_envirosuit"
|
||||
item_color = "janitor_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/botany
|
||||
name = "botany envirosuit"
|
||||
desc = "A green and blue envirosuit designed to protect plasmamen from minor plant-related injuries."
|
||||
icon_state = "botany_envirosuit"
|
||||
item_state = "botany_envirosuit"
|
||||
item_color = "botany_envirosuit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/plasmaman/mime
|
||||
name = "mime envirosuit"
|
||||
desc = "It's not very colourful."
|
||||
icon_state = "mime_envirosuit"
|
||||
item_state = "mime_envirosuit"
|
||||
item_color = "mime_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/clown
|
||||
name = "clown envirosuit"
|
||||
desc = "<i>'HONK!'</i>"
|
||||
icon_state = "clown_envirosuit"
|
||||
item_state = "clown_envirosuit"
|
||||
item_color = "clown_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
|
||||
if(H.on_fire)
|
||||
if(extinguishes_left)
|
||||
if(next_extinguish > world.time)
|
||||
return
|
||||
next_extinguish = world.time + extinguish_cooldown
|
||||
extinguishes_left--
|
||||
H.visible_message("<span class='warning'>[H]'s suit spews out a tonne of space lube!</span>", "<span class='warning'>Your suit spews out a tonne of space lube!</span>")
|
||||
H.ExtinguishMob()
|
||||
new /obj/effect/particle_effect/foam(loc) //Truely terrifying.
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/under/plasmaman/hop
|
||||
name = "head of personnel envirosuit"
|
||||
desc = "An envirosuit designed for plasmamen employed as the head of personnel."
|
||||
icon_state = "hop_envirosuit"
|
||||
item_state = "hop_envirosuit"
|
||||
item_color = "hop_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/captain
|
||||
name = "captain envirosuit"
|
||||
desc = "An envirosuit designed for plasmamen employed as the captain."
|
||||
icon_state = "cap_envirosuit"
|
||||
item_state = "cap_envirosuit"
|
||||
item_color = "cap_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/blueshield
|
||||
name = "blueshield envirosuit"
|
||||
desc = "An envirosuit designed for plasmamen employed as the blueshield."
|
||||
icon_state = "bs_envirosuit"
|
||||
item_state = "bs_envirosuit"
|
||||
item_color = "bs_envirosuit"
|
||||
@@ -0,0 +1,22 @@
|
||||
/obj/item/clothing/under/plasmaman/engineering
|
||||
name = "engineering plasma envirosuit"
|
||||
desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage."
|
||||
icon_state = "engineer_envirosuit"
|
||||
item_state = "engineer_envirosuit"
|
||||
item_color = "engineer_envirosuit"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/engineering/ce
|
||||
name = "chief engineer plasma envirosuit"
|
||||
desc = "An air-tight suit designed to be used by plasmamen exployed as the chief engineer"
|
||||
icon_state = "ce_envirosuit"
|
||||
item_state = "ce_envirosuit"
|
||||
item_color = "ce_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/atmospherics
|
||||
name = "atmospherics plasma envirosuit"
|
||||
desc = "An air-tight suit designed to be used by plasmamen exployed as atmos technicians, the usual purple stripes being replaced by atmos's blue."
|
||||
icon_state = "atmos_envirosuit"
|
||||
item_state = "atmos_envirosuit"
|
||||
item_color = "atmos_envirosuit"
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/obj/item/clothing/under/plasmaman/medical
|
||||
name = "medical plasma envirosuit"
|
||||
desc = "A suit designed for the station's more plasma-based doctors."
|
||||
icon_state = "doctor_envirosuit"
|
||||
item_state = "doctor_envirosuit"
|
||||
item_color = "doctor_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/cmo
|
||||
name = "cmo plasma envirosuit"
|
||||
desc = "A suit designed for the station's more plasma-based chief medical officer."
|
||||
icon_state = "cmo_envirosuit"
|
||||
item_state = "cmo_envirosuit"
|
||||
item_color = "cmo_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/science
|
||||
name = "science plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for scientists."
|
||||
icon_state = "scientist_envirosuit"
|
||||
item_state = "scientist_envirosuit"
|
||||
item_color = "scientist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/rd
|
||||
name = "science plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for the research director."
|
||||
icon_state = "rd_envirosuit"
|
||||
item_state = "rd_envirosuit"
|
||||
item_color = "rd_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/robotics
|
||||
name = "robotics plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for roboticists."
|
||||
icon_state = "roboticist_envirosuit"
|
||||
item_state = "roboticist_envirosuit"
|
||||
item_color = "roboticist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/viro
|
||||
name = "virology plasma envirosuit"
|
||||
desc = "The suit worn by the safest people on the station, those who are completely immune to the monstrosities they create."
|
||||
icon_state = "virologist_envirosuit"
|
||||
item_state = "virologist_envirosuit"
|
||||
item_color = "virologist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/genetics
|
||||
name = "genetics plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for geneticists."
|
||||
icon_state = "geneticist_envirosuit"
|
||||
item_state = "geneticist_envirosuit"
|
||||
item_color = "geneticist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chemist
|
||||
name = "chemistry plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for chemists."
|
||||
icon_state = "chemist_envirosuit"
|
||||
item_state = "chemist_envirosuit"
|
||||
item_color = "chemist_envirosuit"
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/clothing/under/plasmaman/security
|
||||
name = "security plasma envirosuit"
|
||||
desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection."
|
||||
icon_state = "security_envirosuit"
|
||||
item_state = "security_envirosuit"
|
||||
item_color = "security_envirosuit"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/security/warden
|
||||
name = "warden plasma envirosuit"
|
||||
desc = "A plasmaman containment suit designed for the warden, white stripes being added to differeciate them from other members of security."
|
||||
icon_state = "warden_envirosuit"
|
||||
item_state = "warden_envirosuit"
|
||||
item_color = "warden_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/security/hos
|
||||
name = "head of security plasma envirosuit"
|
||||
desc = "A plasmaman containment suit designed for the head of security."
|
||||
icon_state = "hos_envirosuit"
|
||||
item_state = "hos_envirosuit"
|
||||
item_color = "hos_envirosuit"
|
||||
@@ -10,6 +10,9 @@
|
||||
////////// Usable Items //////////
|
||||
//////////////////////////////////
|
||||
|
||||
#define USED_MOD_HELM 1
|
||||
#define USED_MOD_SUIT 2
|
||||
|
||||
/obj/item/fluff
|
||||
var/used = 0
|
||||
|
||||
@@ -401,118 +404,6 @@
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
|
||||
|
||||
#define USED_MOD_HELM 1
|
||||
#define USED_MOD_SUIT 2
|
||||
|
||||
/obj/item/fluff/shadey_plasman_modkit
|
||||
name = "plasmaman suit modkit"
|
||||
desc = "A kit containing nanites that are able to modify the look of a plasmaman suit and helmet without exposing the wearer to hostile environments."
|
||||
icon_state = "modkit"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/fluff/shadey_plasman_modkit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
if(used & USED_MOD_HELM)
|
||||
to_chat(H, "<span class='notice'>The kit's helmet modifier has already been used.</span>")
|
||||
return
|
||||
to_chat(H, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
used |= USED_MOD_HELM
|
||||
|
||||
var/obj/item/clothing/head/helmet/space/eva/plasmaman/P = target
|
||||
P.name = "plasma containment helmet"
|
||||
P.desc = "A purpose-built containment helmet designed to keep plasma in, and everything else out."
|
||||
P.icon_state = "plasmaman_halo_helmet[P.on]"
|
||||
P.base_state = "plasmaman_halo_helmet"
|
||||
|
||||
if(P == H.head)
|
||||
H.update_inv_head()
|
||||
return
|
||||
if(istype(target, /obj/item/clothing/suit/space/eva/plasmaman))
|
||||
if(used & USED_MOD_SUIT)
|
||||
to_chat(user, "<span class='notice'>The kit's suit modifier has already been used.</span>")
|
||||
return
|
||||
to_chat(H, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
used |= USED_MOD_SUIT
|
||||
|
||||
var/obj/item/clothing/suit/space/eva/plasmaman/P = target
|
||||
P.name = "plasma containment suit"
|
||||
P.desc = "A feminine containment suit designed to keep plasma in, and everything else out. It's even got an overskirt."
|
||||
P.icon_state = "plasmaman_halo"
|
||||
|
||||
if(P == H.wear_suit)
|
||||
H.update_inv_wear_suit()
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
|
||||
|
||||
/obj/item/fluff/lighty_plasman_modkit // LightFire53: Ikelos
|
||||
name = "plasmaman suit modkit"
|
||||
desc = "A kit containing nanites that are able to modify the look of a plasmaman suit and helmet without exposing the wearer to hostile environments."
|
||||
icon_state = "modkit"
|
||||
w_class = 2
|
||||
force = 0
|
||||
throwforce = 0
|
||||
var/picked_color = null
|
||||
var/list/helmets = list(
|
||||
"Blue" = "plasmaman_ikelosdefault_helmet",
|
||||
"Gold" = "plasmaman_ikelosgold_helmet",
|
||||
"Red" = "plasmaman_ikelossecurity_helmet")
|
||||
var/list/suits = list(
|
||||
"Blue" = "plasmaman_ikelosdefault",
|
||||
"Gold" = "plasmaman_ikelosgold",
|
||||
"Red" = "plasmaman_ikelossecurity")
|
||||
|
||||
/obj/item/fluff/lighty_plasman_modkit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
if(used & USED_MOD_HELM)
|
||||
to_chat(H, "<span class='notice'>The kit's helmet modifier has already been used.</span>")
|
||||
return
|
||||
|
||||
picked_color = input(H, "Which color would you like to paint [target]?", "Recolor") as null|anything in helmets
|
||||
var/obj/item/clothing/head/helmet/space/eva/plasmaman/P = target
|
||||
|
||||
if(!picked_color)
|
||||
return
|
||||
P.icon_state = helmets[picked_color] + "[P.on]"
|
||||
P.base_state = helmets[picked_color]
|
||||
|
||||
to_chat(H, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
P.icon = 'icons/obj/custom_items.dmi'
|
||||
used |= USED_MOD_HELM
|
||||
|
||||
if(P == H.head)
|
||||
H.update_inv_head()
|
||||
return
|
||||
if(istype(target, /obj/item/clothing/suit/space/eva/plasmaman))
|
||||
if(used & USED_MOD_SUIT)
|
||||
to_chat(user, "<span class='notice'>The kit's suit modifier has already been used.</span>")
|
||||
return
|
||||
picked_color = input(H, "Which color would you like to paint [target]?", "Recolor") as null|anything in suits
|
||||
var/obj/item/clothing/suit/space/eva/plasmaman/P = target
|
||||
|
||||
if(!picked_color)
|
||||
return
|
||||
P.icon_state = suits[picked_color]
|
||||
|
||||
to_chat(H, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
P.icon = 'icons/obj/custom_items.dmi'
|
||||
used |= USED_MOD_SUIT
|
||||
|
||||
if(P == H.wear_suit)
|
||||
H.update_inv_wear_suit()
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
|
||||
|
||||
|
||||
/obj/item/fluff/merchant_sallet_modkit //Travelling Merchant: Trav Noble. This is what they spawn in with
|
||||
name = "SG Helmet modkit"
|
||||
desc = "A modkit that can make most helmets look like a Shellguard Helmet."
|
||||
|
||||
@@ -45,6 +45,11 @@
|
||||
continue
|
||||
if(C.cell)
|
||||
C.cell.charge = 0
|
||||
for(var/obj/machinery/power/P in GLOB.machines)
|
||||
var/area/current_area = get_area(P)
|
||||
if((current_area.type in skipped_areas_apc) || (current_area.type in skipped_areas) || !is_station_level(P.z))
|
||||
continue
|
||||
P.malfunction = TRUE
|
||||
|
||||
/proc/power_restore(var/announce = 1)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
@@ -67,6 +72,8 @@
|
||||
S.input_attempt = S.last_input_attempt
|
||||
S.update_icon()
|
||||
S.power_change()
|
||||
for(var/obj/machinery/power/P in GLOB.machines)
|
||||
P.malfunction = FALSE
|
||||
|
||||
/proc/power_restore_quick(var/announce = 1)
|
||||
if(announce)
|
||||
|
||||
@@ -40,9 +40,11 @@
|
||||
if(21 to 25)
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/poster/random_contraband(src)
|
||||
if(26 to 35)
|
||||
if(26 to 30)
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/glass/beaker/noreact(src)
|
||||
if(31 to 35)
|
||||
new /obj/item/seeds/firelemon(src)
|
||||
if(36 to 40)
|
||||
new /obj/item/melee/baton(src)
|
||||
if(41 to 45)
|
||||
@@ -109,7 +111,7 @@
|
||||
if(90)
|
||||
new /obj/item/organ/internal/heart(src)
|
||||
if(91)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/soulstone/anybody(src)
|
||||
if(92)
|
||||
new /obj/item/katana(src)
|
||||
if(93)
|
||||
|
||||
@@ -1,153 +0,0 @@
|
||||
/*****************************Coin********************************/
|
||||
|
||||
/obj/item/coin
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
name = "coin"
|
||||
icon_state = "coin__heads"
|
||||
flags = CONDUCT
|
||||
force = 1
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/string_attached
|
||||
var/list/sideslist = list("heads","tails")
|
||||
var/cmineral = null
|
||||
var/cooldown = 0
|
||||
var/credits = 10
|
||||
|
||||
/obj/item/coin/New()
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
icon_state = "coin_[cmineral]_[sideslist[1]]"
|
||||
if(cmineral)
|
||||
name = "[cmineral] coin"
|
||||
|
||||
/obj/item/coin/gold
|
||||
cmineral = "gold"
|
||||
icon_state = "coin_gold_heads"
|
||||
materials = list(MAT_GOLD = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/silver
|
||||
cmineral = "silver"
|
||||
icon_state = "coin_silver_heads"
|
||||
materials = list(MAT_SILVER = 400)
|
||||
credits = 40
|
||||
|
||||
/obj/item/coin/diamond
|
||||
cmineral = "diamond"
|
||||
icon_state = "coin_diamond_heads"
|
||||
materials = list(MAT_DIAMOND = 400)
|
||||
credits = 120
|
||||
|
||||
/obj/item/coin/iron
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
materials = list(MAT_METAL = 400)
|
||||
credits = 20
|
||||
|
||||
/obj/item/coin/plasma
|
||||
cmineral = "plasma"
|
||||
icon_state = "coin_plasma_heads"
|
||||
materials = list(MAT_PLASMA = 400)
|
||||
credits = 80
|
||||
|
||||
/obj/item/coin/uranium
|
||||
cmineral = "uranium"
|
||||
icon_state = "coin_uranium_heads"
|
||||
materials = list(MAT_URANIUM = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/clown
|
||||
cmineral = "bananium"
|
||||
icon_state = "coin_bananium_heads"
|
||||
materials = list(MAT_BANANIUM = 400)
|
||||
credits = 600 //makes the clown cri
|
||||
|
||||
/obj/item/coin/mime
|
||||
cmineral = "tranquillite"
|
||||
icon_state = "coin_tranquillite_heads"
|
||||
materials = list(MAT_TRANQUILLITE = 400)
|
||||
credits = 600 //makes the mime cri
|
||||
|
||||
/obj/item/coin/adamantine
|
||||
cmineral = "adamantine"
|
||||
icon_state = "coin_adamantine_heads"
|
||||
credits = 400
|
||||
|
||||
/obj/item/coin/mythril
|
||||
cmineral = "mythril"
|
||||
icon_state = "coin_mythril_heads"
|
||||
credits = 400
|
||||
|
||||
/obj/item/coin/twoheaded
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
desc = "Hey, this coin's the same on both sides!"
|
||||
sideslist = list("heads")
|
||||
credits = 20
|
||||
|
||||
/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")
|
||||
credits = 20
|
||||
|
||||
/obj/item/coin/antagtoken/syndicate
|
||||
name = "syndicate coin"
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if(string_attached)
|
||||
to_chat(user, "<span class='notice'>There already is a string attached to this coin.</span>")
|
||||
return
|
||||
|
||||
if(CC.use(1))
|
||||
overlays += image('icons/obj/economy.dmi',"coin_string_overlay")
|
||||
string_attached = 1
|
||||
to_chat(user, "<span class='notice'>You attach a string to the coin.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one length of cable to attach a string to the coin.</span>")
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/wirecutters))
|
||||
if(!string_attached)
|
||||
..()
|
||||
return
|
||||
|
||||
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
|
||||
CC.amount = 1
|
||||
CC.update_icon()
|
||||
overlays = list()
|
||||
string_attached = null
|
||||
to_chat(user, "<span class='notice'>You detach the string from the coin.</span>")
|
||||
else if(istype(W,/obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(WT.welding && WT.remove_fuel(0, user))
|
||||
var/typelist = list("iron" = /obj/item/clothing/gloves/ring,
|
||||
"silver" = /obj/item/clothing/gloves/ring/silver,
|
||||
"gold" = /obj/item/clothing/gloves/ring/gold,
|
||||
"plasma" = /obj/item/clothing/gloves/ring/plasma,
|
||||
"uranium" = /obj/item/clothing/gloves/ring/uranium)
|
||||
var/typekey = typelist[cmineral]
|
||||
if(ispath(typekey))
|
||||
to_chat(user, "<span class='notice'>You make [src] into a ring.</span>")
|
||||
new typekey(get_turf(loc))
|
||||
qdel(src)
|
||||
else ..()
|
||||
|
||||
/obj/item/coin/attack_self(mob/user as mob)
|
||||
if(cooldown < world.time - 15)
|
||||
var/coinflip = pick(sideslist)
|
||||
cooldown = world.time
|
||||
flick("coin_[cmineral]_flip", src)
|
||||
icon_state = "coin_[cmineral]_[coinflip]"
|
||||
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
|
||||
if(do_after(user, 15, target = src))
|
||||
user.visible_message("<span class='notice'>[user] has flipped [src]. It lands on [coinflip].</span>", \
|
||||
"<span class='notice'>You flip [src]. It lands on [coinflip].</span>", \
|
||||
"<span class='notice'>You hear the clattering of loose change.</span>")
|
||||
@@ -0,0 +1,122 @@
|
||||
/**********************Lazarus Injector**********************/
|
||||
/obj/item/lazarus_injector
|
||||
name = "lazarus injector"
|
||||
desc = "An injector with a cocktail of nanomachines and chemicals, this device can seemingly raise animals from the dead, making them become friendly to the user. Unfortunately, the process is useless on higher forms of life and incredibly costly, so these were hidden in storage until an executive thought they'd be great motivation for some of their employees."
|
||||
icon = 'icons/obj/hypo.dmi'
|
||||
icon_state = "lazarus_hypo"
|
||||
item_state = "hypo"
|
||||
origin_tech = "biotech=4;magnets=6"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
var/loaded = 1
|
||||
var/malfunctioning = 0
|
||||
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
|
||||
|
||||
/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!loaded)
|
||||
return
|
||||
if(istype(target, /mob/living) && proximity_flag)
|
||||
if(istype(target, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/M = target
|
||||
if(M.sentience_type != revive_type)
|
||||
to_chat(user, "<span class='info'>[src] does not work on this sort of creature.</span>")
|
||||
return
|
||||
if(M.stat == DEAD)
|
||||
M.faction = list("neutral")
|
||||
M.revive()
|
||||
M.can_collar = 1
|
||||
if(istype(target, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
if(malfunctioning)
|
||||
H.faction |= list("lazarus", "\ref[user]")
|
||||
H.robust_searching = 1
|
||||
H.friends += user
|
||||
H.attack_same = 1
|
||||
log_game("[user] has revived hostile mob [target] with a malfunctioning lazarus injector")
|
||||
else
|
||||
H.attack_same = 0
|
||||
loaded = 0
|
||||
user.visible_message("<span class='notice'>[user] injects [M] with [src], reviving it.</span>")
|
||||
playsound(src,'sound/effects/refill.ogg',50,1)
|
||||
icon_state = "lazarus_empty"
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='info'>[src] is only effective on the dead.</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='info'>[src] is only effective on lesser beings.</span>")
|
||||
return
|
||||
|
||||
/obj/item/lazarus_injector/emag_act(mob/user)
|
||||
if(!malfunctioning)
|
||||
malfunctioning = 1
|
||||
to_chat(user, "<span class='notice'>You override [src]'s safety protocols.</span>")
|
||||
|
||||
/obj/item/lazarus_injector/emp_act()
|
||||
if(!malfunctioning)
|
||||
malfunctioning = 1
|
||||
|
||||
/obj/item/lazarus_injector/examine(mob/user)
|
||||
..(user)
|
||||
if(!loaded)
|
||||
to_chat(user, "<span class='info'>[src] is empty.</span>")
|
||||
if(malfunctioning)
|
||||
to_chat(user, "<span class='info'>The display on [src] seems to be flickering.</span>")
|
||||
|
||||
/*********************Mob Capsule*************************/
|
||||
|
||||
/obj/item/mobcapsule
|
||||
name = "lazarus capsule"
|
||||
desc = "It allows you to store and deploy lazarus-injected creatures easier."
|
||||
icon = 'icons/obj/mobcap.dmi'
|
||||
icon_state = "mobcap0"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_range = 20
|
||||
var/mob/living/simple_animal/captured = null
|
||||
var/colorindex = 0
|
||||
|
||||
/obj/item/mobcapsule/Destroy()
|
||||
if(captured)
|
||||
captured.ghostize()
|
||||
QDEL_NULL(captured)
|
||||
return ..()
|
||||
|
||||
/obj/item/mobcapsule/attack(var/atom/A, mob/user, prox_flag)
|
||||
if(!istype(A, /mob/living/simple_animal) || isbot(A))
|
||||
return ..()
|
||||
capture(A, user)
|
||||
return 1
|
||||
|
||||
/obj/item/mobcapsule/proc/capture(var/mob/target, var/mob/U as mob)
|
||||
var/mob/living/simple_animal/T = target
|
||||
if(captured)
|
||||
to_chat(U, "<span class='notice'>Capture failed!</span>: The capsule already has a mob registered to it!")
|
||||
else
|
||||
if(istype(T) && "neutral" in T.faction)
|
||||
T.forceMove(src)
|
||||
T.name = "[U.name]'s [initial(T.name)]"
|
||||
T.cancel_camera()
|
||||
name = "Lazarus Capsule: [initial(T.name)]"
|
||||
to_chat(U, "<span class='notice'>You placed a [T.name] inside the Lazarus Capsule!</span>")
|
||||
captured = T
|
||||
else
|
||||
to_chat(U, "You can't capture that mob!")
|
||||
|
||||
/obj/item/mobcapsule/throw_impact(atom/A, mob/user)
|
||||
..()
|
||||
if(captured)
|
||||
dump_contents(user)
|
||||
|
||||
/obj/item/mobcapsule/proc/dump_contents(mob/user)
|
||||
if(captured)
|
||||
captured.forceMove(get_turf(src))
|
||||
captured = null
|
||||
|
||||
/obj/item/mobcapsule/attack_self(mob/user)
|
||||
colorindex += 1
|
||||
if(colorindex >= 6)
|
||||
colorindex = 0
|
||||
icon_state = "mobcap[colorindex]"
|
||||
update_icon()
|
||||
@@ -0,0 +1,116 @@
|
||||
/**********************Mining Scanner**********************/
|
||||
/obj/item/mining_scanner
|
||||
desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results."
|
||||
name = "manual mining scanner"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "mining1"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/cooldown = 0
|
||||
origin_tech = "engineering=1;magnets=1"
|
||||
|
||||
/obj/item/mining_scanner/attack_self(mob/user)
|
||||
if(!user.client)
|
||||
return
|
||||
if(!cooldown)
|
||||
cooldown = 1
|
||||
spawn(40)
|
||||
cooldown = 0
|
||||
var/list/mobs = list()
|
||||
mobs |= user
|
||||
mineral_scan_pulse(mobs, get_turf(user))
|
||||
|
||||
|
||||
//Debug item to identify all ore spread quickly
|
||||
/obj/item/mining_scanner/admin
|
||||
|
||||
/obj/item/mining_scanner/admin/attack_self(mob/user)
|
||||
for(var/turf/simulated/mineral/M in world)
|
||||
if(M.scan_state)
|
||||
M.icon_state = M.scan_state
|
||||
qdel(src)
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. This one has an extended range."
|
||||
name = "advanced automatic mining scanner"
|
||||
icon_state = "mining0"
|
||||
item_state = "analyzer"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/cooldown = 35
|
||||
var/on_cooldown = 0
|
||||
var/range = 7
|
||||
var/meson = TRUE
|
||||
origin_tech = "engineering=3;magnets=3"
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner/cyborg
|
||||
flags = CONDUCT | NODROP
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner/material
|
||||
meson = FALSE
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results. This one has an extended range."
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner/lesser
|
||||
name = "automatic mining scanner"
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results."
|
||||
range = 4
|
||||
cooldown = 50
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner/lesser/material
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results."
|
||||
meson = FALSE
|
||||
|
||||
/obj/item/t_scanner/adv_mining_scanner/scan()
|
||||
if(!on_cooldown)
|
||||
on_cooldown = 1
|
||||
spawn(cooldown)
|
||||
on_cooldown = 0
|
||||
var/turf/t = get_turf(src)
|
||||
var/list/mobs = recursive_mob_check(t, client_check = 1, sight_check = 0, include_radio = 0)
|
||||
if(!mobs.len)
|
||||
return
|
||||
if(meson)
|
||||
mineral_scan_pulse(mobs, t, range)
|
||||
else
|
||||
mineral_scan_pulse_material(mobs, t, range)
|
||||
|
||||
//For use with mesons
|
||||
/proc/mineral_scan_pulse(list/mobs, turf/T, range = world.view)
|
||||
var/list/minerals = list()
|
||||
for(var/turf/simulated/mineral/M in range(range, T))
|
||||
if(M.scan_state)
|
||||
minerals += M
|
||||
if(minerals.len)
|
||||
for(var/mob/user in mobs)
|
||||
if(user.client)
|
||||
var/client/C = user.client
|
||||
for(var/turf/simulated/mineral/M in minerals)
|
||||
var/turf/F = get_turf(M)
|
||||
var/image/I = image('icons/turf/mining.dmi', loc = F, icon_state = M.scan_state, layer = 18)
|
||||
C.images += I
|
||||
spawn(30)
|
||||
if(C)
|
||||
C.images -= I
|
||||
|
||||
//For use with material scanners
|
||||
/proc/mineral_scan_pulse_material(list/mobs, turf/T, range = world.view)
|
||||
var/list/minerals = list()
|
||||
for(var/turf/simulated/mineral/M in range(range, T))
|
||||
if(M.scan_state)
|
||||
minerals += M
|
||||
if(minerals.len)
|
||||
for(var/turf/simulated/mineral/M in minerals)
|
||||
var/obj/effect/temp_visual/mining_overlay/C = new/obj/effect/temp_visual/mining_overlay(M)
|
||||
C.icon_state = M.scan_state
|
||||
|
||||
/obj/effect/temp_visual/mining_overlay
|
||||
layer = 18
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
anchored = 1
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
duration = 30
|
||||
pixel_x = -4
|
||||
pixel_y = -4
|
||||
@@ -0,0 +1,142 @@
|
||||
/*****************Pickaxes & Drills & Shovels****************/
|
||||
/obj/item/pickaxe
|
||||
name = "pickaxe"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "pickaxe"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
throwforce = 10
|
||||
item_state = "pickaxe"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
|
||||
origin_tech = "materials=2;engineering=3"
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
|
||||
var/drill_verb = "picking"
|
||||
sharp = 1
|
||||
var/excavation_amount = 100
|
||||
usesound = 'sound/effects/picaxe1.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/pickaxe/proc/playDigSound()
|
||||
playsound(src, pick(digsound),20,1)
|
||||
|
||||
/obj/item/pickaxe/emergency
|
||||
name = "emergency disembarkation tool"
|
||||
desc = "For extracting yourself from rough landings."
|
||||
|
||||
/obj/item/pickaxe/safety
|
||||
name = "safety pickaxe"
|
||||
desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
|
||||
/obj/item/pickaxe/mini
|
||||
name = "compact pickaxe"
|
||||
desc = "A smaller, compact version of the standard pickaxe."
|
||||
icon_state = "minipick"
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
/obj/item/pickaxe/silver
|
||||
name = "silver-plated pickaxe"
|
||||
icon_state = "spickaxe"
|
||||
item_state = "spickaxe"
|
||||
origin_tech = "materials=3;engineering=4"
|
||||
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
|
||||
|
||||
/obj/item/pickaxe/gold
|
||||
name = "golden pickaxe"
|
||||
icon_state = "gpickaxe"
|
||||
item_state = "gpickaxe"
|
||||
origin_tech = "materials=4;engineering=4"
|
||||
toolspeed = 0.4
|
||||
desc = "A gold-plated pickaxe that mines faster than standard-issue."
|
||||
force = 18
|
||||
|
||||
/obj/item/pickaxe/diamond
|
||||
name = "diamond-tipped pickaxe"
|
||||
icon_state = "dpickaxe"
|
||||
item_state = "dpickaxe"
|
||||
origin_tech = "materials=5;engineering=4"
|
||||
toolspeed = 0.3
|
||||
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
|
||||
force = 19
|
||||
|
||||
/obj/item/pickaxe/drill
|
||||
name = "mining drill"
|
||||
icon_state = "handdrill"
|
||||
item_state = "jackhammer"
|
||||
digsound = list('sound/weapons/drill.ogg')
|
||||
toolspeed = 0.6 //available from roundstart, faster than a pickaxe.
|
||||
hitsound = 'sound/weapons/drill.ogg'
|
||||
usesound = 'sound/weapons/drill.ogg'
|
||||
origin_tech = "materials=2;powerstorage=2;engineering=3"
|
||||
desc = "An electric mining drill for the especially scrawny."
|
||||
|
||||
/obj/item/pickaxe/drill/cyborg
|
||||
name = "cyborg mining drill"
|
||||
desc = "An integrated electric mining drill."
|
||||
flags = NODROP
|
||||
|
||||
/obj/item/pickaxe/drill/diamonddrill
|
||||
name = "diamond-tipped mining drill"
|
||||
icon_state = "diamonddrill"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=4"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
toolspeed = 0.2
|
||||
|
||||
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
|
||||
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics.
|
||||
icon_state = "diamonddrill"
|
||||
toolspeed = 0.2
|
||||
|
||||
/obj/item/pickaxe/drill/jackhammer
|
||||
name = "sonic jackhammer"
|
||||
icon_state = "jackhammer"
|
||||
item_state = "jackhammer"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4"
|
||||
digsound = list('sound/weapons/sonic_jackhammer.ogg')
|
||||
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
|
||||
toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls
|
||||
|
||||
/obj/item/shovel
|
||||
name = "shovel"
|
||||
desc = "A large tool for digging and moving dirt."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "shovel"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 8
|
||||
throwforce = 4
|
||||
item_state = "shovel"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=50)
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
|
||||
usesound = 'sound/effects/shovel_dig.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/shovel/spade
|
||||
name = "spade"
|
||||
desc = "A small tool for digging and moving dirt."
|
||||
icon_state = "spade"
|
||||
item_state = "spade"
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/shovel/safety
|
||||
name = "safety shovel"
|
||||
desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
@@ -0,0 +1,139 @@
|
||||
/*********************Hivelord stabilizer****************/
|
||||
/obj/item/hivelordstabilizer
|
||||
name = "hivelord stabilizer"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle19"
|
||||
desc = "Inject a hivelord core with this stabilizer to preserve its healing powers indefinitely."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=3"
|
||||
|
||||
/obj/item/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user)
|
||||
. = ..()
|
||||
var/obj/item/organ/internal/hivelord_core/C = M
|
||||
if(!istype(C, /obj/item/organ/internal/hivelord_core))
|
||||
to_chat(user, "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>")
|
||||
return ..()
|
||||
|
||||
C.preserved()
|
||||
to_chat(user, "<span class='notice'>You inject the [M] with the stabilizer. It will no longer go inert.</span>")
|
||||
qdel(src)
|
||||
|
||||
/************************Hivelord core*******************/
|
||||
/obj/item/organ/internal/hivelord_core
|
||||
name = "hivelord remains"
|
||||
desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness."
|
||||
icon_state = "roro core 2"
|
||||
flags = NOBLUDGEON
|
||||
slot = "hivecore"
|
||||
force = 0
|
||||
actions_types = list(/datum/action/item_action/organ_action/use)
|
||||
var/inert = 0
|
||||
var/preserved = 0
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/New()
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/inert_check), 2400)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/inert_check()
|
||||
if(!preserved)
|
||||
go_inert()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/preserved(implanted = 0)
|
||||
inert = FALSE
|
||||
preserved = TRUE
|
||||
update_icon()
|
||||
desc = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay."
|
||||
if(implanted)
|
||||
feedback_add_details("hivelord_core", "[type]|implanted")
|
||||
else
|
||||
feedback_add_details("hivelord_core", "[type]|stabilizer")
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/go_inert()
|
||||
inert = TRUE
|
||||
name = "decayed regenerative core"
|
||||
desc = "All that remains of a hivelord. It has decayed, and is completely useless."
|
||||
feedback_add_details("hivelord_core", "[src.type]|inert")
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/ui_action_click()
|
||||
if(inert)
|
||||
to_chat(owner, "<span class='notice'>[src] breaks down as it tries to activate.</span>")
|
||||
else
|
||||
owner.revive()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/on_life()
|
||||
..()
|
||||
if(owner.health < HEALTH_THRESHOLD_CRIT)
|
||||
ui_action_click()
|
||||
|
||||
///Handles applying the core, logging and status/mood events.
|
||||
/obj/item/organ/internal/hivelord_core/proc/applyto(atom/target, mob/user)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(inert)
|
||||
to_chat(user, "<span class='notice'>[src] has decayed and can no longer be used to heal.</span>")
|
||||
return
|
||||
else
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>[src] is useless on the dead.</span>")
|
||||
return
|
||||
if(H != user)
|
||||
H.visible_message("[user] forces [H] to apply [src]... Black tendrils entangle and reinforce [H.p_them()]!")
|
||||
feedback_add_details("hivelord_core","[src.type]|used|other")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?</span>")
|
||||
feedback_add_details("hivelord_core","[src.type]|used|self")
|
||||
H.revive()
|
||||
user.drop_item()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/afterattack(atom/target, mob/user, proximity_flag)
|
||||
. = ..()
|
||||
if(proximity_flag)
|
||||
applyto(target, user)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/attack_self(mob/user)
|
||||
applyto(user, user)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(!preserved && !inert)
|
||||
preserved(TRUE)
|
||||
owner.visible_message("<span class='notice'>[src] stabilizes as it's inserted.</span>")
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/remove(mob/living/carbon/M, special = 0)
|
||||
if(!inert && !special)
|
||||
owner.visible_message("<span class='notice'>[src] rapidly decays as it's removed.</span>")
|
||||
go_inert()
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/prepare_eat()
|
||||
return null
|
||||
|
||||
/*************************Legion core********************/
|
||||
/obj/item/organ/internal/hivelord_core/legion
|
||||
name = "legion's soul"
|
||||
desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness."
|
||||
icon_state = "legion_soul"
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/update_icon()
|
||||
icon_state = inert ? "legion_soul_inert" : "legion_soul"
|
||||
cut_overlays()
|
||||
if(!inert && !preserved)
|
||||
add_overlay("legion_soul_crackle")
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/go_inert()
|
||||
..()
|
||||
desc = "[src] has become inert. It has decayed, and is completely useless."
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/preserved(implanted = 0)
|
||||
..()
|
||||
desc = "[src] has been stabilized. It is preserved, allowing you to use it to heal completely without danger of decay."
|
||||
@@ -0,0 +1,116 @@
|
||||
/**********************Resonator**********************/
|
||||
/obj/item/resonator
|
||||
name = "resonator"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "resonator"
|
||||
item_state = "resonator"
|
||||
origin_tech = "magnets=3;engineering=3"
|
||||
desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vaccuum."
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
force = 15
|
||||
throwforce = 10
|
||||
var/burst_time = 30
|
||||
var/fieldlimit = 4
|
||||
var/list/fields = list()
|
||||
var/quick_burst_mod = 0.8
|
||||
|
||||
/obj/item/resonator/upgraded
|
||||
name = "upgraded resonator"
|
||||
desc = "An upgraded version of the resonator that can produce more fields at once."
|
||||
icon_state = "resonator_u"
|
||||
origin_tech = "materials=4;powerstorage=3;engineering=3;magnets=3"
|
||||
fieldlimit = 6
|
||||
quick_burst_mod = 1
|
||||
|
||||
/obj/item/resonator/attack_self(mob/user)
|
||||
if(burst_time == 50)
|
||||
burst_time = 30
|
||||
to_chat(user, "<span class='info'>You set the resonator's fields to detonate after 3 seconds.</span>")
|
||||
else
|
||||
burst_time = 50
|
||||
to_chat(user, "<span class='info'>You set the resonator's fields to detonate after 5 seconds.</span>")
|
||||
|
||||
/obj/item/resonator/proc/CreateResonance(target, mob/user)
|
||||
var/turf/T = get_turf(target)
|
||||
var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in T
|
||||
if(R)
|
||||
R.damage_multiplier = quick_burst_mod
|
||||
R.burst()
|
||||
return
|
||||
if(LAZYLEN(fields) < fieldlimit)
|
||||
new /obj/effect/temp_visual/resonance(T, user, src, burst_time)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
/obj/item/resonator/pre_attackby(atom/target, mob/user, params)
|
||||
if(check_allowed_items(target, 1))
|
||||
CreateResonance(target, user)
|
||||
return TRUE
|
||||
|
||||
//resonance field, crushes rock, damages mobs
|
||||
/obj/effect/temp_visual/resonance
|
||||
name = "resonance field"
|
||||
desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures. More damaging in low pressure environments."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "shield1"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
duration = 50
|
||||
var/resonance_damage = 20
|
||||
var/damage_multiplier = 1
|
||||
var/creator
|
||||
var/obj/item/resonator/res
|
||||
|
||||
/obj/effect/temp_visual/resonance/New(loc, set_creator, set_resonator, set_duration)
|
||||
duration = set_duration
|
||||
. = ..()
|
||||
creator = set_creator
|
||||
res = set_resonator
|
||||
if(res)
|
||||
res.fields += src
|
||||
playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
|
||||
transform = matrix() * 0.75
|
||||
animate(src, transform = matrix() * 1.5, time = duration)
|
||||
deltimer(timerid)
|
||||
timerid = addtimer(CALLBACK(src, .proc/burst), duration, TIMER_STOPPABLE)
|
||||
|
||||
/obj/effect/temp_visual/resonance/Destroy()
|
||||
if(res)
|
||||
res.fields -= src
|
||||
res = null
|
||||
creator = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/temp_visual/resonance/proc/check_pressure(turf/proj_turf)
|
||||
if(!proj_turf)
|
||||
proj_turf = get_turf(src)
|
||||
resonance_damage = initial(resonance_damage)
|
||||
if(lavaland_equipment_pressure_check(proj_turf))
|
||||
name = "strong [initial(name)]"
|
||||
resonance_damage *= 3
|
||||
else
|
||||
name = initial(name)
|
||||
resonance_damage *= damage_multiplier
|
||||
|
||||
/obj/effect/temp_visual/resonance/proc/burst()
|
||||
var/turf/T = get_turf(src)
|
||||
new /obj/effect/temp_visual/resonance_crush(T)
|
||||
if(ismineralturf(T))
|
||||
var/turf/simulated/mineral/M = T
|
||||
M.gets_drilled(creator)
|
||||
check_pressure(T)
|
||||
playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
|
||||
for(var/mob/living/L in T)
|
||||
if(creator)
|
||||
add_attack_logs(creator, L, "Resonance field'ed")
|
||||
to_chat(L, "<span class='userdanger'>[src] ruptured with you in it!</span>")
|
||||
L.apply_damage(resonance_damage, BRUTE)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/temp_visual/resonance_crush
|
||||
icon_state = "shield1"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
duration = 4
|
||||
|
||||
/obj/effect/temp_visual/resonance_crush/New()
|
||||
..()
|
||||
transform = matrix()*1.5
|
||||
animate(src, transform = matrix() * 0.1, alpha = 50, time = 4)
|
||||
@@ -0,0 +1,14 @@
|
||||
/**********************Mining Equipment Vendor Items**************************/
|
||||
//misc stuff you can buy from the vendor that has special code but doesn't really need its own file
|
||||
|
||||
/**********************Facehugger toy**********************/
|
||||
/obj/item/clothing/mask/facehugger/toy
|
||||
item_state = "facehugger_inactive"
|
||||
desc = "A toy often used to play pranks on other miners by putting it in their beds. It takes a bit to recharge after latching onto something."
|
||||
throwforce = 0
|
||||
real = 0
|
||||
sterile = 1
|
||||
tint = 3 //Makes it feel more authentic when it latches on
|
||||
|
||||
/obj/item/clothing/mask/facehugger/toy/Die()
|
||||
return
|
||||
@@ -0,0 +1,77 @@
|
||||
/**********************Jaunter**********************/
|
||||
/obj/item/wormhole_jaunter
|
||||
name = "wormhole jaunter"
|
||||
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "Jaunter"
|
||||
item_state = "electronic"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
origin_tech = "bluespace=2"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/wormhole_jaunter/attack_self(mob/user)
|
||||
user.visible_message("<span class='notice'>[user.name] activates the [name]!</span>")
|
||||
activate(user, TRUE)
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
|
||||
var/turf/device_turf = get_turf(user)
|
||||
if(!device_turf || !is_teleport_allowed(device_turf.z))
|
||||
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/get_destinations(mob/user)
|
||||
var/list/destinations = list()
|
||||
|
||||
for(var/obj/item/radio/beacon/B in world)
|
||||
var/turf/T = get_turf(B)
|
||||
if(is_station_level(T.z))
|
||||
destinations += B
|
||||
|
||||
return destinations
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent)
|
||||
if(!turf_check(user))
|
||||
return
|
||||
|
||||
var/list/L = get_destinations(user)
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='notice'>The [name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
return
|
||||
var/chosen_beacon = pick(L)
|
||||
var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100)
|
||||
if(adjacent)
|
||||
try_move_adjacent(J)
|
||||
else
|
||||
J.teleport(user)
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
|
||||
if(user.get_item_by_slot(slot_belt) == src)
|
||||
to_chat(user, "Your [name] activates, saving you from the chasm!</span>")
|
||||
activate(user, FALSE)
|
||||
else
|
||||
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
|
||||
|
||||
/obj/effect/portal/jaunt_tunnel
|
||||
name = "jaunt tunnel"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "bhole3"
|
||||
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
|
||||
failchance = 0
|
||||
|
||||
/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
|
||||
. = ..()
|
||||
if(.)
|
||||
// KERPLUNK
|
||||
playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/L = M
|
||||
L.Weaken(6)
|
||||
if(ishuman(L))
|
||||
shake_camera(L, 20, 1)
|
||||
addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
var/output_dir = SOUTH
|
||||
|
||||
/obj/machinery/mineral/proc/unload_mineral(atom/movable/S)
|
||||
S.forceMove(loc)
|
||||
S.forceMove(drop_location())
|
||||
var/turf/T = get_step(src,output_dir)
|
||||
if(T)
|
||||
S.forceMove(T)
|
||||
|
||||
@@ -0,0 +1,391 @@
|
||||
/**********************Ore Redemption Unit**************************/
|
||||
//Turns all the various mining machines into a single unit to speed up mining and establish a point system
|
||||
|
||||
/obj/machinery/mineral/ore_redemption
|
||||
name = "ore redemption machine"
|
||||
desc = "A machine that accepts ore and instantly transforms it into workable material sheets. Points for ore are generated based on type and can be redeemed at a mining equipment vendor."
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "ore_redemption"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
input_dir = NORTH
|
||||
output_dir = SOUTH
|
||||
req_access = list(access_mineral_storeroom)
|
||||
speed_process = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/req_access_reclaim = access_mining_station
|
||||
var/obj/item/card/id/inserted_id
|
||||
var/points = 0
|
||||
var/ore_pickup_rate = 15
|
||||
var/sheet_per_ore = 1
|
||||
var/point_upgrade = 1
|
||||
var/list/ore_values = list("sand" = 1, "iron" = 1, "plasma" = 15, "silver" = 16, "gold" = 18, "titanium" = 30, "uranium" = 30, "diamond" = 50, "bluespace crystal" = 50, "bananium" = 60, "tranquillite" = 60)
|
||||
var/message_sent = FALSE
|
||||
var/list/ore_buffer = list()
|
||||
var/datum/research/files
|
||||
var/obj/item/disk/design_disk/inserted_disk
|
||||
var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold"))
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/New()
|
||||
..()
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, FALSE, /obj/item/stack)
|
||||
files = new /datum/research/smelter(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/ore_redemption(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/micro_laser(null)
|
||||
component_parts += new /obj/item/assembly/igniter(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/upgraded/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/ore_redemption(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/pico(null)
|
||||
component_parts += new /obj/item/stock_parts/micro_laser/ultra(null)
|
||||
component_parts += new /obj/item/assembly/igniter(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/golem
|
||||
req_access = list(access_free_golems)
|
||||
req_access_reclaim = access_free_golems
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/golem/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/ore_redemption/golem(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/micro_laser(null)
|
||||
component_parts += new /obj/item/assembly/igniter(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/Destroy()
|
||||
QDEL_NULL(files)
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/RefreshParts()
|
||||
var/ore_pickup_rate_temp = 15
|
||||
var/point_upgrade_temp = 1
|
||||
var/sheet_per_ore_temp = 1
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
sheet_per_ore_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
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
|
||||
|
||||
ore_buffer -= O
|
||||
|
||||
if(O && O.refined_type)
|
||||
points += O.points * point_upgrade * O.amount
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/material_amount = materials.get_item_material_amount(O)
|
||||
|
||||
if(!material_amount)
|
||||
qdel(O) //no materials, incinerate it
|
||||
|
||||
else if(!materials.has_space(material_amount * sheet_per_ore * O.amount)) //if there is no space, eject it
|
||||
unload_mineral(O)
|
||||
|
||||
else
|
||||
materials.insert_item(O, sheet_per_ore) //insert it
|
||||
qdel(O)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D)
|
||||
if(D.make_reagents.len)
|
||||
return FALSE
|
||||
|
||||
var/build_amount = 0
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
for(var/mat_id in D.materials)
|
||||
var/M = D.materials[mat_id]
|
||||
var/datum/material/redemption_mat = materials.materials[mat_id]
|
||||
|
||||
if(!M || !redemption_mat)
|
||||
return FALSE
|
||||
|
||||
var/smeltable_sheets = round(redemption_mat.amount / M)
|
||||
|
||||
if(!smeltable_sheets)
|
||||
return FALSE
|
||||
|
||||
if(!build_amount)
|
||||
build_amount = smeltable_sheets
|
||||
|
||||
build_amount = min(build_amount, smeltable_sheets)
|
||||
|
||||
return build_amount
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/process_ores(list/ores_to_process)
|
||||
var/current_amount = 0
|
||||
for(var/ore in ores_to_process)
|
||||
if(current_amount >= ore_pickup_rate)
|
||||
break
|
||||
smelt_ore(ore)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/send_console_message()
|
||||
if(!is_station_level(z))
|
||||
return
|
||||
message_sent = TRUE
|
||||
var/area/A = get_area(src)
|
||||
var/msg = "Now available in [A]:<br>"
|
||||
|
||||
var/has_minerals = FALSE
|
||||
var/mineral_name = null
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
var/mineral_amount = M.amount / MINERAL_MATERIAL_AMOUNT
|
||||
mineral_name = capitalize(M.name)
|
||||
if(mineral_amount)
|
||||
has_minerals = TRUE
|
||||
msg += "[mineral_name]: [mineral_amount] sheets<br>"
|
||||
|
||||
if(!has_minerals)
|
||||
return
|
||||
|
||||
for(var/obj/machinery/requests_console/D in allConsoles)
|
||||
if(D.department in src.supply_consoles)
|
||||
if(supply_consoles[D.department] == null || (mineral_name in supply_consoles[D.department]))
|
||||
D.createMessage("Ore Redemption Machine", "New Minerals Available!", msg, 1)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/process()
|
||||
if(panel_open || !powered())
|
||||
return
|
||||
var/atom/input = get_step(src, input_dir)
|
||||
var/obj/structure/ore_box/OB = locate() in input
|
||||
if(OB)
|
||||
input = OB
|
||||
|
||||
for(var/obj/item/stack/ore/O in input)
|
||||
if(QDELETED(O))
|
||||
continue
|
||||
ore_buffer |= O
|
||||
O.forceMove(src)
|
||||
CHECK_TICK
|
||||
|
||||
if(LAZYLEN(ore_buffer))
|
||||
message_sent = FALSE
|
||||
process_ores(ore_buffer)
|
||||
else if(!message_sent)
|
||||
send_console_message()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/attackby(obj/item/W, mob/user, params)
|
||||
if(exchange_parts(user, W))
|
||||
return
|
||||
if(default_unfasten_wrench(user, W))
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W))
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
|
||||
if(!powered())
|
||||
return
|
||||
if(istype(W, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = user.get_active_hand()
|
||||
if(istype(I) && !istype(inserted_id))
|
||||
if(!user.drop_item())
|
||||
return
|
||||
I.forceMove(src)
|
||||
inserted_id = I
|
||||
interact(user)
|
||||
return
|
||||
|
||||
if(ismultitool(W) && panel_open)
|
||||
input_dir = turn(input_dir, -90)
|
||||
output_dir = turn(output_dir, -90)
|
||||
to_chat(user, "<span class='notice'>You change [src]'s I/O settings, setting the input to [dir2text(input_dir)] and the output to [dir2text(output_dir)].</span>")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/disk/design_disk))
|
||||
if(user.drop_item())
|
||||
W.forceMove(src)
|
||||
inserted_disk = W
|
||||
interact(user)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/interact(mob/user)
|
||||
var/dat = "This machine only accepts ore. Gibtonite and Slag are not accepted.<br><br>"
|
||||
dat += "Current unclaimed points: [points]<br>"
|
||||
|
||||
if(inserted_id)
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=[UID()];eject_id=1'>Eject ID.</A><br>"
|
||||
dat += "<A href='?src=[UID()];claim=1'>Claim points.</A><br><br>"
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=[UID()];insert_id=1'>Insert ID.</A><br><br>"
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
if(M.amount)
|
||||
var/sheet_amount = M.amount / MINERAL_MATERIAL_AMOUNT
|
||||
dat += "[capitalize(M.name)]: [sheet_amount] "
|
||||
if(sheet_amount >= 1)
|
||||
dat += "<A href='?src=[UID()];release=[mat_id]'>Release</A><br>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Release</span><br>"
|
||||
|
||||
dat += "<br><b>Alloys: </b><br>"
|
||||
|
||||
for(var/v in files.known_designs)
|
||||
var/datum/design/D = files.known_designs[v]
|
||||
if(can_smelt_alloy(D))
|
||||
dat += "[D.name]: <A href='?src=[UID()];alloy=[D.id]'>Smelt</A><br>"
|
||||
else
|
||||
dat += "[D.name]: <span class='linkOff'>Smelt</span><br>"
|
||||
|
||||
dat += "<br><div class='statusDisplay'><b>Mineral Value List:</b><br>[get_ore_values()]</div>"
|
||||
|
||||
if(inserted_disk)
|
||||
dat += "<A href='?src=[UID()];eject_disk=1'>Eject disk</A><br>"
|
||||
dat += "<div class='statusDisplay'><b>Uploadable designs: </b><br>"
|
||||
|
||||
if(inserted_disk.blueprint)
|
||||
var/datum/design/D = inserted_disk.blueprint
|
||||
if(D.build_type & SMELTER)
|
||||
dat += "Name: [D.name] <A href='?src=[UID()];upload=[inserted_disk.blueprint]'>Upload to smelter</A>"
|
||||
|
||||
dat += "</div><br>"
|
||||
else
|
||||
dat += "<A href='?src=[UID()];insert_disk=1'>Insert design disk</A><br><br>"
|
||||
|
||||
var/datum/browser/popup = new(user, "ore_redemption_machine", "Ore Redemption Machine", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/get_ore_values()
|
||||
var/dat = "<table border='0' width='300'>"
|
||||
for(var/ore in ore_values)
|
||||
var/value = ore_values[ore]
|
||||
dat += "<tr><td>[capitalize(ore)]</td><td>[value * point_upgrade]</td></tr>"
|
||||
dat += "</table>"
|
||||
return dat
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
if(href_list["eject_id"])
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
if(href_list["claim"])
|
||||
if(inserted_id)
|
||||
if(req_access_reclaim in inserted_id.access)
|
||||
inserted_id.mining_points += points
|
||||
points = 0
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
else if(href_list["insert_id"])
|
||||
var/obj/item/card/id/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
if(!usr.drop_item())
|
||||
return
|
||||
I.forceMove(src)
|
||||
inserted_id = I
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Not a valid ID!</span>")
|
||||
if(href_list["eject_disk"])
|
||||
if(inserted_disk)
|
||||
inserted_disk.forceMove(loc)
|
||||
inserted_disk = null
|
||||
if(href_list["insert_disk"])
|
||||
var/obj/item/disk/design_disk/D = usr.get_active_hand()
|
||||
if(istype(D))
|
||||
if(!usr.drop_item())
|
||||
return
|
||||
D.forceMove(src)
|
||||
inserted_disk = D
|
||||
if(href_list["upload"])
|
||||
if(inserted_disk && inserted_disk.blueprint)
|
||||
files.AddDesign2Known(inserted_disk.blueprint)
|
||||
|
||||
if(href_list["release"])
|
||||
if(check_access(inserted_id) || allowed(usr)) //Check the ID inside, otherwise check the user
|
||||
var/mat_id = href_list["release"]
|
||||
if(!materials.materials[mat_id])
|
||||
return
|
||||
|
||||
var/datum/material/mat = materials.materials[mat_id]
|
||||
var/stored_amount = mat.amount / MINERAL_MATERIAL_AMOUNT
|
||||
|
||||
if(!stored_amount)
|
||||
return
|
||||
|
||||
var/desired = input("How many sheets?", "How many sheets to eject?", 1) as null|num
|
||||
var/sheets_to_remove = round(min(desired,50,stored_amount))
|
||||
|
||||
var/out = get_step(src, output_dir)
|
||||
materials.retrieve_sheets(sheets_to_remove, mat_id, out)
|
||||
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
|
||||
if(href_list["alloy"])
|
||||
var/alloy_id = href_list["alloy"]
|
||||
var/datum/design/alloy = files.FindDesignByID(alloy_id)
|
||||
if((check_access(inserted_id) || allowed(usr)) && alloy)
|
||||
var/desired = input("How many sheets?", "How many sheets would you like to smelt?", 1) as null|num
|
||||
if(desired < 1) // Stops an exploit that lets you build negative alloys and get free materials
|
||||
return
|
||||
var/smelt_amount = can_smelt_alloy(alloy)
|
||||
var/amount = round(min(desired,50,smelt_amount))
|
||||
materials.use_amount(alloy.materials, amount)
|
||||
|
||||
var/output = new alloy.build_path(src)
|
||||
if(istype(output, /obj/item/stack/sheet))
|
||||
var/obj/item/stack/sheet/mineral/produced_alloy = output
|
||||
produced_alloy.amount = amount
|
||||
unload_mineral(produced_alloy)
|
||||
else
|
||||
unload_mineral(output)
|
||||
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/ex_act(severity, target)
|
||||
do_sparks(5, 1, src)
|
||||
if(severity == 1)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
else if(severity == 2)
|
||||
if(prob(25))
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
if(inserted_id && !powered())
|
||||
visible_message("<span class='notice'>The ID slot indicator light flickers on [src] as it spits out a card before powering down.</span>")
|
||||
inserted_id.forceMove(loc)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/update_icon()
|
||||
if(powered())
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
@@ -0,0 +1,311 @@
|
||||
/**********************Mining Equipment Locker**************************/
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor
|
||||
name = "mining equipment vendor"
|
||||
desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "mining"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
var/obj/item/card/id/inserted_id
|
||||
var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
|
||||
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
||||
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
||||
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
||||
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||
new /datum/data/mining_equipment("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 100),
|
||||
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
||||
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
||||
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
|
||||
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
||||
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/autoinjector/survival, 500),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/kinetic_crusher, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
|
||||
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffel/mining_conscript, 1500),
|
||||
new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
|
||||
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
||||
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
|
||||
new /datum/data/mining_equipment("Nanotrasen Minebot", /obj/item/mining_drone_cube, 800),
|
||||
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
||||
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
|
||||
new /datum/data/mining_equipment("Minebot Cooldown Upgrade", /obj/item/borg/upgrade/modkit/cooldown/minebot, 600),
|
||||
new /datum/data/mining_equipment("Minebot AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
|
||||
new /datum/data/mining_equipment("KA Minebot Passthrough", /obj/item/borg/upgrade/modkit/minebot_passthrough, 100),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/mobcapsule, 800),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule belt", /obj/item/storage/belt/lazarus, 200),
|
||||
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
|
||||
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
|
||||
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
|
||||
new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300),
|
||||
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000)
|
||||
)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/golem
|
||||
name = "golem ship equipment vendor"
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/golem/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/mining_equipment_vendor/golem(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/golem/Initialize()
|
||||
. = ..()
|
||||
desc += "\nIt seems a few selections have been added."
|
||||
prize_list += list(
|
||||
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250),
|
||||
new /datum/data/mining_equipment("Science Backpack", /obj/item/storage/backpack/science, 250),
|
||||
new /datum/data/mining_equipment("Full Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250),
|
||||
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250),
|
||||
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
|
||||
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
|
||||
new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000),
|
||||
new /datum/data/mining_equipment("Shuttle Console Board", /obj/item/circuitboard/shuttle/golem_ship, 2000),
|
||||
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
|
||||
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment
|
||||
var/equipment_name = "generic"
|
||||
var/equipment_path = null
|
||||
var/cost = 0
|
||||
|
||||
/datum/data/mining_equipment/New(name, path, equipment_cost)
|
||||
equipment_name = name
|
||||
equipment_path = path
|
||||
cost = equipment_cost
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/mining_equipment_vendor(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
if(inserted_id && !powered())
|
||||
visible_message("<span class='notice'>The ID slot indicator light flickers on \the [src] as it spits out a card before powering down.</span>")
|
||||
inserted_id.forceMove(loc)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/update_icon()
|
||||
if(powered())
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/attack_ghost(mob/user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
|
||||
var/dat
|
||||
dat +="<div class='statusDisplay'>"
|
||||
if(istype(inserted_id))
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=[UID()];choice=eject'>Eject ID.</A><br>"
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=[UID()];choice=insert'>Insert ID.</A><br>"
|
||||
dat += "</div>"
|
||||
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='200'>"
|
||||
for(var/datum/data/mining_equipment/prize in prize_list)
|
||||
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=[UID()];purchase=\ref[prize]'>Purchase</A></td></tr>"
|
||||
dat += "</table>"
|
||||
var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["choice"])
|
||||
if(istype(inserted_id))
|
||||
if(href_list["choice"] == "eject")
|
||||
inserted_id.loc = loc
|
||||
inserted_id.verb_pickup()
|
||||
inserted_id = null
|
||||
else if(href_list["choice"] == "insert")
|
||||
var/obj/item/card/id/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
if(!usr.drop_item())
|
||||
return
|
||||
I.loc = src
|
||||
inserted_id = I
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>No valid ID.</span>")
|
||||
|
||||
if(href_list["purchase"])
|
||||
if(istype(inserted_id))
|
||||
var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
|
||||
if(!prize || !(prize in prize_list) || prize.cost > inserted_id.mining_points)
|
||||
return
|
||||
|
||||
inserted_id.mining_points -= prize.cost
|
||||
new prize.equipment_path(src.loc)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/crowbar))
|
||||
if(inserted_id)
|
||||
inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
|
||||
default_deconstruction_crowbar(I)
|
||||
return 1
|
||||
if(istype(I, /obj/item/mining_voucher))
|
||||
if(!powered())
|
||||
return
|
||||
else
|
||||
RedeemVoucher(I, user)
|
||||
return
|
||||
if(istype(I,/obj/item/card/id))
|
||||
if(!powered())
|
||||
return
|
||||
else
|
||||
var/obj/item/card/id/C = usr.get_active_hand()
|
||||
if(istype(C) && !istype(inserted_id))
|
||||
if(!usr.drop_item())
|
||||
return
|
||||
C.forceMove(src)
|
||||
inserted_id = C
|
||||
interact(user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
|
||||
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit")
|
||||
|
||||
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
|
||||
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
||||
return
|
||||
|
||||
var/drop_location = drop_location()
|
||||
switch(selection)
|
||||
if("Survival Capsule and Explorer's Webbing")
|
||||
new /obj/item/storage/belt/mining(drop_location)
|
||||
if("Resonator Kit")
|
||||
new /obj/item/extinguisher/mini(drop_location)
|
||||
new /obj/item/resonator(drop_location)
|
||||
if("Minebot Kit")
|
||||
new /obj/item/mining_drone_cube(drop_location)
|
||||
new /obj/item/weldingtool/hugetank(drop_location)
|
||||
new /obj/item/clothing/head/welding(drop_location)
|
||||
if("Extraction and Rescue Kit")
|
||||
new /obj/item/extraction_pack(drop_location)
|
||||
new /obj/item/fulton_core(drop_location)
|
||||
new /obj/item/stack/marker_beacon/thirty(drop_location)
|
||||
if("Crusher Kit")
|
||||
new /obj/item/extinguisher/mini(drop_location)
|
||||
new /obj/item/twohanded/kinetic_crusher(drop_location)
|
||||
if("Mining Conscription Kit")
|
||||
new /obj/item/storage/backpack/duffel/mining_conscript(drop_location)
|
||||
|
||||
qdel(voucher)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
|
||||
do_sparks(5, 1, src)
|
||||
if(prob(50 / severity) && severity < 3)
|
||||
qdel(src)
|
||||
|
||||
/**********************Mining Equipment Locker Items**************************/
|
||||
|
||||
/**********************Mining Equipment Voucher**********************/
|
||||
|
||||
/obj/item/mining_voucher
|
||||
name = "mining voucher"
|
||||
desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "mining_voucher"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/**********************Mining Point Card**********************/
|
||||
|
||||
/obj/item/card/mining_point_card
|
||||
name = "mining point card"
|
||||
desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
|
||||
icon_state = "data"
|
||||
var/points = 500
|
||||
|
||||
/obj/item/card/mining_point_card/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
if(points)
|
||||
var/obj/item/card/id/C = I
|
||||
C.mining_points += points
|
||||
to_chat(user, "<span class='info'>You transfer [points] points to [C].</span>")
|
||||
points = 0
|
||||
else
|
||||
to_chat(user, "<span class='info'>There's no points left on [src].</span>")
|
||||
..()
|
||||
|
||||
/obj/item/card/mining_point_card/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "There's [points] points on the card.")
|
||||
|
||||
/**********************Conscription Kit**********************/
|
||||
|
||||
/obj/item/card/id/mining_access_card
|
||||
name = "mining access card"
|
||||
desc = "A small card, that when used on any ID, will add mining access."
|
||||
icon_state = "data_1"
|
||||
|
||||
/obj/item/card/id/mining_access_card/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
. = ..()
|
||||
if(istype(AM, /obj/item/card/id) && proximity)
|
||||
var/obj/item/card/id/I = AM
|
||||
I.access |= list(access_mining, access_mining_station, access_mineral_storeroom, access_cargo)
|
||||
to_chat(user, "You upgrade [I] with mining access.")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript
|
||||
name = "mining conscription kit"
|
||||
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/New()
|
||||
..()
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/storage/bag/ore(src)
|
||||
new /obj/item/clothing/suit/hooded/explorer(src)
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/card/id/mining_access_card(src)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src)
|
||||
new /obj/item/kitchen/knife/combat/survival(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
@@ -75,157 +75,6 @@
|
||||
desc = "A mining lantern."
|
||||
brightness_on = 6 // luminosity when on
|
||||
|
||||
/*****************************Pickaxe********************************/
|
||||
|
||||
/obj/item/pickaxe
|
||||
name = "pickaxe"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "pickaxe"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
throwforce = 10
|
||||
item_state = "pickaxe"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
|
||||
origin_tech = "materials=2;engineering=3"
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
|
||||
var/drill_verb = "picking"
|
||||
sharp = 1
|
||||
var/excavation_amount = 100
|
||||
usesound = 'sound/effects/picaxe1.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/pickaxe/proc/playDigSound()
|
||||
playsound(src, pick(digsound),20,1)
|
||||
|
||||
/obj/item/pickaxe/emergency
|
||||
name = "emergency disembarkation tool"
|
||||
desc = "For extracting yourself from rough landings."
|
||||
|
||||
/obj/item/pickaxe/safety
|
||||
name = "safety pickaxe"
|
||||
desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
|
||||
/obj/item/pickaxe/mini
|
||||
name = "compact pickaxe"
|
||||
desc = "A smaller, compact version of the standard pickaxe."
|
||||
icon_state = "minipick"
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
/obj/item/pickaxe/silver
|
||||
name = "silver-plated pickaxe"
|
||||
icon_state = "spickaxe"
|
||||
item_state = "spickaxe"
|
||||
origin_tech = "materials=3;engineering=4"
|
||||
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
|
||||
toolspeed = 0.75
|
||||
|
||||
/obj/item/pickaxe/gold
|
||||
name = "golden pickaxe"
|
||||
icon_state = "gpickaxe"
|
||||
item_state = "gpickaxe"
|
||||
origin_tech = "materials=4;engineering=4"
|
||||
desc = "A gold-plated pickaxe that mines faster than standard-issue."
|
||||
toolspeed = 0.6
|
||||
|
||||
/obj/item/pickaxe/diamond
|
||||
name = "diamond-tipped pickaxe"
|
||||
icon_state = "dpickaxe"
|
||||
item_state = "dpickaxe"
|
||||
origin_tech = "materials=5;engineering=4"
|
||||
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/pickaxe/drill
|
||||
name = "mining drill"
|
||||
icon_state = "handdrill"
|
||||
item_state = "jackhammer"
|
||||
digsound = list('sound/weapons/drill.ogg')
|
||||
hitsound = 'sound/weapons/drill.ogg'
|
||||
usesound = 'sound/weapons/drill.ogg'
|
||||
origin_tech = "materials=2;powerstorage=2;engineering=3"
|
||||
desc = "An electric mining drill for the especially scrawny."
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/pickaxe/drill/cyborg
|
||||
name = "cyborg mining drill"
|
||||
desc = "An integrated electric mining drill."
|
||||
flags = NODROP
|
||||
|
||||
/obj/item/pickaxe/drill/diamonddrill
|
||||
name = "diamond-tipped mining drill"
|
||||
icon_state = "diamonddrill"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=4"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/pickaxe/diamonddrill/traitor //Pocket-sized traitor diamond drill.
|
||||
name = "supermatter drill"
|
||||
icon_state = "smdrill"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=4;syndicate=3"
|
||||
desc = "Microscopic supermatter crystals cover the head of this tiny drill."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
|
||||
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics.
|
||||
icon_state = "diamonddrill"
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/pickaxe/drill/jackhammer
|
||||
name = "sonic jackhammer"
|
||||
icon_state = "jackhammer"
|
||||
item_state = "jackhammer"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4"
|
||||
digsound = list('sound/weapons/sonic_jackhammer.ogg')
|
||||
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
|
||||
toolspeed = 0.1
|
||||
|
||||
/*****************************Shovel********************************/
|
||||
|
||||
/obj/item/shovel
|
||||
name = "shovel"
|
||||
desc = "A large tool for digging and moving dirt."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "shovel"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 8
|
||||
throwforce = 4
|
||||
item_state = "shovel"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=50)
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
|
||||
usesound = 'sound/effects/shovel_dig.ogg'
|
||||
toolspeed = 1
|
||||
|
||||
/obj/item/shovel/spade
|
||||
name = "spade"
|
||||
desc = "A small tool for digging and moving dirt."
|
||||
icon_state = "spade"
|
||||
item_state = "spade"
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
toolspeed = 2
|
||||
|
||||
/obj/item/shovel/safety
|
||||
name = "safety shovel"
|
||||
desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
|
||||
/**********************Mining car (Crate like thing, not the rail car)**************************/
|
||||
|
||||
/obj/structure/closet/crate/miningcar
|
||||
@@ -234,60 +83,4 @@
|
||||
icon_state = "miningcar"
|
||||
density = 1
|
||||
icon_opened = "miningcaropen"
|
||||
icon_closed = "miningcar"
|
||||
|
||||
/*********************Mob Capsule*************************/
|
||||
|
||||
/obj/item/mobcapsule
|
||||
name = "lazarus capsule"
|
||||
desc = "It allows you to store and deploy lazarus-injected creatures easier."
|
||||
icon = 'icons/obj/mobcap.dmi'
|
||||
icon_state = "mobcap0"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_range = 20
|
||||
var/mob/living/simple_animal/captured = null
|
||||
var/colorindex = 0
|
||||
|
||||
/obj/item/mobcapsule/Destroy()
|
||||
if(captured)
|
||||
captured.ghostize()
|
||||
QDEL_NULL(captured)
|
||||
return ..()
|
||||
|
||||
/obj/item/mobcapsule/attack(var/atom/A, mob/user, prox_flag)
|
||||
if(!istype(A, /mob/living/simple_animal) || isbot(A))
|
||||
return ..()
|
||||
capture(A, user)
|
||||
return 1
|
||||
|
||||
/obj/item/mobcapsule/proc/capture(var/mob/target, var/mob/U as mob)
|
||||
var/mob/living/simple_animal/T = target
|
||||
if(captured)
|
||||
to_chat(U, "<span class='notice'>Capture failed!</span>: The capsule already has a mob registered to it!")
|
||||
else
|
||||
if(istype(T) && "neutral" in T.faction)
|
||||
T.forceMove(src)
|
||||
T.name = "[U.name]'s [initial(T.name)]"
|
||||
T.cancel_camera()
|
||||
name = "Lazarus Capsule: [initial(T.name)]"
|
||||
to_chat(U, "<span class='notice'>You placed a [T.name] inside the Lazarus Capsule!</span>")
|
||||
captured = T
|
||||
else
|
||||
to_chat(U, "You can't capture that mob!")
|
||||
|
||||
/obj/item/mobcapsule/throw_impact(atom/A, mob/user)
|
||||
..()
|
||||
if(captured)
|
||||
dump_contents(user)
|
||||
|
||||
/obj/item/mobcapsule/proc/dump_contents(mob/user)
|
||||
if(captured)
|
||||
captured.forceMove(get_turf(src))
|
||||
captured = null
|
||||
|
||||
/obj/item/mobcapsule/attack_self(mob/user)
|
||||
colorindex += 1
|
||||
if(colorindex >= 6)
|
||||
colorindex = 0
|
||||
icon_state = "mobcap[colorindex]"
|
||||
update_icon()
|
||||
icon_closed = "miningcar"
|
||||
@@ -303,6 +303,7 @@
|
||||
qdel(src)
|
||||
|
||||
//AI
|
||||
|
||||
/obj/item/slimepotion/sentience/mining
|
||||
name = "minebot AI upgrade"
|
||||
desc = "Can be used to grant sentience to minebots."
|
||||
@@ -325,5 +326,21 @@
|
||||
if(M.stored_gun)
|
||||
M.stored_gun.overheat_time += base_cooldown_add
|
||||
|
||||
/**********************Mining drone cube**********************/
|
||||
|
||||
/obj/item/mining_drone_cube
|
||||
name = "mining drone cube"
|
||||
desc = "Compressed mining drone, ready for deployment. Just press the button to activate!"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "minedronecube"
|
||||
item_state = "electronic"
|
||||
|
||||
/obj/item/mining_drone_cube/attack_self(mob/user)
|
||||
user.visible_message("<span class='warning'>\The [src] suddenly expands into a fully functional mining drone!</span>", \
|
||||
"<span class='warning'>You press center button on \the [src]. The device suddenly expands into a fully functional mining drone!</span>")
|
||||
new /mob/living/simple_animal/hostile/mining_drone(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
#undef MINEDRONE_COLLECT
|
||||
#undef MINEDRONE_ATTACK
|
||||
#undef MINEDRONE_ATTACK
|
||||
@@ -303,8 +303,165 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/stack/ore/ex_act()
|
||||
return
|
||||
/obj/item/stack/ore/ex_act(severity)
|
||||
if(!severity || severity >= 2)
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
|
||||
/*****************************Coin********************************/
|
||||
|
||||
/obj/item/coin
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
name = "coin"
|
||||
icon_state = "coin__heads"
|
||||
flags = CONDUCT
|
||||
force = 1
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/string_attached
|
||||
var/list/sideslist = list("heads","tails")
|
||||
var/cmineral = null
|
||||
var/cooldown = 0
|
||||
var/credits = 10
|
||||
|
||||
/obj/item/coin/New()
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
icon_state = "coin_[cmineral]_[sideslist[1]]"
|
||||
if(cmineral)
|
||||
name = "[cmineral] coin"
|
||||
|
||||
/obj/item/coin/gold
|
||||
cmineral = "gold"
|
||||
icon_state = "coin_gold_heads"
|
||||
materials = list(MAT_GOLD = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/silver
|
||||
cmineral = "silver"
|
||||
icon_state = "coin_silver_heads"
|
||||
materials = list(MAT_SILVER = 400)
|
||||
credits = 40
|
||||
|
||||
/obj/item/coin/diamond
|
||||
cmineral = "diamond"
|
||||
icon_state = "coin_diamond_heads"
|
||||
materials = list(MAT_DIAMOND = 400)
|
||||
credits = 120
|
||||
|
||||
/obj/item/coin/iron
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
materials = list(MAT_METAL = 400)
|
||||
credits = 20
|
||||
|
||||
/obj/item/coin/plasma
|
||||
cmineral = "plasma"
|
||||
icon_state = "coin_plasma_heads"
|
||||
materials = list(MAT_PLASMA = 400)
|
||||
credits = 80
|
||||
|
||||
/obj/item/coin/uranium
|
||||
cmineral = "uranium"
|
||||
icon_state = "coin_uranium_heads"
|
||||
materials = list(MAT_URANIUM = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/clown
|
||||
cmineral = "bananium"
|
||||
icon_state = "coin_bananium_heads"
|
||||
materials = list(MAT_BANANIUM = 400)
|
||||
credits = 600 //makes the clown cri
|
||||
|
||||
/obj/item/coin/mime
|
||||
cmineral = "tranquillite"
|
||||
icon_state = "coin_tranquillite_heads"
|
||||
materials = list(MAT_TRANQUILLITE = 400)
|
||||
credits = 600 //makes the mime cri
|
||||
|
||||
/obj/item/coin/adamantine
|
||||
cmineral = "adamantine"
|
||||
icon_state = "coin_adamantine_heads"
|
||||
credits = 400
|
||||
|
||||
/obj/item/coin/mythril
|
||||
cmineral = "mythril"
|
||||
icon_state = "coin_mythril_heads"
|
||||
credits = 400
|
||||
|
||||
/obj/item/coin/twoheaded
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
desc = "Hey, this coin's the same on both sides!"
|
||||
sideslist = list("heads")
|
||||
credits = 20
|
||||
|
||||
/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")
|
||||
credits = 20
|
||||
|
||||
/obj/item/coin/antagtoken/syndicate
|
||||
name = "syndicate coin"
|
||||
credits = 160
|
||||
|
||||
/obj/item/coin/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if(string_attached)
|
||||
to_chat(user, "<span class='notice'>There already is a string attached to this coin.</span>")
|
||||
return
|
||||
|
||||
if(CC.use(1))
|
||||
overlays += image('icons/obj/economy.dmi',"coin_string_overlay")
|
||||
string_attached = 1
|
||||
to_chat(user, "<span class='notice'>You attach a string to the coin.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one length of cable to attach a string to the coin.</span>")
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/wirecutters))
|
||||
if(!string_attached)
|
||||
..()
|
||||
return
|
||||
|
||||
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
|
||||
CC.amount = 1
|
||||
CC.update_icon()
|
||||
overlays = list()
|
||||
string_attached = null
|
||||
to_chat(user, "<span class='notice'>You detach the string from the coin.</span>")
|
||||
else if(istype(W,/obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(WT.welding && WT.remove_fuel(0, user))
|
||||
var/typelist = list("iron" = /obj/item/clothing/gloves/ring,
|
||||
"silver" = /obj/item/clothing/gloves/ring/silver,
|
||||
"gold" = /obj/item/clothing/gloves/ring/gold,
|
||||
"plasma" = /obj/item/clothing/gloves/ring/plasma,
|
||||
"uranium" = /obj/item/clothing/gloves/ring/uranium)
|
||||
var/typekey = typelist[cmineral]
|
||||
if(ispath(typekey))
|
||||
to_chat(user, "<span class='notice'>You make [src] into a ring.</span>")
|
||||
new typekey(get_turf(loc))
|
||||
qdel(src)
|
||||
else ..()
|
||||
|
||||
/obj/item/coin/attack_self(mob/user as mob)
|
||||
if(cooldown < world.time - 15)
|
||||
var/coinflip = pick(sideslist)
|
||||
cooldown = world.time
|
||||
flick("coin_[cmineral]_flip", src)
|
||||
icon_state = "coin_[cmineral]_[coinflip]"
|
||||
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
|
||||
if(do_after(user, 15, target = src))
|
||||
user.visible_message("<span class='notice'>[user] has flipped [src]. It lands on [coinflip].</span>", \
|
||||
"<span class='notice'>You flip [src]. It lands on [coinflip].</span>", \
|
||||
"<span class='notice'>You hear the clattering of loose change.</span>")
|
||||
|
||||
#undef GIBTONITE_QUALITY_LOW
|
||||
#undef GIBTONITE_QUALITY_MEDIUM
|
||||
@@ -1128,6 +1128,7 @@ so that different stomachs can handle things in different ways VB*/
|
||||
var/obj/item/clothing/C = I
|
||||
if(C.tint || initial(C.tint))
|
||||
update_tint()
|
||||
update_sight()
|
||||
if(I.flags_inv & HIDEMASK || forced)
|
||||
update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
@@ -6,21 +6,19 @@
|
||||
dangerous_existence = TRUE //So so much
|
||||
//language = "Clatter"
|
||||
|
||||
species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING)
|
||||
species_traits = list(IS_WHITELISTED, RADIMMUNE, NO_BLOOD, NOTRANSSTING)
|
||||
forced_heartattack = TRUE // Plasmamen have no blood, but they should still get heart-attacks
|
||||
skinned_type = /obj/item/stack/sheet/mineral/plasma // We're low on plasma, R&D! *eyes plasmaman co-worker intently*
|
||||
dietflags = DIET_OMNI
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
//default_mutations=list(SKELETON) // This screws things up
|
||||
|
||||
butt_sprite = "plasma"
|
||||
|
||||
breathid = "tox"
|
||||
|
||||
heat_level_1 = 350 // Heat damage level 1 above this point.
|
||||
heat_level_2 = 400 // Heat damage level 2 above this point.
|
||||
heat_level_3 = 500 // Heat damage level 3 above this point.
|
||||
burn_mod = 1.5
|
||||
heatmod = 1.5
|
||||
brute_mod = 1.5
|
||||
|
||||
//Has default darksight of 2.
|
||||
|
||||
@@ -48,136 +46,118 @@
|
||||
message = replacetext(message, "s", stutter("ss"))
|
||||
return message
|
||||
|
||||
/datum/species/plasmaman/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
||||
var/assigned_role = H.mind && H.mind.assigned_role ? H.mind.assigned_role : "Civilian"
|
||||
// Unequip existing suits and hats.
|
||||
H.unEquip(H.wear_suit)
|
||||
H.unEquip(H.head)
|
||||
if(assigned_role != "Clown")
|
||||
H.unEquip(H.wear_mask)
|
||||
|
||||
H.equip_or_collect(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
|
||||
var/suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
var/helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
var/tank_slot = slot_s_store
|
||||
var/tank_slot_name = "suit storage"
|
||||
|
||||
switch(assigned_role)
|
||||
if("Scientist","Roboticist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
if("Geneticist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science/geneticist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science/geneticist
|
||||
if("Research Director")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science/rd
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
|
||||
if("Station Engineer", "Mechanic")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
if("Chief Engineer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
|
||||
if("Life Support Specialist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
if("Detective")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
if("Warden","Security Officer","Security Pod Pilot")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
if("Internal Affairs Agent")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/lawyer
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/lawyer
|
||||
if("Magistrate")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/magistrate
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/magistrate
|
||||
if("Head of Security", "Special Operations Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hos
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
|
||||
if("Captain", "Blueshield")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/captain
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
|
||||
if("Head of Personnel")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hop
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
|
||||
if("Nanotrasen Representative", "Nanotrasen Navy Officer")
|
||||
suit = /obj/item/clothing/suit/space/eva/plasmaman/nt_rep
|
||||
helm = /obj/item/clothing/head/helmet/space/eva/plasmaman/nt_rep
|
||||
if("Medical Doctor","Brig Physician","Virologist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
if("Paramedic")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
|
||||
if("Chemist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
|
||||
if("Chief Medical Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
|
||||
if("Coroner")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/coroner
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/coroner
|
||||
if("Virologist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/virologist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/virologist
|
||||
if("Bartender", "Chef")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
if("Cargo Technician", "Quartermaster")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/cargo
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
|
||||
if("Shaft Miner")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/explorer
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer
|
||||
if("Botanist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
|
||||
/datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/current_job = J.title
|
||||
var/datum/outfit/plasmaman/O = new /datum/outfit/plasmaman
|
||||
switch(current_job)
|
||||
if("Chaplain")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/chaplain
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
|
||||
if("Janitor")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/janitor
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
|
||||
if("Civilian", "Barber")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
if("Clown")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/clown
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
|
||||
if("Mime")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/mime
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
|
||||
if("Syndicate Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/nuclear
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
|
||||
O = new /datum/outfit/plasmaman/chaplain
|
||||
|
||||
if((H.mind.special_role == SPECIAL_ROLE_WIZARD) || (H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE))
|
||||
H.equip_to_slot(new /obj/item/clothing/suit/space/eva/plasmaman/wizard(H), slot_wear_suit)
|
||||
H.equip_to_slot(new /obj/item/clothing/head/helmet/space/eva/plasmaman/wizard(H), slot_head)
|
||||
else
|
||||
H.equip_or_collect(new suit(H), slot_wear_suit)
|
||||
H.equip_or_collect(new helm(H), slot_head)
|
||||
H.equip_or_collect(new /obj/item/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy.
|
||||
H.equip_or_collect(new /obj/item/plasmensuit_cartridge(H), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/plasmensuit_cartridge(H), slot_in_backpack) //Two refill cartridges for their suit. Can fit in boxes.
|
||||
to_chat(H, "<span class='notice'>You are now running on plasma internals from the [H.s_store] in your [tank_slot_name]. You must breathe plasma in order to survive, and are extremely flammable.</span>")
|
||||
H.internal = H.get_item_by_slot(tank_slot)
|
||||
if("Librarian")
|
||||
O = new /datum/outfit/plasmaman/librarian
|
||||
|
||||
if("Janitor")
|
||||
O = new /datum/outfit/plasmaman/janitor
|
||||
|
||||
if("Botanist")
|
||||
O = new /datum/outfit/plasmaman/botany
|
||||
|
||||
if("Bartender", "Internal Affairs Agent", "Magistrate", "Nanotrasen Representative", "Nanotrasen Navy Officer")
|
||||
O = new /datum/outfit/plasmaman/bar
|
||||
|
||||
if("Chef")
|
||||
O = new /datum/outfit/plasmaman/chef
|
||||
|
||||
if("Security Officer", "Security Pod Pilot", "Special Operations Officer")
|
||||
O = new /datum/outfit/plasmaman/security
|
||||
|
||||
if("Detective")
|
||||
O = new /datum/outfit/plasmaman/detective
|
||||
|
||||
if("Warden")
|
||||
O = new /datum/outfit/plasmaman/warden
|
||||
|
||||
if("Head of Security")
|
||||
O = new /datum/outfit/plasmaman/hos
|
||||
|
||||
if("Cargo Technician", "Quartermaster")
|
||||
O = new /datum/outfit/plasmaman/cargo
|
||||
|
||||
if("Shaft Miner")
|
||||
O = new /datum/outfit/plasmaman/mining
|
||||
|
||||
if("Medical Doctor", "Brig Physician", "Paramedic", "Coroner")
|
||||
O = new /datum/outfit/plasmaman/medical
|
||||
|
||||
if("Chief Medical Officer")
|
||||
O = new /datum/outfit/plasmaman/cmo
|
||||
|
||||
if("Chemist")
|
||||
O = new /datum/outfit/plasmaman/chemist
|
||||
|
||||
if("Geneticist")
|
||||
O = new /datum/outfit/plasmaman/genetics
|
||||
|
||||
if("Roboticist")
|
||||
O = new /datum/outfit/plasmaman/robotics
|
||||
|
||||
if("Virologist")
|
||||
O = new /datum/outfit/plasmaman/viro
|
||||
|
||||
if("Scientist")
|
||||
O = new /datum/outfit/plasmaman/science
|
||||
|
||||
if("Research Director")
|
||||
O = new /datum/outfit/plasmaman/rd
|
||||
|
||||
if("Station Engineer", "Mechanic")
|
||||
O = new /datum/outfit/plasmaman/engineering
|
||||
|
||||
if("Chief Engineer")
|
||||
O = new /datum/outfit/plasmaman/ce
|
||||
|
||||
if("Atmospheric Technician")
|
||||
O = new /datum/outfit/plasmaman/atmospherics
|
||||
|
||||
if("Mime")
|
||||
O = new /datum/outfit/plasmaman/mime
|
||||
|
||||
if("Clown")
|
||||
O = new /datum/outfit/plasmaman/clown
|
||||
|
||||
if("Head of Personnel")
|
||||
O = new /datum/outfit/plasmaman/hop
|
||||
|
||||
if("Captain")
|
||||
O = new /datum/outfit/plasmaman/captain
|
||||
|
||||
if("Blueshield")
|
||||
O = new /datum/outfit/plasmaman/blueshield
|
||||
|
||||
H.equipOutfit(O, visualsOnly)
|
||||
H.internal = H.r_hand
|
||||
H.update_action_buttons_icon()
|
||||
return FALSE
|
||||
|
||||
/datum/species/plasmaman/handle_life(mob/living/carbon/human/H)
|
||||
if(!istype(H.wear_suit, /obj/item/clothing/suit/space/eva/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
if(environment && environment.oxygen && environment.oxygen >= OXYCONCEN_PLASMEN_IGNITION) //Plasmamen so long as there's enough oxygen (0.5 moles, same as it takes to burn gaseous plasma).
|
||||
H.adjust_fire_stacks(0.5)
|
||||
if(!H.on_fire && H.fire_stacks > 0)
|
||||
H.visible_message("<span class='danger'>[H]'s body reacts with the atmosphere and bursts into flames!</span>","<span class='userdanger'>Your body reacts with the atmosphere and bursts into flame!</span>")
|
||||
H.IgniteMob()
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/atmos_sealed = FALSE
|
||||
if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing))
|
||||
var/obj/item/clothing/CS = H.wear_suit
|
||||
var/obj/item/clothing/CH = H.head
|
||||
if (CS.flags & CH.flags & STOPSPRESSUREDMAGE)
|
||||
atmos_sealed = TRUE
|
||||
if((!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman)) && !atmos_sealed)
|
||||
if(environment)
|
||||
if(environment.total_moles())
|
||||
if(environment.oxygen && environment.oxygen >= OXYCONCEN_PLASMEN_IGNITION) //Same threshhold that extinguishes fire
|
||||
H.adjust_fire_stacks(0.5)
|
||||
if(!H.on_fire && H.fire_stacks > 0)
|
||||
H.visible_message("<span class='danger'>[H]'s body reacts with the atmosphere and bursts into flames!</span>","<span class='userdanger'>Your body reacts with the atmosphere and bursts into flame!</span>")
|
||||
H.IgniteMob()
|
||||
else
|
||||
if(H.on_fire && H.fire_stacks > 0)
|
||||
var/obj/item/clothing/suit/space/eva/plasmaman/P = H.wear_suit
|
||||
if(H.fire_stacks)
|
||||
var/obj/item/clothing/under/plasmaman/P = H.w_uniform
|
||||
if(istype(P))
|
||||
P.Extinguish(H)
|
||||
H.update_fire()
|
||||
|
||||
@@ -7,19 +7,19 @@
|
||||
/mob/living/carbon/human/SetStunned(amount, updating = 1, force = 0)
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.stun_mod
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/SetWeakened(amount, updating = 1, force = 0)
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.stun_mod
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/SetParalysis(amount, updating = 1, force = 0)
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.stun_mod
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/SetSleeping(amount, updating = 1, no_alert = FALSE)
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.stun_mod
|
||||
..()
|
||||
return ..()
|
||||
@@ -940,29 +940,31 @@ var/global/list/damage_icon_parts = list()
|
||||
if(inv)
|
||||
inv.update_icon()
|
||||
if(wear_mask && (istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory)))
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
var/datum/sprite_accessory/alt_heads/alternate_head
|
||||
if(head_organ.alt_head && head_organ.alt_head != "None")
|
||||
alternate_head = GLOB.alt_heads_list[head_organ.alt_head]
|
||||
if(!(slot_wear_mask in check_obscured_slots()))
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
var/datum/sprite_accessory/alt_heads/alternate_head
|
||||
if(head_organ.alt_head && head_organ.alt_head != "None")
|
||||
alternate_head = GLOB.alt_heads_list[head_organ.alt_head]
|
||||
|
||||
var/mutable_appearance/standing
|
||||
var/icon/mask_icon = new(wear_mask.icon)
|
||||
if(wear_mask.icon_override)
|
||||
mask_icon = new(wear_mask.icon_override)
|
||||
standing = mutable_appearance(wear_mask.icon_override, "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[dna.species.name])
|
||||
mask_icon = new(wear_mask.sprite_sheets[dna.species.name])
|
||||
standing = mutable_appearance(wear_mask.sprite_sheets[dna.species.name], "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
else
|
||||
standing = mutable_appearance('icons/mob/mask.dmi', "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
var/mutable_appearance/standing
|
||||
var/icon/mask_icon = new(wear_mask.icon)
|
||||
if(wear_mask.icon_override)
|
||||
mask_icon = new(wear_mask.icon_override)
|
||||
standing = mutable_appearance(wear_mask.icon_override, "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[dna.species.name])
|
||||
mask_icon = new(wear_mask.sprite_sheets[dna.species.name])
|
||||
standing = mutable_appearance(wear_mask.sprite_sheets[dna.species.name], "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
else
|
||||
standing = mutable_appearance('icons/mob/mask.dmi', "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]", layer = -FACEMASK_LAYER)
|
||||
|
||||
if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA)
|
||||
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "maskblood")
|
||||
bloodsies.color = wear_mask.blood_color
|
||||
standing.overlays += bloodsies
|
||||
standing.alpha = wear_mask.alpha
|
||||
standing.color = wear_mask.color
|
||||
overlays_standing[FACEMASK_LAYER] = standing
|
||||
if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA)
|
||||
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "maskblood")
|
||||
bloodsies.color = wear_mask.blood_color
|
||||
standing.overlays += bloodsies
|
||||
|
||||
standing.alpha = wear_mask.alpha
|
||||
standing.color = wear_mask.color
|
||||
overlays_standing[FACEMASK_LAYER] = standing
|
||||
apply_overlay(FACEMASK_LAYER)
|
||||
|
||||
|
||||
|
||||
@@ -107,6 +107,8 @@
|
||||
aiRestorePowerRoutine = 0
|
||||
update_blind_effects()
|
||||
update_sight()
|
||||
to_chat(src, "Here are your current laws:")
|
||||
show_laws()
|
||||
return
|
||||
|
||||
switch(PRP)
|
||||
@@ -126,8 +128,6 @@
|
||||
theAPC.attack_ai(src)
|
||||
apc_override = 0
|
||||
aiRestorePowerRoutine = 3
|
||||
to_chat(src, "Here are your current laws:")
|
||||
src.show_laws() //WHY THE FUCK IS THIS HERE
|
||||
sleep(50)
|
||||
theAPC = null
|
||||
|
||||
|
||||
@@ -55,80 +55,6 @@
|
||||
return FALSE
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
|
||||
/obj/item/organ/internal/hivelord_core
|
||||
name = "hivelord remains"
|
||||
desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly."
|
||||
icon_state = "roro core 2"
|
||||
flags = NOBLUDGEON
|
||||
slot = "hivecore"
|
||||
force = 0
|
||||
actions_types = list(/datum/action/item_action/organ_action/use)
|
||||
var/inert = 0
|
||||
var/preserved = 0
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/New()
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/inert_check), 2400)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/inert_check()
|
||||
if(owner)
|
||||
preserved(implanted = 1)
|
||||
else if(preserved)
|
||||
preserved()
|
||||
else
|
||||
go_inert()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/preserved(implanted = 0)
|
||||
inert = FALSE
|
||||
preserved = TRUE
|
||||
update_icon()
|
||||
|
||||
if(implanted)
|
||||
feedback_add_details("hivelord_core", "[type]|implanted")
|
||||
else
|
||||
feedback_add_details("hivelord_core", "[type]|stabilizer")
|
||||
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/go_inert()
|
||||
inert = TRUE
|
||||
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
|
||||
feedback_add_details("hivelord_core", "[src.type]|inert")
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/ui_action_click()
|
||||
owner.revive()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/on_life()
|
||||
..()
|
||||
if(owner.health < HEALTH_THRESHOLD_CRIT)
|
||||
ui_action_click()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(inert)
|
||||
to_chat(user, "<span class='notice'>[src] has become inert, its healing properties are no more.</span>")
|
||||
return
|
||||
else
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>[src] are useless on the dead.</span>")
|
||||
return
|
||||
if(H != user)
|
||||
H.visible_message("[user] forces [H] to apply [src]... They quickly regenerate all injuries!")
|
||||
feedback_add_details("hivelord_core","[src.type]|used|other")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.</span>")
|
||||
feedback_add_details("hivelord_core","[src.type]|used|self")
|
||||
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
H.revive()
|
||||
user.drop_item()
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/prepare_eat()
|
||||
return null
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood
|
||||
name = "hivelord brood"
|
||||
desc = "A fragment of the original Hivelord, rallying behind its original. One isn't much of a threat, but..."
|
||||
@@ -326,34 +252,6 @@
|
||||
H.forceMove(L)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion
|
||||
name = "legion's soul"
|
||||
desc = "A strange rock that still crackles with power... its \
|
||||
healing properties will soon become inert if not used quickly."
|
||||
icon_state = "legion_soul"
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/update_icon()
|
||||
icon_state = inert ? "legion_soul_inert" : "legion_soul"
|
||||
overlays.Cut()
|
||||
if(!inert && !preserved)
|
||||
overlays += image(icon, "legion_soul_crackle")
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/go_inert()
|
||||
. = ..()
|
||||
desc = "[src] has become inert, it crackles no more and is useless for \
|
||||
healing injuries."
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/legion/preserved(implanted = 0)
|
||||
..()
|
||||
desc = "[src] has been stabilized. It no longer crackles with power, but it's healing properties are preserved indefinitely."
|
||||
|
||||
/obj/item/legion_skull
|
||||
name = "legion's head"
|
||||
desc = "The once living, now empty eyes of the former human's skull cut deep into your soul."
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
return STATUS_UPDATE // Ghosts can view updates
|
||||
|
||||
/mob/living/silicon/ai/shared_nano_interaction()
|
||||
if(apc_override)
|
||||
return STATUS_INTERACTIVE
|
||||
if(lacks_power())
|
||||
return STATUS_CLOSE
|
||||
if(check_unable(1, 0))
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
use_power = NO_POWER_USE
|
||||
idle_power_usage = 0
|
||||
active_power_usage = 0
|
||||
var/malfunction = FALSE
|
||||
|
||||
/obj/machinery/power/Destroy()
|
||||
disconnect_from_network()
|
||||
@@ -30,7 +31,7 @@
|
||||
// Non-machines should use add_delayedload(), delayed_surplus(), newavail()
|
||||
|
||||
/obj/machinery/power/proc/add_avail(amount)
|
||||
if(powernet)
|
||||
if(powernet && !malfunction)
|
||||
powernet.newavail += amount
|
||||
return TRUE
|
||||
else
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
holder = item
|
||||
|
||||
holder.flags |= NODROP | DROPDEL
|
||||
holder.flags |= NODROP
|
||||
holder.unacidable = 1
|
||||
holder.slot_flags = null
|
||||
holder.w_class = WEIGHT_CLASS_HUGE
|
||||
|
||||
@@ -102,6 +102,10 @@
|
||||
anchored = FALSE
|
||||
throw_pressure_limit = INFINITY //Throwing an ambulance trolley can kill the process scheduler.
|
||||
|
||||
/obj/structure/bed/amb_trolley/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>Drag [src]'s sprite over the ambulance to (de)attach it.</span>")
|
||||
|
||||
/obj/structure/bed/amb_trolley/MouseDrop(obj/over_object as obj)
|
||||
..()
|
||||
if(istype(over_object, /obj/vehicle/ambulance))
|
||||
|
||||
Reference in New Issue
Block a user