Merge remote-tracking branch 'origin/master' into semi-sync

This commit is contained in:
Letter N
2020-12-29 10:37:06 +08:00
36 changed files with 236 additions and 49 deletions

View File

@@ -115,7 +115,7 @@
#define MAX_HIGH_PRESSURE_DAMAGE 16 // CITADEL CHANGES Max to 16, low to 8.
#define LOW_PRESSURE_DAMAGE 8 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
#define COLD_SLOWDOWN_FACTOR 20 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
#define COLD_SLOWDOWN_FACTOR 35 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
//PIPES
//Atmos pipe limits

View File

@@ -89,6 +89,11 @@
to_chat(user, "<span class='warning'>You can't tackle while tased!</span>")
return
var/left_paralysis = HAS_TRAIT(user, TRAIT_PARALYSIS_L_ARM)
var/right_paralysis = HAS_TRAIT(user, TRAIT_PARALYSIS_R_ARM)
if(left_paralysis && right_paralysis)
to_chat(user, "<span class='warning'>You can't tackle without the use of your arms!</span>")
user.face_atom(A)
var/list/modifiers = params2list(params)
@@ -280,6 +285,10 @@
attack_mod -= 2
if(HAS_TRAIT(sacker, TRAIT_GIANT))
attack_mod += 2
var/left_paralysis = HAS_TRAIT(sacker, TRAIT_PARALYSIS_L_ARM)
var/right_paralysis = HAS_TRAIT(sacker, TRAIT_PARALYSIS_R_ARM)
if(left_paralysis || right_paralysis)
attack_mod -= 2
if(ishuman(target))
var/mob/living/carbon/human/S = sacker

View File

@@ -31,9 +31,8 @@ Bonus
var/bleed = FALSE
var/pain = FALSE
threshold_desc = list(
"Resistance 9" = "Doubles the intensity of the immolation effect, but reduces the frequency of all of this symptom's effects.",
"Stage Speed 8" = "Increases explosion radius and explosion damage to the host when the host is wet.",
"Transmission 8" = "Additionally synthesizes chlorine trifluoride and napalm inside the host. More chemicals are synthesized if the resistance 9 threshold has been met."
"Resistance 7" = "Erodes the host's skin, causing them to bleed profusely.",
"Transmission 8" = "Eat's away at the host's musclemass, causing increased fatigue."
)
/datum/symptom/flesh_eating/Start(datum/disease/advance/A)

View File

@@ -263,18 +263,18 @@
/datum/symptom/heal/coma/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
if(M.getBruteLoss() + M.getFireLoss() >= 70 && !active_coma)
to_chat(M, "<span class='warning'>You feel yourself slip into a regenerative coma...</span>")
active_coma = TRUE
addtimer(CALLBACK(src, .proc/coma, M), 60)
if(HAS_TRAIT(M, TRAIT_DEATHCOMA))
return power
else if(M.IsUnconscious() || M.stat == UNCONSCIOUS)
return power * 0.9
else if(M.stat == SOFT_CRIT)
return power * 0.5
else if(M.IsSleeping())
return power * 0.25
else if(M.getBruteLoss() + M.getFireLoss() >= 70 && !active_coma)
to_chat(M, "<span class='warning'>You feel yourself slip into a regenerative coma...</span>")
active_coma = TRUE
addtimer(CALLBACK(src, .proc/coma, M), 60)
else if(M.IsUnconscious() || M.stat == UNCONSCIOUS)
return power * 0.9
/datum/symptom/heal/coma/proc/coma(mob/living/M)
if(deathgasp)

View File

