Merge branch 'master' of https://github.com/PolarisSS13/Polaris into item_state

Conflicts:
	code/modules/clothing/clothing.dm
This commit is contained in:
SinTwo
2016-07-19 17:37:14 -04:00
80 changed files with 1402 additions and 410 deletions

View File

@@ -41,7 +41,7 @@
/datum/uplink_item/item/ammo/a556/ap
name = "10rnd Rifle Magazine (5.56mm AP)"
path = /obj/item/ammo_magazine/a556/ap
/*
/datum/uplink_item/item/ammo/a556m
name = "20rnd Rifle Magazine (5.56mm)"
path = /obj/item/ammo_magazine/a556m
@@ -51,7 +51,7 @@
name = "20rnd Rifle Magazine (5.56mm AP)"
path = /obj/item/ammo_magazine/a556m/ap
item_cost = 4
*/
/datum/uplink_item/item/ammo/c762
name = "20rnd Rifle Magazine (7.62mm)"
path = /obj/item/ammo_magazine/c762

View File

@@ -60,11 +60,11 @@
item_cost = 7
path = /obj/item/weapon/gun/projectile/automatic/sts35
/datum/uplink_item/item/visible_weapons/bullpuprifle
/*/datum/uplink_item/item/visible_weapons/bullpuprifle
name = "Assault Rifle (5.56mm)"
item_cost = 7
path = /obj/item/weapon/gun/projectile/automatic/carbine
*/
/datum/uplink_item/item/visible_weapons/combatshotgun
name = "Combat Shotgun"
item_cost = 7

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/absorb_dna
name = "Absorb DNA"
desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger if they were of our kind."
ability_icon_state = "ling_absorb_dna"
genomecost = 0
verbpath = /mob/proc/changeling_absorb_dna

View File

@@ -3,6 +3,7 @@
desc = "We reform one of our arms into a deadly blade."
helptext = "We may retract our armblade by dropping it. It can deflect projectiles."
enhancedtext = "The blade will have armor peneratration."
ability_icon_state = "ling_armblade"
genomecost = 2
verbpath = /mob/proc/changeling_arm_blade

View File

@@ -2,13 +2,13 @@
name = "Organic Space Suit"
desc = "We grow an organic suit to protect ourselves from space exposure."
helptext = "To remove the suit, use the ability again."
ability_icon_state = "ling_space_suit"
genomecost = 1
verbpath = /mob/proc/changeling_spacesuit
/mob/proc/changeling_spacesuit()
set category = "Changeling"
set name = "Organic Space Suit (20)"
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling))
return 1
return 0
@@ -17,6 +17,7 @@
name = "Chitinous Spacearmor"
desc = "We turn our skin into tough chitin to protect us from damage and space exposure."
helptext = "To remove the armor, use the ability again."
ability_icon_state = "ling_armor"
genomecost = 3
verbpath = /mob/proc/changeling_spacearmor

View File

@@ -4,6 +4,7 @@
name = "Augmented Eyesight"
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
helptext = "Grants us night vision and thermal vision. It may be toggled on or off. We will become more vulnerable to flash-based devices while active."
ability_icon_state = "ling_augmented_eyesight"
genomecost = 2
var/active = 0 //Whether or not vision is enhanced
verbpath = /mob/proc/changeling_augmented_eyesight

View File

@@ -5,6 +5,7 @@
helptext = "We can shock someone by grabbing them and using this ability, or using the ability with an empty hand and touching them. \
Shocking someone costs ten chemicals per use."
enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power."
ability_icon_state = "ling_bioelectrogenesis"
genomecost = 2
verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis

View File

@@ -2,6 +2,7 @@
name = "Blind Sting"
desc = "We silently sting a human, completely blinding them for a short time."
enhancedtext = "Duration is extended."
ability_icon_state = " ling_sting_blind"
genomecost = 2
allowduringlesserform = 1
verbpath = /mob/proc/changeling_blind_sting

View File

@@ -3,6 +3,7 @@
desc = "We evolve the ability to shoot our stingers at humans, with some preperation."
helptext = "Allows us to prepare the next sting to have a range of two tiles."
enhancedtext = "The range is extended to five tiles."
ability_icon_state = "ling_sting_boost_range"
genomecost = 1
allowduringlesserform = 1
verbpath = /mob/proc/changeling_boost_range

View File

@@ -4,6 +4,7 @@
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing. Has \
a three minute cooldown between uses."
enhancedtext = "Increases the amount of chemicals injected."
ability_icon_state = "ling_sting_cryo"
genomecost = 1
verbpath = /mob/proc/changeling_cryo_sting

View File

@@ -2,6 +2,7 @@
name = "Deaf Sting"
desc = "We silently sting a human, completely deafening them for a short time."
enhancedtext = "Deafness duration is extended."
ability_icon_state = "ling_sting_deafen"
genomecost = 1
allowduringlesserform = 1
verbpath = /mob/proc/changeling_deaf_sting

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/DeathSting
name = "Death Sting"
desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured."
ability_icon_state = "ling_sting_death"
genomecost = 10
verbpath = /mob/proc/changeling_DEATHsting

