Merge branch 'master' into development

This commit is contained in:
skull132
2018-03-15 12:53:07 +02:00
30 changed files with 38307 additions and 44342 deletions
+16 -8
View File
@@ -133,13 +133,21 @@ mob/living/carbon/human/airflow_hit(atom/A)
Stun(round(airflow_speed * vsc.airflow_stun/2))
. = ..()
zone/proc/movables()
zone/proc/movables(list/origins)
. = list()
for(var/turf/T in contents)
CHECK_TICK
if (!origins || !origins.len)
return
for(var/aa in T)
var/atom/movable/A = aa
if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/abstract/eye))
continue
. += A
var/static/list/movables_tcache = typecacheof(list(/obj/effect, /mob/abstract))
var/atom/movable/AM
for (var/testing_turf in contents)
for (var/am in testing_turf)
AM = am
if (AM.simulated && !AM.anchored && !movables_tcache[AM.type])
for (var/source_turf in origins)
if (get_dist(testing_turf, source_turf) <= EDGE_KNOCKDOWN_MAX_DISTANCE)
.[AM] = TRUE
break
CHECK_TICK
+5 -5
View File
@@ -169,11 +169,11 @@ Class Procs:
var/list/attracted
var/list/repelled
if(differential > 0)
attracted = A.movables()
repelled = B.movables()
attracted = A.movables(connecting_turfs)
repelled = B.movables(connecting_turfs)
else
attracted = B.movables()
repelled = A.movables()
attracted = B.movables(connecting_turfs)
repelled = A.movables(connecting_turfs)
// These are async, with waitfor = FALSE
flow(attracted, abs(differential), 0)
@@ -239,7 +239,7 @@ Class Procs:
var/differential = A.air.return_pressure() - air.return_pressure()
if(abs(differential) >= vsc.airflow_lightest_pressure)
var/list/attracted = A.movables()
var/list/attracted = A.movables(connecting_turfs)
// This call is async, with waitfor = FALSE
flow(attracted, abs(differential), differential < 0)
+1
View File
@@ -7,6 +7,7 @@
#define BLOCKED 3
#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
#define EDGE_KNOCKDOWN_MAX_DISTANCE 16 // Maximum distance between an airflow origin and a movable before knockdown no longer applies.
#define CANPASS_ALWAYS 1
#define CANPASS_DENSITY 2
-2
View File
@@ -137,8 +137,6 @@
#define FLASH_PROTECTION_NONE 0
#define FLASH_PROTECTION_MODERATE 1
#define FLASH_PROTECTION_MAJOR 2
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
@@ -78,3 +78,8 @@
name = "Anti-materiel Rifle"
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
path = /obj/item/weapon/gun/projectile/heavysniper
/datum/uplink_item/item/visible_weapons/chainsaw
name = "Chainsaw"
item_cost = 10
path = /obj/item/weapon/material/twohanded/chainsaw/fueled
@@ -114,35 +114,46 @@
set_security_level("delta")
if(timer > stage1)
radio.autosay("Warning: Brute force attempt on primary firewall detected.", "Self-Destruct Control")
radio.autosay("Critical: Brute force attempt on primary firewall detected.", "Station Authentication Control")
radio.autosay("Notice: Local override recommended.", "Station Authentication Control")
else if(timer > stage2)
radio.autosay("Warning: Brute force attempt on backup firewall detected.")
radio.autosay("Alert: Brute force attempt on backup firewall detected.", "Station Authentication Control")
radio.autosay("Notice: Local override with authentication disk recommended.", "Station Authentication Control")
else
radio.autosay("Self destruct sequence has been activated. Self-destructing in [timer] seconds.", "Self-Destruct Control")
radio.autosay("Emergency: Self-destruct sequence has been activated. Self-destructing in [timer] seconds.", "Station Authentication Control")
radio.autosay("Notice: Deactivate using authentication disk in SAT-Chamber", "Station Authentication Control")
while(timer)
sleep(10)
var/obj/machinery/nuclearbomb/station/N = nuke.resolve()
if(!user || !user.bombing_station || user.stat == DEAD || !N)
radio.autosay("Self destruct sequence has been cancelled.", "Self-Destruct Control")
if(timer < stage2)
radio.autosay("Self-destruct sequence has been cancelled.", "Station Authentication Control")
else
radio.autosay("Brute force attempt has ceased.", "Station Authentication Control")
return
if(N.auth)
radio.autosay("Local Override Engaged - Self-Destruct canceled.", "Self-Destruct Control")
if(timer < stage2)
radio.autosay("Local Override Engaged - Self-Destruct cancelled.", "Station Authentication Control")
else
radio.autosay("Local Override Engaged - Network connection disabled.", "Station Authentication Control")
user.bombing_station = 0
return
if(timer == stage1+1)
radio.autosay("Critical: Primary firewall bypassed.")
radio.autosay("Warning: Brute force attempt on backup firewall detected.")
radio.autosay("Alert: Primary firewall bypassed.")
radio.autosay("Alert: Brute force attempt on backup firewall detected.")
radio.autosay("Notice: Local Override with authentication disk recommended.", "Station Authentication Control")
user.bombing_time = stage1 //Further attempts will only take 900 seconds
if(timer == stage2+1)
radio.autosay("Critical: Backup firewall failed.")
radio.autosay("Self destruct sequence has been activated. Self-destructing in [timer] seconds.", "Self-Destruct Control")
radio.autosay("Emergency: Backup firewall failed.")
radio.autosay("Self-destruct sequence has been activated. Self-destructing in [timer] seconds.", "Station Authentication Control")
radio.autosay("Notice: Deactivate using authentication disk in SAT-Chamber", "Station Authentication Control")
user.bombing_time = stage2 //Further attempts will only take 600 seconds
if(timer in list(2, 3, 4, 5, 10, 30, 60, 90, 120, 240, 300)) // Announcement times. "1" is not intentionally included!
radio.autosay("Self destruct in [timer] seconds.", "Self-Destruct Control")
radio.autosay("Self-destruct in [timer] seconds.", "Station Authentication Control")
if(timer == 1)
radio.autosay("Self destructing now. Have a nice day.", "Self-Destruct Control")
radio.autosay("Self-destruct sequence initiated. Have a nice day", "Station Authentication Control")
timer--
SSticker.station_explosion_cinematic(0,null)
@@ -230,21 +230,21 @@
sleep(duration/5)
if(!user || user.stat == DEAD)
return
command_announcement.Announce("Caution, [current_map.station_name]. We have detected abnormal behaviour in your network. It seems someone is trying to hack your electronic systems. We will update you when we have more information.", "Network Monitoring")
command_announcement.Announce("Info: Abnormal network activity detected. Ongoing hacking attempts detcted. Automatic countermeasures activated. Trace activated.", "Network Monitoring")
sleep(duration/5)
if(!user || user.stat == DEAD)
return
command_announcement.Announce("We started tracing the intruder. Whoever is doing this, they seem to be on the station itself. We suggest checking all network control terminals. We will keep you updated on the situation.", "Network Monitoring")
command_announcement.Announce("Notice: Trace Update. Abnormal network activity originating from: Network terminal aboard [current_map.station_name]. External network connections disabled. Trace cancelled.", "Network Monitoring")
sleep(duration/5)
if(!user || user.stat == DEAD)
return
command_announcement.Announce("This is highly abnormal and somewhat concerning. The intruder is too fast, he is evading our traces. No man could be this fast...", "Network Monitoring")
command_announcement.Announce("Warning: Automatic countermeasures ineffective. Breach of primary network firewall imminent.", "Network Monitoring")
sleep(duration/5)
if(!user || user.stat == DEAD)
return
command_announcement.Announce("We have traced the intrude#, it seem& t( e yo3r AI s7stem, it &# *#ck@ng th$ sel$ destru$t mechani&m, stop i# bef*@!)$#&&@@ <CONNECTION LOST>", "Network Monitoring")
command_announcement.Announce("Error: Network firewall breached. Network integrity compromised.", "Network Monitoring")
else
command_announcement.Announce("We have detected a strong brute-force attack on your firewall which seems to be originating from your AI system. It already controls almost the whole network, and the only thing that's preventing it from accessing the self-destruct is this firewall. You don't have much time before it succeeds.", "Network Monitoring")
command_announcement.Announce("Error: Ongoing hacking attempt. Automatic countermeasures ineffective. Network firewall breached. Network integrity compromised. External network connections disabled.", "Network Monitoring")
user << "## BEGINNING SYSTEM OVERRIDE."
user << "## ESTIMATED DURATION: [round((duration+300)/600)] MINUTES"
user.hacking = 1
+1 -1
View File
@@ -901,7 +901,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/CanChainsaw(var/obj/item/weapon/material/twohanded/chainsaw/ChainSawVar)
return (ChainSawVar.powered && density)
return (ChainSawVar.powered && density && hashatch)
/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob)
if(!istype(usr, /mob/living/silicon))
+5
View File
@@ -104,5 +104,10 @@
name = "empty basket"
icon_state = "chipbasket_empty"
/obj/item/trash/uselessplastic
name = "useless plastic"
icon_state = "useless_plastic"
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
@@ -308,16 +308,16 @@
qdel(src)
// Chainsaws!
/obj/item/weapon/material/twohanded/chainsaw
name = "chainsaw"
desc = "A robust tree-cutting chainsaw intended to cut down various types of invasive spaceplants that grow on the station."
icon_state = "chainsaw_off"
base_icon = "chainsaw_off"
flags = CONDUCT
force = 10
force_wielded = 20
throwforce = 7
w_class = 4
throwforce = 5
w_class = ITEMSIZE_LARGE
sharp = 1
edge = 1
origin_tech = list(TECH_COMBAT = 5)
@@ -327,6 +327,7 @@
applies_material_colour = 0
default_material = "steel"
parry_chance = 5
var/fuel_type = "fuel"
var/opendelay = 30 // How long it takes to perform a door opening action with this chainsaw, in seconds.
var/max_fuel = 300 // The maximum amount of fuel the chainsaw stores.
var/fuel_cost = 1 // Multiplier for fuel cost.
@@ -334,16 +335,26 @@
var/cutting = 0 //Ignore
var/powered = 0 //Ignore
/obj/item/weapon/material/twohanded/chainsaw/op //For events or whatever
name = "bloody chainsaw"
opendelay = 5
max_fuel = 1000
fuel_cost = 0.5
/obj/item/weapon/material/twohanded/chainsaw/Initialize()
. = ..()
create_reagents(max_fuel)
/obj/item/weapon/material/twohanded/chainsaw/fueled/Initialize()
. = ..()
reagents.add_reagent(fuel_type, max_fuel)
/obj/item/weapon/material/twohanded/chainsaw/op //For events or whatever
opendelay = 5
max_fuel = 1000
fuel_cost = 0.5
unbreakable = TRUE
parry_chance = 100 //Gotta punish those validhunters
default_material = "plasteel"
/obj/item/weapon/material/twohanded/chainsaw/op/Initialize()
. = ..()
reagents.add_reagent(fuel_type, max_fuel)
/obj/item/weapon/material/twohanded/chainsaw/proc/PowerUp()
var/turf/T = get_turf(src)
T.audible_message(span("notice", "\The [src] rumbles to life."))
@@ -372,26 +383,36 @@
powered = 0
update_held_icon()
/obj/item/weapon/material/twohanded/chainsaw/shatter(var/consumed)
var/turf/T = get_turf(src)
new /obj/effect/decal/cleanable/blood/oil(T)
new /obj/effect/decal/cleanable/liquid_fuel(T)
new /obj/item/trash/uselessplastic(T)
. = ..()
/obj/item/weapon/material/twohanded/chainsaw/Destroy()
STOP_PROCESSING(SSfast_process, src)
return ..()
/obj/item/weapon/material/twohanded/chainsaw/proc/RemoveFuel(var/amount = 1)
amount = amount * fuel_cost
reagents.remove_reagent("fuel", Clamp(amount,0,reagents.get_reagent_amount("fuel")))
if(reagents.get_reagent_amount("fuel") <= 0)
powered = 0
if(reagents && istype(reagents))
amount *= fuel_cost
reagents.remove_reagent(fuel_type, Clamp(amount,0,reagents.get_reagent_amount(fuel_type)))
if(reagents.get_reagent_amount(fuel_type) <= 0)
PowerDown()
else
PowerDown()
/obj/item/weapon/material/twohanded/chainsaw/process()
//TickRate is 0.1
var/FuelToRemove = 0.1 //0.1 Every 0.1 seconds
if(cutting)
FuelToRemove = 1
playsound(loc, 'sound/weapons/chainsawloop2.ogg', 25, 0, 30)
spark(src, 3, alldirs)
eyecheck(loc)
if(prob(75))
spark(src, 3, alldirs)
if(prob(25))
eyecheck(2,loc)
else
playsound(loc, 'sound/weapons/chainsawloop.ogg', 25, 0, 30)
@@ -399,7 +420,13 @@
/obj/item/weapon/material/twohanded/chainsaw/examine(mob/user)
if(..(user, 1))
user << "A heavy-duty chainsaw meant for cutting wood. Contains [round(reagents.total_volume)] unit\s of fuel."
user << "A heavy-duty chainsaw meant for cutting wood. Contains [round(reagents.get_reagent_amount(fuel_type))] unit\s of fuel."
/obj/item/weapon/material/twohanded/chainsaw/attack(mob/M as mob, mob/living/user as mob)
. = ..()
if(powered)
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
RemoveFuel(3)
/obj/item/weapon/material/twohanded/chainsaw/afterattack(obj/O as obj, mob/user as mob, proximity)
if(!proximity) return
@@ -409,51 +436,32 @@
playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6)
return
else if(powered)
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
RemoveFuel(3)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //No sound spam
if(!istype(O))
user.visible_message(\
"<span class='warning'>[user] revs the chainsaw!.</span>",\
"<span class='warning'>You rev the chainsaw!.</span>",\
"<span class='warning'>You hear a machine rev.</span>"\
)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
RemoveFuel(3)
. = ..()
/obj/item/weapon/material/twohanded/chainsaw/proc/eyecheck(mob/living/carbon/human/H as mob) //Shamefully copied from the welder. Damage values multiplied by 0.1
/obj/item/weapon/material/twohanded/chainsaw/proc/eyecheck(var/multiplier, mob/living/carbon/human/H as mob) //Shamefully copied from the welder. Damage values multiplied by 0.1
if (!istype(H))
return 1
if (!istype(H) || H.status_flags & GODMODE)
return
var/obj/item/organ/eyes/E = H.get_eyes()
if(!E)
if(!istype(E))
return
var/safety = H.eyecheck()
if(H.status_flags & GODMODE)
return
switch(safety)
if(FLASH_PROTECTION_MODERATE)
H << "<span class='warning'>Your eyes sting a little.</span>"
E.damage += rand(1, 2)*0.1
if(E.damage > 12)
H.eye_blurry += rand(3,6)*0.1
if(FLASH_PROTECTION_NONE)
H << "<span class='warning'>Your eyes burn.</span>"
E.damage += rand(2, 4)*0.1
if(E.damage > 10)
E.damage += rand(4,10)*0.1
if(FLASH_PROTECTION_REDUCED)
H << "<span class='danger'>Your equipment intensify the welder's glow. Your eyes itch and burn severely.</span>"
H.eye_blurry += rand(12,20)*0.1
E.damage += rand(12, 16)*0.1
if(safety<FLASH_PROTECTION_MAJOR)
if(E.damage > 10)
H << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
if (E.damage >= E.min_broken_damage)
H << "<span class='danger'>You go blind!</span>"
H.sdisabilities |= BLIND
else if (E.damage >= E.min_bruised_damage)
H << "<span class='danger'>You go blind!</span>"
H.eye_blind = 5
H.eye_blurry = 5
H.disabilities |= NEARSIGHTED
addtimer(CALLBACK(H, /mob/.proc/reset_nearsighted), 100)
var/eye_damage = max(0, (2 - H.eyecheck())*multiplier )
E.damage += eye_damage
if(eye_damage > 0)
H << "<span class='danger'>Some stray sparks fly in your eyes!</span>"
/obj/item/weapon/material/twohanded/chainsaw/AltClick(mob/user as mob)
+9 -7
View File
@@ -60,7 +60,7 @@ var/global/list/ticket_panels = list()
discord_bot.send_to_admins("[key_name(owner_client)]'s request for help has been taken by [key_name(assigned_admin)].")
owner_client.adminhelped = ADMINHELPED
message_admins("<span class='notice'><b>[key_name(assigned_admin)]</b> has assigned themself to <b>[src.owner]'s</b> ticket.</span>")
message_admins("<span class='danger'><b>[key_name(assigned_admin)]</b> has assigned themself to <b>[src.owner]'s</b> ticket.</span>")
to_chat(client_by_ckey(src.owner), "<span class='notice'><b>[assigned_admin] has added themself to your ticket and should respond shortly. Thanks for your patience!</b></span>")
update_ticket_panels()
@@ -106,10 +106,12 @@ proc/get_open_ticket_by_ckey(var/owner)
var/list/dat = list()
var/valid_holder = check_rights(R_MOD|R_ADMIN, FALSE, ticket_panel_window.user)
var/list/ticket_dat = list()
for(var/id = tickets.len, id >= 1, id--)
var/datum/ticket/ticket = tickets[id]
if(C.holder || ticket.owner == C.ckey)
if(valid_holder || ticket.owner == C.ckey)
var/client/owner_client = client_by_ckey(ticket.owner)
var/status = "Unknown status"
var/color = "#6aa84f"
@@ -128,11 +130,11 @@ proc/get_open_ticket_by_ckey(var/owner)
ticket_dat += "Ticket #[id] - [ticket.owner] [owner_client ? "" : "(DC)"] - [status]<br /><a href='byond://?src=\ref[src];action=view;ticket=\ref[ticket]'>VIEW</a>"
if(ticket.status)
ticket_dat += " - <a href='byond://?src=\ref[src];action=pm;ticket=\ref[ticket]'>PM</a>"
if(C.holder)
if(valid_holder)
ticket_dat += " - <a href='byond://?src=\ref[src];action=take;ticket=\ref[ticket]'>[(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]</a>"
if(ticket.status != TICKET_CLOSED && (C.holder || ticket.status == TICKET_OPEN))
if(ticket.status != TICKET_CLOSED && (valid_holder || ticket.status == TICKET_OPEN))
ticket_dat += " - <a href='byond://?src=\ref[src];action=close;ticket=\ref[ticket]'>CLOSE</a>"
if(C.holder)
if(valid_holder)
var/ref_mob = ""
if(owner_client)
ref_mob = "\ref[owner_client.mob]"
@@ -188,7 +190,7 @@ proc/get_open_ticket_by_ckey(var/owner)
if("close")
ticket.close(usr.client)
if("pm")
if(usr.client.holder && ticket.owner != usr.ckey)
if(check_rights(R_MOD|R_ADMIN) && ticket.owner != usr.ckey)
usr.client.cmd_admin_pm(client_by_ckey(ticket.owner), ticket = ticket)
else if(ticket.status == TICKET_ASSIGNED)
// manually check that the target client exists here as to not spam the usr for each logged out admin on the ticket
@@ -222,4 +224,4 @@ proc/get_open_ticket_by_ckey(var/owner)
C.view_tickets()
else
ticket_panel.ticket_panel_window.set_content(ticket_panel.get_dat())
ticket_panel.ticket_panel_window.update()
ticket_panel.ticket_panel_window.update()
+4 -3
View File
@@ -448,9 +448,10 @@ BLIND // can't see anything
..()
update_wearer()
/obj/item/clothing/gloves/on_slotmove()
..()
update_wearer()
/obj/item/clothing/gloves/mob_can_unequip()
. = ..()
if (.)
update_wearer()
///////////////////////////////////////////////////////////////////////
//Head
+4 -3
View File
@@ -80,9 +80,10 @@
..()
update_wearer()
/obj/item/clothing/shoes/magboots/on_slotmove()
..()
update_wearer()
/obj/item/clothing/shoes/magboots/mob_can_unequip()
. = ..()
if (.)
update_wearer()
/obj/item/clothing/shoes/magboots/examine(mob/user)
..(user)
+1
View File
@@ -103,6 +103,7 @@
icon_closed = "jensencoat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight)
/obj/item/clothing/suit/storage/toggle/armor/hos/jensen/Initialize()
. = ..()
+1
View File
@@ -697,6 +697,7 @@ var/list/name_to_material
melting_point = T0C+300
protectiveness = 1 // 4%
flags = MATERIAL_PADDING
hardness = 1
/material/cult
name = "cult"
+1 -1
View File
@@ -26,7 +26,7 @@
icon_state = "folder_white"
/obj/item/weapon/folder/purple
desc = "A gold and blue folder, specifically designed for the Research Division facilities of the company."
desc = "A purple folder, specifically designed for the Research Division facilities of the company."
icon_state = "folder_purple"
/obj/item/weapon/folder/update_icon()
+1
View File
@@ -608,6 +608,7 @@
icon_state = "offhand"
item_state = "nothing"
name = "offhand"
needspin = FALSE
unwield()
if (ismob(loc))
@@ -93,17 +93,10 @@
affect_ingest(M, alien, removed)
/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
switch(alien)
if(IS_VAURCA)
M.adjustToxLoss(1.5 * removed)
return
if(IS_UNATHI)
return
else
digest(M,removed)
..()
if(alien == IS_VAURCA)
M.adjustToxLoss(1.5 * removed)
else if(alien != IS_UNATHI)
digest(M,removed)
/datum/reagent/nutriment/proc/digest(var/mob/living/carbon/M, var/removed)
M.heal_organ_damage(regen_factor * removed, 0)
+1 -1
View File
@@ -542,7 +542,7 @@
name = "Cardox"
id = "cardox"
result = "cardox"
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilzine" = 1)
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilizine" = 1)
result_amount = 3
/datum/chemical_reaction/cardox_removal
+2
View File
@@ -364,6 +364,8 @@
return
if(istype(AM, /obj/effect))
return
if(isprojectile(AM))
return
if(istype(AM, /mob/living))
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
+11
View File
@@ -56,6 +56,13 @@
-->
<div class="commit sansserif">
<h2 class="date">13 March 2018</h2>
<h3 class="author">BurgerBB updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixed various chainsaw bugs.</li>
<li class="rscadd">Added Chainsaws to traitor uplink.</li>
</ul>
<h2 class="date">10 March 2018</h2>
<h3 class="author">Alberyk updated:</h3>
<ul class="changes bgimages16">
@@ -116,6 +123,10 @@
<li class="rscadd">Druid and Cleric wizards can now take their victims for granite.</li>
<li class="rscadd">Added a number of new cocktails made with unathi booze. Many have custom sprites, and one of them is slightly dangerous to non-unathi.</li>
</ul>
<h3 class="author">Lohikar updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">ZAS Knockdown now has a distance cap. (Fixes 'space wind')</li>
</ul>
<h3 class="author">LordFowl updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Batons will now deal both brute and shock damage.</li>
+6
View File
@@ -5218,6 +5218,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Druid and Cleric wizards can now take their victims for granite.
- rscadd: Added a number of new cocktails made with unathi booze. Many have custom
sprites, and one of them is slightly dangerous to non-unathi.
Lohikar:
- bugfix: ZAS Knockdown now has a distance cap. (Fixes 'space wind')
LordFowl:
- tweak: Batons will now deal both brute and shock damage.
- tweak: Electricity system modified to be more realistic in its arcing and damage,
@@ -5232,3 +5234,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
kevinz000:
- rscadd: Projectiles have recieved a major overhaul into pixel projectiles processed
by subsystem a la TG.
2018-03-13:
BurgerBB:
- bugfix: Fixed various chainsaw bugs.
- rscadd: Added Chainsaws to traitor uplink.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff
+5
View File
@@ -19093,6 +19093,11 @@
d2 = 4;
icon_state = "2-4"
},
/obj/structure/cable/green{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/tiled/white,
/area/medical/patient_wing)
"HM" = (
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+13 -13
View File
@@ -49776,7 +49776,7 @@ bU
bU
bU
aw
aa
aw
aa
aa
aa
@@ -50033,7 +50033,7 @@ bU
bU
bU
aw
aa
aw
aa
aa
aa
@@ -50290,7 +50290,7 @@ bU
bU
bU
aw
aa
aw
aa
aa
aa
@@ -50803,7 +50803,7 @@ bU
bU
bU
bU
aw
bU
aw
aw
aa
@@ -51061,7 +51061,7 @@ bU
bU
bU
bU
bU
aw
aw
aa
aa
@@ -52089,7 +52089,7 @@ bU
bU
bU
bU
aw
bU
aw
aa
nx
@@ -52346,7 +52346,7 @@ bU
bU
bU
bU
aw
bU
aw
aa
nx
@@ -52860,7 +52860,7 @@ bU
bU
bU
bU
aw
bU
aw
aa
nx
@@ -53117,7 +53117,7 @@ bU
bU
bU
bU
aw
bU
aw
aa
aa
@@ -54145,7 +54145,7 @@ bU
bU
bU
bU
bU
aw
aw
aa
aa
@@ -54658,7 +54658,7 @@ bU
bU
bU
bU
bU
aw
aw
aa
aa
@@ -55173,7 +55173,7 @@ bU
bU
bU
aw
aa
aw
aa
aa
aa
@@ -55430,7 +55430,7 @@ bU
bU
bU
aw
aa
aw
aa
aa
aa