@@ -13,6 +13,8 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
var/save_key
/// Do not attempt to render a preview on examine. If this is on, it will display as \[flavor_name\]
var/examine_no_preview = FALSE
/// Examine FULLY views. Overrides examine_no_preview
var/examine_full_view = FALSE
/datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE, _save_key, _examine_no_preview = FALSE)
. = ..()
@@ -37,7 +39,7 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
if(can_edit && ismob(target)) //but only mobs receive the proc/verb for the time being
var/mob/M = target
LAZYOR(GLOB.mobs_with_editable_flavor_text[M], src)
M.verbs |= /mob/proc/manage_flavor_tests
add_verb(M, /mob/proc/manage_flavor_tests)
if(save_key && ishuman(target))
RegisterSignal(target, COMSIG_HUMAN_PREFS_COPIED_TO, .proc/update_prefs_flavor_text)
@@ -71,6 +73,9 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
examine_list += "<span class='notice'><a href='?src=[REF(src)];show_flavor=[REF(target)]'>\[[flavor_name]\]</a></span>"
return
var/msg = replacetext(text, "\n", " ")
if(examine_full_view)
examine_list += "[msg]"
return
if(length_char(msg) <= 40)
examine_list += "<span class='notice'>[msg]</span>"
else
@@ -113,6 +118,21 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
var/datum/element/flavor_text/F = choices[chosen]
F.set_flavor(src)
/mob/proc/set_pose()
set name = "Set Pose"
set desc = "Sets your temporary flavor text"
set category = "IC"
var/list/L = GLOB.mobs_with_editable_flavor_text[src]
var/datum/element/flavor_text/carbon/temporary/T
for(var/i in L)
if(istype(i, /datum/element/flavor_text/carbon/temporary))
T = i
if(!T)
to_chat(src, "<span class='warning'>Your mob type does not support temporary flavor text.</span>")
return
T.set_flavor(src)
/datum/element/flavor_text/proc/set_flavor(mob/user)
if(!(user in texts_by_atom))
return FALSE
@@ -135,7 +155,7 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
var/static/list/i_dont_even_know_who_you_are = typecacheof(list(/datum/antagonist/abductor, /datum/antagonist/ert,
/datum/antagonist/nukeop, /datum/antagonist/wizard))
/datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE, _save_key = "flavor_text", _examine_no_preview = FALSE)
/datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE, _save_key, _examine_no_preview = FALSE)
if(!iscarbon(target))
return ELEMENT_INCOMPATIBLE
. = ..()
@@ -167,3 +187,19 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
texts_by_atom[user] = ""
if(user.dna)
user.dna.features[save_key] = ""
/datum/element/flavor_text/carbon/temporary
examine_full_view = TRUE
max_len = 1024
/datum/element/flavor_text/carbon/temporary/Attach(datum/target, text, _name, _addendum, _max_len, _always_show, _edit, _save_key, _examine_no_preview)
. = ..()
if(. & ELEMENT_INCOMPATIBLE)
return
if(ismob(target))
add_verb(target, /mob/proc/set_pose)
/datum/element/flavor_Text/carbon/temporary/Detach(datum/source, force)
. = ..()
if(ismob(source))
remove_verb(source, /mob/proc/set_pose)

View File

@@ -377,10 +377,3 @@
hitsound = 'sound/weapons/taserhit.ogg'
w_class = WEIGHT_CLASS_SMALL
breakouttime = 60
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(iscarbon(hit_atom))
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
B.Crossed(hit_atom)
qdel(src)
..()

View File

@@ -33,6 +33,8 @@
//--end of love :'(--
var/snowflake_id //if we set from a config snowflake plushie.
/// wrapper, do not use, read only
var/__ADMIN_SET_TO_ID
var/can_random_spawn = TRUE //if this is FALSE, don't spawn this for random plushies.
/obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id)
@@ -112,10 +114,21 @@
return ..()
/obj/item/toy/plush/vv_get_var(var_name)
if(var_name == NAMEOF(src, __ADMIN_SET_TO_ID))
return debug_variable("__ADMIN: SET SNOWFLAKE ID", snowflake_id, 0, src)
return ..()
/obj/item/toy/plush/vv_edit_var(var_name, var_value)
if(var_name == NAMEOF(src, __ADMIN_SET_TO_ID))
return set_snowflake_from_config(var_value)
return ..()
/obj/item/toy/plush/proc/set_snowflake_from_config(id)
var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
var/list/jsonlist = configlist[id]
ASSERT(jsonlist)
if(!jsonlist)
return FALSE
jsonlist = json_decode(jsonlist)
if(jsonlist["inherit_from"])
var/path = text2path(jsonlist["inherit_from"])
@@ -151,6 +164,7 @@
var/datum/component/squeak/S = GetComponent(/datum/component/squeak)
S?.override_squeak_sounds = squeak_override
snowflake_id = id
return TRUE
/obj/item/toy/plush/handle_atom_del(atom/A)
if(A == grenade)