View File

@@ -4,6 +4,7 @@
implicate ourselves."
helptext = "The toxin takes effect in about two minutes. The sting has a three minute cooldown between uses."
enhancedtext = "The toxic damage is doubled."
ability_icon_state = "ling_sting_del_toxin"
genomecost = 1
verbpath = /mob/proc/changeling_delayed_toxic_sting

View File

@@ -2,6 +2,7 @@
name = "Digital Camoflauge"
desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras."
helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this."
ability_icon_state = "ling_digital_camo"
genomecost = 1
allowduringlesserform = 1
verbpath = /mob/proc/changeling_digitalcamo

View File

@@ -3,6 +3,7 @@
desc = "We discreetly evolve a finger to be able to send a small electric charge. \
We can open most electrical locks, but it will be obvious when we do so."
helptext = "Use the ability, then touch something that utilizes an electrical locking system, to open it. Each use costs 10 chemicals."
ability_icon_state = "ling_electric_lockpick"
genomecost = 3
verbpath = /mob/proc/changeling_electric_lockpick

View File

@@ -4,6 +4,7 @@
helptext = "Lowers the maximum health of the victim for a few minutes. This sting will also warn them of this. Has a \
five minute coodown between uses."
enhancedtext = "Maximum health is lowered further."
ability_icon_state = "ling_sting_enfeeble"
genomecost = 1
verbpath = /mob/proc/changeling_enfeebling_string

View File

@@ -3,6 +3,7 @@
desc = "We evolve additional sacs of adrenaline throughout our body."
helptext = "We can instantly recover from stuns and reduce the effect of future stuns, but we will suffer toxicity in the long term. Can be used while unconscious."
enhancedtext = "Constant recovery from stuns for thirty seconds."
ability_icon_state = "ling_epinepherine_overdose"
genomecost = 2
verbpath = /mob/proc/changeling_epinephrine_overdose

View File

@@ -2,6 +2,7 @@
name = "Extract DNA"
desc = "We stealthily sting a target and extract the DNA from them."
helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives."
ability_icon_state = "ling_sting_extract"
genomecost = 0
allowduringlesserform = 1
verbpath = /mob/proc/changeling_extract_dna_sting

View File

