TG: Updated toilets. You can now crowbar open the cistern and hide stuff in there.

Recoded stunbatons, and put them into their own stunbaton.dm. They should
function more or less the same, there's a few differences.
Recoded rechargers, they function exactly the same, but should be a bit more
responsive now.

Fixed  issue 475 .

Filing cabinets, photocopiers, and hydroponics trays are now unwrenchable (the
latter by request of Cheridan. It may need balancing, or more steps to
unanchor.)
This commit is contained in:
Erthilo
2012-06-14 17:46:43 +01:00
parent 86b6138dc7
commit d099ebd4a1
12 changed files with 249 additions and 217 deletions

View File

@@ -732,6 +732,7 @@
#include "code\game\objects\items\weapons\plant_bag.dm" #include "code\game\objects\items\weapons\plant_bag.dm"
#include "code\game\objects\items\weapons\RCD.dm" #include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RSF.dm" #include "code\game\objects\items\weapons\RSF.dm"
#include "code\game\objects\items\weapons\stunbaton.dm"
#include "code\game\objects\items\weapons\stungloves.dm" #include "code\game\objects\items\weapons\stungloves.dm"
#include "code\game\objects\items\weapons\surgery_limbattachment.dm" #include "code\game\objects\items\weapons\surgery_limbattachment.dm"
#include "code\game\objects\items\weapons\surgery_tools.dm" #include "code\game\objects\items\weapons\surgery_tools.dm"

View File

@@ -355,21 +355,6 @@
details = 1 details = 1
origin_tech = "magnets=4;biotech=2" origin_tech = "magnets=4;biotech=2"
/obj/item/weapon/melee/baton
name = "stun baton"
desc = "The police baton of the future."
icon_state = "stunbaton"
item_state = "baton"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 15
throwforce = 7
w_class = 3
var/charges = 10.0
var/maximum_charges = 10.0
var/status = 0
origin_tech = "combat=2"
/*/obj/item/weapon/melee/chainofcommand /*/obj/item/weapon/melee/chainofcommand
name = "chain of command" name = "chain of command"
desc = "The Captain is first and all other heads are last." desc = "The Captain is first and all other heads are last."

View File

@@ -741,6 +741,14 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
playsound(src.loc, 'spray3.ogg', 50, 1, -6) playsound(src.loc, 'spray3.ogg', 50, 1, -6)
del(O) del(O)
src.updateicon() src.updateicon()
else if(istype(O, /obj/item/weapon/wrench))
playsound(loc, 'Ratchet.ogg', 50, 1)
anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
else if(istype(O, /obj/item/weapon/shovel))
if(istype(src, /obj/machinery/hydroponics/soil))
user << "You clear up the [src]!"
del(src)
return return

View File

