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

This commit is contained in:
silicons
2021-01-19 04:24:42 -07:00
105 changed files with 978 additions and 411 deletions

View File

@@ -2,6 +2,12 @@
/obj/item/weaponcrafting
icon = 'icons/obj/improvised.dmi'
/obj/item/weaponcrafting/receiver
name = "modular receiver"
desc = "A prototype modular receiver and trigger assembly for a firearm."
icon = 'icons/obj/improvised.dmi'
icon_state = "receiver"
/obj/item/weaponcrafting/stock
name = "rifle stock"
desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood."
@@ -12,41 +18,3 @@
name = "wound thread"
desc = "A long piece of thread with some resemblance to cable coil."
icon_state = "durastring"
////////////////////////////////
// IMPROVISED WEAPON PARTS//
////////////////////////////////
/obj/item/weaponcrafting/improvised_parts
name = "Debug Improvised Gun Part"
desc = "A badly coded gun part. You should report coders if you see this."
icon = 'icons/obj/guns/gun_parts.dmi'
icon_state = "palette"
// RECEIVERS
/obj/item/weaponcrafting/improvised_parts/rifle_receiver
name = "rifle receiver"
desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle." // removed some text implying that the item had more uses than it does
icon_state = "receiver_rifle"
w_class = WEIGHT_CLASS_SMALL
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver
name = "shotgun reciever"
desc = "An improvised receiver to create a break-action breechloaded shotgun." // removed some text implying that the item had more uses than it does
icon_state = "receiver_shotgun"
w_class = WEIGHT_CLASS_SMALL
// MISC
/obj/item/weaponcrafting/improvised_parts/trigger_assembly
name = "firearm trigger assembly"
desc = "A modular trigger assembly with a firing pin, this can be used to make a whole bunch of improvised firearss."
icon_state = "trigger_assembly"
w_class = WEIGHT_CLASS_SMALL
/obj/item/weaponcrafting/improvised_parts/wooden_body
name = "wooden firearm body"
desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart."
icon_state = "wooden_body"

View File

