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

This commit is contained in:
Letter N
2021-02-28 09:07:35 +08:00
35 changed files with 254 additions and 83 deletions

View File

@@ -19,7 +19,7 @@
#define INSTRUMENT_EXP_FALLOFF_MAX 10
/// Minimum volume for when the sound is considered dead.
#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 0
#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 1
#define SUSTAIN_LINEAR 1
#define SUSTAIN_EXPONENTIAL 2

View File

@@ -86,8 +86,8 @@
#define EMOTE_OMNI 4
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
#define MAX_FLAVOR_LEN 4096 //double the maximum message length.
#define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen?
#define MAX_FLAVOR_LEN 4096
#define MAX_TASTE_LEN 40 //lick... vore... ew...
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512

View File

@@ -132,6 +132,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NODROP" = TRAIT_NODROP,
"TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT,
"TRAIT_SPOOKY_THROW" = TRAIT_SPOOKY_THROW
),
/datum/mind = list(
"TRAIT_CLOWN_MENTALITY" = TRAIT_CLOWN_MENTALITY
)
))

View File

@@ -117,12 +117,6 @@
if(user.a_intent == INTENT_HARM)
return ..()
//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
/obj/structure/frame/computer/proc/check_state(target_state)
if(state == target_state)
return TRUE
return FALSE
/obj/structure/frame/computer/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(state == 4)

View File

@@ -21,6 +21,11 @@
circuit = null
qdel(src)
//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
/obj/structure/frame/proc/check_state(target_state)
if(state == target_state)
return TRUE
return FALSE
/obj/structure/frame/machine
name = "machine frame"
@@ -84,7 +89,7 @@
if(!P.tool_start_check(user, amount=5))
return
to_chat(user, "<span class='notice'>You start to add cables to the frame...</span>")
if(P.use_tool(src, user, 20, volume=50, amount=5))
if(P.use_tool(src, user, 20, volume=50, amount=5, extra_checks = CALLBACK(src, .proc/check_state, 1)))
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
state = 2
icon_state = "box_1"
@@ -93,8 +98,7 @@
if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored)
user.visible_message("<span class='warning'>[user] disassembles the frame.</span>", \
"<span class='notice'>You start to disassemble the frame...</span>", "You hear banging and clanking.")
if(P.use_tool(src, user, 40, volume=50))
if(state == 1)
if(P.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/check_state, 1)))
to_chat(user, "<span class='notice'>You disassemble the frame.</span>")
var/obj/item/stack/sheet/metal/M = new (loc, 5)
M.add_fingerprint(user)
@@ -102,8 +106,7 @@
return
if(P.tool_behaviour == TOOL_WRENCH)
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
if(P.use_tool(src, user, 40, volume=75))
if(state == 1)
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 1)))
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
setAnchored(!anchored)
return
@@ -111,7 +114,7 @@
if(2)
if(P.tool_behaviour == TOOL_WRENCH)
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
if(P.use_tool(src, user, 40, volume=75))
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 2)))
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
setAnchored(!anchored)
return
@@ -169,7 +172,7 @@
if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored)
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
if(P.use_tool(src, user, 40, volume=75))
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 3)))
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
setAnchored(!anchored)
return

View File

@@ -1073,6 +1073,8 @@
INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2)
if(I.tool_behaviour == TOOL_CROWBAR)
if(!I.can_force_powered)
return
if(hasPower() && isElectrified())
shock(user,100)//it's like sticking a forck in a power socket
return

View File

@@ -116,6 +116,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/buffer = null
var/show_wires = FALSE
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
//Special crowbar
var/can_force_powered = FALSE
var/reach = 1 //In tiles, how far this weapon can reach; 1 for adjacent, which is default

View File

@@ -771,7 +771,10 @@
/obj/item/nullrod/tribal_knife/process()
slowdown = rand(-2, 2)
if(iscarbon(loc))
var/mob/living/carbon/wielder = loc
if(wielder.is_holding(src))
wielder.update_equipment_speed_mods()
/obj/item/nullrod/pitchfork
icon_state = "pitchfork0"

View File

@@ -88,6 +88,7 @@
usesound = 'sound/items/jaws_pry.ogg'
force = 15
toolspeed = 0.25
can_force_powered = TRUE
/obj/item/crowbar/power/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!</span>")

View File

