Merge remote-tracking branch 'upstream/master' into ports-tailoring

This commit is contained in:
Fox McCloud
2019-08-27 18:23:11 -04:00
97 changed files with 4941 additions and 778 deletions
@@ -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]")
@@ -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/cowboy
/datum/gear/shoes/cowboyboots_black
display_name = "cowboy boots, black"
cost = 1
path = /obj/item/clothing/shoes/cowboy/black
/datum/gear/shoes/cowboyboots/white
display_name = "cowboy boots, white"
cost = 1
path = /obj/item/clothing/shoes/cowboy/white
/datum/gear/shoes/cowboyboots/pink
display_name = "cowboy boots, pink"
cost = 1
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
+4 -3
View File
@@ -444,7 +444,8 @@ BLIND // can't see anything
slowdown = SHOES_SLOWDOWN
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/shoes.dmi'
"Vox" = 'icons/mob/species/vox/shoes.dmi',
"Drask" = 'icons/mob/species/drask/shoes.dmi'
)
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
@@ -595,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
@@ -623,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
+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
@@ -758,6 +758,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/toy,/obj/item/storage/fancy/cigarettes,/obj/item/lighter)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
actions_types = list(/datum/action/item_action/zipper)
adjust_flavour = "unzip"
+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()
+11 -11
View File
@@ -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
+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
@@ -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)
@@ -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)
@@ -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)
@@ -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"
+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)
@@ -0,0 +1,49 @@
/mob/living/simple_animal/hostile/skeleton
name = "reanimated skeleton"
desc = "A real bonefied skeleton, doesn't seem like it wants to socialize."
icon = 'icons/mob/animal.dmi'
icon_state = "skeleton"
icon_living = "skeleton"
turns_per_move = 5
speak_emote = list("rattles")
emote_see = list("rattles")
a_intent = INTENT_HARM
maxHealth = 40
health = 40
speed = 1
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
minbodytemp = 0
maxbodytemp = 1500
healable = FALSE //they're skeletons how would bruise packs help them??
attacktext = "slashes"
attack_sound = 'sound/hallucinations/growl1.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 10
robust_searching = 1
stat_attack = UNCONSCIOUS
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
faction = list("skeleton")
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
deathmessage = "collapses into a pile of bones!"
del_on_death = TRUE
loot = list(/obj/effect/decal/remains/human)
/mob/living/simple_animal/hostile/skeleton/eskimo
name = "undead eskimo"
desc = "The reanimated remains of some poor traveler."
icon_state = "eskimo"
icon_living = "eskimo"
maxHealth = 55
health = 55
weather_immunities = list("snow")
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
melee_damage_lower = 17
melee_damage_upper = 20
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
loot = list(/obj/effect/decal/remains/human,
/obj/item/twohanded/spear,
/obj/item/clothing/shoes/winterboots,
/obj/item/clothing/suit/hooded/wintercoat)
+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)
@@ -988,10 +988,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)
..()
@@ -9,7 +9,7 @@
righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi'
icon_state = "ivbag"
volume = 200
possible_transfer_amounts = list(1,5,10)
possible_transfer_amounts = list(1,5,10,15,20,25,30,50) // Everything above 10 is NOT usable on a person and is instead used for transfering to other containers
amount_per_transfer_from_this = 1
container_type = OPENCONTAINER
var/label_text
@@ -53,6 +53,11 @@
end_processing()
return
if(amount_per_transfer_from_this > 10) // Prevents people from switching to illegal transfer values while the IV is already in someone, i.e. anything over 10
visible_message("<span class='danger'>The IV bag's needle pops out of [injection_target]'s arm. The transfer amount is too high!</span>")
end_processing()
return
if(get_dist(get_turf(src), get_turf(injection_target)) > 1)
to_chat(injection_target, "<span class='userdanger'>The [src]'s' needle is ripped out of you!</span>")
injection_target.apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
@@ -98,6 +103,9 @@
else // Inserting the needle
if(!L.can_inject(user, 1))
return
if(amount_per_transfer_from_this > 10) // We only want to be able to transfer 1, 5, or 10 units to people. Higher numbers are for transfering to other containers
to_chat(user, "<span class='warning'>The IV bag can only be used on someone with a transfer amount of 1, 5 or 10.</span>")
return
if(L != user)
L.visible_message("<span class='danger'>[user] is trying to insert [src]'s needle into [L]'s arm!</span>", \
"<span class='userdanger'>[user] is trying to insert [src]'s needle into [L]'s arm!</span>")
@@ -107,6 +115,22 @@
"<span class='userdanger'>[user] inserts [src]'s needle into [L]'s arm!</span>")
begin_processing(L)
else if(target.is_refillable() && is_drainable()) // Transferring from IV bag to other containers
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty.</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='warning'>[target] is full.</span>")
return
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution to [target].</span>")
else if(istype(target, /obj/item/reagent_containers/glass) && !target.is_open_container())
to_chat(user, "<span class='warning'>You cannot fill [target] while it is sealed.</span>")
return
/obj/item/reagent_containers/iv_bag/update_icon()
overlays.Cut()
@@ -0,0 +1,7 @@
//lavaland clown planet papers
/obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/escape
info = "If you dare not continue down this path of madness, escape can be found through the chute in this room."
/obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/hope
info = "Abandon hope, all ye who enter here."
@@ -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>"
+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'