View File

@@ -189,6 +189,8 @@
while (pulling != null)
var/next_pulling = pulling.pulling
if(next_pulling == pulling)
break // no loops
var/turf/T = get_step(puller.loc, turn(puller.dir, 180))
pulling.can_be_z_moved = FALSE

View File

@@ -98,7 +98,7 @@
var/pck = pick("assasinate","protect")
switch(pck)
if("assasinate")
var/datum/objective/assassinate/A = new
var/datum/objective/assassinate/once/A = new
A.owner = owner
var/list/owners = A.get_owners()
A.find_target(owners,protection)

View File

@@ -873,9 +873,9 @@
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight
name = "cydonian helmet"
desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
icon_state = "knight_cydonia"
icon_state = "hardsuit0-knight_cydonia"
item_state = "knight_yellow"
hardsuit_type = null
hardsuit_type = "knight_cydonia"
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
heat_protection = HEAD

View File

@@ -256,7 +256,7 @@ Contains:
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 50)
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC
//ERT Security
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec

View File

@@ -133,12 +133,12 @@
return TRUE
/datum/job/proc/GetAntagRep()
. = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)]
. = CONFIG_GET(keyed_list/antag_rep)[ckey(title)]
if(. == null)
return antag_rep
/datum/job/proc/GetThreat()
. = CONFIG_GET(keyed_list/job_threat)[lowertext(title)]
. = CONFIG_GET(keyed_list/job_threat)[ckey(title)]
if(. == null)
return threat

View File