@@ -17,6 +17,7 @@ var/global/list/changeling_fabricated_clothing = list(
We cannot be relieved of this clothing by others."
helptext = "The disguise we create offers no defensive ability. Each equipment slot that is empty will be filled with fabricated equipment. \
To remove our new fabricated clothing, use this ability again."
ability_icon_state = "ling_fabricate_clothing"
genomecost = 2
verbpath = /mob/proc/changeling_fabricate_clothing

View File

@@ -2,6 +2,7 @@
name = "Regenerative Stasis"
desc = "We become weakened to a death-like state, where we will rise again from death."
helptext = "Can be used before or after death. Duration varies greatly."
ability_icon_state = "ling_regenerative_stasis"
genomecost = 0
allowduringlesserform = 1
verbpath = /mob/proc/changeling_fakedeath

View File

@@ -3,6 +3,7 @@
desc = "Begins a slow rengeration of our form. Does not effect stuns or chemicals."
helptext = "Can be used while unconscious."
enhancedtext = "Healing is twice as effective."
ability_icon_state = "ling_fleshmend"
genomecost = 1
verbpath = /mob/proc/changeling_fleshmend

View File

@@ -2,6 +2,7 @@
name = "Mimic Voice"
desc = "We shape our vocal glands to sound like a desired voice."
helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this"
ability_icon_state = "ling_mimic_voice"
genomecost = 1
verbpath = /mob/proc/changeling_mimicvoice

View File

@@ -3,6 +3,7 @@
desc = "Expels impurifications from our form; curing diseases, removing toxins, chemicals, radiation, and resetting our genetic code completely."
helptext = "Can be used while unconscious. This will also purge any reagents inside ourselves, both harmful and beneficial."
enhancedtext = "We heal more toxins."
ability_icon_state = "ling_anatomic_panacea"
genomecost = 1
verbpath = /mob/proc/changeling_panacea

View File

@@ -4,6 +4,7 @@
helptext = "This will heal a significant amount of brute, fire, oxy, clone, and brain damage, and heal broken bones, internal bleeding, low blood, \
and organ damage. The process is fast, but anyone who sees us do this will likely realize we are not what we seem."
enhancedtext = "Healing increased to heal up to maximum health."
ability_icon_state = "ling_rapid_regeneration"
genomecost = 2
verbpath = /mob/proc/changeling_rapid_regen

View File

@@ -2,6 +2,7 @@
name = "Recursive Enhancement"
desc = "We cause our next ability use to have increased or additional effects."
helptext = "To check the effects for each ability, check the blue text underneath the ability in the evolution menu."
ability_icon_state = "ling_recursive_enhancement"
genomecost = 3
verbpath = /mob/proc/changeling_recursive_enhancement

View File

@@ -3,6 +3,7 @@
desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded biologicals and synthetics."
helptext = "Lights are blown, organics are disoriented, and synthetics act as if they were flashed."
enhancedtext = "Range is doubled."
ability_icon_state = "ling_resonant_shriek"
genomecost = 2
verbpath = /mob/proc/changeling_resonant_shriek
@@ -11,6 +12,7 @@
desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
helptext = "Creates a moderate sized EMP."
enhancedtext = "Range is doubled."
ability_icon_state = "ling_dissonant_shriek"
genomecost = 2
verbpath = /mob/proc/changeling_dissonant_shriek

View File

@@ -3,6 +3,7 @@
desc = "We silently sting a human, completely silencing them for a short time."
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot."
enhancedtext = "Silence duration is extended."
ability_icon_state = "ling_sting_mute"
genomecost = 2
allowduringlesserform = 1
verbpath = /mob/proc/changeling_silence_sting

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/transform
name = "Transform"
desc = "We take on the apperance and voice of one we have absorbed."
ability_icon_state = "ling_transform"
genomecost = 0
verbpath = /mob/proc/changeling_transform

View File

@@ -3,6 +3,7 @@
name = "Transformation Sting"
desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another."
helptext = "Does not provide a warning to others. The victim will transform much like a changeling would."
ability_icon_state = "ling_sting_transform"
genomecost = 3
verbpath = /mob/proc/changeling_transformation_sting

View File

@@ -4,6 +4,7 @@
We are undetectable, so long as we move slowly.(Toggle)"
helptext = "Running, and performing most acts will reveal us. Our chemical regeneration is halted while we are hidden."
enhancedtext = "True invisiblity while cloaked."
ability_icon_state = "ling_camoflage"
genomecost = 3
verbpath = /mob/proc/changeling_visible_camouflage

View File

@@ -20,7 +20,7 @@
var/regen_rate = 50 // 200 seconds to full
var/energy_delta = 0 // How much we're gaining (or perhaps losing) every process().
var/mob/living/wearer = null // Reference to the mob wearing the core.
var/instability_modifer = 1.0 // Multiplier on how much instability is added.
var/instability_modifer = 0.8 // Multiplier on how much instability is added.
var/list/spells = list() // This contains the buttons used to make spells in the user's hand.
var/list/appearances = list( // Assoc list containing possible icon_states that the wiz can change the core to.
"default" = "technomancer_core",
@@ -217,6 +217,7 @@
energy = 13000
max_energy = 13000
regen_rate = 35 //~371 seconds to full, 118 seconds to full at 50 instability (rate of 110)
instability_modifer = 1.2
/obj/item/weapon/technomancer_core/unstable/regenerate()
var/instability_bonus = 0
@@ -237,6 +238,7 @@
max_energy = 7000
regen_rate = 70 //100 seconds to full
slowdown = -1
instability_modifer = 0.9
//Big batteries but slow regen, buying energy spells is highly recommended.
/obj/item/weapon/technomancer_core/bulky
@@ -248,6 +250,7 @@
max_energy = 20000
regen_rate = 25 //800 seconds to full
slowdown = 1
instability_modifer = 1.0
// Using this can result in abilities costing less energy. If you're lucky.
/obj/item/weapon/technomancer_core/recycling
@@ -257,6 +260,7 @@
energy = 12000
max_energy = 12000
regen_rate = 40 //300 seconds to full
instability_modifer = 0.6
/obj/item/weapon/technomancer_core/recycling/pay_energy(amount)
..()
@@ -276,6 +280,7 @@
max_energy = 8000
regen_rate = 35 //228 seconds to full
max_summons = 40
instability_modifer = 1.0
/obj/item/weapon/technomancer_core/summoner/pay_dues()
if(summoned_mobs.len)

View File

@@ -2,14 +2,15 @@
name = "Manipulation Core"
desc = "The default core that you most likely already have. This is here in-case you change your mind after buying \
another core, don't forget to refund the old core. This has a capacity of 10,000 units of energy, and recharges at a \
rate of 50 units."
rate of 50 units. It also reduces incoming instability from functions by 20%."
cost = 100
obj_path = /obj/item/weapon/technomancer_core
/datum/technomancer/equipment/rapid_core
name = "Rapid Core"
desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \
recharges at a rate of 70 units."
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster, and \
reduces incoming instability from functions by 10%."
cost = 150
obj_path = /obj/item/weapon/technomancer_core/rapid
@@ -17,7 +18,8 @@
name = "Bulky Core"
desc = "This core has very large capacitors, however it also has a subpar fractal reactor. The user is recommended to \
purchase one or more energy-generating Functions as well if using this core. Has a capacity of 20,000 units of energy, \
and recharges at a rate of 25 units."
and recharges at a rate of 25 units. The intense weight of the core unfortunately can cause the wear to move slightly slower, \
and the closeness of the capacitors causes a slight increase in incoming instability by 10%."
cost = 150
obj_path = /obj/item/weapon/technomancer_core/bulky
@@ -26,10 +28,28 @@
desc = "This core feeds off unstable energies around the user in addition to a fractal reactor. This means that it performs \
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. Has a capacity of 13,000 \
units of energy, and recharges at a rate of 35 units at no instability, and approximately 110 units when within the \
'yellow zone' of instability."
'yellow zone' of instability. Incoming instability is also amplified by 30%, due to the nature of this core."
cost = 150
obj_path = /obj/item/weapon/technomancer_core/unstable
/datum/technomancer/equipment/recycling
name = "Recycling Core"
desc = "This core is optimized for energy efficency, being able to sometimes recover energy that would have been lost with other \
cores. The focus on efficency also makes instability less of an issue, as incoming instability from functions are reduced by \
40%. The capacitor is also slightly better, holding 12,000 units of energy, however the reactor is slower to recharge, at a rate \
of 40 units."
cost = 150
obj_path = /obj/item/weapon/technomancer_core/recycling
/datum/technomancer/equipment/summoning
name = "Summoning Core"
desc = "A unique type of core, this one sacrifices other characteristics in order to optimize it for the purposes teleporting \
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 30 summons at once, and the energy \
demand for maintaining summons is severely reduced. This comes at the price of capcitors that can only hold 8,000 units of energy, \
a recharging rate of 35 energy, and no shielding from instability."
cost = 150
obj_path = /obj/item/weapon/technomancer_core/summoner
/datum/technomancer/equipment/hypo_belt
name = "Hypo Belt"
desc = "A medical belt designed to carry autoinjectors and other medical equipment. Comes with one of each hypo."

View File

@@ -110,8 +110,9 @@
// Parameters: 1 (amount - how much instability to give)
// Description: Use this to quickly add or subtract instability from the caster of the spell. Owner is set by New().
/obj/item/weapon/spell/proc/adjust_instability(var/amount)
if(!owner)
if(!owner || !core)
return 0
amount = round(amount * core.instability_modifer, 0.1)
owner.adjust_instability(amount)
// Proc: New()

View File

@@ -3,7 +3,7 @@
desc = "Ends most on-going effects caused by another Technomancer function on the target. Useful if you are worried about \
hitting an ally with a deterimental function, if your opponent has similar capabilities to you, or if you're tired of Instability \
plaguing you."
cost = 75
cost = 25
obj_path = /obj/item/weapon/spell/dispel
ability_icon_state = "tech_dispel"
@@ -19,4 +19,5 @@
var/mob/living/target = hit_atom
for(var/obj/item/weapon/inserted_spell/I in target)
I.on_expire(dispelled = 1)
user.adjust_instability(10)
user.adjust_instability(10)
qdel(src)

View File

@@ -1,7 +1,8 @@
/datum/technomancer/spell/mend_burns
name = "Mend Burns"
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
cost = 120
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers. \
Instability is split between the target and technomancer, if seperate."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_burns
ability_icon_state = "tech_mendburns"
@@ -24,4 +25,4 @@
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
qdel(src)
on_expire()

View File

@@ -0,0 +1,31 @@
/datum/technomancer/spell/mend_metal
name = "Mend Metal"
desc = "Restores integrity to external robotic components. Instability is split between the target and technomancer, if seperate."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_metal
ability_icon_state = "tech_mendwounds"
/obj/item/weapon/spell/insert/mend_metal
name = "mend metal"
desc = "A roboticist is now obsolete."
icon_state = "mend_wounds"
cast_methods = CAST_MELEE
aspect = ASPECT_BIOMED
light_color = "#FF5C5C"
inserting = /obj/item/weapon/inserted_spell/mend_metal
/obj/item/weapon/inserted_spell/mend_metal/on_insert()
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++)
if(H)
for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue
O.heal_damage(1, 0, internal = 1, robo_repair = 1)
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
on_expire()

View File

@@ -0,0 +1,31 @@
/datum/technomancer/spell/mend_organs
name = "Mend Organs"
desc = "Heals the target's internal organs, both organic and robotic. Instability is split between the target \
and technomancer, if seperate."
cost = 75
obj_path = /obj/item/weapon/spell/insert/mend_organs
ability_icon_state = "tech_mendwounds"
/obj/item/weapon/spell/insert/mend_organs
name = "mend organs"
desc = "Now nobody will ever need surgery."
icon_state = "mend_wounds"
cast_methods = CAST_MELEE
aspect = ASPECT_BIOMED
light_color = "#FF5C5C"
inserting = /obj/item/weapon/inserted_spell/mend_organs
/obj/item/weapon/inserted_spell/mend_organs/on_insert()
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++)
if(H)
for(var/obj/item/organ/O in H.internal_organs)
if(O.damage > 0)
O.damage = max(O.damage - 0.2, 0)
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
on_expire()

