Merge remote-tracking branch 'origin/master' into luciee

This commit is contained in:
Katherine Kiefer
2022-04-17 20:56:59 +10:00
32 changed files with 1412 additions and 863 deletions

View File

@@ -58,9 +58,8 @@
/turf/open/floor/wood,
/area/ruin/powered)
"aF" = (
/obj/item/reagent_containers/glass/bottle/potass_iodide{
/obj/item/reagent_containers/glass/bottle/radaway{
desc = "War. War never changes. But this can take away your radiation problems!";
name = "rad-away"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)

File diff suppressed because it is too large Load Diff

View File

@@ -362,7 +362,7 @@
/obj/effect/decal/cleanable/cobweb,
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall,
/area/janitor)
/area/maintenance/starboard)
"aaW" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
@@ -888,7 +888,7 @@
"acd" = (
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall,
/area/janitor)
/area/maintenance/starboard)
"ace" = (
/obj/machinery/vending/sustenance{
desc = "A vending machine normally reserved for work camps.";
@@ -25062,10 +25062,10 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/mob/living/simple_animal/bot/floorbot,
/obj/structure/cable{
icon_state = "4-8"
},
/mob/living/simple_animal/bot/floorbot,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"bbA" = (
@@ -26518,13 +26518,13 @@
dir = 8;
pixel_x = 26
},
/mob/living/simple_animal/bot/cleanbot,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "1-4"
},
/mob/living/simple_animal/bot/cleanbot,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"bfa" = (
@@ -82818,7 +82818,6 @@
/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{
dir = 8
},
/mob/living/simple_animal/bot/secbot/pingsky,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
},
@@ -82828,6 +82827,7 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/mob/living/simple_animal/bot/secbot/pingsky,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"wMY" = (
@@ -121459,7 +121459,7 @@ jqY
alq
hUl
wqc
bcd
alq
xLF
xLF
xLF
@@ -121716,7 +121716,7 @@ bvx
alq
hUl
alq
bcd
alq
dvg
dvg
wPs
@@ -121973,7 +121973,7 @@ bvy
alq
pHp
vbc
bcd
alq
dvg
dvg
dvg
@@ -122230,7 +122230,7 @@ nFy
sZb
joF
apc
bcd
alq
dvg
dvg
dvg
@@ -122487,7 +122487,7 @@ ukn
jka
xAq
jNW
bcd
alq
dvg
dvg
dvg
@@ -122744,7 +122744,7 @@ acd
acd
acd
acd
bcd
alq
dvg
dvg
dvg

View File

@@ -89,7 +89,7 @@
span_userdanger("[A] slams you into the ground!"))
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) //using hit_kick because for some stupid reason slam.ogg is delayed
A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
D.apply_damage(15, STAMINA)
D.apply_damage(A.dna.species.punchdamagehigh+5, STAMINA) //15 damage
D.Paralyze(30)
D.Knockdown(80)
log_combat(A, D, "slammed (CQC)")
@@ -110,7 +110,7 @@
span_userdanger("[A] kicks you back!"))
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
step(D, A.dir)
D.apply_damage(15, STAMINA)
D.apply_damage(A.dna.species.punchdamagehigh+5, STAMINA) //15 damage
log_combat(A, D, "kicked (CQC)")
D.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
addtimer(CALLBACK(D, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
@@ -119,8 +119,9 @@
D.visible_message(span_warning("[A] firmly kicks [D] in the abdomen!"), \
span_userdanger("[A] kicks you in the abdomen!"))
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
var/kickdamage = A.dna.species.punchdamagehigh * 2 + 20 //40 damage
D.Paralyze(5)
D.apply_damage(40, STAMINA)
D.apply_damage(kickdamage, STAMINA)
D.silent += 2
return TRUE
@@ -145,7 +146,7 @@
D.visible_message(span_warning("[A] dislocates [D]'s [hit_limb]!"), \
"<span class = 'userdanger'>[A] dislocates your [hit_limb]!</span>")
D.drop_all_held_items()
D.apply_damage(50, STAMINA, selected_zone)
D.apply_damage(50, STAMINA, selected_zone) //not based on species damage since this should just disable the limb outright anyways, which caps at 50 damage
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
return TRUE
@@ -182,13 +183,14 @@
return FALSE
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
if(D.mobility_flags & MOBILITY_STAND)
var/consecutivedamage = A.dna.species.punchdamagehigh * 1.5 + 10 //25 damage
log_combat(A, D, "consecutive CQC'd (CQC)")
D.visible_message(span_warning("[A] delivers a firm blow to [D]'s head, knocking them down!"), \
span_userdanger("[A] delivers a firm blow to your head, causing you to fall over!"))
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
D.Paralyze(50)
D.Knockdown(100)
D.apply_damage(25, STAMINA)
D.apply_damage(consecutivedamage, STAMINA)
return TRUE
///CQC grab, stuns for 1.5 seconds on use
@@ -215,7 +217,7 @@
log_combat(A, D, "attacked (CQC)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/picked_hit_type = pick("CQC'd", "Big Bossed")
var/bonus_damage = 15
var/bonus_damage = A.dna.species.punchdamagehigh + 5 //15 damage
D.apply_damage(bonus_damage, STAMINA)
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
D.visible_message(span_danger("[A] [picked_hit_type] [D]!"), \
@@ -251,7 +253,7 @@
if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I)
D.Jitter(2)
D.apply_damage(5, STAMINA)
D.apply_damage(A.dna.species.punchdamagehigh/2, STAMINA) //5 damage
else
D.visible_message(span_danger("[A] grabs at [D]'s arm, but misses!"), \
span_userdanger("[A] grabs at your arm, but misses!"))

View File

@@ -38,10 +38,11 @@
var/selected_zone = A.zone_selected
var/obj/item/bodypart/affecting = D.get_bodypart(check_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee", armour_penetration = 50)
var/slam_staminadamage = A.dna.species.punchdamagehigh * 1.5 + 10 //25 damage
A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
playsound(D, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
D.apply_damage(25, STAMINA, selected_zone, armor_block)
D.apply_damage(15, A.dna.species.attack_type, selected_zone, armor_block)
D.apply_damage(slam_staminadamage, STAMINA, selected_zone, armor_block)
D.apply_damage(A.dna.species.punchdamagehigh + 5, A.dna.species.attack_type, selected_zone, armor_block) //15 damage
D.visible_message(span_danger("[A] slams into [D], knocking them off balance!"), \
span_userdanger("[A] slams into you, knocking you off balance!"))
D.add_movespeed_modifier("tail slap", update=TRUE, priority=101, multiplicative_slowdown=0.9)
@@ -70,9 +71,10 @@
var/selected_zone = A.zone_selected
var/obj/item/bodypart/affecting = D.get_bodypart(check_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee", armour_penetration = 50)
var/slap_staminadamage = A.dna.species.punchdamagehigh * 1.5 + 10 //25 damage
A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
D.apply_damage(25, STAMINA, selected_zone, armor_block)
D.apply_damage(10, A.dna.species.attack_type, selected_zone, armor_block)
D.apply_damage(slap_staminadamage, STAMINA, selected_zone, armor_block)
D.apply_damage(A.dna.species.punchdamagehigh, A.dna.species.attack_type, selected_zone, armor_block) //10 damage
D.Knockdown(5 SECONDS)
D.Paralyze(2 SECONDS)
D.visible_message(span_danger("[A] tail slaps [D]!"), \
@@ -89,9 +91,10 @@
return harm_act(A,D)
var/obj/item/bodypart/affecting = D.get_bodypart(check_zone(BODY_ZONE_HEAD))
var/armor_block = D.run_armor_check(affecting, "melee", 30)
var/chomp_damage = A.dna.species.punchdamagehigh * 2 + 10 //30 damage
A.do_attack_animation(D, ATTACK_EFFECT_BITE)
playsound(D, 'sound/weapons/bite.ogg', 50, TRUE, -1)
D.apply_damage(30, A.dna.species.attack_type, BODY_ZONE_HEAD, armor_block, sharpness = SHARP_EDGED)
D.apply_damage(chomp_damage, A.dna.species.attack_type, BODY_ZONE_HEAD, armor_block, sharpness = SHARP_EDGED)
// D.bleed_rate += 10
D.visible_message(span_danger("[A] takes a large bite out of [D]'s neck!"), \
span_userdanger("[A] takes a large bite out of your neck!"))
@@ -114,10 +117,11 @@
return
var/obj/item/bodypart/affecting = D.get_bodypart(check_zone(BODY_ZONE_HEAD))
var/armor_block = D.run_armor_check(affecting, "melee")
var/disarm_damage = A.dna.species.punchdamagehigh / 2 //5 damage
A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
playsound(D, 'sound/weapons/genhit1.ogg', 50, TRUE, -1)
D.apply_damage(5, STAMINA, BODY_ZONE_HEAD, armor_block)
D.apply_damage(5, A.dna.species.attack_type, BODY_ZONE_HEAD, armor_block)
D.apply_damage(disarm_damage, STAMINA, BODY_ZONE_HEAD, armor_block)
D.apply_damage(disarm_damage, A.dna.species.attack_type, BODY_ZONE_HEAD, armor_block)
D.blur_eyes(4)
if(!istype(D.head, /obj/item/clothing/head/helmet))
ADD_TRAIT(D, TRAIT_POOR_AIM, "martial")
@@ -143,7 +147,7 @@
var/armor_block = D.run_armor_check(affecting, "melee", 10)
A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
playsound(D, 'sound/weapons/slash.ogg', 50, TRUE, -1)
D.apply_damage(12, A.dna.species.attack_type, selected_zone, armor_block) //need wounds for sharpness to actually matter here
D.apply_damage(A.dna.species.punchdamagehigh + 2, A.dna.species.attack_type, selected_zone, armor_block, sharpness = SHARP_EDGED) //+2 unarmed damage and sharp
var/atk_verb = pick("rends", "claws", "slices", "tears at")
D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
span_userdanger("[A] [atk_verb] you!"))

View File

@@ -12,192 +12,195 @@
allow_temp_override = TRUE
var/old_grab_state = null
/datum/martial_art/hunterfu/proc/check_streak(mob/living/user, mob/living/target)
/datum/martial_art/hunterfu/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(findtext(streak, BODYSLAM_COMBO))
streak = ""
body_slam(user, target)
body_slam(A, D)
return TRUE
if(findtext(streak, STAKESTAB_COMBO))
streak = ""
stake_stab(user, target)
stake_stab(A, D)
return TRUE
if(findtext(streak, NECKSNAP_COMBO))
streak = ""
neck_snap(user, target)
neck_snap(A, D)
return TRUE
if(findtext(streak, HOLYKICK_COMBO))
streak = ""
holy_kick(user, target)
holy_kick(A, D)
return TRUE
return FALSE
/datum/martial_art/hunterfu/proc/body_slam(mob/living/user, mob/living/target)
if(target.mobility_flags & MOBILITY_STAND)
target.visible_message(
span_danger("[user] slams both them and [target] into the ground!"),
span_userdanger("You're slammed into the ground by [user]!"),
/datum/martial_art/hunterfu/proc/body_slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.mobility_flags & MOBILITY_STAND)
D.visible_message(
span_danger("[A] slams both them and [D] into the ground!"),
span_userdanger("You're slammed into the ground by [A]!"),
span_hear("You hear a sickening sound of flesh hitting flesh!"),
)
to_chat(user, span_danger("You slam [target] into the ground!"))
playsound(get_turf(user), 'sound/weapons/slam.ogg', 50, TRUE, -1)
log_combat(user, target, "bodyslammed (Hunter-Fu)")
if(!target.mind)
target.Paralyze(40)
user.Paralyze(25)
to_chat(A, span_danger("You slam [D] into the ground!"))
playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, TRUE, -1)
log_combat(A, D, "bodyslammed (Hunter-Fu)")
if(!D.mind)
D.Paralyze(40)
A.Paralyze(25)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(target, span_cultlarge("Our DNA shakes as we are body slammed!"))
target.apply_damage(15, BRUTE)
target.Paralyze(60)
user.Paralyze(25)
if(D.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(D, span_cultlarge("Our DNA shakes as we are body slammed!"))
D.apply_damage(A.dna.species.punchdamagehigh + 5, BRUTE) //15 damage
D.Paralyze(60)
A.Paralyze(25)
return TRUE
else
target.Paralyze(40)
user.Paralyze(25)
D.Paralyze(40)
A.Paralyze(25)
else
harm_act(user, target)
harm_act(A, D)
return TRUE
/datum/martial_art/hunterfu/proc/stake_stab(mob/living/user, mob/living/target)
target.visible_message(
span_danger("[user] stabs [target] in the heart!"),
span_userdanger("You're staked in the heart by [user]!"),
/datum/martial_art/hunterfu/proc/stake_stab(mob/living/carbon/human/A, mob/living/carbon/human/D)
D.visible_message(
span_danger("[A] stabs [D] in the heart!"),
span_userdanger("You're staked in the heart by [A]!"),
span_hear("You hear a sickening sound of flesh hitting flesh!"),
)
to_chat(user, span_danger("You stab [target] viciously!"))
playsound(get_turf(user), 'sound/weapons/bladeslice.ogg', 50, TRUE, -1)
log_combat(user, target, "stakestabbed (Hunter-Fu)")
if(!target.mind)
target.apply_damage(15, BRUTE, BODY_ZONE_CHEST)
to_chat(A, span_danger("You stab [D] viciously!"))
playsound(get_turf(A), 'sound/weapons/bladeslice.ogg', 50, TRUE, -1)
log_combat(A, D, "stakestabbed (Hunter-Fu)")
var/stake_damagehigh = A.dna.species.punchdamagehigh * 1.5 + 10 //25 damage
if(!D.mind)
D.apply_damage(A.dna.species.punchdamagehigh + 5, BRUTE, BODY_ZONE_CHEST) //15 damage
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(target, span_danger("Their arm tears through our monstrous form!"))
target.apply_damage(25, BRUTE, BODY_ZONE_CHEST)
if(D.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(D, span_danger("Their arm tears through our monstrous form!"))
D.apply_damage(stake_damagehigh, BRUTE, BODY_ZONE_CHEST)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(target, span_cultlarge("Their arm stakes straight into our undead flesh!"))
target.apply_damage(20, BURN)
target.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
if(D.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(D, span_cultlarge("Their arm stakes straight into our undead flesh!"))
D.apply_damage(A.dna.species.punchdamagehigh + 10, BURN) //20 damage
D.apply_damage(A.dna.species.punchdamagehigh, BRUTE, BODY_ZONE_CHEST) //10 damage
return TRUE
else
target.apply_damage(15, BRUTE, BODY_ZONE_CHEST)
D.apply_damage(A.dna.species.punchdamagehigh + 5, BRUTE, BODY_ZONE_CHEST) //15 damage
return TRUE
/datum/martial_art/hunterfu/proc/neck_snap(mob/living/user, mob/living/target)
if(!target.stat)
target.visible_message(
span_danger("[user] snapped [target]'s neck!"),
span_userdanger("Your neck is snapped by [user]!"),
/datum/martial_art/hunterfu/proc/neck_snap(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat)
D.visible_message(
span_danger("[A] snapped [D]'s neck!"),
span_userdanger("Your neck is snapped by [A]!"),
span_hear("You hear a snap!"),
)
to_chat(user, span_danger("You snap [target]'s neck!"))
playsound(get_turf(user), 'sound/effects/snap.ogg', 50, TRUE, -1)
log_combat(user, target, "neck snapped (Hunter-Fu)")
if(!target.mind)
target.SetSleeping(30)
playsound(get_turf(user), 'sound/effects/snap.ogg', 50, TRUE, -1)
log_combat(user, target, "neck snapped (Hunter-Fu)")
to_chat(A, span_danger("You snap [D]'s neck!"))
playsound(get_turf(A), 'sound/effects/snap.ogg', 50, TRUE, -1)
log_combat(A, D, "neck snapped (Hunter-Fu)")
if(!D.mind)
D.SetSleeping(30)
playsound(get_turf(A), 'sound/effects/snap.ogg', 50, TRUE, -1)
log_combat(A, D, "neck snapped (Hunter-Fu)")
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(target, span_warning("Our monstrous form protects us from being put to sleep!"))
if(D.mind.has_antag_datum(/datum/antagonist/changeling))
to_chat(D, span_warning("Our monstrous form protects us from being put to sleep!"))
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/heretic))
to_chat(target, span_cultlarge("The power of the Codex Cicatrix flares as we are swiftly put to sleep!"))
target.apply_damage(15, BRUTE, BODY_ZONE_HEAD)
target.SetSleeping(40)
if(D.mind.has_antag_datum(/datum/antagonist/heretic))
to_chat(D, span_cultlarge("The power of the Codex Cicatrix flares as we are swiftly put to sleep!"))
D.apply_damage(A.dna.species.punchdamagehigh + 5, BRUTE, BODY_ZONE_HEAD) //15 damage
D.SetSleeping(40)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(target, span_warning("Our undead form protects us from being put to sleep!"))
if(D.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(D, span_warning("Our undead form protects us from being put to sleep!"))
return TRUE
else
target.SetSleeping(30)
D.SetSleeping(30)
return TRUE
/datum/martial_art/hunterfu/proc/holy_kick(mob/living/user, mob/living/target)
target.visible_message(
span_warning("[user] kicks [target], splashing holy water in every direction!"),
span_userdanger("You're kicked by [user], with holy water dripping down on you!"),
/datum/martial_art/hunterfu/proc/holy_kick(mob/living/carbon/human/A, mob/living/carbon/human/D)
D.visible_message(
span_warning("[A] kicks [D], splashing holy water in every direction!"),
span_userdanger("You're kicked by [A], with holy water dripping down on you!"),
span_hear("You hear a sickening sound of flesh hitting flesh!"),
)
to_chat(user, span_danger("You holy kick [target]!"))
playsound(get_turf(user), 'sound/weapons/slash.ogg', 50, TRUE, -1)
log_combat(user, target, "holy kicked (Hunter-Fu)")
if(!target.mind)
target.apply_damage(60, STAMINA)
target.Paralyze(20)
to_chat(A, span_danger("You holy kick [D]!"))
playsound(get_turf(A), 'sound/weapons/slash.ogg', 50, TRUE, -1)
log_combat(A, D, "holy kicked (Hunter-Fu)")
var/holykick_staminadamage = A.dna.species.punchdamagehigh * 3 + 30 //60 damage (holy shit)
var/holykick_hereticburn = A.dna.species.punchdamagehigh * 1.5 + 10 //25 damage
if(!D.mind)
D.apply_damage(holykick_staminadamage, STAMINA)
D.Paralyze(20)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/heretic))
to_chat(target, span_cultlarge("The holy water burns our flesh!"))
target.apply_damage(25, BURN)
target.apply_damage(60, STAMINA)
target.Paralyze(20)
if(D.mind.has_antag_datum(/datum/antagonist/heretic))
to_chat(D, span_cultlarge("The holy water burns our flesh!"))
D.apply_damage(holykick_hereticburn, BURN)
D.apply_damage(holykick_staminadamage, STAMINA)
D.Paralyze(20)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(target, span_warning("This just seems like regular water..."))
if(D.mind.has_antag_datum(/datum/antagonist/bloodsucker))
to_chat(D, span_warning("This just seems like regular water..."))
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/cult))
for(var/datum/action/innate/cult/blood_magic/BD in target.actions)
to_chat(target, span_cultlarge("Our blood rites falter as the holy water drips onto our body!"))
if(D.mind.has_antag_datum(/datum/antagonist/cult))
for(var/datum/action/innate/cult/blood_magic/BD in D.actions)
to_chat(D, span_cultlarge("Our blood rites falter as the holy water drips onto our body!"))
for(var/datum/action/innate/cult/blood_spell/BS in BD.spells)
qdel(BS)
target.apply_damage(60, STAMINA)
target.Paralyze(20)
D.apply_damage(holykick_staminadamage, STAMINA)
D.Paralyze(20)
return TRUE
if(target.mind.has_antag_datum(/datum/antagonist/wizard) || (/datum/antagonist/wizard/apprentice))
to_chat(target, span_danger("The holy water seems to be muting us somehow!"))
var/mob/living/carbon/human/human_target = target // I guess monkey wizards aren't getting affected.
if(human_target.silent <= 10)
human_target.silent = clamp(human_target.silent + 10, 0, 10)
target.apply_damage(60, STAMINA)
target.Paralyze(20)
if(D.mind.has_antag_datum(/datum/antagonist/wizard) || (/datum/antagonist/wizard/apprentice))
to_chat(D, span_danger("The holy water seems to be muting us somehow!"))
if(D.silent <= 10)
D.silent = clamp(D.silent + 10, 0, 10)
D.apply_damage(holykick_staminadamage, STAMINA)
D.Paralyze(20)
return TRUE
else
target.apply_damage(60, STAMINA)
target.Paralyze(20)
D.apply_damage(holykick_staminadamage, STAMINA)
D.Paralyze(20)
return TRUE
/// Intents
/datum/martial_art/hunterfu/disarm_act(mob/living/user, mob/living/target)
add_to_streak("D", target)
if(check_streak(user, target))
/datum/martial_art/hunterfu/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("D", D)
if(check_streak(A, D))
return TRUE
log_combat(user, target, "disarmed (Hunter-Fu)")
log_combat(A, D, "disarmed (Hunter-Fu)")
return ..()
/datum/martial_art/hunterfu/harm_act(mob/living/user, mob/living/target)
add_to_streak("H", target)
if(check_streak(user, target))
/datum/martial_art/hunterfu/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H", D)
if(check_streak(A, D))
return TRUE
var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(user.zone_selected))
user.do_attack_animation(target, ATTACK_EFFECT_PUNCH)
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("kick", "chop", "hit", "slam")
target.visible_message(
span_danger("[user] [atk_verb]s [target]!"),
span_userdanger("[user] [atk_verb]s you!"),
var/harm_damage = A.dna.species.punchdamagehigh + rand(0,5) //10-15 damage
D.visible_message(
span_danger("[A] [atk_verb]s [D]!"),
span_userdanger("[A] [atk_verb]s you!"),
)
to_chat(user, span_danger("You [atk_verb] [target]!"))
target.apply_damage(rand(10,15), BRUTE, affecting, wound_bonus = CANT_WOUND)
playsound(get_turf(target), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
log_combat(user, target, "harmed (Hunter-Fu)")
to_chat(A, span_danger("You [atk_verb] [D]!"))
D.apply_damage(harm_damage, BRUTE, affecting, wound_bonus = CANT_WOUND)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
log_combat(A, D, "harmed (Hunter-Fu)")
return TRUE
/datum/martial_art/hunterfu/grab_act(mob/living/user, mob/living/target)
if(user!=target && can_use(user))
add_to_streak("G", target)
if(check_streak(user, target)) // If a combo is made no grab upgrade is done
/datum/martial_art/hunterfu/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(A!=D && can_use(A))
add_to_streak("G", D)
if(check_streak(A, D)) // If a combo is made no grab upgrade is done
return TRUE
old_grab_state = user.grab_state
target.grabbedby(user, 1)
old_grab_state = A.grab_state
D.grabbedby(A, 1)
if(old_grab_state == GRAB_PASSIVE)
target.drop_all_held_items()
user.grab_state = GRAB_AGGRESSIVE // Instant agressive grab
log_combat(user, target, "grabbed (Hunter-Fu)")
target.visible_message(
span_warning("[user] violently grabs [target]!"),
span_userdanger("You're grabbed violently by [user]!"),
D.drop_all_held_items()
A.grab_state = GRAB_AGGRESSIVE // Instant agressive grab
log_combat(A, D, "grabbed (Hunter-Fu)")
D.visible_message(
span_warning("[A] violently grabs [D]!"),
span_userdanger("You're grabbed violently by [A]!"),
span_hear("You hear sounds of aggressive fondling!"),
)
to_chat(user, span_danger("You violently grab [target]!"))
to_chat(A, span_danger("You violently grab [D]!"))
return TRUE
..()

View File

@@ -92,7 +92,7 @@
D.visible_message(span_warning("[A] leg sweeps [D]!"), \
span_userdanger("[A] leg sweeps you!"))
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
D.apply_damage(A.dna.species.punchdamagehigh / 2, BRUTE) //5 damage
D.Paralyze(40)
log_combat(A, D, "leg sweeped")
return 1
@@ -111,7 +111,7 @@
D.visible_message(span_warning("[A] karate chops [D]'s neck!"), \
span_userdanger("[A] karate chops your neck, rendering you unable to speak!"))
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.apply_damage(5, A.dna.species.attack_type)
D.apply_damage(A.dna.species.punchdamagehigh / 2, A.dna.species.attack_type) //5 damage
if(D.silent <= 10)
D.silent = clamp(D.silent + 10, 0, 10)
log_combat(A, D, "neck chopped")
@@ -122,7 +122,7 @@
return 1
log_combat(A, D, "punched")
var/picked_hit_type = pick("punches", "kicks")
var/bonus_damage = 10
var/bonus_damage = A.dna.species.punchdamagehigh //10 damage
if(!(D.mobility_flags & MOBILITY_STAND))
bonus_damage += 5
picked_hit_type = "stomps on"

View File

@@ -43,8 +43,9 @@
D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
span_userdanger("[A] [atk_verb] you!"))
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1)
D.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD)
A.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD)
var/headbutt_damage = rand(A.dna.species.punchdamagehigh - 5, A.dna.species.punchdamagehigh) //5-10 damage
D.apply_damage(headbutt_damage, A.dna.species.attack_type, BODY_ZONE_HEAD)
A.apply_damage(headbutt_damage, A.dna.species.attack_type, BODY_ZONE_HEAD)
if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat))
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
A.Stun(rand(10,45))
@@ -52,9 +53,10 @@
if(5,6)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = pick("punches", "kicks", "hits", "slams into")
var/punch_damage = rand(A.dna.species.punchdamagehigh + 5 , 2 * A.dna.species.punchdamagehigh + 10) //15-30 damage
D.visible_message(span_danger("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!"), \
span_userdanger("[A] [atk_verb] you with inhuman strength, sending you flying backwards!"))
D.apply_damage(rand(15,30), A.dna.species.attack_type)
D.apply_damage(punch_damage, A.dna.species.attack_type)
playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1)
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.

View File

@@ -46,7 +46,7 @@
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.emote("scream")
D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM), wound_bonus = CANT_WOUND)
D.apply_damage(A.dna.species.punchdamagehigh / 2, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM), wound_bonus = CANT_WOUND) //5 damage
D.Stun(60)
return TRUE
@@ -80,7 +80,7 @@
D.Stun(40)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return TRUE
return basic_hit(A,D)
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsParalyzed())
@@ -88,7 +88,7 @@
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message(span_warning("[A] kicks [D] in the head!"), \
span_userdanger("[A] kicks you in the jaw!"))
D.apply_damage(20, A.dna.species.attack_type, BODY_ZONE_HEAD, wound_bonus = CANT_WOUND)
D.apply_damage(A.dna.species.punchdamagehigh + 10, A.dna.species.attack_type, BODY_ZONE_HEAD, wound_bonus = CANT_WOUND) //20 damage
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Stun(80)
@@ -98,12 +98,13 @@
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!(D.mobility_flags & MOBILITY_STAND))
log_combat(A, D, "elbow dropped (Sleeping Carp)")
var/dunk_damage = A.dna.species.punchdamagehigh * 3 + 20 //50 damage, get dunked on
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message(span_warning("[A] elbow drops [D]!"), \
span_userdanger("[A] piledrives you with their elbow!"))
if(D.stat)
D.death() //FINISH HIM!
D.apply_damage(50, A.dna.species.attack_type, BODY_ZONE_CHEST, wound_bonus = CANT_WOUND)
D.apply_damage(dunk_damage, A.dna.species.attack_type, BODY_ZONE_CHEST, wound_bonus = CANT_WOUND)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
return TRUE
return basic_hit(A,D)
@@ -131,9 +132,10 @@
return TRUE
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
var/harm_damage = A.dna.species.punchdamagehigh + rand(0,5) //10-15 damage
D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
span_userdanger("[A] [atk_verb] you!"))
D.apply_damage(rand(10,15), BRUTE, wound_bonus = CANT_WOUND)
D.apply_damage(harm_damage, BRUTE, wound_bonus = CANT_WOUND)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, 1, -1)
if(prob(D.getBruteLoss()) && (D.mobility_flags & MOBILITY_STAND))
D.visible_message(span_warning("[D] stumbles and falls!"), span_userdanger("The blow sends you to the ground!"))