@@ -155,16 +155,18 @@
penalize = client.prefs.respawn_restrictions_active
client.prefs.respawn_restrictions_active = penalize
to_chat(src, "<span class='userdanger'>You have been respawned to the lobby. \
message_admins("[key_name_admin(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.")
log_game("[key_name(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.")
var/mob/dead/new_player/N = transfer_to_lobby()
to_chat(N, "<span class='userdanger'>You have been respawned to the lobby. \
Remember to take heed of rules regarding round knowledge - notably, that ALL past lives are forgotten. \
Any character you join as has NO knowledge of round events unless specified otherwise by an admin.</span>")
message_admins("[key_name_admin(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.")
log_game("[key_name(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.")
transfer_to_lobby()
/**
* Actual proc that removes us and puts us back on lobby
*
* Returns the new mob.
*/
/mob/dead/observer/proc/transfer_to_lobby()
if(!client) // if no one's in us we can just be deleted
@@ -179,3 +181,4 @@
var/mob/dead/new_player/M = new /mob/dead/new_player
M.ckey = ckey
return M

View File

@@ -5,7 +5,7 @@
silent = FALSE
losebreath = 0
if(!gibbed)
if(!gibbed && !HAS_TRAIT(src, TRAIT_DEATHCOMA))
emote("deathgasp")
. = ..()

View File

@@ -43,7 +43,7 @@
AddComponent(/datum/component/mood)
AddComponent(/datum/component/combat_mode)
AddElement(/datum/element/flavor_text/carbon, _name = "Flavor Text", _save_key = "flavor_text")
AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!")
AddElement(/datum/element/flavor_text/carbon/temporary, "", "Set Pose (Temporary Flavor Text)", "This should be used only for things pertaining to the current round!", _save_key = null)
AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE)
/mob/living/carbon/human/Destroy()

View File

@@ -14,7 +14,7 @@
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
block_parry_data = /datum/block_parry_data/unarmed/human
default_block_parry_data = /datum/block_parry_data/unarmed/pugilist
default_block_parry_data = /datum/block_parry_data/unarmed/human
//Hair colour and style
var/hair_color = "000"

View File

@@ -62,7 +62,6 @@
H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
H.layer -= 1 //go one layer down so people go over you
ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you
squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you
@@ -103,7 +102,6 @@
REMOVE_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT)
H.update_disabled_bodyparts(silent = TRUE)
H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
H.layer += 1 //go one layer back above!
DISABLE_BITFIELD(H.pass_flags, PASSMOB)
is_puddle = FALSE
if(squeak)

View File

@@ -86,15 +86,6 @@ proc/get_top_level_mob(var/mob/S)
else if(!params)
var/subtle_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN)
if(subtle_emote && !check_invalid(user, subtle_emote))
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
switch(type)
if("Visible")
emote_type = EMOTE_VISIBLE
if("Hearable")
emote_type = EMOTE_AUDIBLE
else
alert("Unable to use this emote, must be either hearable or visible.")
return
message = subtle_emote
else
return FALSE
@@ -111,6 +102,80 @@ proc/get_top_level_mob(var/mob/S)
user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE)
///////////////// SUBTLE 3: DARE DICE
/datum/emote/living/subtler_table
key = "subtler_table"
key_third_person = "subtler_table"
message = null
mob_type_blacklist_typecache = list(/mob/living/brain)
/datum/emote/living/subtler_table/proc/check_invalid(mob/user, input)
if(stop_bad_mime.Find(input, 1, 1))
to_chat(user, "<span class='danger'>Invalid emote.</span>")
return TRUE
return FALSE
/datum/emote/living/subtler_table/run_emote(mob/user, params, type_override = null)
if(!locate(/obj/structure/table) in range(user, 1))
to_chat(user, "There are no tables around you.")
return FALSE
if(jobban_isbanned(user, "emote"))
to_chat(user, "You cannot send subtle emotes (banned).")
return FALSE
else if(user.client && user.client.prefs.muted & MUTE_IC)
to_chat(user, "You cannot send IC messages (muted).")
return FALSE
else if(!params)
var/subtle_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN)
if(subtle_emote && !check_invalid(user, subtle_emote))
message = subtle_emote
else
return FALSE
else
message = params
if(type_override)
emote_type = type_override
. = TRUE
if(!can_run_emote(user))
return FALSE
user.log_message("[message] (TABLE-WRAPPING)", LOG_SUBTLER)
message = "<span class='emote'><b>[user]</b> <i>[user.say_emphasis(message)]</i></span>"
var/list/show_to = list()
var/list/processing = list()
var/safety = 25
for(var/obj/structure/table/T in range(user, 1))
processing |= T
for(var/i in processing)
var/obj/structure/table/T = i
if(safety-- <= 0)
to_chat(user, "Table scan aborted early, some people might have not received the message (max 25)")
break
if(get_dist(T, user) > 7)
continue // nah
processing |= T
for(var/mob/living/M in range(T, 1)) // no ghosts/cameramobs
show_to |= M
var/obj/structure/table/other
other = locate() in get_step(T, NORTH)
if(other)
processing |= other
other = locate() in get_step(T, SOUTH)
if(other)
processing |= other
other = locate() in get_step(T, WEST)
if(other)
processing |= other
other = locate() in get_step(T, EAST)
if(other)
processing |= other
for(var/i in show_to)
var/mob/M = i
M.show_message(message)
///////////////// VERB CODE
/mob/living/verb/subtle()
set name = "Subtle"
@@ -128,3 +193,12 @@ proc/get_top_level_mob(var/mob/S)
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
return
usr.emote("subtler")
///////////////// VERB CODE 3
/mob/living/verb/subtler_table()
set name = "Subtler Around Table"
set category = "IC"
if(GLOB.say_disabled) //This is dumb but it's here because heehoo copypaste, who the FUCK uses this to identify lag?
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
return
usr.emote("subtler_table")

View File

