Adds the Oblivion Enforcer wizard loadout (#21920)

* initial addition

* adds wall/airlock obliteration
this definitely needs to be tuned a bit numbers-wise

* adds TRAIT_SUPERMATTER_IMMUNE & gloves

* adds more checks for the supermatter immune trait

* removes SM tongs logic from the halberd
Realistically, you would never actually have the halberd and tongs

* makes slivers bulky

* dusting downed people
also removing a useless assigned variable i missed

* adds the (incomplete) loadout

* halberd buff

* adds robes + sprites

* oops

* halberd icons

* knockdown

* stuff

* timer shortening

* species sprites part 2

* animation for dusting walls

* Apply suggestions from code review

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* early return

* parry numbers!

* Update code/modules/power/engines/supermatter/supermatter.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* dgamer review

* dgamer review + no more pulling

* reverts early return thingamajig

* Update code/modules/power/engines/supermatter/supermatter.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* removes `get_turf`

* hal review pt 1

* hal review pt. 2

* Update code/game/objects/items/theft_items.dm

Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>

* `carve_sliver` proc

* unfucks icons

* Apply suggestions from code review

Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>

---------

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
This commit is contained in:
JimKil3
2023-09-10 22:15:12 +01:00
committed by GitHub
co-authored by Henri215 DGamerL Luc Charlie
parent e59f0e8aea
commit aaad2a5aba
45 changed files with 290 additions and 23 deletions
+3
View File
@@ -213,6 +213,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
//***** ITEM AND MOB TRAITS *****//
/// Show what machine/door wires do when held.
#define TRAIT_SHOW_WIRE_INFO "show_wire_info"
///Immune to the SM / makes you immune to it when worn
#define TRAIT_SUPERMATTER_IMMUNE "supermatter_immune"
//***** ITEM TRAITS *****//
#define TRAIT_BUTCHERS_HUMANS "butchers_humans"
@@ -270,6 +272,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_WAS_BATONNED "batonged"
#define CLOWN_EMAG "clown_emag"
#define MODSUIT_TRAIT "modsuit_trait"
#define ENFORCER_GLOVES "enforcer_gloves"
//quirk traits
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
+3 -1
View File
@@ -80,10 +80,12 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CONTORTED_BODY" = TRAIT_CONTORTED_BODY,
"TRAIT_DEFLECTS_PROJECTILES" = TRAIT_DEFLECTS_PROJECTILES,
"TRAIT_TABLE_LEAP" = TRAIT_TABLE_LEAP,
"TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS
"TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS,
"TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE
),
/obj/item = list(
"TRAIT_SHOW_WIRE_INFO" = TRAIT_SHOW_WIRE_INFO,
"TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE,
"TRAIT_BUTCHER_HUMANS" = TRAIT_BUTCHERS_HUMANS,
"TRAIT_CMAGGED" = TRAIT_CMAGGED,
"TRAIT_FORCES_OPEN_DOORS" = TRAIT_FORCES_OPEN_DOORS_ITEM,
+64
View File
@@ -856,3 +856,67 @@ GLOBAL_LIST_EMPTY(multiverse)
/obj/item/reagent_containers/food/drinks/everfull/proc/magic_fill(reagent_choice)
reagents.clear_reagents()
reagents.add_reagent(reagent_choice, volume)
//Oblivion Enforcer clothing (the halberd and gloves are defined elsewhere)
/obj/item/clothing/head/hooded/oblivion
name = "Oblivion Enforcer's hood"
desc = "A hood worn by an Oblivion Enforcer."
icon_state = "oblivionhood"
flags = BLOCKHAIR
flags_inv = HIDEFACE
flags_cover = HEADCOVERSEYES
armor = list(MELEE = 20, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, RAD = INFINITY, FIRE = 5, ACID = 5)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
magical = TRUE
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/head.dmi',
"Grey" = 'icons/mob/clothing/species/grey/head.dmi',
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
"Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi',
"Unathi" = 'icons/mob/clothing/species/unathi/head.dmi',
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi'
)
/obj/item/clothing/suit/hooded/oblivion
name = "Oblivion Enforcer's robes"
desc = "A set of armored, radiation-proof robes worn by Oblivion Enforcers."
icon_state = "oblivionarmor"
item_state = "oblivionarmor"
body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
hoodtype = /obj/item/clothing/head/hooded/oblivion
allowed = list(/obj/item/supermatter_halberd, /obj/item/nuke_core/supermatter_sliver)
armor = list(MELEE = 35, BULLET = 20, LASER = 35, ENERGY = 10, BOMB = 15, RAD = INFINITY, FIRE = 5, ACID = 5)
flags_inv = HIDEJUMPSUIT | HIDESHOES | HIDETAIL | HIDESHOES
flags = THICKMATERIAL
magical = TRUE
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/suit.dmi',
"Grey" = 'icons/mob/clothing/species/grey/suit.dmi',
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
"Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi',
"Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi',
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi'
)
/obj/item/clothing/suit/hooded/oblivion/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
/obj/item/clothing/mask/gas/voice_modulator/oblivion
name = "Oblivion Enforcer's mask"
desc = "The mask of an Oblivion Enforcer. Don't forget to turn it on before giving your one-liners!"
icon_state = "oblivionmask"
item_state = "oblivionmask"
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/mask.dmi',
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi'
)
+20
View File
@@ -99,3 +99,23 @@
wizid.SetOwnerInfo(user)
wizid.UpdateName()
wizid.RebuildHTML()
/datum/spellbook_entry/loadout/oblivion
name = "Oblivion Enforcer"
desc = "The Oblivion Order is an isolated clique of monks that revere supermatter. \
Oblivion Enforcers are how the Order imposes their will on the universe as a whole. By taking this loadout, \
you give up your identity and become a faceless hand of the Order. <br>\
You will be completely protected from the effects of supermatter by the items granted here, so far as to \
allow you to pick up and throw supermatter slivers, which your halberd can cut from the engine. <br>\
</i>Provides a Supermatter Halberd, Oblivion Enforcer robes, and an air tank, as well as Instant Summons, Lightning Bolt, Ethereal Jaunt, and Summon Supermatter Crystal.<i>"
items_path = list(/obj/item/supermatter_halberd, /obj/item/clothing/gloves/color/white/supermatter_immune, \
/obj/item/clothing/suit/hooded/oblivion, /obj/item/clothing/mask/gas/voice_modulator/oblivion, /obj/item/tank/internals/emergency_oxygen/double)
spells_path = list(/obj/effect/proc_holder/spell/ethereal_jaunt, /obj/effect/proc_holder/spell/summonitem, \
/obj/effect/proc_holder/spell/charge_up/bounce/lightning, /obj/effect/proc_holder/spell/aoe/conjure/summon_supermatter)
category = "Unique"
destroy_spellbook = TRUE
/datum/spellbook_entry/loadout/oblivion/OnBuy(mob/living/carbon/human/user, obj/item/spellbook/book)
if(!user)
return
ADD_TRAIT(user, SM_HALLUCINATION_IMMUNE, MAGIC_TRAIT)
@@ -398,3 +398,32 @@
/obj/effect/temp_visual/rcd_effect/reverse_short
icon_state = "rcd_short_reverse"
duration = 3.1 SECONDS
/obj/effect/temp_visual/obliteration
duration = 2 SECONDS
/obj/effect/temp_visual/obliteration/Initialize(mapload, atom/target)
. = ..()
if(isobj(target))
loc = target.loc
icon = target.icon
icon_state = target.icon_state
alpha = target.alpha
dir = target.dir
update_icon()
var/obj/effect/dusting_anim/dust_effect = new(loc, UID())
filters += filter(type = "displace", size = 256, render_source = "*snap[UID()]")
animate(src, alpha = 0, time = 2 SECONDS, easing = (EASE_IN | SINE_EASING))
QDEL_IN(dust_effect, 20)
return TRUE
/obj/effect/temp_visual/obliteration_rays
duration = 1.25 SECONDS
/obj/effect/temp_visual/obliteration_rays/Initialize(mapload)
. = ..()
var/new_filter = isnull(get_filter("ray"))
ray_filter_helper(1, 40, "#ffd04f", 6, 20)
if(new_filter)
animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1)
animate(offset = 0, time = 10 SECONDS)
+6 -1
View File
@@ -157,6 +157,7 @@
desc = "A tiny, highly volatile sliver of a supermatter crystal. Do not handle without protection!"
icon_state = "supermatter_sliver"
pulseicon = "supermatter_sliver_pulse"
w_class = WEIGHT_CLASS_BULKY //can't put it into bags
layer = ABOVE_MOB_LAYER + 0.02
/obj/item/nuke_core/supermatter_sliver/process()
@@ -170,7 +171,9 @@
/obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes
return
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(mob/user) // no drag memes
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
return TRUE
return FALSE
/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/I, mob/living/user, params)
@@ -224,6 +227,8 @@
/obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user)
..()
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
return TRUE //yay sliver throwing memes!
if(!isliving(user) || user.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions
return FALSE
user.visible_message("<span class='danger'>[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!</span>",
@@ -984,3 +984,99 @@
return ..()
#undef BROOM_PUSH_LIMIT
/obj/item/supermatter_halberd //Supermatter Halberd, used by Oblivion Enforcers
name = "supermatter halberd"
desc = "The revered weapon of Oblivion Enforcers, used to enforce the Order's will."
icon_state = "smhalberd0"
base_icon_state = "smhalberd"
force = 5
sharp = TRUE
damtype = BURN
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
throwforce = 15
toolspeed = 0.25
attack_verb = list("enlightened", "enforced", "cleaved", "stabbed", "whacked")
hitsound = 'sound/weapons/bladeslice.ogg'
resistance_flags = FIRE_PROOF
var/static/list/obliteration_targets = list(/turf/simulated/wall, /obj/machinery/door/airlock)
/// Whether we'll knockdown on hit
var/charged = TRUE
/obj/item/supermatter_halberd/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT) //so it can't be dusted by the SM
AddComponent(/datum/component/parry, _stamina_constant = 0, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES)
AddComponent(/datum/component/two_handed, force_wielded = 40, force_unwielded = force, icon_wielded = "[base_icon_state]1")
/obj/item/supermatter_halberd/update_icon_state()
icon_state = "[base_icon_state]0"
return ..()
/obj/item/supermatter_halberd/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if(!HAS_TRAIT(src, TRAIT_WIELDED))
return
if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) //same behavior as a fireaxe for windows
var/obj/structure/W = A
W.obj_destruction("fireaxe")
//dusting dead people + knocking down people
if(isliving(A))
var/mob/living/target = A
if(target.stat == DEAD)
visible_message("<span class='danger'>[user] raises [src] high, ready to bring it down on [target]!</span>")
if(do_after(user, 1 SECONDS, TRUE, target))
visible_message("<span class='danger'>[user] brings down [src], obliterating [target] with a heavy blow!</span>")
playsound(loc, 'sound/effects/supermatter.ogg', 50, TRUE)
target.dust()
return
to_chat(user, "<span class='notice'>You lower [src]. There'll be time to obliterate them later...</span>")
return
if(charged)
playsound(loc, 'sound/magic/lightningbolt.ogg', 5, TRUE)
target.visible_message("<span class='danger'>[src] flares with energy and shocks [target]!</span>", \
"<span class='userdanger'>You're shocked by [src]!</span>", \
"<span class='warning'>You hear shocking.</span>")
target.KnockDown(4 SECONDS)
do_sparks(3, FALSE, src)
charged = FALSE
addtimer(CALLBACK(src, PROC_REF(recharge)), 4 SECONDS)
//walls and airlock obliteration logic
if(!is_type_in_list(A, obliteration_targets))
return
if(istype(A, /turf/simulated/wall/indestructible))
return
to_chat(user, "<span class='notice'>You start to obliterate [A].</span>")
playsound(loc, hitsound, 50, TRUE)
var/obj/effect/temp_visual/obliteration_rays/rays = new(get_turf(A))
if(do_after(user, 5 SECONDS * toolspeed, target = A))
new /obj/effect/temp_visual/obliteration(A, A)
playsound(loc, 'sound/effects/supermatter.ogg', 25, TRUE)
if(iswallturf(A))
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating)
return
if(istype(A, /obj/machinery/door/airlock))
qdel(A)
return
qdel(rays)
return
/obj/item/supermatter_halberd/proc/recharge()
charged = TRUE
playsound(loc, 'sound/machines/sm/accent/normal/1.ogg', 25, TRUE)
@@ -204,3 +204,28 @@
name = "gloves of headpats"
desc = "You feel the irresistable urge to give headpats by merely glimpsing these."
accepted_intents = list(INTENT_HELP)
/obj/item/clothing/gloves/color/white/supermatter_immune
name = "hypernobilium weave gloves"
desc = "Sleek, white gloves woven from fabric doused in hypernobilium using a process known only to the Oblivion Order."
siemens_coefficient = 0
icon_state = "obliviongauntlets"
item_state = "obliviongauntlets"
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/gloves.dmi',
"Grey" = 'icons/mob/clothing/species/grey/gloves.dmi',
"Drask" = 'icons/mob/clothing/species/drask/gloves.dmi'
)
/obj/item/clothing/gloves/color/white/supermatter_immune/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
/obj/item/clothing/gloves/color/white/supermatter_immune/equipped(mob/user, slot, initial)
. = ..()
ADD_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
/obj/item/clothing/gloves/color/white/supermatter_immune/dropped(mob/user, silent)
. = ..()
REMOVE_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
@@ -749,6 +749,9 @@
/obj/machinery/atmospherics/supermatter_crystal/attack_hand(mob/living/user)
..()
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
user.visible_message("<span class='notice'>[user] reaches out and pokes [src] harmlessly...somehow.</span>", "<span class='notice'>You poke [src].</span>")
return
dust_mob(user, cause = "hand")
/obj/machinery/atmospherics/supermatter_crystal/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
@@ -770,32 +773,39 @@
return
if(moveable && default_unfasten_wrench(user, I, time = 20))
return
if(istype(I, /obj/item/scalpel/supermatter))
if(ishuman(user))
var/mob/living/carbon/human/M = user
var/obj/item/scalpel/supermatter/scalpel = I
to_chat(M, "<span class='notice'>You carefully begin to scrape [src] with [I]...</span>")
if(I.use_tool(src, M, 10 SECONDS, volume = 100))
if(scalpel.uses_left)
to_chat(M, "<span class='danger'>You extract a sliver from [src], and it begins to react violently!</span>")
matter_power += 800
scalpel.uses_left--
if(!scalpel.uses_left)
to_chat(M, "<span class='boldwarning'>A tiny piece of [I] falls off, rendering it useless!</span>")
if(!ishuman(user))
return
var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
var/mob/living/carbon/human/H = user
var/obj/item/scalpel/supermatter/scalpel = I
var/obj/item/retractor/supermatter/tongs = M.is_in_hands(/obj/item/retractor/supermatter)
if(!scalpel.uses_left)
to_chat(H, "<span class='warning'>[scalpel] isn't sharp enough to carve a sliver off of [src]!</span>")
return
var/obj/item/nuke_core/supermatter_sliver/sliver = carve_sliver(scalpel, H)
if(sliver)
scalpel.uses_left--
if(!scalpel.uses_left)
to_chat(H, "<span class='boldwarning'>A tiny piece falls off of [scalpel]'s blade, rendering it useless!</span>")
var/obj/item/retractor/supermatter/tongs = H.is_in_hands(/obj/item/retractor/supermatter)
if(tongs && !tongs.sliver)
tongs.sliver = sliver
sliver.forceMove(tongs)
tongs.icon_state = "supermatter_tongs_loaded"
tongs.item_state = "supermatter_tongs_loaded"
to_chat(H, "<span class='notice'>You pick up [sliver] with [tongs]!</span>")
if(tongs && !tongs.sliver)
tongs.sliver = S
S.forceMove(tongs)
tongs.icon_state = "supermatter_tongs_loaded"
tongs.item_state = "supermatter_tongs_loaded"
to_chat(M, "<span class='notice'>You pick up [S] with [tongs]!</span>")
else
to_chat(user, "<span class='warning'>You fail to extract a sliver from [src]! [I] isn't sharp enough anymore.</span>")
return
if(istype(I, /obj/item/supermatter_halberd))
carve_sliver(I, user)
return
if(istype(I, /obj/item/retractor/supermatter))
to_chat(user, "<span class='notice'>[I] bounces off [src], you need to cut a sliver off first!</span>")
else if(user.drop_item())
@@ -809,6 +819,10 @@
radiation_pulse(src, 150, 4)
/obj/machinery/atmospherics/supermatter_crystal/Bumped(atom/movable/AM)
if(HAS_TRAIT(AM, TRAIT_SUPERMATTER_IMMUNE))
return
if(isliving(AM))
AM.visible_message("<span class='danger'>[AM] slams into [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!</span>",\
"<span class='userdanger'>You slam into [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
@@ -917,7 +931,14 @@
remove_filter("outline")
QDEL_NULL(warp)
/obj/machinery/atmospherics/supermatter_crystal/proc/carve_sliver(obj/item/tool, mob/living/user)
to_chat(user, "<span class='notice'>You begin carving a sliver off of [src]...</span>")
if(tool.use_tool(src, user, 10 SECONDS, volume = 100))
to_chat(user, "<span class='danger'>You carve a sliver off of [src], and it begins to react violently!</span>")
matter_power += 800
var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
return S
// Change how bright the rock is
/obj/machinery/atmospherics/supermatter_crystal/proc/lights()
@@ -1018,6 +1039,8 @@
var/mob/M = P
if(M.mob_negates_gravity())
continue //You can't pull someone nailed to the deck
if(HAS_TRAIT(M, TRAIT_SUPERMATTER_IMMUNE))
continue
else if(M.buckled)
var/atom/movable/buckler = M.buckled
if(buckler.unbuckle_mob(M, TRUE))
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 B

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 980 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 B

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 KiB

After

Width:  |  Height:  |  Size: 550 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 136 KiB