@@ -1,94 +1,85 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
obj/machinery/recharger obj/machinery/recharger
anchored = 1 name = "recharger"
icon = 'stationobjs.dmi' icon = 'stationobjs.dmi'
icon_state = "recharger0" icon_state = "recharger0"
name = "recharger" anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 4 idle_power_usage = 4
active_power_usage = 250 active_power_usage = 250
var/obj/item/weapon/charging = null
var/obj/item/weapon/gun/energy/charging = null obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
var/obj/item/weapon/melee/baton/charging2 = null
attackby(obj/item/weapon/G as obj, mob/user as mob)
if(issilicon(user)) if(issilicon(user))
return return
if (istype(G, /obj/item/weapon/gun/energy)) if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton))
if (src.charging || src.charging2) if(charging)
return return
if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow)) var/area/a = get_area(src)
user << "Your gun's recharge port was removed to make room for a miniaturized reactor."
return
if (istype(G, /obj/item/weapon/gun/energy/staff))
user << "It's a wooden staff, not a gun!"
return
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
if(!isarea(a)) if(!isarea(a))
return return
if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
user << "\red \The [src] blinks red as you try to insert the item!" user << "\red The [name] blinks red as you try to insert the item!"
return
if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
user << "<span class='notice'>Your gun's recharge port was removed to make room for a miniaturized reactor.</span>"
return
if (istype(G, /obj/item/weapon/gun/energy/staff))
return return
user.drop_item() user.drop_item()
G.loc = src G.loc = src
src.charging = G charging = G
use_power = 2
else if (istype(G, /obj/item/weapon/melee/baton))
if (src.charging || src.charging2)
return
user.drop_item()
G.loc = src
src.charging2 = G
use_power = 2 use_power = 2
update_icon()
else if(istype(G, /obj/item/weapon/wrench)) else if(istype(G, /obj/item/weapon/wrench))
if (src.charging || src.charging2) if(charging)
user << "\red Remove the weapon first!" user << "\red Remove the weapon first!"
return return
anchored = !anchored anchored = !anchored
user << "You [anchored ? "attach" : "detach"] the recharger [anchored ? "to" : "from"] the ground" user << "You [anchored ? "attached" : "detached"] the recharger."
playsound(src.loc, 'Ratchet.ogg', 75, 1) playsound(loc, 'Ratchet.ogg', 75, 1)
attack_hand(mob/user as mob) obj/machinery/recharger/attack_hand(mob/user as mob)
src.add_fingerprint(user) add_fingerprint(user)
if(ishuman(user))
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MACHINERY",src,user:wear_suit)
return
if (src.charging) if(charging)
src.charging.update_icon() charging.update_icon()
src.charging.loc = src.loc charging.loc = loc
src.charging = null charging = null
use_power = 1
if(src.charging2)
src.charging2.update_icon()
src.charging2.loc = src.loc
src.charging2 = null
use_power = 1 use_power = 1
update_icon()
attack_paw(mob/user as mob) obj/machinery/recharger/attack_paw(mob/user as mob)
if((ticker && ticker.mode.name == "monkey")) if((ticker && ticker.mode.name == "monkey"))
return src.attack_hand(user) return attack_hand(user)
process() obj/machinery/recharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored) if(stat & (NOPOWER|BROKEN) || !anchored)
return return
if (src.charging) if(charging)
if (src.charging.power_supply.charge < src.charging.power_supply.maxcharge) if(istype(charging, /obj/item/weapon/gun/energy))
src.charging.power_supply.give(100) var/obj/item/weapon/gun/energy/E = charging
src.icon_state = "recharger1" if(E.power_supply.charge < E.power_supply.maxcharge)
E.power_supply.give(100)
icon_state = "recharger1"
use_power(250) use_power(250)
else else
src.icon_state = "recharger2" icon_state = "recharger2"
else if (src.charging2) return
if (src.charging2.charges < src.charging2.maximum_charges) if(istype(charging, /obj/item/weapon/melee/baton))
src.charging2.charges++ var/obj/item/weapon/melee/baton/B = charging
src.icon_state = "recharger1" if(B.charges < initial(B.charges))
use_power(250) B.charges++
icon_state = "recharger1"
use_power(150)
else else
src.icon_state = "recharger2" icon_state = "recharger2"
obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
if(charging)
icon_state = "recharger1"
else else
src.icon_state = "recharger0" icon_state = "recharger0"

View File