View File

@@ -286,17 +286,18 @@
A.visible_message("<span class = 'danger'><B>[A] [fluff] [D]!</B></span>")
playsound(A.loc, "swing_hit", 50, 1)
var/bodyslam_damage = A.dna.species.punchdamagehigh * 1.5 + 5 //base damage of the slam, 20
if (!D.stat)
D.emote("scream")
D.Paralyze(40)
switch(rand(1,3))
if (2)
D.adjustBruteLoss(rand(20,30))
D.adjustBruteLoss(bodyslam_damage + rand(0,10)) //20-30 damage
if (3)
D.ex_act(EXPLODE_LIGHT)
else
D.adjustBruteLoss(rand(10,20))
D.adjustBruteLoss(bodyslam_damage - rand(0,10)) //10-20 damage
else
D.ex_act(EXPLODE_LIGHT)
@@ -328,7 +329,7 @@
addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4)
A.visible_message("<span class = 'danger'><b>[A] headbutts [D]!</b></span>")
D.adjustBruteLoss(rand(10,20))
D.adjustBruteLoss(A.dna.species.punchdamagehigh + rand(0,10)) //10-20 damage
playsound(A.loc, "swing_hit", 50, 1)
D.Unconscious(20)
log_combat(A, D, "headbutted")
@@ -342,7 +343,7 @@
A.visible_message("<span class = 'danger'><B>[A] roundhouse-kicks [D]!</B></span>")
playsound(A.loc, "swing_hit", 50, 1)
D.adjustBruteLoss(rand(10,20))
D.adjustBruteLoss(A.dna.species.punchdamagehigh + rand(0,10)) //10-20 damage
var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
if (T && isturf(T))
@@ -384,7 +385,7 @@
A.pixel_y = 0
if (falling == 1)
A.visible_message("<span class = 'danger'><B>...and dives head-first into the ground, ouch!</b></span>")
A.adjustBruteLoss(rand(10,20))
A.adjustBruteLoss(A.dna.species.punchdamagehigh + rand(0,10)) //10-20 damage
A.Paralyze(60)
to_chat(A, "[D] is too far away!")
return 0
@@ -405,14 +406,15 @@
A.visible_message("<span class = 'danger'><B>[A] leg-drops [D]!</B></span>")
playsound(A.loc, "swing_hit", 50, 1)
A.emote("scream")
var/legdrop_damage = A.dna.species.punchdamagehigh * 2 + rand(0,10) //20-30 damage
if (falling == 1)
if (prob(33) || D.stat)
D.ex_act(EXPLODE_LIGHT)
else
D.adjustBruteLoss(rand(20,30))
D.adjustBruteLoss(legdrop_damage)
else
D.adjustBruteLoss(rand(20,30))
D.adjustBruteLoss(legdrop_damage)
D.Paralyze(40)