View File

@@ -0,0 +1,32 @@
/datum/technomancer/spell/mend_wires
name = "Mend Wires"
desc = "Binds the internal wiring of robotic limbs and components over time. \
Instability is split between the target and technomancer, if seperate."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_wires
ability_icon_state = "tech_mendwounds"
/obj/item/weapon/spell/insert/mend_wires
name = "mend wires"
desc = "A roboticist is now obsolete."
icon_state = "mend_wounds"
cast_methods = CAST_MELEE
aspect = ASPECT_BIOMED
light_color = "#FF5C5C"
inserting = /obj/item/weapon/inserted_spell/mend_wires
/obj/item/weapon/inserted_spell/mend_wires/on_insert()
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++)
if(H)
for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue
O.heal_damage(0, 1, internal = 1, robo_repair = 1)
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
on_expire()

View File

@@ -1,7 +1,8 @@
/datum/technomancer/spell/mend_wounds
name = "Mend Wounds"
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries."
cost = 120
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
Instability is split between the target and technomancer, if seperate."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_wounds
ability_icon_state = "tech_mendwounds"
@@ -24,4 +25,4 @@
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
qdel(src)
on_expire()

View File

@@ -1,7 +1,8 @@
/datum/technomancer/spell/purify
name = "Purify"
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, and such."
cost = 100
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, and such. \
Instability is split between the target and technomancer, if seperate."
cost = 25
obj_path = /obj/item/weapon/spell/insert/purify
ability_icon_state = "tech_purify"
@@ -30,4 +31,4 @@
H.adjust_instability(0.5)
origin.adjust_instability(0.5)
sleep(10)
qdel(src)
on_expire()