@@ -0,0 +1,95 @@
/obj/item/weapon/melee/baton
name = "stun baton"
desc = "A stun baton for incapacitating people with."
icon_state = "stunbaton"
item_state = "baton"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 10
throwforce = 7
w_class = 3
var/charges = 10
var/status = 0
origin_tech = "combat=2"
/obj/item/weapon/melee/baton/update_icon()
if(status)
icon_state = "stunbaton_active"
else
icon_state = "stunbaton"
/obj/item/weapon/melee/baton/attack_self(mob/user as mob)
if(status && (CLUMSY in user.mutations) && prob(50))
user << "\red You grab the [src] on the wrong side."
user.Weaken(30)
charges--
if(charges < 1)
status = 0
update_icon()
return
if(charges > 0)
status = !status
user << "<span class='notice'>\The [src] is now [status ? "on" : "off"].</span>"
playsound(src.loc, "sparks", 75, 1, -1)
update_icon()
else
status = 0
user << "<span class='warning'>\The [src] is out of charge.</span>"
add_fingerprint(user)
/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
if(status && (CLUMSY in user.mutations) && prob(50))
user << "<span class='danger'>You accidentally hit yourself with the [src]!</span>"
user.Weaken(30)
charges--
if(charges < 1)
status = 0
update_icon()
return
var/mob/living/carbon/human/H = M
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(isrobot(M))
..()
return
if(user.a_intent != "help")
if(!..()) return
H.apply_effect(5, WEAKEN, 0)
H.visible_message("<span class='danger'>[M] has been beaten with the [src] by [user]!</span>")
playsound(src.loc, "swing_hit", 50, 1, -1)
else if(!status)
H.visible_message("<span class='warning'>[M] has been prodded with the [src] by [user]. Luckily it was off.</span>")
return
if(status)
H.apply_effect(10, STUN, 0)
H.apply_effect(10, WEAKEN, 0)
H.apply_effect(10, STUTTER, 0)
user.lastattacked = M
H.lastattacker = user
charges--
H.visible_message("<span class='danger'>[M] has been stunned with the [src] by [user]!</span>")
playsound(src.loc, "sparks", 75, 1, -1)
if(charges < 1)
status = 0
update_icon()
add_fingerprint(user)
/obj/item/weapon/melee/baton/emp_act(severity)
switch(severity)
if(1)
charges = 0
if(2)
charges = max(0, charges - 5)
if(charges < 1)
status = 0
update_icon()

View File

@@ -3,7 +3,7 @@ CONTAINS:
SWORD SWORD
BLADE BLADE
AXE AXE
STUN BATON CLASSIC BATON
ENERGY SHIELD (where else should i even put this) ENERGY SHIELD (where else should i even put this)
*/ */
@@ -95,104 +95,6 @@ ENERGY SHIELD (where else should i even put this)
src.add_fingerprint(user) src.add_fingerprint(user)
return return
// STUN BATON
/obj/item/weapon/melee/baton/update_icon()
if(src.status)
icon_state = "stunbaton_active"
else
icon_state = "stunbaton"
/obj/item/weapon/melee/baton/attack_self(mob/user as mob)
src.status = !( src.status )
if ((CLUMSY in user.mutations) && prob(50))
usr << "\red You grab the stunbaton on the wrong side."
usr.Paralyse(60)
return
if (src.status)
user << "\blue The baton is now on."
playsound(src.loc, "sparks", 75, 1, -1)
else
user << "\blue The baton is now off."
playsound(src.loc, "sparks", 75, 1, -1)
update_icon()
src.add_fingerprint(user)
return
/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
if ((CLUMSY in usr.mutations) && prob(50))
usr << "\red You grab the stunbaton on the wrong side."
usr.Weaken(30)
return
src.add_fingerprint(user)
var/mob/living/carbon/human/H = M
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(isrobot(M))
..()
return
if (status == 0 || (status == 1 && charges ==0))
if(user.a_intent == "hurt")
if(!..()) return
M.Weaken(5)
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red <B>[M] has been beaten with the stun baton by [user]!</B>", 1)
if(status == 1 && charges == 0)
user << "\red Not enough charge"
return
else
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red <B>[M] has been prodded with the stun baton by [user]! Luckily it was off.</B>", 1)
if(status == 1 && charges == 0)
user << "\red Not enough charge"
return
if((charges > 0 && status == 1) && (istype(H, /mob/living/carbon)))
flick("baton_active", src)
if (user.a_intent == "hurt")
if(!..()) return
playsound(src.loc, 'Genhit.ogg', 50, 1, -1)
if(isrobot(user))
var/mob/living/silicon/robot/R = user
R.cell.charge -= 20
else
charges--
if (M.stuttering < 1 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 1
M.Stun(1)
M.Weaken(1)
else
playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
if(isrobot(user))
var/mob/living/silicon/robot/R = user
R.cell.charge -= 20
else
charges--
if (M.stuttering < 10 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 10
M.Stun(10)
M.Weaken(10)
user.lastattacked = M
M.lastattacker = user
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red <B>[M] has been stunned with the stun baton by [user]!</B>", 1, "\red You hear someone fall", 2)
/obj/item/weapon/melee/baton/emp_act(severity)
switch(severity)
if(1)
src.charges = 0
if(2)
charges -= 5
/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob) /obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50)) if ((CLUMSY in user.mutations) && prob(50))
user << "\red You club yourself over the head." user << "\red You club yourself over the head."