View File

@@ -390,7 +390,8 @@
if(M.occupant.a_intent == INTENT_HARM)
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
var/throwtarget = get_edge_target_turf(M, get_dir(M, get_step_away(src, M)))
src.throw_at(throwtarget, 5, 2, src)//one tile further than mushroom punch/psycho brawling
var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD))
if(temp)
var/update = 0
@@ -398,7 +399,7 @@
switch(M.damtype)
if("brute")
if(M.force > 20)
Unconscious(20)
Knockdown(1.5 SECONDS)//the victim could get up before getting hit again
update |= temp.receive_damage(dmg, 0)
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if("fire")

View File

@@ -95,7 +95,8 @@
last_damage = "grand blunt trauma"
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
var/throwtarget = get_edge_target_turf(M, get_dir(M, get_step_away(src, M)))
src.throw_at(throwtarget, 5, 2, src)//one tile further than mushroom punch/psycho brawling
switch(M.damtype)
if(BRUTE)
Unconscious(20)

View File

@@ -914,7 +914,7 @@
return 0
/mob/living/silicon/ai/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE, ignore_stasis = FALSE)
if(aiRestorePowerRoutine)
if(aiRestorePowerRoutine && !available_ai_cores())
return TRUE
return ..()

View File

@@ -46,6 +46,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
for(var/mob/living/silicon/ai/AI in all_ais)
if(AI.is_dying)
continue
if(!AI.mind && AI.deployed_shell.mind)
to_chat(AI.deployed_shell, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
else
@@ -111,6 +113,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
warning_sent = TRUE
var/list/send_to = GLOB.ai_list.Copy()
for(var/mob/living/silicon/ai/AI in send_to)
if(AI.is_dying)
continue
if(!AI.mind && AI.deployed_shell.mind)
to_chat(AI.deployed_shell, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure."))
else

View File

@@ -25,6 +25,8 @@
/mob/living/silicon/ai/proc/relocate(silent = FALSE)
if(is_dying)
return
if(!silent)
to_chat(src, span_userdanger("Connection to data core lost. Attempting to reaquire connection..."))
@@ -39,6 +41,7 @@
if(!new_data_core || (new_data_core && !new_data_core.can_transfer_ai()))
INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt)
is_dying = TRUE
return
if(!silent)

View File

@@ -112,7 +112,7 @@
see_invisible = initial(see_invisible)
see_in_dark = initial(see_in_dark)
sight = initial(sight)
if(aiRestorePowerRoutine)
if(aiRestorePowerRoutine && !available_ai_cores())
sight = sight&~SEE_TURFS
sight = sight&~SEE_MOBS
sight = sight&~SEE_OBJS
@@ -127,8 +127,8 @@
to_chat(src, "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection.")
end_multicam()
sleep(50)
var/turf/T = get_turf(src)
var/area/AIarea = get_area(src)
var/turf/T = get_turf(loc)
var/area/AIarea = get_area(loc)
if(AIarea && AIarea.power_equip)
if(!isspaceturf(T))
ai_restore_power()
@@ -137,7 +137,7 @@
sleep(20)
to_chat(src, "Emergency control system online. Verifying connection to power network.")
sleep(50)
T = get_turf(src)
T = get_turf(loc)
if(isspaceturf(T))
to_chat(src, "Unable to verify! No power connection detected!")
aiRestorePowerRoutine = POWER_RESTORATION_SEARCH_APC
@@ -148,8 +148,8 @@
var/PRP //like ERP with the code, at least this stuff is no more 4x sametext
for (PRP=1, PRP<=4, PRP++)
T = get_turf(src)
AIarea = get_area(src)
T = get_turf(loc)
AIarea = get_area(loc)
if(AIarea)
for (var/obj/machinery/power/apc/APC in AIarea)
if (!(APC.stat & BROKEN))
@@ -199,7 +199,9 @@
/mob/living/silicon/ai/proc/ai_lose_power()
disconnect_shell()
aiRestorePowerRoutine = POWER_RESTORATION_START
blind_eyes(1)
if(!available_ai_cores())
blind_eyes(1)
update_sight()
to_chat(src, "You've lost power!")
addtimer(CALLBACK(src, .proc/start_RestorePowerRoutine), 20)

View File

@@ -1755,5 +1755,43 @@
continue
movable_content.wash(clean_types)
/datum/reagent/medicine/radaway
name = "RadAway"
description = "A potent but toxic chemical solution that binds with radioactive particles and render them inert. Applying this through spray or smoke will cleanse contaminanted surfaces."
color = "#9f5a2f"
var/old_insulation = RAD_NO_INSULATION
taste_description = "metallic dust"
self_consuming = TRUE
/datum/reagent/medicine/radaway/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.wash(CLEAN_RAD) //you only get decontaminated if it's spray based, can't spam out 100 1u pills
/datum/reagent/medicine/radaway/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(1*REM, 0)
..()
/datum/reagent/medicine/radaway/on_mob_add(mob/living/L)
..()
//store the person's original insulation so they're only extra protected while it's in their system
old_insulation = L.rad_insulation
L.rad_insulation = RAD_LIGHT_INSULATION
/datum/reagent/medicine/radaway/on_mob_end_metabolize(mob/living/L)
L.rad_insulation = old_insulation
if(iscarbon(L))
var/mob/living/carbon/C = L
C.vomit(stun = FALSE) //it binds with the radioactive particles inside you, and they have to come out somehow
..()
/datum/reagent/medicine/radaway/reaction_obj(obj/O, reac_volume)
//scrubs the contamination and applies a light treatment to it to mitigate immediate recontamination
var/datum/component/radioactive/radiation = O.GetComponent(/datum/component/radioactive)
if(radiation)
radiation.strength -= max(0, reac_volume * (RAD_BACKGROUND_RADIATION * 5))
O.wash(CLEAN_RAD | CLEAN_TYPE_WEAK)
if(O.rad_insulation < RAD_LIGHT_INSULATION)
O.rad_insulation = RAD_LIGHT_INSULATION
#undef PERF_BASE_DAMAGE
#undef REQUIRED_STRANGE_REAGENT_FOR_REVIVAL

View File

@@ -374,3 +374,11 @@
var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume)
new /obj/item/stack/medical/bone_gel(location)
/datum/chemical_reaction/radaway
name = "RadAway"
id = /datum/reagent/medicine/radaway
results = list(/datum/reagent/medicine/radaway = 3)
required_reagents = list(/datum/reagent/medicine/potass_iodide = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/medicine/c2/seiver = 1)
required_temp = 200
is_cold_recipe = 1