@@ -171,11 +171,13 @@
/datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L)
..()
L.ignore_slowdown(type)
ADD_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
L.update_movespeed()
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
/datum/reagent/drug/methamphetamine/on_mob_end_metabolize(mob/living/L)
L.unignore_slowdown(type)
REMOVE_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
L.update_movespeed()
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
..()

View File

@@ -81,6 +81,12 @@
var/obj/machinery/portable_atmospherics/P = item_to_retrieve.loc
P.disconnect()
P.update_icon()
else if(istype(item_to_retrieve.loc, /obj/machinery/disposal) || istype(item_to_retrieve.loc, /obj/structure/disposalpipe)) //If it's in disposals, only recall the item.
break
else if(istype(item_to_retrieve.loc, /obj/machinery/nuclearbomb)) //I feel like yandev
break //Just to be sure.
item_to_retrieve = item_to_retrieve.loc

View File

@@ -0,0 +1,4 @@
author: "silicons"
delete-after: True
changes:
- bugfix: "things in DEATHCOMA do not deathgasp on death"

View File

@@ -0,0 +1,6 @@
author: "timothyteakettle"
delete-after: True
changes:
- tweak: "slime puddles are no longer layered down one layer"
- tweak: "you cannot tackle with two paralysed arms"
- tweak: "tackling with a single paralysed arm lowers your tackle roll by 2"

View File

@@ -0,0 +1,4 @@
author: "ERP mains"
delete-after: True
changes:
- rscadd: "Subtler Around Table is now a verb"

View File

@@ -0,0 +1,5 @@
author: "silicons"
delete-after: True
changes:
- rscadd: "set-pose has been added"
- tweak: "temporary flavor text renamed to set pose, fully visible in examine"

View File

@@ -0,0 +1,4 @@
author: "HeroWithYay"
delete-after: True
changes:
- bugfix: "Changed description of Necrotizing Fasciitis symptom."

View File

@@ -0,0 +1,4 @@
author: "silicons"
delete-after: True
changes:
- tweak: "Meth and changeling adrenals no longer ignore all slowdowns, rather damage slowdowns."

View File

@@ -0,0 +1,4 @@
author: "silicons"
delete-after: True
changes:
- tweak: "temperature slowdown divisor nerfed to 35 from 20."

View File

@@ -0,0 +1,6 @@
author: "Sonic121x"
delete-after: True
changes:
- rscadd: "alarm ert hardsuit sprite for naga and canine"
- tweak: "adjust the naga ert hardsuit to cover the hand"
- bugfix: "cydonia hardsuit helmet"

View File

@@ -0,0 +1,5 @@
author: "keronshb"
delete-after: True
changes:
- bugfix: "Allows Energy Bola to be caught"
- balance: "This also allows them to be dropped/picked up."

View File

@@ -0,0 +1,5 @@
author: "Putnam3145"
delete-after: True
changes:
- balance: "Regen coma now puts into a coma even from crit or while unconscious."
- bugfix: "Regen coma now properly weakens while asleep."

View File

@@ -0,0 +1,4 @@
author: "DeltaFire15"
delete-after: True
changes:
- tweak: "Instant summons can no longer do wacky stuff with disposals (and nukes)."

View File

@@ -912,7 +912,7 @@ function draw_sdql2(){
var td2 = document.createElement("td");
if(part[2]) {
var a = document.createElement("a");
a.href = "?src=" + part[2] + ";statpanel_item_click=1";
a.href = "?src=" + "_statpanel_" + ";statpanel_item_target=" + part[2] + ";statpanel_item_click=1";
a[textContentKey] = part[1];
td2.appendChild(a);
} else {
@@ -943,7 +943,7 @@ function draw_tickets() {
td2.appendChild(a);
} else if(part[3]){
var a = document.createElement("a");
a.href = "?src=" + part[3] + ";statpanel_item_click=1";
a.href = "?src=_statpanel_" + ";statpanel_item_target=" + part[3] + ";statpanel_item_click=1";
a[textContentKey] = part[1];
td2.appendChild(a);
} else {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 126 KiB