View File

@@ -4,28 +4,56 @@
name = "toilet" name = "toilet"
desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."
icon = 'watercloset.dmi' icon = 'watercloset.dmi'
icon_state = "toilet0" icon_state = "toilet00"
density = 0 density = 0
anchored = 1 anchored = 1
var/open = 0 var/open = 0 //if the lid is up
var/mob/swirlie = null var/cistern = 0 //if the cistern bit is open
var/w_items = 0 //the combined w_class of all the items in the cistern
var/mob/swirlie = null //the mob being given a swirlie
/obj/structure/toilet/New() /obj/structure/toilet/New()
open = round(rand(0, 1)) open = round(rand(0, 1))
update_icon() update_icon()
/obj/structure/toilet/attack_hand() /obj/structure/toilet/attack_hand(mob/user as mob)
if(!swirlie) if(swirlie)
usr.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie.name]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie.name]'s head!</span>", "You hear reverberating porcelain.")
swirlie.adjustBruteLoss(8)
return
if(cistern && !open)
if(!contents.len)
user << "<span class='notice'>The cistern is empty.</span>"
return
else
var/obj/item/I = pick(contents)
if(ishuman(user))
if(!user.get_active_hand())
I.loc = user.loc
user.put_in_hand(I)
else
I.loc = get_turf(src)
user << "<span class='notice'>You find \an [I] in the cistern.</span>"
w_items -= I.w_class
return
open = !open open = !open
update_icon() update_icon()
else
usr.visible_message("<span class='danger'>[usr] slams the toilet seat onto [swirlie.name]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie.name]'s head!</span>", "You hear reverberating porcelain.")
swirlie.adjustBruteLoss(8)
/obj/structure/toilet/update_icon() /obj/structure/toilet/update_icon()
icon_state = "toilet[open]" icon_state = "toilet[open][cistern]"
/obj/structure/toilet/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/crowbar))
user << "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].</span>"
playsound(loc, 'stonedoor_openclose.ogg', 50, 1)
if(do_after(user, 30))
user.visible_message("<span class='notice'>[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!</span>", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "You hear grinding porcelain.")
cistern = !cistern
update_icon()
return
/obj/structure/toilet/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/grab)) if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I var/obj/item/weapon/grab/G = I
var/mob/GM = G.affecting var/mob/GM = G.affecting
@@ -45,6 +73,19 @@
else else
user << "<span class='notice'>You need a tighter grip.</span>" user << "<span class='notice'>You need a tighter grip.</span>"
if(cistern)
if(I.w_class > 3)
user << "<span class='notice'>\The [I] does not fit.</span>"
return
if(w_items + I.w_class > 5)
user << "<span class='notice'>The cistern is full.</span>"
return
user.drop_item()
I.loc = src
w_items += I.w_class
user << "You carefully place \the [I] into the cistern."
return
/obj/structure/urinal /obj/structure/urinal
@@ -55,7 +96,7 @@
density = 0 density = 0
anchored = 1 anchored = 1
/obj/structure/urinal/attackby(var/obj/item/I, var/mob/user) /obj/structure/urinal/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/grab)) if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I var/obj/item/weapon/grab/G = I
var/mob/GM = G.affecting var/mob/GM = G.affecting
@@ -97,7 +138,7 @@
wash(M) wash(M)
check_heat(M) check_heat(M)
/obj/machinery/shower/attackby(var/obj/item/I, var/mob/user) /obj/machinery/shower/attackby(var/obj/item/I as obj, var/mob/user as mob)
if(I.type == /obj/item/device/analyzer) if(I.type == /obj/item/device/analyzer)
user << "<span class='notice'>The water temperature seems to be [watertemp].</span>" user << "<span class='notice'>The water temperature seems to be [watertemp].</span>"
if(istype(I, /obj/item/weapon/wrench)) if(istype(I, /obj/item/weapon/wrench))