View File

@@ -215,6 +215,11 @@
desc = "A small bottle of potassium iodide."
list_reagents = list(/datum/reagent/medicine/potass_iodide = 30)
/obj/item/reagent_containers/glass/bottle/radaway
name = "RadAway bottle"
desc = "A small bottle of RadAway."
list_reagents = list(/datum/reagent/medicine/radaway = 30)
/obj/item/reagent_containers/glass/bottle/salglu_solution
name = "saline-glucose solution bottle"
desc = "A small bottle of saline-glucose solution."

View File

@@ -0,0 +1,4 @@
author: "Sniblet"
delete-after: true
changes:
- tweak: "Being punched by a combat mech now knocks you off your feet and throws you across the room instead of sleeping you"

View File

@@ -0,0 +1,5 @@
author: "Chubbygummibear"
delete-after: true
changes:
- rscadd: "New radiation treatment chem: RadAway. A radioactive contamination scrubbing chem that can clean contamination (the green glow) off of items and people that are sprayed or splashed with it"
- tweak: "The lavaland ruin that had a bottle of potassium iodide renamed rad-away gets a bottle of this RadAway instead"

View File

@@ -0,0 +1,5 @@
author: "TheGamerdk"
delete-after: true
changes:
- tweak: "AI is no longer blinded when their APC goes offline, provided they have another core online"
- bugfix: "AI can restore their APC when it is offline"