@@ -433,7 +433,6 @@
destroy_objective.find_target()
objectives += destroy_objective
else
if(prob(70))
var/datum/objective/assassinate/once/kill_objective = new
kill_objective.owner = owner
if(team_mode) //No backstabbing while in a team
@@ -442,16 +441,7 @@
kill_objective.find_target()
objectives += kill_objective
/*else
var/datum/objective/maroon/maroon_objective = new
maroon_objective.owner = owner
if(team_mode)
maroon_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
else
maroon_objective.find_target()
objectives += maroon_objective*/
if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible)
if(!(locate(/datum/objective/escape) in objectives) && escape_objective_possible && prob(50))
var/datum/objective/escape/escape_with_identity/identity_theft = new
identity_theft.owner = owner
identity_theft.target = kill_objective.target

View File

@@ -191,8 +191,6 @@ new /datum/disease_ability/symptom/powerful/youth
/datum/disease_ability/action/sneeze
name = "Voluntary Sneezing"
actions = list(/datum/action/cooldown/disease_sneeze)
cost = 2
required_total_points = 3
short_desc = "Force the host you are following to sneeze, spreading your infection to those in front of them."
long_desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host.<br>Cooldown: 20 seconds"
@@ -229,8 +227,6 @@ new /datum/disease_ability/symptom/powerful/youth
/datum/disease_ability/action/infect
name = "Secrete Infection"
actions = list(/datum/action/cooldown/disease_infect)
cost = 2
required_total_points = 3
short_desc = "Cause all objects your host is touching to become infectious for a limited time, spreading your infection to anyone who touches them."
long_desc = "Cause the host you are following to excrete an infective substance from their pores, causing all objects touching their skin to transmit your infection to anyone who touches them for the next 30 seconds. This includes the floor, if they are not wearing shoes, and any items they are holding, if they are not wearing gloves.<br>Cooldown: 40 seconds"
@@ -271,23 +267,20 @@ new /datum/disease_ability/symptom/powerful/youth
//healing costs more so you have to techswitch from naughty disease otherwise we'd have friendly disease for easy greentext (no fun!)
/datum/disease_ability/symptom/mild
cost = 2
required_total_points = 4
category = "Symptom (Weak)"
/datum/disease_ability/symptom/medium
cost = 4
required_total_points = 8
category = "Symptom"
/datum/disease_ability/symptom/medium/heal
cost = 5
required_total_points = 5
malefit = -1
category = "Symptom (+)"
/datum/disease_ability/symptom/powerful
cost = 4
required_total_points = 16
required_total_points = 10
category = "Symptom (Strong)"
/datum/disease_ability/symptom/powerful/heal

View File

@@ -566,7 +566,7 @@
human_user.adjustBruteLoss(-10, FALSE)
human_user.adjustFireLoss(-10, FALSE)
human_user.adjustStaminaLoss(-10, FALSE)
human_user.adjustToxLoss(-10, FALSE)
human_user.adjustToxLoss(-10, FALSE, TRUE)
human_user.adjustOxyLoss(-10)
/obj/effect/proc_holder/spell/pointed/manse_link

View File

@@ -183,7 +183,7 @@
var/mob/living/carbon/human/human_user = user
human_user.adjustBruteLoss(-6, FALSE)
human_user.adjustFireLoss(-6, FALSE)
human_user.adjustToxLoss(-6, FALSE)
human_user.adjustToxLoss(-6, FALSE, TRUE)
human_user.adjustOxyLoss(-6, FALSE)
human_user.adjustStaminaLoss(-20)

View File

@@ -11,7 +11,6 @@
if(istype(SSticker.mode,/datum/game_mode/dynamic))
mode = SSticker.mode
assassin_prob = max(0,mode.threat_level-40)
if(prob(assassin_prob))
if(prob(assassin_prob))
var/datum/objective/assassinate/once/kill_objective = new
kill_objective.owner = T.owner

View File

@@ -220,8 +220,8 @@
parry_max_attacks = INFINITY
parry_failed_cooldown_duration = 2.25 SECONDS
parry_failed_stagger_duration = 2.25 SECONDS
parry_cooldown = 3 SECONDS
parry_failed_clickcd_duration = 0.5 SECONDS
parry_cooldown = 0
parry_failed_clickcd_duration = 0
/obj/item/clothing/gloves/botanic_leather
name = "botanist's leather gloves"

View File

@@ -1040,6 +1040,12 @@
icon_state = "wbreakpoly"
item_state = "wbreakpoly"
/obj/item/clothing/suit/toggle/wbreakpoly/on_toggle(mob/user)
if(suittoggled)
to_chat(usr, "<span class='notice'>You zip up [src].</span>")
else
to_chat(usr, "<span class='notice'>You unzip [src].</span>")
/obj/item/clothing/suit/toggle/wbreakpoly/polychromic/ComponentInitialize()
. = ..()
AddElement(/datum/element/polychromic, list("#464F65", "#916035", "#474747"), 3)