View File

@@ -19,7 +19,7 @@
else if(istype(P, /obj/item/weapon/wrench)) else if(istype(P, /obj/item/weapon/wrench))
playsound(loc, 'Ratchet.ogg', 50, 1) playsound(loc, 'Ratchet.ogg', 50, 1)
anchored = !anchored anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] the [src]." user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
else else
user << "You can't put a [P] in the [src]!" user << "You can't put a [P] in the [src]!"

View File

@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/obj/machinery/photocopier /obj/machinery/photocopier
name = "Photocopier" name = "Photocopier"
@@ -102,6 +102,10 @@
updateUsrDialog() updateUsrDialog()
else else
user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." user << "This cartridge is not yet ready for replacement! Use up the rest of the toner."
else if(istype(O, /obj/item/weapon/wrench))
playsound(loc, 'Ratchet.ogg', 50, 1)
anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
return return
ex_act(severity) ex_act(severity)

View File

@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
/obj/item/weapon/gun/projectile/shotgun/pump /obj/item/weapon/gun/projectile/shotgun/pump
name = "shotgun" name = "shotgun"
desc = "Useful for sweeping alleys." desc = "Useful for sweeping alleys."
@@ -74,9 +72,16 @@
origin_tech = "combat=3;materials=1" origin_tech = "combat=3;materials=1"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag" ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
New()
for(var/i = 1, i <= max_shells, i++)
loaded += new ammo_type(src)
update_icon()
return
load_into_chamber() load_into_chamber()
if(in_chamber) // if(in_chamber)
return 1 // return 1 {R}
if(!loaded.len) if(!loaded.len)
return 0 return 0
@@ -119,6 +124,7 @@
user << "<span class='notice'>You begin to shorten the barrel of \the [src].</span>" user << "<span class='notice'>You begin to shorten the barrel of \the [src].</span>"
if(loaded.len) if(loaded.len)
afterattack(user, user) //will this work? afterattack(user, user) //will this work?
afterattack(user, user) //it will. we call it twice, for twice the FUN
playsound(user, fire_sound, 50, 1) playsound(user, fire_sound, 50, 1)
user.visible_message("<span class='danger'>The shotgun goes off!</span>", "<span class='danger'>The shotgun goes off in your face!</span>") user.visible_message("<span class='danger'>The shotgun goes off!</span>", "<span class='danger'>The shotgun goes off in your face!</span>")
return return

View File

@@ -71,7 +71,7 @@ should be listed in the changelog upon commit though. Thanks. -->
<h3 class="author">SkyMarshal updated:</h3> <h3 class="author">SkyMarshal updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">
<li class="bugfix">ZAS now works properly. No perpetually leaking doors, no walls that hold air like a seive.</li> <li class="bugfix">ZAS now works properly. No perpetually leaking doors, no walls that hold air like a seive.</li>
<li class="experiment"><font color='red'><b>ZAS airflow is now enabled</b>, and will move objects (AND PEOPLE!) when air moves with enough force. <b>AIRLOCKS ARE NOW DEADLY DANGEROUS!<b></font></li> <li class="experiment"><font color='red'><b>ZAS airflow is now enabled</b>, and will move objects (AND PEOPLE!) when air moves with enough force. <b>AIRLOCKS ARE NOW DEADLY DANGEROUS!</b></font></li>
<li class="rscadd">Packages will now reflect the size of what they contain</li> <li class="rscadd">Packages will now reflect the size of what they contain</li>
</ul> </ul>
</div> </div>
@@ -111,7 +111,6 @@ should be listed in the changelog upon commit though. Thanks. -->
<li class="bugfix">Fixed flavour text, it should now be possible to have it longer than 40 characters, and should stay properly formatted.</li> <li class="bugfix">Fixed flavour text, it should now be possible to have it longer than 40 characters, and should stay properly formatted.</li>
<li class="bugfix">Fixes AI's not being able to talk through holopads.</li> <li class="bugfix">Fixes AI's not being able to talk through holopads.</li>
</ul> </ul>
</div> </div>
<div class="commit sansserif"> <div class="commit sansserif">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 14 KiB