View File

@@ -53,6 +53,7 @@
L.stat = CONSCIOUS //Note that if whatever killed them in the first place wasn't fixed, they're likely to die again.
dead_mob_list -= H
living_mob_list += H
H.timeofdeath = null
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
user << "<span class='notice'>It's alive!</span>"
owner.adjust_instability(100)

View File

@@ -102,6 +102,7 @@
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
minimal_player_age = 3
equip(var/mob/living/carbon/human/H)
if(!H) return 0

View File

@@ -116,6 +116,7 @@
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
alt_titles = list("Pharmacist")
minimal_player_age = 3
equip(var/mob/living/carbon/human/H)
if(!H) return 0

View File

@@ -831,6 +831,8 @@ About the new airlock wires panel:
else
spawn(0)
close(1)
else
..()
else
..()
return

View File

@@ -48,14 +48,15 @@
/obj/item/clothing/gloves,
/obj/item/device/pda,
/obj/item/device/megaphone,
/obj/item/taperoll/engineering,
/obj/item/taperoll,
/obj/item/device/radio/headset,
/obj/item/device/robotanalyzer,
/obj/item/weapon/material/minihoe,
/obj/item/weapon/material/hatchet,
/obj/item/device/analyzer/plant_analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/device/flashlight/maglight
/obj/item/device/flashlight/maglight,
/obj/item/weapon/tape_roll,
)
@@ -98,6 +99,7 @@
/obj/item/stack/medical,
/obj/item/device/radio/headset,
/obj/item/device/pda,
/obj/item/taperoll,
/obj/item/device/megaphone,
/obj/item/device/flashlight/pen,
/obj/item/clothing/mask/surgical,
@@ -141,7 +143,7 @@
/obj/item/weapon/melee,
/obj/item/clothing/accessory/badge,
/obj/item/weapon/gun/projectile/sec,
/obj/item/taperoll/police,
/obj/item/taperoll,
/obj/item/weapon/gun/projectile/colt/detective
)
@@ -175,7 +177,7 @@
/obj/item/device/megaphone,
/obj/item/device/radio/headset,
/obj/item/clothing/gloves,
/obj/item/taperoll/police,
/obj/item/taperoll,
/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/handcuffs,
/obj/item/device/flash,
@@ -245,6 +247,7 @@
/obj/item/weapon/light/tube,
/obj/item/weapon/flame/lighter,
/obj/item/device/megaphone,
/obj/item/taperoll,
/obj/item/weapon/reagent_containers/spray,
/obj/item/weapon/soap
)

View File

@@ -35,13 +35,14 @@
return
/obj/item/weapon/melee/baton/proc/deductcharge(var/chrgdeductamt)
if(bcell)
if(bcell.checked_use(chrgdeductamt))
return 1
else
status = 0
update_icon()
return 0
if(status == 1) //Only deducts charge when it's on
if(bcell)
if(bcell.checked_use(chrgdeductamt))
return 1
else
status = 0
update_icon()
return 0
return null
/obj/item/weapon/melee/baton/update_icon()
@@ -109,6 +110,7 @@
user.Weaken(30)
deductcharge(hitcost)
return
deductcharge(hitcost)
return ..()
/obj/item/weapon/melee/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
@@ -144,8 +146,6 @@
target.stun_effect_act(stun, agony, hit_zone, src)
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
deductcharge(hitcost)
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.forcesay(hit_appends)

View File