View File

@@ -110,6 +110,9 @@
suit_toggle(user)
return TRUE
/obj/item/clothing/suit/toggle/proc/on_toggle(mob/user) // override this, not suit_toggle, which does checks
to_chat(usr, "<span class='notice'>You toggle [src]'s [togglename].</span>")
/obj/item/clothing/suit/toggle/ui_action_click()
suit_toggle()
@@ -119,7 +122,7 @@
if(!can_use(usr))
return 0
to_chat(usr, "<span class='notice'>You toggle [src]'s [togglename].</span>")
on_toggle(usr)
if(src.suittoggled)
src.icon_state = "[initial(icon_state)]"
src.suittoggled = FALSE

View File

@@ -435,7 +435,7 @@
name = "alien drone cube"
desc = "Just add water and run!"
tastes = list("the jungle" = 1, "acid" = 1)
dried_being = /mob/living/carbon/alien/humanoid/drone
dried_being = /mob/living/simple_animal/hostile/alien/sentinel/cube
/obj/item/reagent_containers/food/snacks/cube/goat
name = "goat cube"

View File

@@ -142,10 +142,10 @@
parry_efficiency_considered_successful = 0.01
parry_efficiency_to_counterattack = 0.01
parry_max_attacks = INFINITY
parry_failed_cooldown_duration = 3 SECONDS
parry_failed_stagger_duration = 2 SECONDS
parry_cooldown = 3 SECONDS
parry_failed_clickcd_duration = 0.8 SECONDS
parry_failed_cooldown_duration = 1.5 SECONDS
parry_failed_stagger_duration = 1 SECONDS
parry_cooldown = 0
parry_failed_clickcd_duration = 0.8
parry_data = list( // yeah it's snowflake
"UNARMED_PARRY_STAGGER" = 3 SECONDS,

View File

@@ -1454,9 +1454,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/armor_block = target.run_armor_check(affecting, "melee")
if(HAS_TRAIT(user, TRAIT_MAULER)) // maulers get 15 armorpierce because if you're going to punch someone you might as well do a good job of it
armor_block = target.run_armor_check(affecting, "melee", armour_penetration = 15) // lot of good that sec jumpsuit did you
playsound(target.loc, user.dna.species.attack_sound, 25, 1, -1)
target.visible_message("<span class='danger'>[user] [atk_verb]ed [target]!</span>", \
"<span class='userdanger'>[user] [atk_verb]ed you!</span>", null, COMBAT_MESSAGE_RANGE, null, \
@@ -1473,9 +1470,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
target.apply_damage(damage*1.5, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
target.apply_damage(damage*0.5, STAMINA, affecting, armor_block)
log_combat(user, target, "kicked")
else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.1x raw damage + 1.3x stam damage, and have some armor pierce
target.apply_damage(damage*1.1, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
target.apply_damage(damage*1.3, STAMINA, affecting, armor_block)
else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.2x raw damage but nstam
target.apply_damage(damage*1.2, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
log_combat(user, target, "punched (mauler)")
else //other attacks deal full raw damage + 2x in stamina damage
target.apply_damage(damage, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)

View File

@@ -23,6 +23,9 @@
if(!(combat_flags & COMBAT_FLAG_PARRY_CAPABLE))
to_chat(src, "<span class='warning'>You are not something that can parry attacks.</span>")
return
if(!(mobility_flags & MOBILITY_STAND))
to_chat(src, "<span class='warning'>You aren't able to parry without solid footing!</span>")
return
// Prioritize item, then martial art, then unarmed.
// yanderedev else if time
var/obj/item/using_item = get_active_held_item()

View File

@@ -78,6 +78,15 @@
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
/mob/living/simple_animal/hostile/alien/sentinel/cube
gold_core_spawnable = NO_SPAWN
health = 220
maxHealth = 220
melee_damage_lower = 20
melee_damage_upper = 20
del_on_death = TRUE
loot = list(/obj/effect/mob_spawn/alien/corpse/humanoid/sentinel)
/mob/living/simple_animal/hostile/alien/queen
name = "alien queen"

View File

@@ -9,6 +9,7 @@
var/light_on = FALSE
integrity_failure = 0.5
max_integrity = 100
rad_flags = RAD_PROTECT_CONTENTS
armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
var/enabled = 0 // Whether the computer is turned on.

View File

@@ -45,6 +45,13 @@
trippy = FALSE
pH = 8
//Nicotine is used as a pesticide IRL.
/datum/reagent/drug/nicotine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
if(chems.has_reagent(type, 1))
mytray.adjustToxic(round(chems.get_reagent_amount(type)))
mytray.adjustPests(-rand(1,2))
/datum/reagent/drug/nicotine/on_mob_life(mob/living/carbon/M)
if(prob(1))
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")

View File

@@ -49,6 +49,11 @@
var/brute_heal = 1
var/burn_heal = 0
/datum/reagent/consumable/nutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
if(chems.has_reagent(type, 1))
mytray.adjustHealth(round(chems.get_reagent_amount(type) * 0.2))
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M)
if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD))
if(prob(50))

View File

@@ -155,6 +155,12 @@
pH = 11
value = REAGENT_VALUE_COMMON
// Healing
/datum/reagent/medicine/cryoxadone/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
mytray.adjustHealth(round(chems.get_reagent_amount(type) * 3))
mytray.adjustToxic(-round(chems.get_reagent_amount(type) * 3))
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M)
var/power = -0.00003 * (M.bodytemperature ** 2) + 3
if(M.bodytemperature < T0C)
@@ -935,6 +941,12 @@
pH = 0
value = REAGENT_VALUE_RARE
// FEED ME SEYMOUR
/datum/reagent/medicine/strange_reagent/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
if(chems.has_reagent(type, 1))
mytray.spawnplant()
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.stat == DEAD)
if(M.suiciding || M.hellbound) //they are never coming back