View File

@@ -0,0 +1,6 @@
author: "Mqiib"
delete-after: true
changes:
- bugfix: "changes a bunch of hunter-fu stuff to be in-line with the rest of our martial arts"
- tweak: "Most martial arts attacks now respect species punch damage modifications more or less depending on the attack used"
- experiment: "The Ingot has found a new recipe, I hope you're hungry..."

View File

@@ -0,0 +1,4 @@
author: "Readystorm546"
delete-after: true
changes:
- bugfix: "Janitor closet turf was no in the janitor closet."

View File

@@ -0,0 +1,4 @@
author: "ToasterBiome"
delete-after: true
changes:
- rscadd: "re-adds the autopsy surgery area for detective and the incinerator expansion on box"

View File

@@ -0,0 +1,4 @@
author: "Chubbygummibear"
delete-after: true
changes:
- bugfix: "Pods only get 2x light healing from sugar while it's processing"

View File

@@ -0,0 +1,5 @@
author: "Chubbygummibear"
delete-after: true
changes:
- rscadd: "New Donator Item: Sad Horn, it's a bike horn that plays the boo-womp sound"
- soundadd: "boowomp.ogg is canon"

View File

@@ -19,3 +19,12 @@
/obj/item/bikehorn/rubber_pigeon/Initialize()
. = ..()
AddComponent(/datum/component/squeak, list('yogstation/sound/items/rubber_pigeon.ogg'=1), 50)
/obj/item/bikehorn/sad
name = "sad horn"
desc = "Thank you, Doktor."
attack_verb = list("Boowomped")
/obj/item/bikehorn/sad/Initialize()
. = ..()
AddComponent(/datum/component/squeak, list('yogstation/sound/items/boowomp.ogg'=1), 50)