@@ -42,12 +42,14 @@
icon = 'icons/obj/items.dmi'
icon_state = "welder"
item_to_spawn()
return pick(/obj/item/weapon/screwdriver,\
/obj/item/weapon/wirecutters,\
/obj/item/weapon/weldingtool,\
/obj/item/weapon/crowbar,\
/obj/item/weapon/wrench,\
/obj/item/device/flashlight)
return pick(/obj/item/weapon/screwdriver,
/obj/item/weapon/wirecutters,
/obj/item/weapon/weldingtool,
/obj/item/weapon/weldingtool/largetank,
/obj/item/weapon/crowbar,
/obj/item/weapon/wrench,
/obj/item/device/flashlight,
/obj/item/device/multitool)
/obj/random/technology_scanner
@@ -56,8 +58,8 @@
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
item_to_spawn()
return pick(prob(5);/obj/item/device/t_scanner,\
prob(2);/obj/item/device/radio,\
return pick(prob(5);/obj/item/device/t_scanner,
prob(2);/obj/item/device/radio,
prob(5);/obj/item/device/analyzer)
@@ -67,10 +69,9 @@
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_to_spawn()
return pick(prob(10);/obj/item/weapon/cell/crap,\
prob(40);/obj/item/weapon/cell,\
prob(40);/obj/item/weapon/cell/high,\
prob(9);/obj/item/weapon/cell/super,\
return pick(prob(50);/obj/item/weapon/cell,
prob(40);/obj/item/weapon/cell/high,
prob(9);/obj/item/weapon/cell/super,
prob(1);/obj/item/weapon/cell/hyper)
@@ -80,9 +81,10 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
item_to_spawn()
return pick(/obj/item/device/assembly/igniter,\
/obj/item/device/assembly/prox_sensor,\
/obj/item/device/assembly/signaler,\
return pick(/obj/item/device/assembly/igniter,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/signaler,
/obj/item/device/assembly/timer,
/obj/item/device/multitool)
@@ -92,9 +94,10 @@
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/toolbox/mechanical,\
prob(2);/obj/item/weapon/storage/toolbox/electrical,\
prob(1);/obj/item/weapon/storage/toolbox/emergency)
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
prob(6);/obj/item/weapon/storage/toolbox/electrical,
prob(2);/obj/item/weapon/storage/toolbox/emergency,
prob(1);/obj/item/weapon/storage/toolbox/syndicate)
/obj/random/tech_supply
@@ -102,41 +105,53 @@
desc = "This is a random piece of technology supplies."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
spawn_nothing_percentage = 50
spawn_nothing_percentage = 25
item_to_spawn()
return pick(prob(3);/obj/random/powercell,\
prob(2);/obj/random/technology_scanner,\
prob(1);/obj/item/weapon/packageWrap,\
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/weapon/extinguisher,\
prob(1);/obj/item/clothing/gloves/fyellow,\
prob(3);/obj/item/stack/cable_coil/random,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/weapon/storage/belt/utility,\
prob(5);/obj/random/tool,\
prob(2);/obj/item/weapon/tape_roll)
return pick(prob(3);/obj/random/powercell,
prob(2);/obj/random/technology_scanner,
prob(1);/obj/item/weapon/packageWrap,
prob(2);/obj/random/bomb_supply,
prob(1);/obj/item/weapon/extinguisher,
prob(1);/obj/item/clothing/gloves/fyellow,
prob(3);/obj/item/stack/cable_coil/random,
prob(2);/obj/random/toolbox,
prob(2);/obj/item/weapon/storage/belt/utility,
prob(1);/obj/item/weapon/storage/belt/utility/full,
prob(5);/obj/random/tool,
prob(2);/obj/item/weapon/tape_roll,
prob(2);/obj/item/taperoll/engineering,
prob(1);/obj/item/taperoll/atmos,
prob(1);/obj/item/device/flashlight/maglight)
/obj/random/medical
name = "Random Medicine"
desc = "This is a random medical item."
icon = 'icons/obj/items.dmi'
icon_state = "brutepack"
spawn_nothing_percentage = 25
spawn_nothing_percentage = 12.5
item_to_spawn()
return pick(prob(4);/obj/item/stack/medical/bruise_pack,\
prob(4);/obj/item/stack/medical/ointment,\
prob(2);/obj/item/stack/medical/advanced/bruise_pack,\
prob(2);/obj/item/stack/medical/advanced/ointment,\
prob(1);/obj/item/stack/medical/splint,\
prob(2);/obj/item/bodybag,\
prob(1);/obj/item/bodybag/cryobag,\
prob(2);/obj/item/weapon/storage/pill_bottle/kelotane,\
prob(2);/obj/item/weapon/storage/pill_bottle/antitox,\
prob(2);/obj/item/weapon/storage/pill_bottle/tramadol,\
prob(2);/obj/item/weapon/reagent_containers/syringe/antitoxin,\
prob(1);/obj/item/weapon/reagent_containers/syringe/antiviral,\
prob(2);/obj/item/weapon/reagent_containers/syringe/inaprovaline,\
prob(1);/obj/item/stack/nanopaste)
return pick(prob(8);/obj/item/stack/medical/bruise_pack,
prob(8);/obj/item/stack/medical/ointment,
prob(4);/obj/item/stack/medical/advanced/bruise_pack,
prob(4);/obj/item/stack/medical/advanced/ointment,
prob(2);/obj/item/stack/medical/splint,
prob(4);/obj/item/bodybag,
prob(2);/obj/item/bodybag/cryobag,
prob(4);/obj/item/weapon/storage/pill_bottle/kelotane,
prob(4);/obj/item/weapon/storage/pill_bottle/dylovene,
prob(4);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
prob(1);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(0.2);/obj/item/weapon/storage/pill_bottle/dermaline,
prob(0.2);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
prob(0.2);/obj/item/weapon/storage/pill_bottle/bicaridine,
prob(4);/obj/item/weapon/reagent_containers/syringe/antitoxin,
prob(2);/obj/item/weapon/reagent_containers/syringe/antiviral,
prob(4);/obj/item/weapon/reagent_containers/syringe/inaprovaline,
prob(4);/obj/item/weapon/reagent_containers/hypospray/autoinjector,
prob(0.1);/obj/item/weapon/reagent_containers/hypospray,
prob(1);/obj/item/device/healthanalyzer,
prob(2);/obj/item/stack/nanopaste)
/obj/random/firstaid
@@ -145,10 +160,10 @@
icon = 'icons/obj/storage.dmi'
icon_state = "firstaid"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/firstaid/regular,\
prob(2);/obj/item/weapon/storage/firstaid/toxin,\
prob(2);/obj/item/weapon/storage/firstaid/o2,\
prob(1);/obj/item/weapon/storage/firstaid/adv,\
return pick(prob(3);/obj/item/weapon/storage/firstaid/regular,
prob(2);/obj/item/weapon/storage/firstaid/toxin,
prob(2);/obj/item/weapon/storage/firstaid/o2,
prob(1);/obj/item/weapon/storage/firstaid/adv,
prob(2);/obj/item/weapon/storage/firstaid/fire)
@@ -159,17 +174,22 @@
icon_state = "purplecomb"
spawn_nothing_percentage = 50
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/pill_bottle/tramadol,\
prob(4);/obj/item/weapon/haircomb,\
prob(2);/obj/item/weapon/storage/pill_bottle/happy,\
prob(2);/obj/item/weapon/storage/pill_bottle/zoom,\
prob(5);/obj/item/weapon/contraband/poster,\
prob(2);/obj/item/weapon/material/butterfly,\
prob(3);/obj/item/weapon/material/butterflyblade,\
prob(3);/obj/item/weapon/material/butterflyhandle,\
prob(3);/obj/item/weapon/material/wirerod,\
prob(1);/obj/item/weapon/material/butterfly/switchblade,\
prob(1);/obj/item/weapon/reagent_containers/syringe/drugs)
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(8);/obj/item/weapon/haircomb,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(10);/obj/item/weapon/contraband/poster,
prob(4);/obj/item/weapon/material/butterfly,
prob(6);/obj/item/weapon/material/butterflyblade,
prob(6);/obj/item/weapon/material/butterflyhandle,
prob(6);/obj/item/weapon/material/wirerod,
prob(2);/obj/item/weapon/material/butterfly/switchblade,
prob(2);/obj/item/weapon/material/knuckledusters,
prob(1);/obj/item/weapon/material/hatchet/tacknife,
prob(0.5);/obj/item/weapon/beartrap,
prob(1);/obj/item/weapon/handcuffs,
prob(1);/obj/item/weapon/legcuffs,
prob(2);/obj/item/weapon/reagent_containers/syringe/drugs)
/obj/random/energy
@@ -178,9 +198,8 @@
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
item_to_spawn()
return pick(prob(2);/obj/item/weapon/gun/energy/laser,\
prob(2);/obj/item/weapon/gun/energy/gun,\
prob(1);/obj/item/weapon/gun/energy/stunrevolver)
return pick(prob(2);/obj/item/weapon/gun/energy/laser,
prob(2);/obj/item/weapon/gun/energy/gun)
/obj/random/projectile
name = "Random Projectile Weapon"
@@ -188,8 +207,8 @@
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(2);/obj/item/weapon/gun/projectile/automatic/wt550,\
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
prob(2);/obj/item/weapon/gun/projectile/automatic/wt550,
prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
/obj/random/handgun
@@ -198,7 +217,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,\
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
prob(1);/obj/item/weapon/gun/projectile/sec/wood)
@@ -208,14 +227,14 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "45-10"
item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,\
prob(2);/obj/item/weapon/storage/box/shotgunammo,\
prob(4);/obj/item/weapon/storage/box/shotgunshells,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(2);/obj/item/ammo_magazine/c45m,\
prob(4);/obj/item/ammo_magazine/c45m/rubber,\
prob(4);/obj/item/ammo_magazine/c45m/flash,\
prob(2);/obj/item/ammo_magazine/mc9mmt,\
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
prob(2);/obj/item/weapon/storage/box/shotgunammo,
prob(4);/obj/item/weapon/storage/box/shotgunshells,
prob(1);/obj/item/weapon/storage/box/stunshells,
prob(2);/obj/item/ammo_magazine/c45m,
prob(4);/obj/item/ammo_magazine/c45m/rubber,
prob(4);/obj/item/ammo_magazine/c45m/flash,
prob(2);/obj/item/ammo_magazine/mc9mmt,
prob(6);/obj/item/ammo_magazine/mc9mmt/rubber)
@@ -225,43 +244,43 @@
icon = 'icons/obj/toy.dmi'
icon_state = "assistant"
item_to_spawn()
return pick(/obj/item/toy/figure/cmo,\
/obj/item/toy/figure/assistant,\
/obj/item/toy/figure/atmos,\
/obj/item/toy/figure/bartender,\
/obj/item/toy/figure/borg,\
/obj/item/toy/figure/gardener,\
/obj/item/toy/figure/captain,\
/obj/item/toy/figure/cargotech,\
/obj/item/toy/figure/ce,\
/obj/item/toy/figure/chaplain,\
/obj/item/toy/figure/chef,\
/obj/item/toy/figure/chemist,\
/obj/item/toy/figure/clown,\
/obj/item/toy/figure/corgi,\
/obj/item/toy/figure/detective,\
/obj/item/toy/figure/dsquad,\
/obj/item/toy/figure/engineer,\
/obj/item/toy/figure/geneticist,\
/obj/item/toy/figure/hop,\
/obj/item/toy/figure/hos,\
/obj/item/toy/figure/qm,\
/obj/item/toy/figure/janitor,\
/obj/item/toy/figure/agent,\
/obj/item/toy/figure/librarian,\
/obj/item/toy/figure/md,\
/obj/item/toy/figure/mime,\
/obj/item/toy/figure/miner,\
/obj/item/toy/figure/ninja,\
/obj/item/toy/figure/wizard,\
/obj/item/toy/figure/rd,\
/obj/item/toy/figure/roboticist,\
/obj/item/toy/figure/scientist,\
/obj/item/toy/figure/syndie,\
/obj/item/toy/figure/secofficer,\
/obj/item/toy/figure/warden,\
/obj/item/toy/figure/psychologist,\
/obj/item/toy/figure/paramedic,\
return pick(/obj/item/toy/figure/cmo,
/obj/item/toy/figure/assistant,
/obj/item/toy/figure/atmos,
/obj/item/toy/figure/bartender,
/obj/item/toy/figure/borg,
/obj/item/toy/figure/gardener,
/obj/item/toy/figure/captain,
/obj/item/toy/figure/cargotech,
/obj/item/toy/figure/ce,
/obj/item/toy/figure/chaplain,
/obj/item/toy/figure/chef,
/obj/item/toy/figure/chemist,
/obj/item/toy/figure/clown,
/obj/item/toy/figure/corgi,
/obj/item/toy/figure/detective,
/obj/item/toy/figure/dsquad,
/obj/item/toy/figure/engineer,
/obj/item/toy/figure/geneticist,
/obj/item/toy/figure/hop,
/obj/item/toy/figure/hos,
/obj/item/toy/figure/qm,
/obj/item/toy/figure/janitor,
/obj/item/toy/figure/agent,
/obj/item/toy/figure/librarian,
/obj/item/toy/figure/md,
/obj/item/toy/figure/mime,
/obj/item/toy/figure/miner,
/obj/item/toy/figure/ninja,
/obj/item/toy/figure/wizard,
/obj/item/toy/figure/rd,
/obj/item/toy/figure/roboticist,
/obj/item/toy/figure/scientist,
/obj/item/toy/figure/syndie,
/obj/item/toy/figure/secofficer,
/obj/item/toy/figure/warden,
/obj/item/toy/figure/psychologist,
/obj/item/toy/figure/paramedic,
/obj/item/toy/figure/ert)
@@ -271,12 +290,12 @@
icon = 'icons/obj/toy.dmi'
icon_state = "nymphplushie"
item_to_spawn()
return pick(/obj/structure/plushie/ian,\
/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,\
return pick(/obj/structure/plushie/ian,
/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)

View File

@@ -1,8 +1,8 @@
/world
hub = "Exadv1.spacestation13"
//hub_password = "kMZy3U5jJHSiBQjr"
hub_password = "SORRYNOPASSWORD"
//hub_password = "kMZy3U5jJHSiBQjr"
name = "Space Station 13"
/* This is for any host that would like their server to appear on the main SS13 hub.
@@ -12,4 +12,4 @@ If not, let us know on the main tgstation IRC channel of irc.rizon.net #tgstatio
hub = "Exadv1.spacestation13"
hub_password = "kMZy3U5jJHSiBQjr"
name = "Space Station 13"
*/
*/

View File

@@ -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"])

View File

@@ -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

View File

@@ -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

View 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"

View File

@@ -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."

View File

@@ -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
..()

View File

@@ -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>")

View File

@@ -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

View File

@@ -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),

View File

@@ -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

View 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"
..()

View 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

View 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"

View 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)

View 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

View 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

View 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.

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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)

View File

@@ -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"

View File

@@ -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)