Deconflict and revert an accidental iconstate name change

This commit is contained in:
variableundefined
2019-08-31 09:18:36 -04:00
210 changed files with 3227 additions and 1747 deletions
+4 -2
View File
@@ -784,11 +784,13 @@ var/global/nologevent = 0
log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
going = !( going )
if(!( going ))
if(going)
going = FALSE
SSticker.delay_end = TRUE
to_chat(world, "<b>The game start has been delayed.</b>")
log_admin("[key_name(usr)] delayed the game.")
else
going = TRUE
to_chat(world, "<b>The game will start soon.</b>")
log_admin("[key_name(usr)] removed the delay.")
feedback_add_details("admin_verb","DELAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -210,6 +210,7 @@
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.owner = S.mind
KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it."
KillDaCrew.completed = TRUE
S.mind.objectives += KillDaCrew
to_chat(S, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
to_chat(S, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
@@ -219,7 +220,8 @@
desc = "A magically infused bottle of clown love, distilled from \
countless hugging attacks. Used in funny rituals to attract \
adorable creatures."
color = "#FF69B4" // HOT PINK
icon = 'icons/obj/wizard.dmi'
icon_state = "vialtickles"
veil_msg = "<span class='warning'>You sense an adorable presence \
lurking just beyond the veil...</span>"
objective_verb = "Hug and tickle"
@@ -278,6 +280,7 @@
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.owner = M.mind
KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it."
KillDaCrew.completed = TRUE
M.mind.objectives += KillDaCrew
to_chat(M, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
to_chat(M, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
@@ -104,6 +104,11 @@
H.rename_character(null, H.dna.species.get_random_name())
else
H.rename_character(null, name)
if(is_species(H, /datum/species/golem/tranquillite) && H.mind)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
H.mind.miming = TRUE
if(has_owner)
new_spawn.mind.assigned_role = "Servant Golem"
else
+1 -1
View File
@@ -318,7 +318,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the
for(var/D in cardinal)
assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D)
for(var/state in icon_states('icons/obj/pipes/disposal.dmi'))
if(!(state in list("pipe-c", "pipe-j1", "pipe-s", "pipe-t", "pipe-y", "intake", "outlet"))) //Pipes we want sprites for
if(!(state in list("pipe-c", "pipe-j1", "pipe-s", "pipe-t", "pipe-y", "intake", "outlet", "pipe-j1s"))) //Pipes we want sprites for
continue
for(var/D in cardinal)
assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipes/disposal.dmi', state, D)
@@ -21,12 +21,4 @@
/datum/gear/lipstick/lime
display_name = "lipstick, lime"
path = /obj/item/lipstick/lime
/datum/gear/monocle
display_name = "monocle"
path = /obj/item/clothing/glasses/monocle
/datum/gear/sunglasses
display_name = "cheap sunglasses"
path = /obj/item/clothing/glasses/sunglasses/fake
path = /obj/item/lipstick/lime
@@ -18,12 +18,10 @@
/datum/gear/donor/furcape
display_name = "Fur Cape"
path = /obj/item/clothing/suit/furcape
cost = 2
/datum/gear/donor/furcoat
display_name = "Fur Coat"
path = /obj/item/clothing/suit/furcoat
cost = 2
/datum/gear/donor/kamina
display_name = "Spiky Orange-tinted Shades"
@@ -33,10 +31,6 @@
display_name = "Spiky Green-tinted Shades"
path = /obj/item/clothing/glasses/fluff/kamina/green
/datum/gear/donor/hipster
display_name = "Hipster Glasses"
path = /obj/item/clothing/glasses/regular/hipster
/datum/gear/donor/threedglasses
display_name = "Threed Glasses"
path = /obj/item/clothing/glasses/threedglasses
@@ -0,0 +1,24 @@
/datum/gear/glasses
subtype_path = /datum/gear/glasses
slot = slot_glasses
sort_category = "Glasses"
/datum/gear/glasses/sunglasses
display_name = "cheap sunglasses"
path = /obj/item/clothing/glasses/sunglasses_fake
/datum/gear/glasses/eyepatch
display_name = "Eyepatch"
path = /obj/item/clothing/glasses/eyepatch
/datum/gear/glasses/hipster
display_name = "Hipster glasses"
path = /obj/item/clothing/glasses/regular/hipster
/datum/gear/glasses/monocle
display_name = "Monocle"
path = /obj/item/clothing/glasses/monocle
/datum/gear/glasses/prescription
display_name = "Prescription glasses"
path = /obj/item/clothing/glasses/regular
@@ -0,0 +1,8 @@
/datum/gear/gloves
subtype_path = /datum/gear/gloves
slot = slot_gloves
sort_category = "Gloves"
/datum/gear/gloves/fingerless
display_name = "Fingerless Gloves"
path = /obj/item/clothing/gloves/fingerless
@@ -27,25 +27,32 @@
/datum/gear/shoes/cowboyboots
display_name = "cowboy boots, brown"
cost = 1
path = /obj/item/clothing/shoes/cowboyboots
path = /obj/item/clothing/shoes/cowboy
/datum/gear/shoes/cowboyboots_black
display_name = "cowboy boots, black"
cost = 1
path = /obj/item/clothing/shoes/cowboyboots/black
path = /obj/item/clothing/shoes/cowboy/black
/datum/gear/shoes/cowboyboots/white
display_name = "cowboy boots, white"
cost = 1
path = /obj/item/clothing/shoes/cowboyboots/white
path = /obj/item/clothing/shoes/cowboy/white
/datum/gear/shoes/cowboyboots/pink
display_name = "cowboy boots, pink"
cost = 1
path = /obj/item/clothing/shoes/cowboyboots/pink
path = /obj/item/clothing/shoes/cowboy/pink
/datum/gear/shoes/laceup
display_name = "laceup shoes"
cost = 1
path = /obj/item/clothing/shoes/laceup
/datum/gear/shoes/blackshoes
display_name = "Black shoes"
path = /obj/item/clothing/shoes/black
/datum/gear/shoes/brownshoes
display_name = "Brown shoes"
path = /obj/item/clothing/shoes/brown
/datum/gear/shoes/whiteshoes
display_name = "White shoes"
path = /obj/item/clothing/shoes/white
@@ -1,7 +1,6 @@
/datum/gear/suit
subtype_path = /datum/gear/suit
slot = slot_wear_suit
cost = 2
sort_category = "External Wear"
//WINTER COATS
@@ -105,6 +104,10 @@
path = /obj/item/clothing/suit/armor/secjacket
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
/datum/gear/suit/ianshirt
display_name = "Ian Shirt"
path = /obj/item/clothing/suit/ianshirt
/datum/gear/suit/poncho
display_name = "poncho, classic"
path = /obj/item/clothing/suit/poncho
@@ -2,7 +2,6 @@
/datum/gear/uniform
subtype_path = /datum/gear/uniform
slot = slot_w_uniform
cost = 2
sort_category = "Uniforms and Casual Dress"
/datum/gear/uniform/skirt
@@ -201,6 +201,19 @@
to_chat(src, "You will no longer hear musical instruments.")
feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_disco() //to toggle off the disco machine locally, in case it gets too annoying
set name = "Hear/Silence Dance Machine"
set category = "Preferences"
set desc = "Toggles hearing and dancing to the radiant dance machine"
prefs.sound ^= SOUND_DISCO
prefs.save_preferences(src)
if(prefs.sound & SOUND_DISCO)
to_chat(src, "You will now hear and dance to the radiant dance machine.")
else
to_chat(src, "You will no longer hear or dance to the radiant dance machine.")
usr.stop_sound_channel(CHANNEL_JUKEBOX)
feedback_add_details("admin_verb","Tdd") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/setup_character()
set name = "Game Preferences"
set category = "Preferences"
+2 -2
View File
@@ -596,7 +596,7 @@ BLIND // can't see anything
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
flash_protect = 2
strip_delay = 50
put_on_delay = 50
@@ -624,7 +624,7 @@ BLIND // can't see anything
put_on_delay = 80
burn_state = FIRE_PROOF
hide_tail_by_species = null
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
//Under clothing
/obj/item/clothing/under
+3 -1
View File
@@ -265,9 +265,11 @@
"Grey" = 'icons/mob/species/grey/eyes.dmi'
)
/obj/item/clothing/glasses/sunglasses/fake
/obj/item/clothing/glasses/sunglasses_fake
desc = "Cheap, plastic sunglasses. They don't even have UV protection."
name = "cheap sunglasses"
icon_state = "sun"
item_state = "sunglasses"
see_in_dark = 0
flash_protect = 0
tint = 0
+16 -6
View File
@@ -38,12 +38,6 @@
"Grey" = 'icons/mob/species/grey/eyes.dmi'
)
/obj/item/clothing/glasses/hud/health/health_advanced
name = "\improper Advanced Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. Includes anti-flash filter."
icon_state = "advmedhud"
flash_protect = 1
/obj/item/clothing/glasses/hud/health/night
name = "\improper Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
@@ -54,6 +48,14 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
prescription_upgradable = 0
/obj/item/clothing/glasses/hud/health/sunglasses
name = "medical HUDSunglasses"
desc = "Sunglasses with a medical HUD."
icon_state = "sunhudmed"
see_in_dark = 1
flash_protect = 1
tint = 1
/obj/item/clothing/glasses/hud/diagnostic
name = "Diagnostic HUD"
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits."
@@ -77,6 +79,14 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
prescription_upgradable = 0
/obj/item/clothing/glasses/hud/diagnostic/sunglasses
name = "diagnostic sunglasses"
desc = "Sunglasses with a diagnostic HUD."
icon_state = "sunhuddiag"
item_state = "glasses"
flash_protect = 1
tint = 1
/obj/item/clothing/glasses/hud/security
name = "\improper Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
+96
View File
@@ -0,0 +1,96 @@
//BeanieStation13 Redux
//Plus a bobble hat, lets be inclusive!!
/obj/item/clothing/head/beanie //Default is white, this is meant to be seen
name = "white beanie"
desc = "A stylish beanie. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their heads."
icon_state = "beanie" //Default white
item_color = "beanie"
/obj/item/clothing/head/beanie/black
name = "black beanie"
icon_state = "beanie"
color = "#4A4A4B" //Grey but it looks black
/obj/item/clothing/head/beanie/red
name = "red beanie"
icon_state = "beanie"
color = "#D91414" //Red
/obj/item/clothing/head/beanie/green
name = "green beanie"
icon_state = "beanie"
color = "#5C9E54" //Green
/obj/item/clothing/head/beanie/darkblue
name = "dark blue beanie"
icon_state = "beanie"
color = "#1E85BC" //Blue
/obj/item/clothing/head/beanie/purple
name = "purple beanie"
icon_state = "beanie"
color = "#9557C5" //purple
/obj/item/clothing/head/beanie/yellow
name = "yellow beanie"
icon_state = "beanie"
color = "#E0C14F" //Yellow
/obj/item/clothing/head/beanie/orange
name = "orange beanie"
icon_state = "beanie"
color = "#C67A4B" //orange
/obj/item/clothing/head/beanie/cyan
name = "cyan beanie"
icon_state = "beanie"
color = "#54A3CE" //Cyan (Or close to it)
//Striped Beanies have unique sprites
/obj/item/clothing/head/beanie/christmas
name = "christmas beanie"
icon_state = "beaniechristmas"
item_color = "beaniechristmas"
/obj/item/clothing/head/beanie/striped
name = "striped beanie"
icon_state = "beaniestriped"
item_color = "beaniestriped"
/obj/item/clothing/head/beanie/stripedred
name = "red striped beanie"
icon_state = "beaniestripedred"
item_color = "beaniestripedred"
/obj/item/clothing/head/beanie/stripedblue
name = "blue striped beanie"
icon_state = "beaniestripedblue"
item_color = "beaniestripedblue"
/obj/item/clothing/head/beanie/stripedgreen
name = "green striped beanie"
icon_state = "beaniestripedgreen"
item_color = "beaniestripedgreen"
/obj/item/clothing/head/beanie/durathread
name = "durathread beanie"
desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beaniedurathread"
item_color = null
armor = list(melee = 15, bullet = 5, laser = 15, energy = 5, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/head/beanie/waldo
name = "red striped bobble hat"
desc = "If you're going on a worldwide hike, you'll need some cold protection."
icon_state = "waldo_hat"
item_color = "waldo_hat"
/obj/item/clothing/head/beanie/rasta
name = "rastacap"
desc = "Perfect for tucking in those dreadlocks."
icon_state = "beanierasta"
item_color = "beanierasta"
+18
View File
@@ -227,6 +227,24 @@ obj/item/clothing/head/blob
item_state = "knight_templar"
armor = list(melee = 20, bullet = 7, laser = 2, energy = 2, bomb = 2, bio = 2, rad = 0)
/obj/item/clothing/head/helmet/skull
name = "skull helmet"
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_cover = HEADCOVERSEYES
armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20)
icon_state = "skull"
item_state = "skull"
strip_delay = 100
/obj/item/clothing/head/helmet/durathread
name = "durathread helmet"
desc = "A helmet made from durathread and leather."
icon_state = "durathread"
item_state = "durathread"
armor = list(melee = 25, bullet = 10, laser = 20, energy = 10, bomb = 30, bio = 15, rad = 20)
strip_delay = 60
//Commander
/obj/item/clothing/head/helmet/ert/command
name = "emergency response team commander helmet"
+7
View File
@@ -82,6 +82,13 @@
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
/obj/item/clothing/head/beret/durathread
name = "durathread beret"
desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beretdurathread"
item_color = null
armor = list(melee = 15, bullet = 5, laser = 15, energy = 5, bomb = 10, bio = 0, rad = 0)
//Security
/obj/item/clothing/head/HoS
name = "head of security cap"
@@ -483,6 +483,11 @@
item_color = "black"
desc = "It's a black bandana."
/obj/item/clothing/mask/bandana/durathread
name = "durathread bandana"
desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..."
icon_state = "banddurathread"
/obj/item/clothing/mask/cursedclown
name = "cursed clown mask"
desc = "This is a very, very odd looking mask."
+35 -10
View File
@@ -243,30 +243,55 @@
icon_state = "bsing"
put_on_delay = 50
/obj/item/clothing/shoes/cowboyboots
/obj/item/clothing/shoes/cowboy
name = "cowboy boots"
desc = "A pair a' brown boots."
icon_state = "cowboyboots"
item_color = "cowboyboots"
icon_state = "cowboy_brown"
item_color = "cowboy_brown"
/obj/item/clothing/shoes/cowboyboots/black
/obj/item/clothing/shoes/cowboy/black
name = "black cowboy boots"
desc = "A pair a' black rustlers' boots"
icon_state = "cowboyboots_black"
item_color = "cowboyboots_black"
icon_state = "cowboy_black"
item_color = "cowboy_black"
/obj/item/clothing/shoes/cowboyboots/white
/obj/item/clothing/shoes/cowboy/white
name = "white cowboy boots"
desc = "For the rancher in us all."
icon_state = "cowboyboots_white"
item_color = "cowboyboots_white"
icon_state = "cowboy_white"
item_color = "cowboy_white"
/obj/item/clothing/shoes/cowboyboots/pink
/obj/item/clothing/shoes/cowboy/fancy
name = "bilton wrangler boots"
desc = "A pair of authentic haute couture boots from Japanifornia. You doubt they have ever been close to cattle."
icon_state = "cowboy_fancy"
item_color = "cowboy_fancy"
/obj/item/clothing/shoes/cowboy/pink
name = "pink cowgirl boots"
desc = "For a Rustlin' tustlin' cowgirl."
icon_state = "cowboyboots_pink"
item_color = "cowboyboots_pink"
/obj/item/clothing/shoes/cowboy/lizard
name = "lizard skin boots"
desc = "You can hear a faint hissing from inside the boots; you hope it is just a mournful ghost."
icon_state = "lizardboots_green"
/obj/item/clothing/shoes/cowboy/lizardmasterwork
name = "\improper Hugs-The-Feet lizard skin boots"
desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants."
icon_state = "lizardboots_blue"
/obj/effect/spawner/lootdrop/lizardboots
name = "random lizard boot quality"
desc = "Which ever gets picked, the lizard race loses"
icon = 'icons/obj/clothing/shoes.dmi'
icon_state = "lizardboots_green"
loot = list(
/obj/item/clothing/shoes/cowboy/lizard = 7,
/obj/item/clothing/shoes/cowboy/lizardmasterwork = 1)
/obj/item/clothing/shoes/footwraps
name = "cloth footwraps"
desc = "A roll of treated canvas used for wrapping claws or paws."
+7 -1
View File
@@ -190,7 +190,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
sprite_sheets = null
actions_types = list()
has_camera = 0
has_camera = FALSE
/obj/item/clothing/suit/space/hardsuit/ert/paranormal
name = "paranormal response team suit"
@@ -208,20 +208,26 @@
name = "inquisitor's helmet"
icon_state = "hardsuit0-inquisitor"
item_color = "inquisitor"
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
name = "inquisitor's hardsuit"
icon_state = "hardsuit-inquisitor"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
slowdown = 0
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/berserker
name = "champion's helmet"
desc = "Peering into the eyes of the helmet is enough to seal damnation."
icon_state = "hardsuit0-berserker"
item_color = "berserker"
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/berserker
name = "champion's hardsuit"
desc = "Voices echo from the hardsuit, driving the user insane."
icon_state = "hardsuit-berserker"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/berserker
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
slowdown = 0
+56 -2
View File
@@ -14,7 +14,7 @@
actions_types = list(/datum/action/item_action/toggle_helmet_light)
//Species-specific stuff.
species_restricted = list("exclude","Diona","Wryn")
species_restricted = list("exclude","Wryn")
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
@@ -93,9 +93,10 @@
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
actions_types = list(/datum/action/item_action/toggle_helmet)
var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
var/obj/item/tank/jetpack/suit/jetpack = null
hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran")
species_restricted = list("exclude","Diona","Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
@@ -112,10 +113,59 @@
"Vulpkanin" = 'icons/obj/clothing/species/vulpkanin/suits.dmi'
)
/obj/item/clothing/suit/space/hardsuit/New()
if(jetpack && ispath(jetpack))
jetpack = new jetpack(src)
..()
/obj/item/clothing/suit/space/hardsuit/attack_self(mob/user)
user.changeNext_move(CLICK_CD_MELEE)
..()
/obj/item/clothing/suit/space/hardsuit/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/tank/jetpack/suit))
if(jetpack)
to_chat(user, "<span class='warning'>[src] already has a jetpack installed.</span>")
return
if(src == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
to_chat(user, "<span class='warning'>You cannot install the upgrade to [src] while wearing it.</span>")
return
if(user.unEquip(I))
I.forceMove(src)
jetpack = I
to_chat(user, "<span class='notice'>You successfully install the jetpack into [src].</span>")
return
else if(isscrewdriver(I))
if(!jetpack)
to_chat(user, "<span class='warning'>[src] has no jetpack installed.</span>")
return
if(src == user.get_item_by_slot(slot_wear_suit))
to_chat(user, "<span class='warning'>You cannot remove the jetpack from [src] while wearing it.</span>")
return
jetpack.turn_off(user)
jetpack.forceMove(drop_location())
jetpack = null
to_chat(user, "<span class='notice'>You successfully remove the jetpack from [src].</span>")
return
return ..()
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
..()
if(jetpack)
if(slot == slot_wear_suit)
for(var/X in jetpack.actions)
var/datum/action/A = X
A.Grant(user)
/obj/item/clothing/suit/space/hardsuit/dropped(mob/user)
..()
if(jetpack)
for(var/X in jetpack.actions)
var/datum/action/A = X
A.Remove(user)
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot)
if(slot == slot_wear_suit) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
return 1
@@ -178,6 +228,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
jetpack = /obj/item/tank/jetpack/suit
//Mining hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/mining
@@ -291,6 +342,7 @@
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi
jetpack = /obj/item/tank/jetpack/suit
/obj/item/clothing/suit/space/hardsuit/syndi/update_icon()
icon_state = "hardsuit[on]-[item_color]"
@@ -438,6 +490,7 @@
icon_state = "hardsuit-hos"
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
jetpack = /obj/item/tank/jetpack/suit
sprite_sheets = null
//Singuloth armor
@@ -522,6 +575,7 @@
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
slowdown = 0
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
jetpack = /obj/item/tank/jetpack/suit
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
@@ -7,7 +7,7 @@
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
@@ -31,7 +31,7 @@
w_class = WEIGHT_CLASS_BULKY
allowed = list(/obj/item/tank, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton,/obj/item/restraints/handcuffs)
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -72,7 +72,7 @@
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/kitchen/knife/combat)
armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20)
strip_delay = 120
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
@@ -159,7 +159,7 @@
icon_state = "paramedic-eva-helmet"
item_state = "paramedic-eva-helmet"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
@@ -180,7 +180,7 @@
item_state = "paramedic-eva"
desc = "A brand new paramedic EVA suit. The nitrile seems a bit too thin to be space proof. Used for retrieving bodies in space."
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi',
@@ -200,7 +200,7 @@
item_state = "s_suit"
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
@@ -223,7 +223,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
flash_protect = 0
species_restricted = list("exclude", "Diona", "Wryn")
species_restricted = list("exclude", "Wryn")
sprite_sheets = list(
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
@@ -244,7 +244,7 @@
desc = ". . ."
icon_state = "spacemimehelmet"
item_state = "spacemimehelmet"
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
sprite_sheets = null
sprite_sheets_obj = null
@@ -254,7 +254,7 @@
desc = ". . ."
icon_state = "spacemime_suit"
item_state = "spacemime_items"
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
sprite_sheets = null
sprite_sheets_obj = null
@@ -264,7 +264,7 @@
desc = "An EVA helmet specifically designed for the clown. SPESSHONK!"
icon_state = "clownhelmet"
item_state = "clownhelmet"
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
sprite_sheets = null
sprite_sheets_obj = null
@@ -274,7 +274,6 @@
desc = "An EVA suit specifically designed for the clown. SPESSHONK!"
icon_state = "spaceclown_suit"
item_state = "spaceclown_items"
species_restricted = list("exclude","Diona","Vox","Wryn")
species_restricted = list("exclude","Vox","Wryn")
sprite_sheets = null
sprite_sheets_obj = null
+10 -11
View File
@@ -209,6 +209,15 @@
allowed = list(/obj/item/nullrod/claymore)
armor = list(melee = 25, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/durathread
name = "durathread vest"
desc = "A vest made of durathread with strips of leather acting as trauma plates."
icon_state = "durathread"
item_state = "durathread"
strip_delay = 60
burn_state = FLAMMABLE
armor = list(melee = 20, bullet = 10, laser = 30, energy = 5, bomb = 15, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/bulletproof
name = "Bulletproof Vest"
desc = "A bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
@@ -528,14 +537,4 @@
item_state = "bonearmor"
blood_overlay_type = "armor"
armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
/obj/item/clothing/head/helmet/skull
name = "skull helmet"
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_cover = HEADCOVERSEYES
armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20)
icon_state = "skull"
item_state = "skull"
strip_delay = 100
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
@@ -1005,3 +1005,14 @@
icon_state = "old_mantle"
item_state = "old_mantle"
/obj/item/clothing/suit/ghost_sheet
name = "ghost sheet"
desc = "The hands float by themselves, so it's extra spooky."
icon_state = "ghost_sheet"
item_state = "ghost_sheet"
throwforce = 0
throw_speed = 1
throw_range = 2
w_class = WEIGHT_CLASS_TINY
flags = BLOCKHAIR
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE
+2 -1
View File
@@ -6,7 +6,8 @@
/obj/item/clothing/suit/space/hardsuit/Destroy()
if(helmet)
helmet.suit = null
qdel(helmet)
QDEL_NULL(helmet)
QDEL_NULL(jetpack)
return ..()
/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
@@ -890,3 +890,10 @@
item_color = "hawaiianblue"
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/misc/durathread
name = "durathread jumpsuit"
desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "durathread"
item_state = "durathread"
item_color = "durathread"
armor = list(melee = 10, bullet = 0, laser = 10, energy = 0, bomb = 5, bio = 0, rad = 0)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/personal_crafting
var/busy
var/viewing_category = 1 //typical powergamer starting on the Weapons tab
var/list/categories = list(CAT_WEAPON,CAT_AMMO,CAT_ROBOT,CAT_FOOD,CAT_MISC,CAT_PRIMAL)
var/list/categories = list(CAT_WEAPON,CAT_AMMO,CAT_ROBOT,CAT_FOOD,CAT_CLOTHING,CAT_MISC,CAT_PRIMAL)
var/display_craftable_only = FALSE
var/display_compact = TRUE
+145
View File
@@ -0,0 +1,145 @@
/datum/crafting_recipe/durathread_vest
name = "Durathread Vest"
result = /obj/item/clothing/suit/armor/vest/durathread
reqs = list(/obj/item/stack/sheet/durathread = 5,
/obj/item/stack/sheet/leather = 4)
time = 50
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_helmet
name = "Durathread Helmet"
result = /obj/item/clothing/head/helmet/durathread
reqs = list(/obj/item/stack/sheet/durathread = 4,
/obj/item/stack/sheet/leather = 5)
time = 40
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_jumpsuit
name = "Durathread Jumpsuit"
result = /obj/item/clothing/under/misc/durathread
reqs = list(/obj/item/stack/sheet/durathread = 4)
time = 40
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_beret
name = "Durathread Beret"
result = /obj/item/clothing/head/beret/durathread
reqs = list(/obj/item/stack/sheet/durathread = 2)
time = 40
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_beanie
name = "Durathread Beanie"
result = /obj/item/clothing/head/beanie/durathread
reqs = list(/obj/item/stack/sheet/durathread = 2)
time = 40
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_bandana
name = "Durathread Bandana"
result = /obj/item/clothing/mask/bandana/durathread
reqs = list(/obj/item/stack/sheet/durathread = 1)
time = 25
category = CAT_CLOTHING
/datum/crafting_recipe/fannypack
name = "Fannypack"
result = /obj/item/storage/belt/fannypack
reqs = list(/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 20
category = CAT_CLOTHING
/datum/crafting_recipe/hudsunsec
name = "Security HUDsunglasses"
result = /obj/item/clothing/glasses/hud/security/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/security = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsunsecremoval
name = "Security HUD removal"
result = /obj/item/clothing/glasses/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsunmed
name = "Medical HUDsunglasses"
result = /obj/item/clothing/glasses/hud/health/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/health = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsunmedremoval
name = "Medical HUD removal"
result = /obj/item/clothing/glasses/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsundiag
name = "Diagnostic HUDsunglasses"
result = /obj/item/clothing/glasses/hud/diagnostic/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsundiagremoval
name = "Diagnostic HUD removal"
result = /obj/item/clothing/glasses/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/beergoggles
name = "Beer Goggles"
result = /obj/item/clothing/glasses/sunglasses/reagent
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/science = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/beergogglesremoval
name = "Beer Goggles removal"
result = /obj/item/clothing/glasses/sunglasses
time = 20
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/ghostsheet
name = "Ghost Sheet"
result = /obj/item/clothing/suit/ghost_sheet
time = 5
tools = list(/obj/item/wirecutters)
reqs = list(/obj/item/bedsheet = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/cowboyboots
name = "Cowboy Boots"
result = /obj/item/clothing/shoes/cowboy
reqs = list(/obj/item/stack/sheet/leather = 2)
time = 45
category = CAT_CLOTHING
/datum/crafting_recipe/lizardboots
name = "Lizard Skin Boots"
result = /obj/effect/spawner/lootdrop/lizardboots
reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1, /obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_CLOTHING
+12 -12
View File
@@ -178,7 +178,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "book_berner_1"
/obj/item/clothing/glasses/sunglasses/fake/fluff/kaki //Rapidvalj: Kakicharakiti
/obj/item/clothing/glasses/sunglasses_fake/fluff/kaki //Rapidvalj: Kakicharakiti
name = "broken thermonocle"
desc = "A weathered Vox thermonocle, doesn't seem to work anymore."
icon_state = "thermoncle"
@@ -1212,16 +1212,16 @@
//////////// Sets ////////////
// Fox P McCloud: Fox McCloud
/obj/item/clothing/suit/jacket/fluff/fox
/obj/item/clothing/suit/storage/fox
name = "Aeronautics Jacket"
desc = "An aviator styled jacket made from a peculiar material; this one seems very old."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fox_jacket"
item_state = "fox_jacket"
ignore_suitadjust = TRUE
actions_types = list()
adjust_flavour = null
sprite_sheets = null
allowed = list(/obj/item/flashlight, /obj/item/tank/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/projectile/automatic/pistol, /obj/item/gun/projectile/revolver, /obj/item/gun/projectile/revolver/detective)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/under/fluff/fox
name = "Aeronautics Jumpsuit"
@@ -1232,6 +1232,12 @@
item_color = "fox_suit"
displays_id = FALSE //still appears on examine; this is pure fluff.
/obj/item/clothing/suit/storage/fox/miljacket_desert
name = "rugged military jacket"
desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
icon_state = "fox_coat"
item_color = "fox_coat"
/obj/item/toy/plushie/fluff/fox
name = "orange fox plushie"
desc = "A cute, soft, fuzzy, fluffy, and cuddly plushie. This has a small tag on it that is signed 'Fox McCloud'."
@@ -1262,12 +1268,6 @@
/obj/item/toy/plushie/fluff/fox/ui_action_click()
change_color()
/obj/item/clothing/suit/jacket/miljacket/desert/fox
name = "rugged military jacket"
desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fox_coat"
item_color = "fox_coat"
// TheFlagbearer: Willow Walker
/obj/item/clothing/under/fluff/arachno_suit
+79
View File
@@ -0,0 +1,79 @@
/obj/item/seeds/cotton
name = "pack of cotton seeds"
desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary."
icon_state = "seed-cotton"
species = "cotton"
plantname = "Cotton"
icon_harvest = "cotton-harvest"
product = /obj/item/grown/cotton
lifespan = 35
endurance = 25
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
mutatelist = list(/obj/item/seeds/cotton/durathread)
/obj/item/grown/cotton
seed = /obj/item/seeds/cotton
name = "cotton bundle"
desc = "A fluffy bundle of cotton."
icon_state = "cotton"
force = 0
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 2
throw_range = 3
attack_verb = list("pomfed")
var/cotton_type = /obj/item/stack/sheet/cotton
var/cotton_name = "raw cotton"
/obj/item/grown/cotton/attack_self(mob/user)
user.show_message("<span class='notice'>You pull some [cotton_name] out of the [name]!</span>", 1)
var/seed_modifier = 0
if(seed)
seed_modifier = round(seed.potency / 25)
var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier)
var/old_cotton_amount = cotton.amount
for(var/obj/item/stack/ST in user.loc)
if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount)
ST.attackby(cotton, user)
if(cotton.amount > old_cotton_amount)
to_chat(user, "<span class='notice'>You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].</span>")
qdel(src)
//reinforced mutated variant
/obj/item/seeds/cotton/durathread
name = "pack of durathread seeds"
desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly."
icon_state = "seed-durathread"
species = "durathread"
plantname = "Durathread"
icon_harvest = "durathread-harvest"
product = /obj/item/grown/cotton/durathread
lifespan = 80
endurance = 50
maturation = 15
production = 1
yield = 2
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "cotton-dead"
/obj/item/grown/cotton/durathread
seed = /obj/item/seeds/cotton/durathread
name = "durathread bundle"
desc = "A tough bundle of durathread, good luck unraveling this."
icon_state = "durathread"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 2
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
cotton_type = /obj/item/stack/sheet/cotton/durathread
cotton_name = "raw durathread"
+1 -1
View File
@@ -88,7 +88,7 @@
make_podman = 0
if(make_podman) //all conditions met!
var/mob/living/carbon/human/diona/podman = new /mob/living/carbon/human/diona(parent.loc)
var/mob/living/carbon/human/pod_diona/podman = new /mob/living/carbon/human/pod_diona(parent.loc)
if(realName)
podman.real_name = realName
mind.transfer_to(podman)
+1 -1
View File
@@ -95,7 +95,7 @@
/obj/item/seeds/redbeet
name = "pack of redbeet seeds"
desc = "These seeds grow into red beet producing plants."
icon_state = "seedredbeet"
icon_state = "seed-redbeet"
species = "redbeet"
plantname = "Red Beet Plants"
product = /obj/item/reagent_containers/food/snacks/grown/redbeet
@@ -209,7 +209,7 @@
if(istype(T, denied_type) || istype(src, T.denied_type))
to_chat(user, "<span class='warning'>You can't seem to attach [src] to [H]. Maybe remove a few trophies?</span>")
return FALSE
if(!user.drop_item())
if(!user.unEquip(src))
return
forceMove(H)
H.trophies += src
@@ -73,9 +73,10 @@
icon = 'icons/obj/mobcap.dmi'
icon_state = "mobcap0"
w_class = WEIGHT_CLASS_TINY
throw_range = 20
throw_range = 7
var/mob/living/simple_animal/captured = null
var/colorindex = 0
var/capture_type = SENTIENCE_ORGANIC //So you can't capture boss monsters or robots with it
/obj/item/mobcapsule/Destroy()
if(captured)
@@ -83,26 +84,25 @@
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/attack(mob/living/simple_animal/S, mob/user, prox_flag)
if(istype(S) && S.sentience_type == capture_type)
capture(S, user)
return TRUE
return ..()
/obj/item/mobcapsule/proc/capture(var/mob/target, var/mob/U as mob)
var/mob/living/simple_animal/T = target
/obj/item/mobcapsule/proc/capture(mob/living/simple_animal/S, mob/living/M)
if(captured)
to_chat(U, "<span class='notice'>Capture failed!</span>: The capsule already has a mob registered to it!")
to_chat(M, "<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
if("neutral" in S.faction)
S.forceMove(src)
S.name = "[M.name]'s [initial(S.name)]"
S.cancel_camera()
name = "Lazarus Capsule: [initial(S.name)]"
to_chat(M, "<span class='notice'>You placed a [S.name] inside the Lazarus Capsule!</span>")
captured = S
else
to_chat(U, "You can't capture that mob!")
to_chat(M, "You can't capture that mob!")
/obj/item/mobcapsule/throw_impact(atom/A, mob/user)
..()
@@ -77,6 +77,21 @@
add_fingerprint(M)
//Book of Babel
/obj/item/book_of_babel
name = "Book of Babel"
desc = "An ancient tome written in countless tongues."
icon = 'icons/obj/library.dmi'
icon_state = "book1"
w_class = 2
/obj/item/book_of_babel/attack_self(mob/user)
to_chat(user, "You flip through the pages of the book, quickly and conveniently learning every language in existence. Somewhat less conveniently, the aging book crumbles to dust in the process. Whoops.")
user.grant_all_languages()
new /obj/effect/decal/cleanable/ash(get_turf(user))
qdel(src)
//Potion of Flight: as we do not have the "Angel" species this currently does not work.
/obj/item/reagent_containers/glass/bottle/potion
@@ -117,6 +132,30 @@
H.emote("scream")
..()*/
/obj/item/jacobs_ladder
name = "jacob's ladder"
desc = "A celestial ladder that violates the laws of physics."
icon = 'icons/obj/structures.dmi'
icon_state = "ladder00"
/obj/item/jacobs_ladder/attack_self(mob/user)
var/turf/T = get_turf(src)
var/ladder_x = T.x
var/ladder_y = T.y
to_chat(user, "<span class='notice'>You unfold the ladder. It extends much farther than you were expecting.</span>")
var/last_ladder = null
for(var/i in 1 to world.maxz)
if(is_admin_level(i) || is_away_level(i))
continue
var/turf/T2 = locate(ladder_x, ladder_y, i)
last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder)
qdel(src)
// Inherit from unbreakable but don't set ID, to suppress the default Z linkage
/obj/structure/ladder/unbreakable/jacob
name = "jacob's ladder"
desc = "An indestructible celestial ladder that violates the laws of physics."
//Boat
/obj/vehicle/lavaboat
@@ -18,7 +18,7 @@
if(!add_loot)
return
var/loot = rand(1,25)
var/loot = rand(1, 26)
switch(loot)
if(1)
new /obj/item/shared_storage/red(src)
@@ -48,7 +48,7 @@
if(11)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/berserker(src)
if(12)
new /obj/item/sord(src)
new /obj/item/jacobs_ladder(src)
if(13)
new /obj/item/nullrod/scythe/talking(src)
if(14)
@@ -78,6 +78,8 @@
if(24)
new /obj/item/spellbook/oneuse/summonitem(src)
if(25)
new /obj/item/book_of_babel(src)
if(26)
new /obj/item/borg/upgrade/modkit/lifesteal(src)
new /obj/item/bedsheet/cult(src)
+1 -1
View File
@@ -37,7 +37,7 @@
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("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 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),
+2 -2
View File
@@ -44,8 +44,8 @@
/obj/structure/closet/secure_closet/miner/New()
..()
// new /obj/item/stack/sheet/mineral/sandbags(src, 5)
// new /obj/item/storage/box/emptysandbags(src)
new /obj/item/stack/sheet/mineral/sandbags(src, 5)
new /obj/item/storage/box/emptysandbags(src)
new /obj/item/shovel(src)
new /obj/item/pickaxe/mini(src)
new /obj/item/radio/headset/headset_cargo/mining(src)
+3 -1
View File
@@ -762,6 +762,8 @@
desc = "Bark bark bark."
key = "vu"
/mob/proc/grant_all_languages()
for(var/la in GLOB.all_languages)
add_language(la)
#undef SCRAMBLE_CACHE_LEN
@@ -16,7 +16,7 @@
/mob/living/carbon/water_act(volume, temperature, source, method = TOUCH)
. = ..()
if(volume > 10) //anything over 10 volume will make the mob wetter.
if(volume > 10) // Anything over 10 volume will make the mob wetter.
wetlevel = min(wetlevel + 1,5)
/mob/living/carbon/attackby(obj/item/I, mob/user, params)
@@ -390,7 +390,7 @@
S = H.glasses
return !istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security) && S && S.read_only
if("medical")
return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical)
return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical)
else
return 0
else if(isrobot(M) || isAI(M)) //Stand-in/Stopgap to prevent pAIs from freely altering records, pending a more advanced Records system
+22 -10
View File
@@ -106,6 +106,9 @@
/mob/living/carbon/human/diona/Initialize(mapload)
..(mapload, /datum/species/diona)
/mob/living/carbon/human/pod_diona/Initialize(mapload)
..(mapload, /datum/species/diona/pod)
/mob/living/carbon/human/machine/Initialize(mapload)
..(mapload, /datum/species/machine)
@@ -165,7 +168,11 @@
show_stat_emergency_shuttle_eta()
if(client.statpanel == "Status")
if(locate(/obj/item/assembly/health) in src)
var/total_user_contents = GetAllContents() // cache it
if(locate(/obj/item/gps) in total_user_contents)
var/turf/T = get_turf(src)
stat(null, "GPS: [COORD(T)]")
if(locate(/obj/item/assembly/health) in total_user_contents)
stat(null, "Health: [health]")
if(internal)
if(!internal.air_contents)
@@ -849,7 +856,7 @@
return
var/read = 0
var/perpname = get_visible_name(TRUE)
for(var/datum/data/record/E in data_core.general)
if(E.fields["name"] == perpname)
for(var/datum/data/record/R in data_core.medical)
@@ -1096,17 +1103,22 @@
var/limb_path = organ_data["path"]
var/obj/item/organ/external/O = new limb_path(temp_holder)
if(H.get_limb_by_name(O.name)) //Check to see if the user already has an limb with the same name as the 'missing limb'. If they do, skip regrowth.
continue //In an example, this will prevent duplication of the mob's right arm if the mob is a Human and they have a Diona right arm, since,
//while the limb with the name 'right_arm' the mob has may not be listed in their species' bodyparts definition, it is still viable and has the appropriate limb name.
continue //In an example, this will prevent duplication of the mob's right arm if the mob is a Human and they have a Diona right arm, since,
//while the limb with the name 'right_arm' the mob has may not be listed in their species' bodyparts definition, it is still viable and has the appropriate limb name.
else
O = new limb_path(H) //Create the limb on the player.
O.owner = H
H.bodyparts |= H.bodyparts_by_name[O.limb_name]
if(O.body_part == HEAD) //They're sprouting a fresh head so lets hook them up with their genetic stuff so their new head looks like the original.
H.UpdateAppearance()
//Replacing lost organs with the species default.
temp_holder = new /mob/living/carbon/human()
for(var/index in H.dna.species.has_organ)
var/organ = H.dna.species.has_organ[index]
var/list/species_organs = H.dna.species.has_organ.Copy() //Compile a list of species organs and tack on the mutantears afterward.
if(H.dna.species.mutantears)
species_organs["ears"] = H.dna.species.mutantears
for(var/index in species_organs)
var/organ = species_organs[index]
if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ...
var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation.
if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation.
@@ -1470,12 +1482,12 @@
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
if(istype(dna.species) && dna.species.eyes)
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', dna.species.eyes)
var/icon/eyes_icon = new /icon('icons/mob/human_face.dmi', dna.species.eyes)
if(eye_implant) //Eye implants override native DNA eye colo(u)r
eyes_icon = eye_implant.generate_icon()
else if(eyes)
eyes_icon = eyes.generate_icon()
else
else //Error 404: Eyes not found!
eyes_icon.Blend("#800000", ICON_ADD)
return eyes_icon
@@ -1484,8 +1496,8 @@
var/obj/item/organ/external/head/head_organ = get_organ("head")
var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_full_list[head_organ.h_style]
var/icon/hair = new /icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
var/mutable_appearance/MA = mutable_appearance(get_icon_difference(get_eyecon(), hair), layer = LIGHTING_LAYER + 1)
MA.plane = LIGHTING_PLANE
var/mutable_appearance/MA = mutable_appearance(get_icon_difference(get_eyecon(), hair), layer = ABOVE_LIGHTING_LAYER)
MA.plane = ABOVE_LIGHTING_PLANE
return MA //Cut the hair's pixels from the eyes icon so eyes covered by bangs stay hidden even while on a higher layer.
/*Used to check if eyes should shine in the dark. Returns the image of the eyes on the layer where they will appear to shine.
@@ -202,6 +202,16 @@
amount = amount * dna.species.tox_mod
. = ..()
/mob/living/carbon/human/adjustStaminaLoss(amount, updating = TRUE)
if(dna.species && amount > 0)
amount = amount * dna.species.stamina_mod
. = ..()
/mob/living/carbon/human/setStaminaLoss(amount, updating = TRUE)
if(dna.species && amount > 0)
amount = amount * dna.species.stamina_mod
. = ..()
////////////////////////////////////////////
//Returns a list of damaged organs
@@ -11,10 +11,11 @@
//Do we have a working jetpack?
var/obj/item/tank/jetpack/thrust
if(istype(back,/obj/item/tank/jetpack))
if(istype(back, /obj/item/tank/jetpack))
thrust = back
else if(istype(s_store,/obj/item/tank/jetpack))
thrust = s_store
else if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
thrust = C.jetpack
else if(istype(back,/obj/item/rig))
var/obj/item/rig/rig = back
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
@@ -50,6 +50,7 @@
var/oxy_mod = 1 // Oxy damage reduction/amplification
var/clone_mod = 1 // Clone damage reduction/amplification
var/brain_mod = 1 // Brain damage damage reduction/amplification
var/stamina_mod = 1
var/stun_mod = 1 // If a species is more/less impacated by stuns/weakens/paralysis
var/blood_damage_type = OXY //What type of damage does this species take if it's low on blood?
@@ -733,8 +734,8 @@ It'll return null if the organ doesn't correspond, so include null checks when u
H.sync_lighting_plane_alpha()
/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source, method = TOUCH)
if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
if(abs(temperature - M.bodytemperature) > 10) // If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately.
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 // Approximation for gradual heating or cooling.
/datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc
return TRUE
@@ -7,21 +7,11 @@
speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16]
speech_chance = 20
unarmed_type = /datum/unarmed_attack/diona
//primitive_form = "Nymph"
slowdown = 5
remains_type = /obj/effect/decal/cleanable/ash
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 300
heat_level_2 = 340
heat_level_3 = 400
burn_mod = 1.25
heatmod = 1.5
var/pod = FALSE //did they come from a pod? If so, they're stronger than normal Diona.
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
@@ -31,16 +21,14 @@
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
water and other radiation."
species_traits = list(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN)
dies_at_threshold = TRUE
species_traits = list(IS_PLANT)
clothing_flags = HAS_SOCKS
default_hair_colour = "#000000"
has_gender = FALSE
dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream
taste_sensitivity = TASTE_SENSITIVITY_DULL
skinned_type = /obj/item/stack/sheet/wood
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
blood_color = "#004400"
flesh_color = "#907E4A"
butt_sprite = "diona"
@@ -49,6 +37,7 @@
has_organ = list(
"nutrient channel" = /obj/item/organ/internal/liver/diona,
"respiratory vacuoles" = /obj/item/organ/internal/lungs/diona,
"neural strata" = /obj/item/organ/internal/heart/diona,
"receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2.
"gas bladder" = /obj/item/organ/internal/brain/diona,
@@ -85,29 +74,47 @@
..()
H.gender = NEUTER
/datum/species/diona/handle_life(mob/living/carbon/human/H)
H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time.
var/rads = H.radiation / 25
H.radiation = max(H.radiation-rads, 0)
H.nutrition = min(H.nutrition+rads, NUTRITION_LEVEL_WELL_FED+10)
H.adjustBruteLoss(-(rads))
H.adjustToxLoss(-(rads))
/datum/species/diona/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
if(R.id == "glyphosate" || R.id == "atrazine")
H.adjustToxLoss(3) //Deal aditional damage
return TRUE
return ..()
/datum/species/diona/handle_life(mob/living/carbon/human/H)
if(H.stat == DEAD)
return
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
light_amount = min(1, T.get_lumcount()) - 0.5
if(light_amount > 0)
H.clear_alert("nolight")
else
H.throw_alert("nolight", /obj/screen/alert/nolight)
H.nutrition += light_amount * 10
if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
H.nutrition = NUTRITION_LEVEL_ALMOST_FULL
if(light_amount > 0.2 && !H.suiciding) //if there's enough light, heal
if(!pod && H.health <= 0)
return
H.adjustBruteLoss(-1)
H.adjustFireLoss(-1)
H.adjustToxLoss(-1)
H.adjustOxyLoss(-1)
if(light_amount > 0)
H.clear_alert("nolight")
else
H.throw_alert("nolight", /obj/screen/alert/nolight)
if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
H.adjustBruteLoss(-(light_amount/2))
H.adjustFireLoss(-(light_amount/4))
if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
H.take_overall_damage(10,0)
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
H.adjustBruteLoss(2)
..()
/datum/species/diona/pod //Same name and everything; we want the same limitations on them; we just want their regeneration to kick in at all times and them to have special factions
pod = TRUE
/datum/species/diona/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.faction |= "plants"
C.faction |= "vines"
/datum/species/diona/pod/on_species_loss(mob/living/carbon/C)
. = ..()
C.faction -= "plants"
C.faction -= "vines"
@@ -251,28 +251,44 @@
attack_verb = list("smash")
attack_sound = 'sound/effects/meteorimpact.ogg'
//More resistant to burn damage
//Add ashstorm resistance if we ever port lavaland
//More resistant to burn damage and immune to ashstorm
/datum/species/golem/titanium
name = "Titanium Golem"
golem_colour = rgb(255, 255, 255)
skinned_type = /obj/item/stack/ore/titanium
info_text = "As a <span class='danger'>Titanium Golem</span>, you are resistant to burn damage."
info_text = "As a <span class='danger'>Titanium Golem</span>, you are resistant to burn damage and immune to ash storms."
burn_mod = 0.3
prefix = "Titanium"
special_names = list("Dioxide")
//Even more resistant to burn damage
//Add ashstorm and lava resistance if we ever port lavaland
/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.weather_immunities |= "ash"
/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C)
. = ..()
C.weather_immunities -= "ash"
//Even more resistant to burn damage and immune to ashstorms and lava
/datum/species/golem/plastitanium
name = "Plastitanium Golem"
golem_colour = rgb(136, 136, 136)
skinned_type = /obj/item/stack/ore/titanium
info_text = "As a <span class='danger'>Plastitanium Golem</span>, you are very resistant to burn damage."
info_text = "As a <span class='danger'>Plastitanium Golem</span>, you are very resistant to burn damage and immune to both ash storms and lava."
burn_mod = 0.15
prefix = "Plastitanium"
special_names = null
/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.weather_immunities |= "lava"
C.weather_immunities |= "ash"
/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C)
. = ..()
C.weather_immunities -= "ash"
C.weather_immunities -= "lava"
//Fast and regenerates... but can only speak like an abductor
/datum/species/golem/alloy
name = "Alien Alloy Golem"
@@ -357,10 +373,12 @@
/datum/species/golem/uranium/handle_life(mob/living/carbon/human/H)
for(var/mob/living/L in range(2, H))
if(isgolem(H))
continue
to_chat(L, "<span class='danger'>You are enveloped by a soft green glow emanating from [H].</span>")
L.apply_effect(10, IRRADIATE)
if(ishuman(L))
var/mob/living/carbon/human/I = L
if(!(RADIMMUNE in I.dna.species.species_traits))
L.apply_effect(10, IRRADIATE)
if(prob(25)) //reduce spam
to_chat(L, "<span class='danger'>You are enveloped by a soft green glow emanating from [H].</span>")
..()
//Ventcrawler
@@ -592,7 +610,7 @@
punchdamagehigh = 0
punchstunthreshold = 1 //Harmless and can't stun
skinned_type = /obj/item/stack/ore/bananium
info_text = "As a <span class='danger'>Bananium Golem</span>, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged."
info_text = "As a <span class='danger'>Bananium Golem</span>, you are made for pranking. Your body emits natural honks, and punching people will just harmlessly honk them. Your skin also bleeds banana peels when damaged."
prefix = "Bananium"
special_names = null
unarmed_type = /datum/unarmed_attack/golem/bananium
@@ -610,6 +628,12 @@
H.mutations.Add(COMIC)
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store)
H.AddComponent(/datum/component/waddling)
/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C)
. = ..()
GET_COMPONENT_FROM(waddling, /datum/component/waddling, C)
waddling.Destroy()
/datum/species/golem/bananium/get_random_name()
var/clown_name = pick(GLOB.clown_names)
@@ -40,15 +40,15 @@
. = ..()
if(method == TOUCH)
if(H.wear_mask)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(H.head)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(volume > 25)
if(H.wear_mask)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(H.head)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(prob(75))
H.take_organ_damage(5, 10)
H.emote("scream")
@@ -65,9 +65,6 @@
H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20))
H.emote("scream")
to_chat(H, "<span class='warning'>The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!</span>")
if(volume >= 10)
H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20))
H.emote("scream")
/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
var/translator_pref = H.client.prefs.speciesprefs
@@ -510,13 +510,15 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
/mob/living/carbon/slime/toggle_throw_mode()
return
/mob/living/carbon/slime/proc/apply_water()
adjustToxLoss(rand(15,20))
if(!client)
if(Target) // Like cats
Target = null
++Discipline
return
/mob/living/carbon/slime/water_act(volume, temperature, source, method = TOUCH)
. = ..()
var/water_damage = rand(10, 15) * volume
adjustToxLoss(water_damage)
if(!client && Target && volume >= 3)
Target = null
++Discipline
/mob/living/carbon/slime/can_use_vents()
if(Victim)
+7
View File
@@ -70,6 +70,13 @@
if(!silent && !isnull(usr))
log_and_message_admins("cleared the supplied laws of [src]")
/mob/living/silicon/proc/clear_zeroth_law(var/silent = FALSE)
throw_alert("newlaw", /obj/screen/alert/newlaw)
laws_sanity_check()
laws.clear_zeroth_laws()
if(!silent && !isnull(usr))
log_and_message_admins("cleared the zeroth law of [src]")
/mob/living/silicon/proc/statelaws(var/datum/ai_laws/laws)
var/prefix = ""
if(MAIN_CHANNEL == lawchannel)
@@ -17,6 +17,8 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = INFINITY
move_resist = INFINITY
anchored = TRUE
loot = list(/obj/effect/collapse, /obj/structure/closet/crate/necropolis/tendril)
del_on_death = 1
var/gps = null
@@ -76,4 +78,4 @@
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril)
/mob/living/simple_animal/hostile/spawner/lavaland/legion
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
-6
View File
@@ -409,12 +409,6 @@
qdel(src)
/obj/item/grab/proc/checkvalid(var/mob/attacker, var/mob/prey) //does all the checking for the attack proc to see if a mob can eat another with the grab
if(ishuman(attacker) && (/datum/dna/gene/basic/grant_spell/mattereater in attacker.active_genes)) // MATTER EATER CARES NOT OF YOUR FORM
return 1
if(ishuman(attacker) && (FAT in attacker.mutations) && iscarbon(prey) && !isalien(prey)) //Fat people eating carbon mobs but not xenos
return 1
if(isalien(attacker) && iscarbon(prey)) //Xenomorphs eating carbon mobs
return 1
+24 -17
View File
@@ -124,12 +124,6 @@
else
user.visible_message("<span class='danger'>[user] fires [src]!</span>", "<span class='danger'>You fire [src]!</span>", "You hear \a [fire_sound_text]!")
if(weapon_weight >= WEAPON_MEDIUM)
if(user.get_inactive_hand())
if(prob(15))
if(user.drop_item())
user.visible_message("<span class='danger'>[src] flies out of [user]'s hands!</span>", "<span class='userdanger'>[src] kicks out of your grip!</span>")
/obj/item/gun/emp_act(severity)
for(var/obj/O in contents)
O.emp_act(severity)
@@ -174,7 +168,20 @@
to_chat(user, "<span class='userdanger'>You need both hands free to fire \the [src]!</span>")
return
process_fire(target,user,1,params)
//DUAL WIELDING
var/bonus_spread = 0
var/loop_counter = 0
if(ishuman(user) && user.a_intent == INTENT_HARM)
var/mob/living/carbon/human/H = user
for(var/obj/item/gun/G in get_both_hands(H))
if(G == src || G.weapon_weight >= WEAPON_MEDIUM)
continue
else if(G.can_trigger_gun(user))
bonus_spread += 24 * G.weapon_weight
loop_counter++
addtimer(CALLBACK(G, .proc/process_fire, target, user, 1, params, null, bonus_spread), loop_counter)
process_fire(target,user,1,params, null, bonus_spread)
/obj/item/gun/proc/can_trigger_gun(mob/living/user)
if(!user.can_use_guns(src))
@@ -187,17 +194,17 @@
/obj/item/gun/proc/newshot()
return
/obj/item/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override)
/obj/item/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override, bonus_spread = 0)
add_fingerprint(user)
if(semicd)
return
if(weapon_weight)
if(user.get_inactive_hand())
recoil = 4 //one-handed kick
else
recoil = initial(recoil)
var/sprd = 0
var/randomized_gun_spread = 0
if(spread)
randomized_gun_spread = rand(0,spread)
var/randomized_bonus_spread = rand(0, bonus_spread)
if(burst_size > 1)
firing_burst = 1
@@ -208,11 +215,10 @@
if( i>1 && !(src in get_both_hands(user))) //for burst firing
break
if(chambered)
var/sprd = 0
if(randomspread)
sprd = round((rand() - 0.5) * spread)
sprd = round((rand() - 0.5) * (randomized_gun_spread + randomized_bonus_spread))
else
sprd = round((i / burst_size - 0.5) * spread)
sprd = round((i / burst_size - 0.5) * (randomized_gun_spread + randomized_bonus_spread))
if(!chambered.fire(target, user, params, ,suppressed, zone_override, sprd))
shoot_with_empty_chamber(user)
break
@@ -230,7 +236,8 @@
firing_burst = 0
else
if(chambered)
if(!chambered.fire(target, user, params, , suppressed, zone_override, spread))
sprd = round((pick(1,-1)) * (randomized_gun_spread + randomized_bonus_spread))
if(!chambered.fire(target, user, params, , suppressed, zone_override, sprd))
shoot_with_empty_chamber(user)
return
else
+25 -10
View File
@@ -21,6 +21,12 @@
/obj/item/gun/energy/emp_act(severity)
power_supply.use(round(power_supply.charge / severity))
if(chambered)//phil235
if(chambered.BB)
qdel(chambered.BB)
chambered.BB = null
chambered = null
newshot() //phil235
update_icon()
/obj/item/gun/energy/get_cell()
@@ -34,6 +40,7 @@
power_supply = new(src)
power_supply.give(power_supply.maxcharge)
update_ammo_types()
on_recharge()
if(selfcharge)
START_PROCESSING(SSobj, src)
update_icon()
@@ -67,8 +74,12 @@
if(!external || !external.use(E.e_cost)) //Take power from the borg...
return //Note, uses /10 because of shitty mods to the cell system
power_supply.give(100) //... to recharge the shot
on_recharge()
update_icon()
/obj/item/gun/energy/proc/on_recharge()
newshot()
/obj/item/gun/energy/attack_self(mob/living/user as mob)
if(ammo_type.len > 1)
select_fire(user)
@@ -78,10 +89,6 @@
H.update_inv_l_hand()
H.update_inv_r_hand()
/obj/item/gun/energy/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params)
newshot() //prepare a new shot
..()
/obj/item/gun/energy/can_shoot()
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
return power_supply.charge >= shot.e_cost
@@ -89,18 +96,20 @@
/obj/item/gun/energy/newshot()
if(!ammo_type || !power_supply)
return
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
if(power_supply.charge >= shot.e_cost) //if there's enough power in the power_supply cell...
chambered = shot //...prepare a new shot based on the current ammo type selected
chambered.newshot()
return
if(!chambered)
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
if(power_supply.charge >= shot.e_cost) //if there's enough power in the power_supply cell...
chambered = shot //...prepare a new shot based on the current ammo type selected
if(!chambered.BB)
chambered.newshot()
/obj/item/gun/energy/process_chamber()
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
var/obj/item/ammo_casing/energy/shot = chambered
power_supply.use(shot.e_cost)//... drain the power_supply cell
robocharge()
chambered = null //either way, released the prepared shot
return
newshot()
/obj/item/gun/energy/proc/select_fire(mob/living/user)
select++
@@ -111,6 +120,12 @@
fire_delay = shot.delay
if(shot.select_name)
to_chat(user, "<span class='notice'>[src] is now set to [shot.select_name].</span>")
if(chambered)//phil235
if(chambered.BB)
qdel(chambered.BB)
chambered.BB = null
chambered = null
newshot()
update_icon()
return
@@ -134,6 +134,7 @@
/obj/item/gun/energy/kinetic_accelerator/proc/reload()
power_supply.give(500)
on_recharge()
if(!suppressed)
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
else if(isliving(loc))
@@ -79,7 +79,7 @@
slot_flags = null
w_class = WEIGHT_CLASS_HUGE
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
weapon_weight = WEAPON_MEDIUM
weapon_weight = WEAPON_HEAVY
can_flashlight = 0
trigger_guard = TRIGGER_GUARD_NONE
ammo_x_offset = 2
@@ -168,11 +168,13 @@
var/obj/item/stack/sheet/S = A
S.use(1)
power_supply.give(1000)
on_recharge()
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
else if(istype(A, /obj/item/stack/ore/plasma))
var/obj/item/stack/ore/S = A
S.use(1)
power_supply.give(500)
on_recharge()
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
else
return ..()
@@ -251,10 +253,6 @@
/obj/item/gun/energy/printer/emp_act()
return
/obj/item/gun/energy/printer/newshot()
..()
robocharge()
// Instakill Lasers //
/obj/item/gun/energy/laser/instakill
name = "instakill rifle"
@@ -7,7 +7,7 @@
slot_flags = 0
origin_tech = "combat=6;engineering=3;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/mm556x45
weapon_weight = WEAPON_MEDIUM
weapon_weight = WEAPON_HEAVY
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
magin_sound = 'sound/weapons/gun_interactions/lmg_magin.ogg'
magout_sound = 'sound/weapons/gun_interactions/lmg_magout.ogg'
@@ -11,6 +11,7 @@
mag_type = /obj/item/ammo_box/magazine/internal/shot
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
var/recentpump = 0 // to prevent spammage
weapon_weight = WEAPON_MEDIUM
/obj/item/gun/projectile/shotgun/attackby(obj/item/A, mob/user, params)
. = ..()
@@ -4,7 +4,7 @@
icon_state = "sniper"
item_state = "sniper"
recoil = 2
weapon_weight = WEAPON_MEDIUM
weapon_weight = WEAPON_HEAVY
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_sound = 'sound/weapons/gunshots/gunshot_sniper.ogg'
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
+7 -1
View File
@@ -184,8 +184,10 @@
var/randomize = pick("robot", "slime", "xeno", "human", "animal")
switch(randomize)
if("robot")
var/path
if(prob(30))
new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
path = pick(typesof(/mob/living/silicon/robot/syndicate))
new_mob = new path(M.loc)
else
new_mob = new /mob/living/silicon/robot(M.loc)
new_mob.gender = M.gender
@@ -193,6 +195,10 @@
new_mob.job = "Cyborg"
var/mob/living/silicon/robot/Robot = new_mob
Robot.mmi = new /obj/item/mmi(new_mob)
Robot.lawupdate = FALSE
Robot.connected_ai = null
Robot.clear_inherent_laws()
Robot.clear_zeroth_law()
if(ishuman(M))
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
if("slime")
@@ -143,7 +143,6 @@
M.apply_effect((rand(30,80)),IRRADIATE)
M.Weaken(5)
M.visible_message("<span class='warning'>[M] writhes in pain as [M.p_their()] vacuoles boil.</span>", "<span class='userdanger'>You writhe in pain as your vacuoles boil!</span>", "<span class='italics'>You hear the crunching of leaves.</span>")
if(prob(35))
if(prob(80))
randmutb(M)
domutcheck(M,null)
@@ -668,6 +668,7 @@
color = "#A0E85E"
metabolization_rate = 0.2
taste_description = "life"
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
@@ -680,13 +681,14 @@
if(volume < 1)
// gotta pay to play
return ..()
if(isanimal(M))
if(method == TOUCH)
var/mob/living/simple_animal/SM = M
if(SM.stat == DEAD)
SM.revive()
SM.loot.Cut() //no abusing strange reagent for unlimited farming of resources
SM.visible_message("<span class='warning'>[M] seems to rise from the dead!</span>")
if(isanimal(M) && method == TOUCH)
var/mob/living/simple_animal/SM = M
if(SM.sentience_type != revive_type) // No reviving Ash Drakes for you
return
if(SM.stat == DEAD)
SM.revive()
SM.loot.Cut() //no abusing strange reagent for farming unlimited resources
SM.visible_message("<span class='warning'>[SM] seems to rise from the dead!</span>")
if(iscarbon(M))
if(method == INGEST || (method == TOUCH && prob(25)))
@@ -993,10 +993,10 @@
C.adjustToxLoss(lethality)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(IS_PLANT in H.dna.species.species_traits) //plantmen take a LOT of damage
H.adjustToxLoss(50)
if(IS_PLANT in H.dna.species.species_traits) //plantmen take extra damage
H.adjustToxLoss(3)
..()
else if(istype(M, /mob/living/simple_animal/diona)) //plantmen monkeys (diona) take EVEN MORE damage
else if(istype(M, /mob/living/simple_animal/diona)) //nymphs take EVEN MORE damage
var/mob/living/simple_animal/diona/D = M
D.adjustHealth(100)
..()
+1
View File
@@ -1036,6 +1036,7 @@
if(O.currTag > 0)// Tag set
sortType = O.currTag
name = GLOB.TAGGERLOCATIONS[O.currTag]
playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
var/tag = uppertext(GLOB.TAGGERLOCATIONS[O.currTag])
to_chat(user, "<span class='notice'>Changed filter to [tag]</span>")
+1 -1
View File
@@ -323,7 +323,7 @@
shoes = /obj/item/clothing/shoes/white
gloves = /obj/item/clothing/gloves/color/latex/nitrile
suit = /obj/item/clothing/suit/space/hardsuit/ert/medical
glasses = /obj/item/clothing/glasses/hud/health/health_advanced
glasses = /obj/item/clothing/glasses/hud/health/sunglasses
suit_store = /obj/item/gun/energy/gun
cybernetic_implants = list(
/obj/item/organ/internal/cyberimp/arm/surgery,
@@ -17,7 +17,7 @@
density = TRUE
roundstart = FALSE
death = FALSE
mob_species = /datum/species/diona
mob_species = /datum/species/diona/pod
flavour_text = "<span class='big bold'>You are a sentient ecosystem,</span><b> an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \
seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \
for contact from your creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago.</b>"
+8
View File
@@ -65,3 +65,11 @@
. = ..()
if(!S1.lock_shuttle_doors && id_tag == "s_docking_airlock")
INVOKE_ASYNC(src, .proc/unlock)
/obj/structure/ladder/onShuttleMove()
if(resistance_flags & INDESTRUCTIBLE)
// simply don't be moved
return FALSE
disconnect()
LateInitialize()
return ..()
+4 -3
View File
@@ -349,7 +349,7 @@
if(mode != SHUTTLE_CALL)
return
invertTimer()
timer = world.time - timeLeft(1)
mode = SHUTTLE_RECALL
/obj/docking_port/mobile/proc/enterTransit()
@@ -650,8 +650,9 @@
create_ripples(destination)
/obj/docking_port/mobile/proc/setTimer(wait)
timer = world.time + wait
last_timer_length = wait
if(timer <= 0)
timer = world.time
timer += wait - timeLeft(1)
/obj/docking_port/mobile/proc/modTimer(multiple)
var/time_remaining = timer - world.time
+37 -36
View File
@@ -87,67 +87,68 @@ var/global/list/limb_icon_cache = list()
else if(s_col)
mob_icon.Blend(s_col, ICON_ADD)
if(owner) //Maintains overlays on disembodied parts.
cut_overlays()
dir = EAST
icon = mob_icon
return mob_icon
/obj/item/organ/external/head/get_icon()
..()
overlays.Cut()
if(!owner)
return
if(dna.species.has_organ["eyes"])
var/icon/eyes_icon = owner.get_eyecon()
if(eyes_icon)
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
overlays |= eyes_icon
mob_icon.Blend(eyes_icon, ICON_OVERLAY) //This is required since update_icons.dm relies on this proc to render non-shining eyes.
add_overlay(eyes_icon)
if(owner.lip_style && (LIPS in dna.species.species_traits))
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
overlays |= lip_icon
mob_icon.Blend(lip_icon, ICON_OVERLAY)
add_overlay(mutable_appearance('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")) //Hefty icon not necessary.
var/head_marking = owner.m_styles["head"]
if(head_marking && head_marking != "None")
if(head_marking)
var/datum/sprite_accessory/head_marking_style = GLOB.marking_styles_list[head_marking]
if(head_marking_style && head_marking_style.species_allowed && (dna.species.name in head_marking_style.species_allowed) && head_marking_style.marking_location == "head")
var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s")
var/icon/h_marking_s = new /icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s")
if(head_marking_style.do_colouration)
h_marking_s.Blend(owner.m_colours["head"], ICON_ADD)
overlays |= h_marking_s
add_overlay(h_marking_s)
if(ha_style)
var/datum/sprite_accessory/head_accessory_style = GLOB.head_accessory_styles_list[ha_style]
if(head_accessory_style && head_accessory_style.species_allowed && (dna.species.name in head_accessory_style.species_allowed))
var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
if(head_accessory_style.do_colouration)
head_accessory_s.Blend(headacc_colour, ICON_ADD)
overlays |= head_accessory_s
if(!((owner.head && (owner.head.flags & BLOCKHAIR)) || (owner.wear_mask && (owner.wear_mask.flags & BLOCKHAIR)))) //Common restriction for all the below features.
if(ha_style)
var/datum/sprite_accessory/head_accessory_style = GLOB.head_accessory_styles_list[ha_style]
if(head_accessory_style && head_accessory_style.species_allowed && (dna.species.name in head_accessory_style.species_allowed))
var/icon/head_accessory_s = new /icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
if(head_accessory_style.do_colouration)
head_accessory_s.Blend(headacc_colour, ICON_ADD)
add_overlay(head_accessory_s)
if(f_style)
var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style]
if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species.name in facial_hair_style.species_allowed)) || (dna.species.bodyflags & ALL_RPARTS)))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(istype(dna.species, /datum/species/slime)) // I am el worstos
facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha.
else if(facial_hair_style.do_colouration)
facial_s.Blend(facial_colour, ICON_ADD)
overlays |= facial_s
if(f_style)
var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style]
if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species.name in facial_hair_style.species_allowed)) || (dna.species.bodyflags & ALL_RPARTS)))
var/icon/facial_s = new /icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(istype(dna.species, /datum/species/slime)) // I am el worstos
facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha.
else if(facial_hair_style.do_colouration)
facial_s.Blend(facial_colour, ICON_ADD)
add_overlay(facial_s)
if(h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = GLOB.hair_styles_full_list[h_style]
if(hair_style && ((dna.species.name in hair_style.species_allowed) || (dna.species.bodyflags & ALL_RPARTS)))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(istype(dna.species, /datum/species/slime)) // I am el worstos
hair_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha.
else if(hair_style.do_colouration)
hair_s.Blend(hair_colour, ICON_ADD)
overlays |= hair_s
if(h_style)
if(!owner.isSynthetic() || (owner.isSynthetic() && ((owner.head && (owner.head.flags & BLOCKHEADHAIR)) || (owner.wear_mask && (owner.wear_mask.flags & BLOCKHEADHAIR)))))
var/datum/sprite_accessory/hair_style = GLOB.hair_styles_full_list[h_style]
if(hair_style && ((dna.species.name in hair_style.species_allowed) || (dna.species.bodyflags & ALL_RPARTS)))
var/icon/hair_s = new /icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(istype(dna.species, /datum/species/slime)) // I am el worstos
hair_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha.
else if(hair_style.do_colouration)
hair_s.Blend(hair_colour, ICON_ADD)
add_overlay(hair_s)
return mob_icon
return mob_icon //Don't need to blend the above into this as it's handled in human/update_icons(). The overlays are for rendering stuff on disembodied heads.
/obj/item/organ/external/proc/get_icon_state(skeletal)
var/gender
+5 -11
View File
@@ -2,7 +2,6 @@
name = "core trunk"
max_damage = 200
min_broken_damage = 50
cannot_break = 1
amputation_point = "trunk"
encased = null
gendered_icon = 0
@@ -10,7 +9,6 @@
/obj/item/organ/external/groin/diona
name = "fork"
min_broken_damage = 50
cannot_break = 1
amputation_point = "lower trunk"
gendered_icon = 0
@@ -18,58 +16,49 @@
name = "left upper tendril"
max_damage = 35
min_broken_damage = 20
cannot_break = 1
amputation_point = "upper left trunk"
/obj/item/organ/external/arm/right/diona
name = "right upper tendril"
max_damage = 35
min_broken_damage = 20
cannot_break = 1
amputation_point = "upper right trunk"
/obj/item/organ/external/leg/diona
name = "left lower tendril"
max_damage = 35
min_broken_damage = 20
cannot_break = 1
amputation_point = "lower left fork"
/obj/item/organ/external/leg/right/diona
name = "right lower tendril"
max_damage = 35
min_broken_damage = 20
cannot_break = 1
amputation_point = "lower right fork"
/obj/item/organ/external/foot/diona
name = "left foot"
max_damage = 20
min_broken_damage = 10
cannot_break = 1
amputation_point = "branch"
/obj/item/organ/external/foot/right/diona
name = "right foot"
max_damage = 20
min_broken_damage = 10
cannot_break = 1
amputation_point = "branch"
/obj/item/organ/external/hand/diona
name = "left grasper"
cannot_break = 1
amputation_point = "branch"
/obj/item/organ/external/hand/right/diona
name = "right grasper"
cannot_break = 1
amputation_point = "branch"
/obj/item/organ/external/head/diona
max_damage = 50
min_broken_damage = 25
cannot_break = 1
encased = null
amputation_point = "upper trunk"
gendered_icon = 0
@@ -82,6 +71,11 @@
icon = 'icons/obj/objects.dmi'
icon_state = "nymph"
/obj/item/organ/internal/lungs/diona
name = "respiratory vacuoles"
icon = 'icons/obj/objects.dmi'
icon_state = "nymph"
/obj/item/organ/internal/brain/diona // Turns into a nymph instantly, no transplanting possible.
name = "gas bladder"
icon = 'icons/obj/objects.dmi'