Merge remote-tracking branch 'citadel/master' into shield_refactor

This commit is contained in:
kevinz000
2020-03-23 15:34:04 -07:00
237 changed files with 14968 additions and 12068 deletions
@@ -8,7 +8,7 @@
/datum/crafting_recipe/mummy/body
name = "Mummification Bandages (Body)"
result = /obj/item/clothing/under/mummy
result = /obj/item/clothing/under/costume/mummy
reqs = list(/obj/item/stack/sheet/cloth = 5)
/datum/crafting_recipe/lizardhat
@@ -278,7 +278,7 @@
result = /obj/item/banner/command/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/captainparade = 1)
/obj/item/clothing/under/rank/captain/parade = 1)
category = CAT_MISC
/datum/crafting_recipe/engineering_banner
@@ -286,7 +286,7 @@
result = /obj/item/banner/engineering/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/engineer = 1)
/obj/item/clothing/under/rank/engineering/engineer = 1)
category = CAT_MISC
/datum/crafting_recipe/cargo_banner
@@ -294,7 +294,7 @@
result = /obj/item/banner/cargo/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/cargotech = 1)
/obj/item/clothing/under/rank/cargo/tech = 1)
category = CAT_MISC
/datum/crafting_recipe/science_banner
@@ -302,7 +302,7 @@
result = /obj/item/banner/science/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/scientist = 1)
/obj/item/clothing/under/rank/rnd/scientist = 1)
category = CAT_MISC
/datum/crafting_recipe/medical_banner
@@ -310,7 +310,7 @@
result = /obj/item/banner/medical/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/medical = 1)
/obj/item/clothing/under/rank/medical/doctor = 1)
category = CAT_MISC
/datum/crafting_recipe/security_banner
@@ -318,7 +318,7 @@
result = /obj/item/banner/security/mundane
time = 40
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/security = 1)
/obj/item/clothing/under/rank/security/officer = 1)
category = CAT_MISC
/datum/crafting_recipe/bloodsucker/vassalrack
+4 -4
View File
@@ -412,13 +412,13 @@
switch(deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 4))
if(G_MALE)
gender = MALE
set_gender(MALE, TRUE)
if(G_FEMALE)
gender = FEMALE
set_gender(FEMALE, TRUE)
if(G_PLURAL)
gender = PLURAL
set_gender(PLURAL, TRUE)
else
gender = NEUTER
set_gender(NEUTER, TRUE)
/mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0)
..()
@@ -51,45 +51,46 @@
if(copymut && istype(copymut, /datum/mutation/human))
copy_mutation(copymut)
/datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/owner)
if(!owner || !istype(owner) || owner.stat == DEAD || (src in owner.dna.mutations))
/datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/H)
if(!H || !istype(H) || H.stat == DEAD || (src in H.dna.mutations))
return TRUE
if(species_allowed.len && !species_allowed.Find(owner.dna.species.id))
if(species_allowed.len && !species_allowed.Find(H.dna.species.id))
return TRUE
if(health_req && owner.health < health_req)
if(health_req && H.health < health_req)
return TRUE
if(limb_req && !owner.get_bodypart(limb_req))
if(limb_req && !H.get_bodypart(limb_req))
return TRUE
dna = owner.dna
owner = H
dna = H.dna
dna.mutations += src
if(text_gain_indication)
to_chat(owner, text_gain_indication)
to_chat(H, text_gain_indication)
if(visual_indicators.len)
var/list/mut_overlay = list(get_visual_indicator(owner))
if(owner.overlays_standing[layer_used])
mut_overlay = owner.overlays_standing[layer_used]
mut_overlay |= get_visual_indicator(owner)
owner.remove_overlay(layer_used)
owner.overlays_standing[layer_used] = mut_overlay
owner.apply_overlay(layer_used)
var/list/mut_overlay = list(get_visual_indicator())
if(H.overlays_standing[layer_used])
mut_overlay = H.overlays_standing[layer_used]
mut_overlay |= get_visual_indicator()
H.remove_overlay(layer_used)
H.overlays_standing[layer_used] = mut_overlay
H.apply_overlay(layer_used)
grant_spell(owner)
grant_spell()
if(!modified)
addtimer(CALLBACK(src, .proc/modify, 5)) //gonna want children calling ..() to run first
/datum/mutation/human/proc/get_visual_indicator(mob/living/carbon/human/owner)
/datum/mutation/human/proc/get_visual_indicator()
return
/datum/mutation/human/proc/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
/datum/mutation/human/proc/on_attack_hand(atom/target, proximity)
return
/datum/mutation/human/proc/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
/datum/mutation/human/proc/on_ranged_attack(atom/target, mouseparams)
return
/datum/mutation/human/proc/on_move(mob/living/carbon/human/owner, new_loc)
/datum/mutation/human/proc/on_move(atom/new_loc)
return
/datum/mutation/human/proc/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/proc/on_life()
return
/datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner)
@@ -172,7 +173,7 @@
else
qdel(src)
/datum/mutation/human/proc/grant_spell(mob/living/carbon/human/owner)
/datum/mutation/human/proc/grant_spell()
if(!ispath(power) || !owner)
return FALSE
@@ -180,4 +181,4 @@
power.action_background_icon_state = "bg_tech_blue_on"
power.panel = "Genetic"
owner.AddSpell(power)
return TRUE
return TRUE
+1 -1
View File
@@ -111,7 +111,7 @@
energy_coeff = 1
synchronizer_coeff = 1
/datum/mutation/human/void/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/void/on_life()
if(!isturf(owner.loc))
return
if(prob((0.5+((100-dna.stability)/20))) * GET_MUTATION_SYNCHRONIZER(src)) //very rare, but enough to annoy you hopefully. +0.5 probability for every 10 points lost in stability
+2 -2
View File
@@ -36,7 +36,7 @@
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))//-MUTATIONS_LAYER+1
/datum/mutation/human/antenna/get_visual_indicator(mob/living/carbon/human/owner)
/datum/mutation/human/antenna/get_visual_indicator()
return visual_indicators[type][1]
/datum/mutation/human/mindreader
@@ -104,5 +104,5 @@
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))
/datum/mutation/human/mindreader/get_visual_indicator(mob/living/carbon/human/owner)
/datum/mutation/human/mindreader/get_visual_indicator()
return visual_indicators[type][1]
+5 -5
View File
@@ -9,7 +9,7 @@
synchronizer_coeff = 1
power_coeff = 1
/datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/epilepsy/on_life()
if(prob(1 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS)
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
owner.Unconscious(200 * GET_MUTATION_POWER(src))
@@ -57,7 +57,7 @@
synchronizer_coeff = 1
power_coeff = 1
/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/cough/on_life()
if(prob(5 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS)
owner.drop_all_held_items()
owner.emote("cough")
@@ -118,7 +118,7 @@
text_gain_indication = "<span class='danger'>You twitch.</span>"
synchronizer_coeff = 1
/datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/tourettes/on_life()
if(prob(10 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS && !owner.IsStun())
owner.Stun(200)
switch(rand(1, 3))
@@ -212,7 +212,7 @@
synchronizer_coeff = 1
power_coeff = 1
/datum/mutation/human/fire/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/fire/on_life()
if(prob((1+(100-dna.stability)/10)) * GET_MUTATION_SYNCHRONIZER(src))
owner.adjust_fire_stacks(2 * GET_MUTATION_POWER(src))
owner.IgniteMob()
@@ -268,7 +268,7 @@
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
text_lose_indication = "<span class'notice'>The screaming in your mind fades.</span>"
/datum/mutation/human/paranoia/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/paranoia/on_life()
if(prob(5) && owner.stat == CONSCIOUS)
owner.emote("scream")
owner.jitteriness = min(max(0, owner.jitteriness + 5), 30)
+3 -3
View File
@@ -14,13 +14,13 @@
return
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/chameleon/on_life()
owner.alpha = max(0, owner.alpha - 25)
/datum/mutation/human/chameleon/on_move(mob/living/carbon/human/owner)
/datum/mutation/human/chameleon/on_move(atom/new_loc)
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
/datum/mutation/human/chameleon/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
/datum/mutation/human/chameleon/on_attack_hand(atom/target, proximity)
if(proximity) //stops tk from breaking chameleon
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
return
+2 -2
View File
@@ -19,11 +19,11 @@
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner,atom/target, proximity)
/datum/mutation/human/hulk/on_attack_hand(atom/target, proximity)
if(proximity) //no telekinetic hulk attack
return target.attack_hulk(owner)
/datum/mutation/human/hulk/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/hulk/on_life()
if(owner.health < 0)
on_losing(owner)
to_chat(owner, "<span class='danger'>You suddenly feel very weak.</span>")
+1 -1
View File
@@ -7,7 +7,7 @@
instability = 5
difficulty = 8
/datum/mutation/human/radioactive/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/radioactive/on_life()
radiation_pulse(owner, 20)
/datum/mutation/human/radioactive/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
+1 -1
View File
@@ -13,7 +13,7 @@
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER))
/datum/mutation/human/space_adaptation/get_visual_indicator(mob/living/carbon/human/owner)
/datum/mutation/human/space_adaptation/get_visual_indicator()
return visual_indicators[type][1]
/datum/mutation/human/space_adaptation/on_acquiring(mob/living/carbon/human/owner)
+1 -1
View File
@@ -7,7 +7,7 @@
quality = MINOR_NEGATIVE
text_gain_indication = "<span class='danger'>You feel nervous.</span>"
/datum/mutation/human/nervousness/on_life(mob/living/carbon/human/owner)
/datum/mutation/human/nervousness/on_life()
if(prob(10))
owner.stuttering = max(10, owner.stuttering)
+3 -3
View File
@@ -13,8 +13,8 @@
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER))
/datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner)
/datum/mutation/human/telekinesis/get_visual_indicator()
return visual_indicators[type][1]
/datum/mutation/human/telekinesis/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
target.attack_tk(owner)
/datum/mutation/human/telekinesis/on_ranged_attack(atom/target, mouseparams)
target.attack_tk(owner)
+1 -11
View File
@@ -248,14 +248,4 @@
cost = 5
placement_weight = 3
always_place = TRUE
allow_duplicates = TRUE
// Mining Base
/datum/map_template/ruin/lavaland/mining_base //THIS IS THE MINING BASE. DO NOT FUCK WITH THIS UNLESS YOU ARE 100% CERTAIN YOU KNOW WHAT YOU'RE DOING, OR THE MINING BASE WILL DISAPPEAR
name = "Mining Base"
id = "miningbase"
description = "The mining base that Nanotrasen uses for their mining operations."
suffix = "miningbase.dmm"
cost = 0
always_place = TRUE
unpickable = TRUE
allow_duplicates = TRUE
+7
View File
@@ -54,3 +54,10 @@
id = "engine_budget"
suffix = "Box/Engine/budget.dmm"
name = "Box P.A.C.M.A.N"
// Lavaland
// Mining Base
/datum/map_template/ruin/station/lavaland/mining_base
id = "mining_public_01"
suffix = "Lavaland/Mining_Station/Mining_Station_Public_01.dmm"
name = "Public Mining Base"
+13 -6
View File
@@ -48,20 +48,24 @@
status_type = STATUS_EFFECT_REPLACE
alert_type = /obj/screen/alert/status_effect/vanguard
var/datum/progressbar/progbar
var/stamhealed = 0 //How much stamina did we regenerate?
/obj/screen/alert/status_effect/vanguard
name = "Vanguard"
desc = "You're absorbing stuns! Your stamina is greatly increased, but not infinite. 25% of all stuns taken will affect you after this effect ends."
desc = "You're absorbing stuns aswell as quickly regenerating stamina, but be careful: 50% of stamina restored and 25% of stuns absorbed will affect you after this effect ends."
icon_state = "vanguard"
alerttooltipstyle = "clockcult"
/obj/screen/alert/status_effect/vanguard/MouseEntered(location,control,params)
var/mob/living/L = usr
var/datum/status_effect/vanguard_shield/E = attached_effect
if(istype(L)) //this is probably more safety than actually needed
var/vanguard = L.stun_absorption["vanguard"]
desc = initial(desc)
desc += "<br><b>[FLOOR(vanguard["stuns_absorbed"] * 0.1, 1)]</b> seconds of stuns held back.\
[GLOB.ratvar_awakens ? "":"<br><b>[FLOOR(min(vanguard["stuns_absorbed"] * 0.025, 20), 1)]</b> seconds of stun will affect you."]"
<br><b>[E.stamhealed]</b> stamina regenerated.\
[GLOB.ratvar_awakens ? "":"<br><b>[FLOOR(min(vanguard["stuns_absorbed"] * 0.025, 20), 1)]</b> seconds of stun will affect you.\
<br>You will incur <b>[E.stamhealed * 0.5]</b> staminaloss."]"
..()
/datum/status_effect/vanguard_shield/Destroy()
@@ -72,9 +76,8 @@
/datum/status_effect/vanguard_shield/on_apply()
owner.log_message("gained Vanguard stun immunity", LOG_ATTACK)
owner.add_stun_absorption("vanguard", INFINITY, 1, "'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!", " radiating with a soft yellow light!")
owner.visible_message("<span class='warning'>[owner] begins to faintly glow!</span>", "<span class='brass'>You will absorb all stuns for the next twenty seconds.</span>")
owner.visible_message("<span class='warning'>[owner] begins to faintly glow!</span>", "<span class='brass'>You will absorb all stuns aswell as quickly regenerate stamina for the next twenty seconds .</span>")
owner.SetAllImmobility(0, FALSE)
owner.setStaminaLoss(0, FALSE)
progbar = new(owner, duration, owner)
progbar.bar.color = list("#FAE48C", "#FAE48C", "#FAE48C", rgb(0,0,0))
progbar.update(duration - world.time)
@@ -82,6 +85,9 @@
/datum/status_effect/vanguard_shield/tick()
progbar.update(duration - world.time)
var/oldstamloss = owner.getStaminaLoss()
owner.adjustStaminaLoss(-6) //up to 30 stam / second for now, lets see...
stamhealed += oldstamloss - owner.getStaminaLoss()
/datum/status_effect/vanguard_shield/on_remove()
. = ..()
@@ -96,8 +102,9 @@
for(var/i in owner.stun_absorption)
if(owner.stun_absorption[i]["end_time"] > world.time && owner.stun_absorption[i]["priority"] > vanguard["priority"])
otheractiveabsorptions = TRUE
if(!GLOB.ratvar_awakens && stuns_blocked && !otheractiveabsorptions)
if(!GLOB.ratvar_awakens && (stuns_blocked && !otheractiveabsorptions || stamhealed))
owner.DefaultCombatKnockdown(stuns_blocked)
owner.adjustStaminaLoss(stamhealed * 0.5)
message_to_owner = "<span class='boldwarning'>The weight of the Vanguard's protection crashes down upon you!</span>"
if(stuns_blocked >= 300)
message_to_owner += "\n<span class='userdanger'>You faint from the exertion!</span>"
@@ -106,7 +113,7 @@
else
stuns_blocked = 0 //so logging is correct in cases where there were stuns blocked but we didn't stun for other reasons
owner.visible_message("<span class='warning'>[owner]'s glowing aura fades!</span>", message_to_owner)
owner.log_message("lost Vanguard stun immunity[stuns_blocked ? "and was stunned for [stuns_blocked]":""]", LOG_ATTACK)
owner.log_message("lost Vanguard stun immunity[stuns_blocked ? "and was stunned for [stuns_blocked]":""] [stamhealed ? ", incurring [stamhealed * 0.25] staminaloss" : ""]", LOG_ATTACK)
/datum/status_effect/inathneqs_endowment
id = "inathneqs_endowment"