mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into item_state
Conflicts: code/modules/clothing/clothing.dm
This commit is contained in:
@@ -29,9 +29,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
S["OOC_Notes"] << pref.metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
||||
pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
|
||||
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
|
||||
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
||||
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
@@ -75,7 +73,6 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
if(href_list["rename"])
|
||||
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
|
||||
if (!isnull(raw_name) && CanUseTopic(user))
|
||||
@@ -108,10 +105,11 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["age"])
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null
|
||||
var/min_age = get_min_age()
|
||||
var/max_age = get_max_age()
|
||||
var/new_age = input(user, "Choose your character's age:\n([min_age]-[max_age])", "Character Preference", pref.age) as num|null
|
||||
if(new_age && CanUseTopic(user))
|
||||
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
|
||||
pref.age = max(min(round(text2num(new_age)), max_age), min_age)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["spawnpoint"])
|
||||
|
||||
@@ -331,8 +331,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
|
||||
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
pref.age = max(min(pref.age, S.max_age), S.min_age)
|
||||
var/min_age = get_min_age()
|
||||
var/max_age = get_max_age()
|
||||
pref.age = max(min(pref.age, max_age), min_age)
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
#define TOPIC_UPDATE_PREVIEW 4
|
||||
#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
|
||||
|
||||
#define PREF_FBP_CYBORG "cyborg"
|
||||
#define PREF_FBP_POSI "posi"
|
||||
#define PREF_FBP_SOFTWARE "software"
|
||||
|
||||
/datum/category_group/player_setup_category/general_preferences
|
||||
name = "General"
|
||||
sort_order = 1
|
||||
@@ -252,3 +256,50 @@
|
||||
|
||||
if(pref.client)
|
||||
return pref.client.mob
|
||||
|
||||
// Checks in a really hacky way if a character's preferences say they are an FBP or not.
|
||||
/datum/category_item/player_setup_item/proc/is_FBP()
|
||||
if(pref.organ_data && pref.organ_data[BP_TORSO] != "cyborg")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
// Returns what kind of FBP the player's prefs are. Returns 0 if they're not an FBP.
|
||||
/datum/category_item/player_setup_item/proc/get_FBP_type()
|
||||
if(!is_FBP())
|
||||
return 0 // Not a robot.
|
||||
switch(pref.organ_data["brain"])
|
||||
if("assisted")
|
||||
return PREF_FBP_CYBORG
|
||||
if("mechanical")
|
||||
return PREF_FBP_POSI
|
||||
if("digital")
|
||||
return PREF_FBP_SOFTWARE
|
||||
return 0 //Something went wrong!
|
||||
|
||||
/datum/category_item/player_setup_item/proc/get_min_age()
|
||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
||||
if(!is_FBP())
|
||||
return S.min_age // If they're not a robot, we can just use the species var.
|
||||
var/FBP_type = get_FBP_type()
|
||||
switch(FBP_type)
|
||||
if(PREF_FBP_CYBORG)
|
||||
return S.min_age
|
||||
if(PREF_FBP_POSI)
|
||||
return 1
|
||||
if(PREF_FBP_SOFTWARE)
|
||||
return 1
|
||||
return S.min_age // welp
|
||||
|
||||
/datum/category_item/player_setup_item/proc/get_max_age()
|
||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
||||
if(!is_FBP())
|
||||
return S.max_age // If they're not a robot, we can just use the species var.
|
||||
var/FBP_type = get_FBP_type()
|
||||
switch(FBP_type)
|
||||
if(PREF_FBP_CYBORG)
|
||||
return S.max_age + 20
|
||||
if(PREF_FBP_POSI)
|
||||
return 220
|
||||
if(PREF_FBP_SOFTWARE)
|
||||
return 150
|
||||
return S.max_age // welp
|
||||
183
code/modules/clothing/ears/ears.dm
Normal file
183
code/modules/clothing/ears/ears.dm
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
Earmuffs
|
||||
*/
|
||||
/obj/item/clothing/ears/earmuffs
|
||||
name = "earmuffs"
|
||||
desc = "Protects your hearing from loud noises, and quiet ones as well."
|
||||
icon_state = "earmuffs"
|
||||
item_state = "earmuffs"
|
||||
slot_flags = SLOT_EARS | SLOT_TWOEARS
|
||||
ear_protection = 2
|
||||
|
||||
/obj/item/clothing/ears/earmuffs/headphones
|
||||
name = "headphones"
|
||||
desc = "Unce unce unce unce."
|
||||
var/headphones_on = 0
|
||||
icon_state = "headphones_off"
|
||||
item_state = "headphones"
|
||||
slot_flags = SLOT_EARS | SLOT_TWOEARS
|
||||
|
||||
/obj/item/clothing/ears/earmuffs/headphones/verb/togglemusic()
|
||||
set name = "Toggle Headphone Music"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
var/base_icon = copytext(icon_state,1,(length(icon_state) - 3 + headphones_on))
|
||||
|
||||
if(headphones_on)
|
||||
icon_state = "[base_icon]_off"
|
||||
headphones_on = 0
|
||||
usr << "<span class='notice'>You turn the music off.</span>"
|
||||
else
|
||||
icon_state = "[base_icon]_on"
|
||||
headphones_on = 1
|
||||
usr << "<span class='notice'>You turn the music on.</span>"
|
||||
|
||||
update_clothing_icon()
|
||||
|
||||
/*
|
||||
Skrell tentacle wear
|
||||
*/
|
||||
/obj/item/clothing/ears/skrell
|
||||
name = "skrell tentacle wear"
|
||||
desc = "Some stuff worn by skrell to adorn their head tentacles."
|
||||
icon = 'icons/obj/clothing/ears.dmi'
|
||||
w_class = 1
|
||||
slot_flags = SLOT_EARS
|
||||
species_restricted = list("Skrell")
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain
|
||||
name = "Gold headtail chains"
|
||||
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain"
|
||||
item_state = "egg5" //just a small colored item, remove item_state's if undesirable.
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/silver
|
||||
name = "Silver headtail chains"
|
||||
desc = "A delicate silver chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "egg"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/bluejewels
|
||||
name = "Blue jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with blue jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_bjewel"
|
||||
item_state = "egg2"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/redjewels
|
||||
name = "Red jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with red jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_rjewel"
|
||||
item_state = "egg4"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/ebony
|
||||
name = "Ebony headtail chains"
|
||||
desc = "A delicate ebony chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_ebony"
|
||||
item_state = "egg6"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band
|
||||
name = "Gold headtail bands"
|
||||
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band"
|
||||
item_state = "egg5"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/silver
|
||||
name = "Silver headtail bands"
|
||||
desc = "Silver metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "egg"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/bluejewels
|
||||
name = "Blue jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with blue jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_bjewel"
|
||||
item_state = "egg2"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/redjewels
|
||||
name = "Red jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with red jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_rjewel"
|
||||
item_state = "egg4"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/ebony
|
||||
name = "Ebony headtail bands"
|
||||
desc = "Ebony bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_ebony"
|
||||
item_state = "egg6"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/band
|
||||
name = "Colored headtail bands"
|
||||
desc = "Metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "egg"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/chain
|
||||
name = "Colored headtail chains"
|
||||
desc = "A delicate chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "egg"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
icon_state = "skrell_cloth_female"
|
||||
item_state = "egg4"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/black
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_female"
|
||||
item_state = "egg6"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_female"
|
||||
item_state = "egg2"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/green
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_female"
|
||||
item_state = "egg3"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_female"
|
||||
item_state = "egg1"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_female"
|
||||
item_state = "egg2"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
icon_state = "skrell_cloth_male"
|
||||
item_state = "egg4"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/black
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_male"
|
||||
item_state = "egg6"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_male"
|
||||
item_state = "egg2"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/green
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_male"
|
||||
item_state = "egg3"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_male"
|
||||
item_state = "egg1"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_male"
|
||||
item_state = "egg2"
|
||||
@@ -29,7 +29,7 @@
|
||||
msg = "A combat drone wing operating near various asteroids in the Kara subsystem has failed to return from a anti-piracy sweep. If any are sighted, \
|
||||
approach with caution."
|
||||
if(2)
|
||||
msg = "Contact has been lost with a combat drone wring operating out in the asteroid field near Kara. If any are sighted in the area, approach with \
|
||||
msg = "Contact has been lost with a combat drone wing operating out in the asteroid field near Kara. If any are sighted in the area, approach with \
|
||||
caution."
|
||||
if(3)
|
||||
msg = "Unidentified hackers have targeted a combat drone wing deployed in the Kara subsystem. If any are sighted in the area, approach with caution."
|
||||
|
||||
@@ -85,6 +85,18 @@
|
||||
declare_arrests = !declare_arrests
|
||||
attack_hand(usr)
|
||||
|
||||
/mob/living/bot/secbot/emag_act(var/remaining_uses, var/mob/user)
|
||||
. = ..()
|
||||
if(!emagged)
|
||||
if(user)
|
||||
user << "<span class='notice'>\The [src] buzzes and beeps.</span>"
|
||||
emagged = 1
|
||||
patrol_speed = 3
|
||||
target_speed = 4
|
||||
return 1
|
||||
else
|
||||
user << "<span class='notice'>\The [src] is already corrupt.</span>"
|
||||
|
||||
/mob/living/bot/secbot/attackby(var/obj/item/O, var/mob/user)
|
||||
var/curhealth = health
|
||||
..()
|
||||
|
||||
@@ -154,7 +154,16 @@ emp_act
|
||||
if(user == src) // Attacking yourself can't miss
|
||||
return target_zone
|
||||
|
||||
var/hit_zone = get_zone_with_miss_chance(target_zone, src)
|
||||
// Certain statuses make it harder to score a hit. These are the same as gun accuracy, however melee doesn't use multiples of 15.
|
||||
var/accuracy_penalty = 0
|
||||
if(user.eye_blind)
|
||||
accuracy_penalty += 75
|
||||
if(user.eye_blurry)
|
||||
accuracy_penalty += 15
|
||||
if(user.confused)
|
||||
accuracy_penalty += 30
|
||||
|
||||
var/hit_zone = get_zone_with_miss_chance(target_zone, src, accuracy_penalty)
|
||||
|
||||
if(!hit_zone)
|
||||
visible_message("<span class='danger'>\The [user] misses [src] with \the [I]!</span>")
|
||||
|
||||
@@ -1324,7 +1324,7 @@
|
||||
|
||||
// Puke if toxloss is too high
|
||||
if(!stat)
|
||||
if (getToxLoss() >= 45 && nutrition > 20)
|
||||
if (getToxLoss() >= 45)
|
||||
spawn vomit()
|
||||
|
||||
//0.1% chance of playing a scary sound to someone who's in complete darkness
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
cold_discomfort_level = 180
|
||||
|
||||
has_limbs = list(
|
||||
BP_CHEST = list("path" = /obj/item/organ/external/chest),
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/seromi),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
|
||||
@@ -814,38 +814,35 @@ default behaviour is:
|
||||
return
|
||||
|
||||
if(!lastpuke)
|
||||
|
||||
lastpuke = 1
|
||||
if (nutrition <= 100)
|
||||
src << "<span class='danger'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
|
||||
src.Weaken(10)
|
||||
src.adjustToxLoss(3)
|
||||
return
|
||||
|
||||
lastpuke = 1
|
||||
src << "<span class='warning'>You feel nauseous...</span>"
|
||||
|
||||
if(!skip_wait)
|
||||
sleep(150) //15 seconds until second warning
|
||||
src << "<span class='warning'>You feel like you are about to throw up!</span>"
|
||||
sleep(100) //and you have 10 more for mad dash to the bucket
|
||||
|
||||
Stun(5)
|
||||
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(istype(T))
|
||||
if(blood_vomit)
|
||||
T.add_blood_floor(src)
|
||||
else
|
||||
T.add_vomit_floor(src, 1)
|
||||
|
||||
if(blood_vomit)
|
||||
if(getBruteLoss() < 50)
|
||||
adjustBruteLoss(3)
|
||||
else
|
||||
nutrition -= 40
|
||||
adjustToxLoss(-3)
|
||||
src << "<span class='warning'>You feel nauseous...</span>"
|
||||
|
||||
if(!skip_wait)
|
||||
sleep(150) //15 seconds until second warning
|
||||
src << "<span class='warning'>You feel like you are about to throw up!</span>"
|
||||
sleep(100) //and you have 10 more for mad dash to the bucket
|
||||
|
||||
Stun(5)
|
||||
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(istype(T))
|
||||
if(blood_vomit)
|
||||
T.add_blood_floor(src)
|
||||
else
|
||||
T.add_vomit_floor(src, 1)
|
||||
|
||||
if(blood_vomit)
|
||||
if(getBruteLoss() < 50)
|
||||
adjustBruteLoss(3)
|
||||
else
|
||||
nutrition -= 40
|
||||
adjustToxLoss(-3)
|
||||
|
||||
sleep(350)
|
||||
lastpuke = 0
|
||||
|
||||
55
code/modules/organs/internal/appendix.dm
Normal file
55
code/modules/organs/internal/appendix.dm
Normal file
@@ -0,0 +1,55 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/appendix
|
||||
name = "appendix"
|
||||
icon_state = "appendix"
|
||||
parent_organ = BP_GROIN
|
||||
organ_tag = "appendix"
|
||||
var/inflamed = 0
|
||||
var/inflame_progress = 0
|
||||
|
||||
/mob/living/carbon/human/proc/appendicitis()
|
||||
if(stat == DEAD)
|
||||
return 0
|
||||
var/obj/item/organ/internal/appendix/A = internal_organs_by_name[O_APPENDIX]
|
||||
if(istype(A) && !A.inflamed)
|
||||
A.inflamed = 1
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/organ/internal/appendix/process()
|
||||
if(!inflamed || !owner)
|
||||
return
|
||||
|
||||
if(++inflame_progress > 200)
|
||||
++inflamed
|
||||
inflame_progress = 0
|
||||
|
||||
if(inflamed == 1)
|
||||
if(prob(5))
|
||||
owner << "<span class='warning'>You feel a stinging pain in your abdomen!</span>"
|
||||
owner.emote("me", 1, "winces slightly.")
|
||||
if(inflamed > 1)
|
||||
if(prob(3))
|
||||
owner << "<span class='warning'>You feel a stabbing pain in your abdomen!</span>"
|
||||
owner.emote("me", 1, "winces painfully.")
|
||||
owner.adjustToxLoss(1)
|
||||
if(inflamed > 2)
|
||||
if(prob(1))
|
||||
owner.vomit()
|
||||
if(inflamed > 3)
|
||||
if(prob(1))
|
||||
owner << "<span class='danger'>Your abdomen is a world of pain!</span>"
|
||||
owner.Weaken(10)
|
||||
|
||||
var/obj/item/organ/external/groin = owner.get_organ(BP_GROIN)
|
||||
var/datum/wound/W = new /datum/wound/internal_bleeding(20)
|
||||
owner.adjustToxLoss(25)
|
||||
groin.wounds += W
|
||||
inflamed = 0
|
||||
|
||||
/obj/item/organ/internal/appendix/removed()
|
||||
if(inflamed)
|
||||
icon_state = "appendixinflamed"
|
||||
name = "inflamed appendix"
|
||||
..()
|
||||
78
code/modules/organs/internal/eyes.dm
Normal file
78
code/modules/organs/internal/eyes.dm
Normal file
@@ -0,0 +1,78 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/eyes
|
||||
name = "eyeballs"
|
||||
icon_state = "eyes"
|
||||
gender = PLURAL
|
||||
organ_tag = O_EYES
|
||||
parent_organ = BP_HEAD
|
||||
var/list/eye_colour = list(0,0,0)
|
||||
|
||||
/obj/item/organ/internal/eyes/robotize()
|
||||
..()
|
||||
name = "optical sensor"
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "camera"
|
||||
dead_icon = "camera_broken"
|
||||
verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
|
||||
|
||||
/obj/item/organ/internal/eyes/robot
|
||||
name = "optical sensor"
|
||||
|
||||
/obj/item/organ/internal/eyes/robot/New()
|
||||
..()
|
||||
robotize()
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/change_eye_color()
|
||||
set name = "Change Eye Color"
|
||||
set desc = "Changes your robotic eye color instantly."
|
||||
set category = "IC"
|
||||
set src in usr
|
||||
|
||||
var/current_color = rgb(eye_colour[1],eye_colour[2],eye_colour[3])
|
||||
var/new_color = input("Pick a new color for your eyes.","Eye Color", current_color) as null|color
|
||||
if(new_color && owner)
|
||||
// input() supplies us with a hex color, which we can't use, so we convert it to rbg values.
|
||||
var/list/new_color_rgb_list = hex2rgb(new_color)
|
||||
// First, update mob vars.
|
||||
owner.r_eyes = new_color_rgb_list[1]
|
||||
owner.g_eyes = new_color_rgb_list[2]
|
||||
owner.b_eyes = new_color_rgb_list[3]
|
||||
// Now sync the organ's eye_colour list.
|
||||
update_colour()
|
||||
// Finally, update the eye icon on the mob.
|
||||
owner.update_eyes()
|
||||
|
||||
/obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target)
|
||||
|
||||
// Apply our eye colour to the target.
|
||||
if(istype(target) && eye_colour)
|
||||
target.r_eyes = eye_colour[1]
|
||||
target.g_eyes = eye_colour[2]
|
||||
target.b_eyes = eye_colour[3]
|
||||
target.update_eyes()
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/update_colour()
|
||||
if(!owner)
|
||||
return
|
||||
eye_colour = list(
|
||||
owner.r_eyes ? owner.r_eyes : 0,
|
||||
owner.g_eyes ? owner.g_eyes : 0,
|
||||
owner.b_eyes ? owner.b_eyes : 0
|
||||
)
|
||||
|
||||
/obj/item/organ/internal/eyes/take_damage(amount, var/silent=0)
|
||||
var/oldbroken = is_broken()
|
||||
..()
|
||||
if(is_broken() && !oldbroken && owner && !owner.stat)
|
||||
owner << "<span class='danger'>You go blind!</span>"
|
||||
|
||||
/obj/item/organ/internal/eyes/process() //Eye damage replaces the old eye_stat var.
|
||||
..()
|
||||
if(!owner)
|
||||
return
|
||||
if(is_bruised())
|
||||
owner.eye_blurry = 20
|
||||
if(is_broken())
|
||||
owner.eye_blind = 20
|
||||
8
code/modules/organs/internal/heart.dm
Normal file
8
code/modules/organs/internal/heart.dm
Normal file
@@ -0,0 +1,8 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/heart
|
||||
name = "heart"
|
||||
icon_state = "heart-on"
|
||||
organ_tag = O_HEART
|
||||
parent_organ = BP_TORSO
|
||||
dead_icon = "heart-off"
|
||||
25
code/modules/organs/internal/kidneys.dm
Normal file
25
code/modules/organs/internal/kidneys.dm
Normal file
@@ -0,0 +1,25 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/kidneys
|
||||
name = "kidneys"
|
||||
icon_state = "kidneys"
|
||||
gender = PLURAL
|
||||
organ_tag = O_KIDNEYS
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/kidneys/process()
|
||||
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
// Coffee is really bad for you with busted kidneys.
|
||||
// This should probably be expanded in some way, but fucked if I know
|
||||
// what else kidneys can process in our reagent list.
|
||||
var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list
|
||||
if(coffee)
|
||||
if(is_bruised())
|
||||
owner.adjustToxLoss(0.1 * PROCESS_ACCURACY)
|
||||
else if(is_broken())
|
||||
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
|
||||
55
code/modules/organs/internal/liver.dm
Normal file
55
code/modules/organs/internal/liver.dm
Normal file
@@ -0,0 +1,55 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/liver
|
||||
name = "liver"
|
||||
icon_state = "liver"
|
||||
organ_tag = "liver"
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/liver/process()
|
||||
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
if (germ_level > INFECTION_LEVEL_ONE)
|
||||
if(prob(1))
|
||||
owner << "<span class='danger'>Your skin itches.</span>"
|
||||
if (germ_level > INFECTION_LEVEL_TWO)
|
||||
if(prob(1))
|
||||
spawn owner.vomit()
|
||||
|
||||
if(owner.life_tick % PROCESS_ACCURACY == 0)
|
||||
|
||||
//High toxins levels are dangerous
|
||||
if(owner.getToxLoss() >= 60 && !owner.reagents.has_reagent("anti_toxin"))
|
||||
//Healthy liver suffers on its own
|
||||
if (src.damage < min_broken_damage)
|
||||
src.damage += 0.2 * PROCESS_ACCURACY
|
||||
//Damaged one shares the fun
|
||||
else
|
||||
var/obj/item/organ/internal/O = pick(owner.internal_organs)
|
||||
if(O)
|
||||
O.damage += 0.2 * PROCESS_ACCURACY
|
||||
|
||||
//Detox can heal small amounts of damage
|
||||
if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("anti_toxin"))
|
||||
src.damage -= 0.2 * PROCESS_ACCURACY
|
||||
|
||||
if(src.damage < 0)
|
||||
src.damage = 0
|
||||
|
||||
// Get the effectiveness of the liver.
|
||||
var/filter_effect = 3
|
||||
if(is_bruised())
|
||||
filter_effect -= 1
|
||||
if(is_broken())
|
||||
filter_effect -= 2
|
||||
|
||||
// Do some reagent processing.
|
||||
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
|
||||
if(filter_effect < 3)
|
||||
owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY)
|
||||
else
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
26
code/modules/organs/internal/lungs.dm
Normal file
26
code/modules/organs/internal/lungs.dm
Normal file
@@ -0,0 +1,26 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/obj/item/organ/internal/lungs
|
||||
name = "lungs"
|
||||
icon_state = "lungs"
|
||||
gender = PLURAL
|
||||
organ_tag = O_LUNGS
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
/obj/item/organ/internal/lungs/process()
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
if (germ_level > INFECTION_LEVEL_ONE)
|
||||
if(prob(5))
|
||||
owner.emote("cough") //respitory tract infection
|
||||
|
||||
if(is_bruised())
|
||||
if(prob(2))
|
||||
spawn owner.emote("me", 1, "coughs up blood!")
|
||||
owner.drip(10)
|
||||
if(prob(4))
|
||||
spawn owner.emote("me", 1, "gasps for air!")
|
||||
owner.losebreath += 15
|
||||
36
code/modules/organs/internal/organ_internal.dm
Normal file
36
code/modules/organs/internal/organ_internal.dm
Normal file
@@ -0,0 +1,36 @@
|
||||
#define PROCESS_ACCURACY 10
|
||||
|
||||
/****************************************************
|
||||
INTERNAL ORGANS DEFINES
|
||||
****************************************************/
|
||||
/obj/item/organ/internal
|
||||
var/dead_icon // Icon to use when the organ has died.
|
||||
|
||||
/obj/item/organ/internal/die()
|
||||
..()
|
||||
if((status & ORGAN_DEAD) && dead_icon)
|
||||
icon_state = dead_icon
|
||||
|
||||
/obj/item/organ/internal/Destroy()
|
||||
if(owner)
|
||||
owner.internal_organs.Remove(src)
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
owner.internal_organs_by_name -= organ_tag
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
var/obj/item/organ/external/E = owner.organs_by_name[parent_organ]
|
||||
if(istype(E)) E.internal_organs -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/remove_rejuv()
|
||||
if(owner)
|
||||
owner.internal_organs -= src
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
owner.internal_organs_by_name -= organ_tag
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
var/obj/item/organ/external/E = owner.organs_by_name[parent_organ]
|
||||
if(istype(E)) E.internal_organs -= src
|
||||
..()
|
||||
|
||||
// Brain is defined in brain_item.dm.
|
||||
@@ -52,7 +52,7 @@
|
||||
name = "left upper tendril"
|
||||
organ_tag = "l_arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 35
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
@@ -69,7 +69,7 @@
|
||||
name = "left lower tendril"
|
||||
organ_tag = "l_leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 35
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
@@ -88,7 +88,7 @@
|
||||
name = "left foot"
|
||||
organ_tag = "l_foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 20
|
||||
max_damage = 35
|
||||
min_broken_damage = 10
|
||||
w_class = 2
|
||||
body_part = FOOT_LEFT
|
||||
@@ -110,7 +110,7 @@
|
||||
name = "left grasper"
|
||||
organ_tag = "l_hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 30
|
||||
max_damage = 40
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = HAND_LEFT
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
organ_tag = "l_arm"
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
max_damage = 80
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
@@ -69,7 +69,7 @@
|
||||
organ_tag = "l_leg"
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
max_damage = 80
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
@@ -92,7 +92,7 @@
|
||||
organ_tag = "l_foot"
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 30
|
||||
max_damage = 50
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = FOOT_LEFT
|
||||
@@ -121,7 +121,7 @@
|
||||
organ_tag = "l_hand"
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 30
|
||||
max_damage = 50
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = HAND_LEFT
|
||||
|
||||
@@ -333,6 +333,14 @@
|
||||
P.accuracy = accuracy + acc_mod
|
||||
P.dispersion = dispersion
|
||||
|
||||
// Certain statuses make it harder to aim, blindness especially. Same chances as melee, however guns accuracy uses multiples of 15.
|
||||
if(user.confused)
|
||||
accuracy -= 2
|
||||
if(user.eye_blind)
|
||||
accuracy -= 5
|
||||
if(user.eye_blurry)
|
||||
accuracy -= 1
|
||||
|
||||
//accuracy bonus from aiming
|
||||
if (aim_targets && (target in aim_targets))
|
||||
//If you aim at someone beforehead, it'll hit more often.
|
||||
|
||||
@@ -22,54 +22,112 @@ var/global/list/datum/supply_drop_loot/supply_drop
|
||||
/datum/supply_drop_loot/dd_SortValue()
|
||||
return name
|
||||
|
||||
/datum/supply_drop_loot/supermatter
|
||||
name = "Supermatter"
|
||||
/datum/supply_drop_loot/supermatter/New()
|
||||
..()
|
||||
contents = list(/obj/machinery/power/supermatter)
|
||||
|
||||
/datum/supply_drop_loot/lasers
|
||||
name = "Lasers"
|
||||
name = "Laser Warfare"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/lasers/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/sniperrifle,
|
||||
/obj/item/weapon/gun/energy/ionrifle)
|
||||
/obj/item/clothing/gloves/arm_guard/laserproof,
|
||||
/obj/item/clothing/shoes/leg_guard/laserproof,
|
||||
/obj/item/clothing/head/helmet/laserproof,
|
||||
/obj/item/clothing/suit/armor/laserproof,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security/tactical/bandolier,
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches,
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sec,
|
||||
/obj/item/weapon/shield/energy,
|
||||
/obj/item/weapon/gun/energy/ionrifle,
|
||||
/obj/item/weapon/gun/energy/xray,
|
||||
/obj/item/weapon/storage/box/emps,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/material/hatchet/tacknife/combatknife)
|
||||
|
||||
/datum/supply_drop_loot/ballistics
|
||||
name = "Ballistics"
|
||||
name = "Ballistic Warfare"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/ballistics/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/weapon/gun/projectile/colt/detective,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550,
|
||||
/obj/item/weapon/gun/projectile/automatic/z8)
|
||||
/obj/item/clothing/head/helmet/bulletproof,
|
||||
/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/clothing/gloves/arm_guard/bulletproof,
|
||||
/obj/item/clothing/shoes/leg_guard/bulletproof,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security/tactical/bandolier,
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches,
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sec,
|
||||
/obj/item/weapon/shield/riot/tele,
|
||||
/obj/item/weapon/storage/box/emps,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/gun/projectile/automatic/sts35,
|
||||
/obj/item/ammo_magazine/c762/ap,
|
||||
/obj/item/ammo_magazine/c762/ap,
|
||||
/obj/item/weapon/gun/projectile/colt,
|
||||
/obj/item/ammo_magazine/c45m,
|
||||
/obj/item/weapon/material/hatchet/tacknife/combatknife)
|
||||
|
||||
/datum/supply_drop_loot/ballistics
|
||||
name = "Ballistics"
|
||||
/datum/supply_drop_loot/heavy_warfare
|
||||
name = "Heavy Warfare"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/ballistics/New()
|
||||
/datum/supply_drop_loot/armour/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/weapon/gun/projectile/colt/detective,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550,
|
||||
/obj/item/weapon/gun/projectile/automatic/z8)
|
||||
/obj/item/clothing/head/helmet/combat,
|
||||
/obj/item/clothing/suit/armor/combat,
|
||||
/obj/item/clothing/gloves/arm_guard/combat,
|
||||
/obj/item/clothing/shoes/leg_guard/combat,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security/tactical/bandolier,
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches,
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sec,
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine,
|
||||
/obj/item/ammo_magazine/a556m/ap,
|
||||
/obj/item/ammo_magazine/a556m,
|
||||
/obj/item/weapon/shield/energy,
|
||||
/obj/item/weapon/grenade/frag,
|
||||
/obj/item/weapon/grenade/frag,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/grenade/empgrenade,
|
||||
/obj/item/weapon/grenade/empgrenade,
|
||||
/obj/item/weapon/material/hatchet/tacknife/combatknife)
|
||||
|
||||
datum/supply_drop_loot/riot
|
||||
name = "Riot Gear"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/armour/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/suit/armor/riot,
|
||||
/obj/item/clothing/gloves/arm_guard/riot,
|
||||
/obj/item/clothing/shoes/leg_guard/riot,
|
||||
/obj/item/weapon/shield/riot/tele,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/box/handcuffs,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tactical,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump,
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/clothing/accessory/holster,
|
||||
/obj/item/weapon/gun/launcher/grenade,
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sec)
|
||||
|
||||
/datum/supply_drop_loot/seeds
|
||||
name = "Seeds"
|
||||
name = "Plant Growing"
|
||||
container = /obj/structure/closet/crate
|
||||
/datum/supply_drop_loot/seeds/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/seeds/chiliseed,
|
||||
/obj/item/seeds/icepepperseed,
|
||||
/obj/item/seeds/berryseed,
|
||||
/obj/item/seeds/cornseed,
|
||||
/obj/item/seeds/eggplantseed,
|
||||
@@ -79,48 +137,128 @@ var/global/list/datum/supply_drop_loot/supply_drop
|
||||
/obj/item/seeds/wheatseed,
|
||||
/obj/item/seeds/carrotseed,
|
||||
/obj/item/seeds/lemonseed,
|
||||
/obj/item/seeds/limeseed,
|
||||
/obj/item/seeds/orangeseed,
|
||||
/obj/item/seeds/grassseed,
|
||||
/obj/item/seeds/sunflowerseed,
|
||||
/obj/item/seeds/chantermycelium,
|
||||
/obj/item/seeds/potatoseed,
|
||||
/obj/item/seeds/sugarcaneseed)
|
||||
/obj/item/seeds/sugarcaneseed,
|
||||
/obj/item/seeds/plastiseed,
|
||||
/obj/item/seeds/grapeseed,
|
||||
/obj/item/seeds/greengrapeseed,
|
||||
/obj/item/seeds/peanutseed,
|
||||
/obj/item/seeds/cabbageseed,
|
||||
/obj/item/seeds/bananaseed,
|
||||
/obj/item/seeds/poppyseed,
|
||||
/obj/item/seeds/riceseed,
|
||||
/obj/item/seeds/plumpmycelium,
|
||||
/obj/item/seeds/lavenderseed,
|
||||
/obj/item/seeds/whitebeetseed,
|
||||
/obj/item/seeds/sugarcaneseed,
|
||||
/obj/item/seeds/watermelonseed,
|
||||
/obj/item/seeds/cherryseed,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/obj/item/weapon/reagent_containers/glass/bucket,
|
||||
/obj/item/weapon/reagent_containers/glass/bucket)
|
||||
|
||||
/datum/supply_drop_loot/food
|
||||
name = "Food"
|
||||
name = "Emergeny Provisions For Two"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/food/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/milk,
|
||||
/obj/item/weapon/storage/fancy/egg_box,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofu,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofu,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
/obj/item/device/flashlight/flare,
|
||||
/obj/item/device/flashlight/flare)
|
||||
|
||||
/datum/supply_drop_loot/armour
|
||||
name = "Armour"
|
||||
/datum/supply_drop_loot/plushie
|
||||
name = "Cuddly Fun!"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/armour/New()
|
||||
/datum/supply_drop_loot/plushie/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/suit/armor/riot,
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/suit/armor/riot,
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/suit/armor/riot,
|
||||
/obj/item/clothing/suit/storage/vest,
|
||||
/obj/item/clothing/suit/storage/vest,
|
||||
/obj/item/clothing/suit/storage/vest/heavy,
|
||||
/obj/item/clothing/suit/storage/vest/heavy,
|
||||
/obj/item/clothing/suit/armor/laserproof,
|
||||
/obj/item/clothing/suit/armor/bulletproof)
|
||||
/obj/structure/plushie/drone,
|
||||
/obj/structure/plushie/carp,
|
||||
/obj/structure/plushie/beepsky,
|
||||
/obj/item/toy/plushie/nymph,
|
||||
/obj/item/toy/plushie/mouse,
|
||||
/obj/item/toy/plushie/kitten,
|
||||
/obj/item/toy/plushie/lizard,
|
||||
/obj/random/action_figure,
|
||||
/obj/random/action_figure,
|
||||
/obj/random/action_figure,
|
||||
/obj/random/action_figure,
|
||||
/obj/random/action_figure,
|
||||
/obj/random/action_figure,
|
||||
/obj/item/toy/nanotrasenballoon,
|
||||
/obj/item/toy/syndicateballoon,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/katana,
|
||||
/obj/item/toy/katana,
|
||||
/obj/item/weapon/inflatable_duck,
|
||||
/obj/item/weapon/inflatable_duck)
|
||||
|
||||
/datum/supply_drop_loot/christmas
|
||||
name = "Surplus Christmas Supplies"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/christmas/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/toy/xmastree,
|
||||
/obj/item/clothing/head/santa,
|
||||
/obj/item/clothing/head/santa,
|
||||
/obj/item/clothing/head/santa,
|
||||
/obj/item/clothing/head/santa,
|
||||
/obj/item/clothing/head/santa/green,
|
||||
/obj/item/clothing/head/santa/green,
|
||||
/obj/item/clothing/head/santa/green,
|
||||
/obj/item/clothing/head/santa/green,
|
||||
/obj/item/clothing/accessory/scarf/christmas,
|
||||
/obj/item/clothing/accessory/scarf/christmas,
|
||||
/obj/item/clothing/accessory/scarf/christmas,
|
||||
/obj/item/clothing/accessory/scarf/christmas
|
||||
)
|
||||
|
||||
/datum/supply_drop_loot/materials
|
||||
name = "Materials"
|
||||
@@ -138,6 +276,33 @@ var/global/list/datum/supply_drop_loot/supply_drop
|
||||
/obj/item/stack/material/glass/reinforced/fifty,
|
||||
/obj/item/stack/material/plasteel/fifty)
|
||||
|
||||
/datum/supply_drop_loot/materials_advanced
|
||||
name = "Advanced Materials"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/materials_advanced/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/stack/material/steel/fifty,
|
||||
/obj/item/stack/material/glass/fifty,
|
||||
/obj/item/stack/material/wood/fifty,
|
||||
/obj/item/stack/material/plastic/fifty,
|
||||
/obj/item/stack/material/glass/reinforced/fifty,
|
||||
/obj/item/stack/material/plasteel/fifty,
|
||||
/obj/item/stack/material/diamond/fifty,
|
||||
/obj/item/stack/material/phoron/fifty,
|
||||
/obj/item/stack/material/gold/fifty,
|
||||
/obj/item/stack/material/silver/fifty,
|
||||
/obj/item/stack/material/platinum/fifty,
|
||||
/obj/item/stack/material/mhydrogen/fifty,
|
||||
/obj/item/stack/material/tritium/fifty,
|
||||
/obj/item/stack/material/osmium/fifty,)
|
||||
|
||||
/datum/supply_drop_loot/supermatter
|
||||
name = "Supermatter"
|
||||
/datum/supply_drop_loot/supermatter/New()
|
||||
..()
|
||||
contents = list(/obj/machinery/power/supermatter)
|
||||
|
||||
/datum/supply_drop_loot/medical
|
||||
name = "Medical"
|
||||
container = /obj/structure/closet/crate/medical
|
||||
@@ -149,47 +314,10 @@ var/global/list/datum/supply_drop_loot/supply_drop
|
||||
/obj/item/weapon/storage/firstaid/toxin,
|
||||
/obj/item/weapon/storage/firstaid/o2,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/weapon/storage/firstaid/combat,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/stoxin,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,
|
||||
/obj/item/weapon/storage/box/syringes,
|
||||
/obj/item/weapon/storage/box/autoinjectors)
|
||||
|
||||
/datum/supply_drop_loot/power
|
||||
name = "Power"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/power/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/item/stack/material/steel,
|
||||
/obj/item/stack/material/steel,
|
||||
/obj/item/stack/material/steel,
|
||||
/obj/item/stack/material/glass,
|
||||
/obj/item/stack/material/glass,
|
||||
/obj/item/stack/material/wood,
|
||||
/obj/item/stack/material/plastic,
|
||||
/obj/item/stack/material/glass/reinforced,
|
||||
/obj/item/stack/material/plasteel)
|
||||
|
||||
/datum/supply_drop_loot/hydroponics
|
||||
name = "Hydroponics"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/hydroponics/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics,
|
||||
/obj/machinery/portable_atmospherics/hydroponics)
|
||||
|
||||
/datum/supply_drop_loot/power
|
||||
name = "Power"
|
||||
container = /obj/structure/largecrate
|
||||
/datum/supply_drop_loot/power/New()
|
||||
..()
|
||||
contents = list(
|
||||
/obj/machinery/power/port_gen/pacman,
|
||||
/obj/machinery/power/port_gen/pacman/super,
|
||||
/obj/machinery/power/port_gen/pacman/mrs)
|
||||
|
||||
/datum/supply_drop_loot/power/contents()
|
||||
return list(pick(contents))
|
||||
/obj/item/weapon/storage/box/autoinjectors)
|
||||
@@ -112,9 +112,9 @@
|
||||
|
||||
/datum/reagent/tricordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien != IS_DIONA)
|
||||
M.adjustOxyLoss(-6 * removed)
|
||||
M.heal_organ_damage(3 * removed, 3 * removed)
|
||||
M.adjustToxLoss(-3 * removed)
|
||||
M.adjustOxyLoss(-3 * removed)
|
||||
M.heal_organ_damage(1.5 * removed, 1.5 * removed)
|
||||
M.adjustToxLoss(-1.5 * removed)
|
||||
|
||||
/datum/reagent/cryoxadone
|
||||
name = "Cryoxadone"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
description = "A toxic chemical."
|
||||
reagent_state = LIQUID
|
||||
color = "#CF3600"
|
||||
metabolism = REM * 0.05 // 0.01 by default. They last a while and slowly kill you.
|
||||
metabolism = REM * 0.25 // 0.05 by default. Hopefully enough to get some help, or die horribly, whatever floats your boat
|
||||
var/strength = 4 // How much damage it deals per unit
|
||||
|
||||
/datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -479,7 +479,7 @@
|
||||
return
|
||||
|
||||
if(M.dna)
|
||||
if(prob(removed * 0.1))
|
||||
if(prob(removed * 0.1))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
@@ -505,7 +505,7 @@
|
||||
return
|
||||
|
||||
if(M.dna)
|
||||
if(prob(removed * 0.1))
|
||||
if(prob(removed * 0.1))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
|
||||
Reference in New Issue
Block a user