@@ -297,30 +297,15 @@
/datum/crafting_recipe/ishotgun
name = "Improvised Shotgun"
result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised
reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1,
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
/obj/item/weaponcrafting/improvised_parts/wooden_body = 1,
/obj/item/weaponcrafting/stock = 1,
/obj/item/stack/packageWrap = 5)
tools = list(TOOL_SCREWDRIVER)
time = 100
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/irifle // larger and less versatile gun, but a bit easier to make
name = "Improvised Rifle (7.62mm)"
result = /obj/item/gun/ballistic/shotgun/boltaction/improvised
reqs = list(/obj/item/pipe = 2, // above
/obj/item/weaponcrafting/improvised_parts/rifle_receiver = 1,
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
/obj/item/weaponcrafting/improvised_parts/wooden_body = 1,
reqs = list(/obj/item/pipe = 1,
/obj/item/weaponcrafting/receiver = 1,
/obj/item/weaponcrafting/stock = 1,
/obj/item/stack/packageWrap = 5)
tools = list(TOOL_SCREWDRIVER)
time = 100
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
//the Improvised Rifle will not be missed. Rest in Pieces 2019-2021
//////////////////
///AMMO CRAFTING//
@@ -449,38 +434,6 @@
// PARTS CRAFTING //
////////////////////
// RECEIVERS
/datum/crafting_recipe/rifle_receiver
name = "Improvised Rifle Receiver"
result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
reqs = list(/obj/item/stack/sheet/metal = 15)
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 25
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/shotgun_receiver
name = "Improvised Shotgun Receiver"
result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver
reqs = list(/obj/item/stack/sheet/metal = 10) // shotgun does less damage than the rifle and can't 1shot but is more portable
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
// MISC
/datum/crafting_recipe/trigger_assembly
name = "Trigger Assembly"
result = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
reqs = list(/obj/item/stack/sheet/metal = 3,
/obj/item/assembly/igniter = 1)
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
// BOKKEN CRAFTING
/datum/crafting_recipe/bokken_blade

View File

@@ -651,3 +651,120 @@
if(D.severity == DISEASE_SEVERITY_POSITIVE)
continue
D.cure()
/datum/status_effect/mantra // available to wizards and admins alone, currently
id = "Mantra"
examine_text = "<span class='notice'>Their aura is filled with yellow energy!</span>"
alert_type = null
var/damageboost = 10
var/woundboost = 5
var/prev_hair_color
var/powerup
var/powerdown
/datum/status_effect/mantra/on_apply()
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/human/H = owner
playsound(H, 'sound/magic/powerup.ogg', 50, 1)
H.add_filter("mantra_glow", 2, list("type" = "outline", "color" = "#edfa347a", "size" = 2))
prev_hair_color = H.hair_color
H.hair_color = "ffe11e"
H.update_hair()
ADD_TRAIT(H, TRAIT_PUGILIST, "Mantra")
ADD_TRAIT(H, TRAIT_NOSOFTCRIT, "Mantra")
ADD_TRAIT(H, TRAIT_STUNIMMUNE, "Mantra")
ADD_TRAIT(H, TRAIT_PUSHIMMUNE, "Mantra")
ADD_TRAIT(H, TRAIT_NOGUNS, "Mantra")
H.dna.species.punchdamagehigh += damageboost
H.dna.species.punchdamagelow += damageboost
H.dna.species.punchwoundbonus += woundboost
H.physiology.brute_mod *= 0.9 // slightly resilient against lethal damage, but...
H.physiology.burn_mod *= 0.9
H.physiology.stamina_mod *= 0.5 // very resistant to non-lethal damage, because they're already draining stamina every second
to_chat(H, "<span class='notice'>Your inner mantra coalesces around you, granting you incredible strength and durability - but at what cost?</span>")
/datum/status_effect/mantra/tick()
. = ..()
if(owner.health < HEALTH_THRESHOLD_FULLCRIT)
owner.remove_status_effect(STATUS_EFFECT_MANTRA)
return
if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT)
owner.remove_status_effect(STATUS_EFFECT_MANTRA)
return
if(iscarbon(owner))
var/mob/living/carbon/human/C = owner
C.adjustBruteLoss(-1) // slightly resilient against lethal damage
C.adjustFireLoss(-1)
C.adjustStaminaLoss(3) // in testing i personally found that 2/sec was too minimal and 4/sec was too much
/*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura
else*/
/datum/status_effect/mantra/on_remove()
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/human/M = owner
playsound(M, 'sound/magic/powerdown.ogg', 50, 1)
M.remove_filter("mantra_glow")
M.hair_color = prev_hair_color
M.update_hair()
REMOVE_TRAIT(M, TRAIT_PUGILIST, "Mantra")
REMOVE_TRAIT(M, TRAIT_NOSOFTCRIT, "Mantra")
REMOVE_TRAIT(M, TRAIT_STUNIMMUNE, "Mantra")
REMOVE_TRAIT(M, TRAIT_PUSHIMMUNE, "Mantra")
REMOVE_TRAIT(M, TRAIT_NOGUNS, "Mantra")
M.dna.species.punchdamagehigh -= damageboost
M.dna.species.punchdamagelow -= damageboost
M.dna.species.punchwoundbonus -= woundboost
M.physiology.brute_mod /= 0.9
M.physiology.burn_mod /= 0.9
M.physiology.stamina_mod /= 0.5
to_chat(M, "<span class='notice'>Your inner mantra collapses, for now.</span>")
/datum/status_effect/asura // mfw miner gear
id = "Asura"
examine_text = "<span class='notice'>Their aura is filled with red-hot rage!</span>"
alert_type = null
var/damageboost = 10
var/woundboost = 5
/datum/status_effect/asura/on_apply()
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/human/H = owner
playsound(H, 'sound/magic/powerup.ogg', 50, 1)
H.add_filter("asura_glow", 2, list("type" = "outline", "color" = "#fc21217a", "size" = 2))
ADD_TRAIT(H, TRAIT_PUGILIST, "Asura")
H.dna.species.punchdamagehigh += damageboost
H.dna.species.punchdamagelow += damageboost
H.dna.species.punchwoundbonus += woundboost
to_chat(H, "<span class='notice'>Your anger unleashes in a crimson blaze around you and corrosive power fills your muscles.</span>")
/datum/status_effect/asura/tick()
. = ..()
if(owner.health < HEALTH_THRESHOLD_CRIT)
owner.remove_status_effect(STATUS_EFFECT_ASURA)
return
if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT)
owner.remove_status_effect(STATUS_EFFECT_ASURA)
return
if(iscarbon(owner))
var/mob/living/carbon/human/C = owner
C.adjustBruteLoss(1) // drains 1 hp per second. You're gonna need some Senzu Cores.
C.adjustStaminaLoss(-2) // angry man punch a lot
/*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura
else*/
/datum/status_effect/asura/on_remove()
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/human/M = owner
playsound(M, 'sound/magic/powerdown.ogg', 50, 1)
M.remove_filter("asura_glow")
REMOVE_TRAIT(M, TRAIT_PUGILIST, "Asura")
M.dna.species.punchdamagehigh -= damageboost
M.dna.species.punchdamagelow -= damageboost
M.dna.species.punchwoundbonus -= woundboost
to_chat(M, "<span class='notice'>You calm yourself, and your unnatural strength dissipates.</span>")

View File

@@ -74,13 +74,19 @@
/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed; do note that at the point this is called, it is out of the owner's status_effects but owner is not yet null
SHOULD_CALL_PARENT(TRUE)
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
if(blocks_combatmode)
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
if(blocks_sprint)
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
return TRUE
/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself or when a status effect with on_remove_on_mob_delete = FALSE has its mob deleted
owner.clear_alert(id)
LAZYREMOVE(owner.status_effects, src)
if(blocks_combatmode)
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
if(blocks_sprint)
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
owner = null
qdel(src)