View File

@@ -2545,7 +2545,7 @@
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustAllImmobility(-40, FALSE)
M.adjustStaminaLoss(-15, FALSE)
M.adjustToxLoss(-3, FALSE)
M.adjustToxLoss(-3, FALSE, TRUE)
M.adjustOxyLoss(-3, FALSE)
M.adjustBruteLoss(-3, FALSE)
M.adjustFireLoss(-3, FALSE)

View File

@@ -32,6 +32,12 @@
value = REAGENT_VALUE_VERY_COMMON
taste_description = "metal"
//It has stable IN THE NAME. IT WAS MADE FOR THIS MOMENT.
/datum/reagent/stabilizing_agent/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
if(myseed && chems.has_reagent(type, 1))
myseed.adjust_instability(-1)
/datum/reagent/clf3
name = "Chlorine Trifluoride"
description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space."
@@ -167,6 +173,15 @@
taste_description = "burning"
value = REAGENT_VALUE_COMMON
// Smells like victory...
/datum/reagent/napalm/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
if(chems.has_reagent(type, 1))
if(!(myseed.resistance_flags & FIRE_PROOF))
mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 6))
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 7))
mytray.adjustWeeds(-rand(5,9)) //At least give them a small reward if they bother.
/datum/reagent/napalm/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(1)
..()

View File

@@ -24,6 +24,13 @@
/datum/surgery_step/toxichealing/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts rejuvenating some of [target]'s flesh back to life.", "<span class='notice'>You start knitting some of [target]'s flesh back to life.</span>")
/datum/surgery_step/toxichealing/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
if(..())
while((target.getToxLoss() >= 1) || (target.getOxyLoss() >= 1))
. = ..()
if(!.)
break
/datum/surgery_step/toxichealing/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] fixes some of [target]'s wounds.", "<span class='notice'>You succeed in fixing some of [target]'s wounds.</span>")
target.heal_bodypart_damage(0,0,30) //Heals stam

View File

@@ -548,6 +548,7 @@
desc = "A TCG-branded card binder, specifically for your infinite collection of TCG cards!"
icon = 'icons/obj/tcg/misc.dmi'
icon_state = "binder"
w_class = WEIGHT_CLASS_SMALL
var/list/cards = list()
var/list/decks = list()

View File

@@ -4,8 +4,8 @@
#define BELLIES_MAX 20
#define BELLIES_NAME_MIN 2
#define BELLIES_NAME_MAX 12
#define BELLIES_DESC_MAX 1024
#define BELLIES_NAME_MAX 24
#define BELLIES_DESC_MAX 4096
/mob/living/proc/insidePanel()
set name = "Vore Panel"

View File