View File

@@ -57,6 +57,8 @@ GLOBAL_LIST_EMPTY(antag_token_users)
if(C in GLOB.antag_token_users) // If they're in the list take them out
if(alert("Someone already approved this antag token. Are you sure you want to reject it?", "Confirm", "Yes", "No") != "Yes")
return
GLOB.antag_token_users -= C
token = FALSE // Redundency if you clowns figure out how to break it
else

View File

@@ -432,6 +432,9 @@ Uncomment this and use atomproccall as necessary, then copypaste the output into
/datum/donator_gear/air_horn
name = "air horn"
unlock_path = /obj/item/bikehorn/airhorn
/datum/donator_gear/sad_horn
name = "sad horn"
unlock_path = /obj/item/bikehorn/sad
/datum/donator_gear/camera
name = "camera"
unlock_path = /obj/item/camera

View File

@@ -231,7 +231,12 @@
light_heal_multiplier = 2
dark_damage_multiplier = 3
H.reagents.remove_reagent(chem.type, chem.metabolization_rate * REAGENTS_METABOLISM)
//removal is handled in /datum/reagent/sugar/on_mob_delete()
//removal is handled in /datum/reagent/sugar/on_mob_delete() //so that was a lie
//if there's none left after the removal, the light multiplier needs to go back to the default
if(!H.reagents.has_reagent(/datum/reagent/consumable/sugar))
light_heal_multiplier = initial(light_heal_multiplier)
dark_damage_multiplier = initial(dark_damage_multiplier)
return 1
if(istype(chem, /datum/reagent/consumable/ethanol)) //istype so all alcohols work

Binary file not shown.