@@ -50,6 +50,79 @@
-->
<div class="commit sansserif">
<h2 class="date">28 February 2021</h2>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Polychromic windbreaker's alt-click message is now coherent</li>
<li class="code_imp">Toggleable suits now have an on_toggle proc to be overridden.</li>
</ul>
<h3 class="author">R3dtail updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">doubled max belly name length and quadrupled belly description length</li>
</ul>
<h3 class="author">SandPoot updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Body rejuvenation surgery will loop until the patient is completely healed.</li>
</ul>
<h3 class="author">dzahlus updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">fixes toxinlovers dying from heretic stuff that should heal them instead</li>
</ul>
<h2 class="date">27 February 2021</h2>
<h3 class="author">Hatterhat updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Lingfists (trait_mauler) now deal no stam damage and lost their 15(!!!) armor penetration.</li>
</ul>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Tablets now protect their contents from rads.</li>
</ul>
<h3 class="author">TheObserver-sys updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Chems that should have been usable are now usable, try some cryoxadone on a plant today!!!</li>
</ul>
<h3 class="author">kappa-sama updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">cards and card binders are now small-class items</li>
</ul>
<h3 class="author">keronshb updated:</h3>
<ul class="changes bgimages16">
<li class="balance">16 > 10 unlock cost for stronger abilities</li>
<li class="balance">Made nearly all other abilities for free.</li>
</ul>
<h3 class="author">kiwedespars updated:</h3>
<ul class="changes bgimages16">
<li class="balance">reverted the pr that absolutely gutted pugilism and made it worse than base unarmed, also gives it a second long stagger</li>
<li class="balance">removed the ability to parry while horizontal, because that's dumb and makes it easy to just time the parries right.</li>
</ul>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">chaplain arrythmic knives can no longer be abused for infinite speed.</li>
</ul>
<h2 class="date">26 February 2021</h2>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="code_imp">All machine-frame based tool-use actions now have state-checking callbacks.</li>
</ul>
<h2 class="date">25 February 2021</h2>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Traitor / Ling objective amount should now be correct again.</li>
</ul>
<h2 class="date">24 February 2021</h2>
<h3 class="author">SandPoot updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Regular crowbars no longer open powered airlocks.</li>
</ul>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="balance">xeno cube makes hostile xenos now, and drops a sentinel instead of a drone.</li>
</ul>
<h2 class="date">23 February 2021</h2>
<h3 class="author">keronshb updated:</h3>
<ul class="changes bgimages16">

View File

@@ -28585,3 +28585,46 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
timothyteakettle:
- bugfix: banning panel prioritises mobs with clients now when trying to find them
if they're in the game
2021-02-24:
SandPoot:
- bugfix: Regular crowbars no longer open powered airlocks.
silicons:
- balance: xeno cube makes hostile xenos now, and drops a sentinel instead of a
drone.
2021-02-25:
DeltaFire15:
- bugfix: Traitor / Ling objective amount should now be correct again.
2021-02-26:
DeltaFire15:
- code_imp: All machine-frame based tool-use actions now have state-checking callbacks.
2021-02-27:
Hatterhat:
- balance: Lingfists (trait_mauler) now deal no stam damage and lost their 15(!!!)
armor penetration.
Putnam3145:
- tweak: Tablets now protect their contents from rads.
TheObserver-sys:
- rscadd: Chems that should have been usable are now usable, try some cryoxadone
on a plant today!!!
kappa-sama:
- tweak: cards and card binders are now small-class items
keronshb:
- balance: 16 > 10 unlock cost for stronger abilities
- balance: Made nearly all other abilities for free.
kiwedespars:
- balance: reverted the pr that absolutely gutted pugilism and made it worse than
base unarmed, also gives it a second long stagger
- balance: removed the ability to parry while horizontal, because that's dumb and
makes it easy to just time the parries right.
silicons:
- bugfix: chaplain arrythmic knives can no longer be abused for infinite speed.
2021-02-28:
Putnam3145:
- bugfix: Polychromic windbreaker's alt-click message is now coherent
- code_imp: Toggleable suits now have an on_toggle proc to be overridden.
R3dtail:
- tweak: doubled max belly name length and quadrupled belly description length
SandPoot:
- tweak: Body rejuvenation surgery will loop until the patient is completely healed.
dzahlus:
- bugfix: fixes toxinlovers dying from heretic stuff that should heal them instead

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -168,8 +168,8 @@
/obj/item/projectile/bullet/cflechetteshredder //you only get this with a 30TC bundle,5 magazines, as such this should be the superior ammotype
name = "flechette (shredder)"
damage = 10
dismemberment = 50
wound_bonus = 50
dismemberment = 15
wound_bonus = 20
armour_penetration = 100
sharpness = SHARP_EDGED
wound_falloff_tile = 0