diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 8af45a38ba4..6625e4479ea 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -322,14 +322,71 @@
return
/*
- Alt-click to ventcrawl - Monkeys, aliens, and slimes
- This is a little buggy but somehow that just seems to plague ventcrawl.
- I am sorry, I don't know why.
+ Alt-click to ventcrawl
*/
-/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/carbon/ML)
- if(istype(ML))
- var/list/ventcrawl_verbs = list(/mob/living/carbon/monkey/verb/ventcrawl, /mob/living/carbon/alien/verb/ventcrawl, /mob/living/carbon/slime/verb/ventcrawl)
- if(length(ML.verbs & ventcrawl_verbs)) // alien queens have this removed, an istype would be complicated
- ML.handle_ventcrawl(src)
- return
- ..()
+/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/L)
+ if(!L.ventcrawler || !isliving(L) || !Adjacent(L))
+ return
+ if(L.stat)
+ L << "You must be conscious to do this!"
+ return
+ if(L.lying)
+ L << "You can't vent crawl while you're stunned!"
+ return
+ if(welded)
+ L << "That vent is welded shut."
+ return
+
+ if(!network || !network.normal_members.len)
+ L << "This vent is not connected to anything."
+ return
+
+ var/list/vents = list()
+ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in network.normal_members)
+ if(temp_vent.welded)
+ continue
+ if(temp_vent in loc)
+ continue
+ var/turf/T = get_turf(temp_vent)
+
+ if(!T || T.z != loc.z)
+ continue
+
+ var/i = 1
+ var/index = "[T.loc.name]\[[i]\]"
+ while(index in vents)
+ i++
+ index = "[T.loc.name]\[[i]\]"
+ vents[index] = temp_vent
+ if(!vents.len)
+ L << " There are no available vents to travel to, they could be welded. "
+ return
+
+ var/obj/selection = input(L,"Select a destination.", "Duct System") as null|anything in sortAssoc(vents)
+ if(!selection) return
+
+ if(!Adjacent(L))
+ return
+ if(iscarbon(L) && L.ventcrawler < 2) // lesser ventcrawlers can't bring items
+ for(var/obj/item/carried_item in L.contents)
+ if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant
+ L << " You can't be carrying items or have items equipped when vent crawling!"
+ return
+
+ var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
+ if(!target_vent)
+ return
+
+ for(var/mob/O in viewers(L, null))
+ O.show_message(text("[L] scrambles into the ventillation ducts!"), 1)
+
+ for(var/mob/O in hearers(target_vent,null))
+ O.show_message("You hear something squeezing through the ventilation ducts.",2)
+
+ if(target_vent.welded) //the vent can be welded while they scrolled through the list.
+ target_vent = src
+ L << " The vent you were heading to appears to be welded."
+ L.loc = target_vent.loc
+ var/area/new_area = get_area(loc)
+ if(new_area)
+ new_area.Entered(L)
diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm
index 34498dc58cf..3a67701487f 100644
--- a/code/LINDA/LINDA_system.dm
+++ b/code/LINDA/LINDA_system.dm
@@ -110,19 +110,12 @@ datum/controller/air_system
/datum/controller/air_system/proc/process_excited_groups()
for(var/datum/excited_group/EG in excited_groups)
- if(EG.breakdown)
- EG.breakdown_cooldown ++
- else
- EG.breakdown_cooldown = 0
-
- if(EG.breakdown_cooldown > 10)
- if(EG.self_compare())
- EG.dismantle()
+ EG.breakdown_cooldown ++
if(EG.breakdown_cooldown == 10)
- if(!EG.self_compare())
- EG.reset_cooldowns()
EG.self_breakdown()
- EG.breakdown = 1
+ return
+ if(EG.breakdown_cooldown > 20)
+ EG.dismantle()
/turf/proc/CanAtmosPass(var/turf/T)
if(!istype(T)) return 0
diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm
index c5a57c9e577..ac1956fe21c 100644
--- a/code/LINDA/LINDA_turf_tile.dm
+++ b/code/LINDA/LINDA_turf_tile.dm
@@ -261,7 +261,7 @@ turf/simulated/proc/share_temperature_mutual_solid(turf/simulated/sharer, conduc
/turf/simulated/proc/last_share_check()
if(air.last_share > MINIMUM_AIR_TO_SUSPEND)
- excited_group.breakdown = 0
+ excited_group.reset_cooldowns()
/turf/proc/high_pressure_movements()
for(var/atom/movable/M in src)
@@ -317,36 +317,46 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
/datum/excited_group/proc/reset_cooldowns()
breakdown_cooldown = 0
-/datum/excited_group/proc/self_compare()
- var/restore = 1
- var/turf/simulated/sample = pick(turf_list)
- for(var/turf/simulated/T in turf_list)
- if(!T.air.compare(sample.air))
- restore = 0
- break
- if(restore)
- return 1
-
/datum/excited_group/proc/self_breakdown()
var/datum/gas_mixture/A = new
+ var/datum/gas/sleeping_agent/S = new
+ A.trace_gases += S
for(var/turf/simulated/T in turf_list)
A.oxygen += T.air.oxygen
A.carbon_dioxide+= T.air.carbon_dioxide
A.nitrogen += T.air.nitrogen
A.toxins += T.air.toxins
+
+ if(T.air.trace_gases.len)
+ for(var/datum/gas/N in T.air.trace_gases)
+ S.moles += N.moles
+
for(var/turf/simulated/T in turf_list)
T.air.oxygen = A.oxygen/turf_list.len
T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len
T.air.nitrogen = A.nitrogen/turf_list.len
T.air.toxins = A.toxins/turf_list.len
+ if(S.moles > 0)
+ if(T.air.trace_gases.len)
+ for(var/datum/gas/G in T.air.trace_gases)
+ G.moles = S.moles/turf_list.len
+ else
+ var/datum/gas/sleeping_agent/G = new
+ G.moles = S.moles/turf_list.len
+ T.air.trace_gases += G
+
+ if(T.air.check_tile_graphic())
+ T.update_visuals(T.air)
+
/datum/excited_group/proc/dismantle()
for(var/turf/simulated/T in turf_list)
T.excited = 0
T.recently_active = 0
+ T.excited_group = null
air_master.active_turfs -= T
- air_master.excited_groups -= src
+ garbage_collect()
/datum/excited_group/proc/garbage_collect()
for(var/turf/simulated/T in turf_list)
diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm
index 0a10a7bd066..14a01866ff4 100644
--- a/code/datums/diseases/advance/symptoms/dizzy.dm
+++ b/code/datums/diseases/advance/symptoms/dizzy.dm
@@ -33,5 +33,5 @@ Bonus
M << "[pick("You feel dizzy.", "Your head starts spinning.")]"
else
M << "You are unable to look straight!"
- M.make_dizzy(5)
+ M.Dizzy(5)
return
\ No newline at end of file
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 7fd5bbf583d..edff141b2d0 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -1039,3 +1039,34 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/vending_refill/autodrobe)
cost = 15
containername = "autodrobe supply crate"
+
+/datum/supply_packs/misc/formalwear //This is a very classy crate.
+ name = "Formal-wear crate"
+ contains = list(/obj/item/clothing/under/blacktango,
+ /obj/item/clothing/under/assistantformal,
+ /obj/item/clothing/under/assistantformal,
+ /obj/item/clothing/under/lawyer/bluesuit,
+ /obj/item/clothing/suit/lawyer/bluejacket,
+ /obj/item/clothing/under/lawyer/purpsuit,
+ /obj/item/clothing/suit/lawyer/purpjacket,
+ /obj/item/clothing/under/lawyer/blacksuit,
+ /obj/item/clothing/suit/lawyer/blackjacket,
+ /obj/item/clothing/tie/waistcoat,
+ /obj/item/clothing/tie/blue,
+ /obj/item/clothing/tie/red,
+ /obj/item/clothing/tie/black,
+ /obj/item/clothing/head/bowler,
+ /obj/item/clothing/head/fedora,
+ /obj/item/clothing/head/flatcap,
+ /obj/item/clothing/head/beret,
+ /obj/item/clothing/head/that,
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/under/suit_jacket/charcoal,
+ /obj/item/clothing/under/suit_jacket/navy,
+ /obj/item/clothing/under/suit_jacket/burgundy,
+ /obj/item/clothing/under/suit_jacket/checkered,
+ /obj/item/clothing/under/suit_jacket/tan)
+ cost = 30 //Lots of very expensive items. You gotta pay up to look good!
+ containername = "formal-wear crate"
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 0b3592004c9..96c93a625d4 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -343,7 +343,7 @@
if(!M.mind || !M.mind.changeling)
M.ear_deaf += 30
M.confused += 20
- M.make_jittery(50)
+ M.Jitter(50)
else
M << sound('sound/effects/screech.ogg')
@@ -535,6 +535,20 @@ var/list/datum/dna/hivemind_bank = list()
if(src && src.mind && src.mind.changeling)
src.mind.changeling.mimicing = ""
+/mob/living/carbon/proc/changeling_emp_shriek()
+ set category = "Changeling"
+ set name = "Dissonant Shriek (20)"
+
+ var/datum/changeling/changeling = changeling_power(20)
+ if(!changeling) return
+
+ for(var/obj/machinery/light/L in range(5, usr))
+ L.on = 1
+ L.broken()
+
+ empulse(get_turf(src), 2, 5, 1)
+
+ changeling.chem_charges -= 20
/mob/living/carbon/proc/changeling_arm_blade()
set category = "Changeling"
diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm
index 6c23082de16..862b156501a 100644
--- a/code/game/gamemodes/changeling/modularchangling.dm
+++ b/code/game/gamemodes/changeling/modularchangling.dm
@@ -161,6 +161,13 @@ var/list/powerinstances
allowduringlesserform = 1
verbpath = /mob/living/carbon/proc/changeling_mute_sting
+/datum/power/changeling/emp_shriek
+ name = "Dissonant Shriek"
+ desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
+ genomecost = 1
+ allowduringlesserform = 1
+ verbpath = /mob/living/carbon/proc/changeling_emp_shriek
+
/datum/power/changeling/arm_blade
name = "Arm Blade"
desc = "We reform one of our arms into a deadly blade."
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 63690a30078..903732b6d17 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -26,7 +26,7 @@
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
if(!iscultist(user))
user << "\red An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly."
- user.make_dizzy(120)
+ user.Dizzy(120)
/obj/item/clothing/head/culthood
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index f73cca4fb64..3584ea4cb8f 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -84,29 +84,6 @@
/obj/var/list/req_one_access = null
/obj/var/req_one_access_txt = "0"
-/obj/New()
- ..()
- //NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6
- if(src.req_access_txt)
- var/list/req_access_str = text2list(req_access_txt,";")
- if(!req_access)
- req_access = list()
- for(var/x in req_access_str)
- var/n = text2num(x)
- if(n)
- req_access += n
-
- if(src.req_one_access_txt)
- var/list/req_one_access_str = text2list(req_one_access_txt,";")
- if(!req_one_access)
- req_one_access = list()
- for(var/x in req_one_access_str)
- var/n = text2num(x)
- if(n)
- req_one_access += n
-
-
-
//returns 1 if this mob has sufficient access to use this object
/obj/proc/allowed(mob/M)
//check if it doesn't require any access at all
@@ -134,9 +111,25 @@
return null
/obj/proc/check_access(obj/item/I)
+ //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
+ if(!src.req_access)
+ src.req_access = list()
+ if(src.req_access_txt)
+ var/list/req_access_str = text2list(req_access_txt,";")
+ for(var/x in req_access_str)
+ var/n = text2num(x)
+ if(n)
+ req_access += n
+
+ if(!src.req_one_access)
+ src.req_one_access = list()
+ if(src.req_one_access_txt)
+ var/list/req_one_access_str = text2list(req_one_access_txt,";")
+ for(var/x in req_one_access_str)
+ var/n = text2num(x)
+ if(n)
+ req_one_access += n
- if(!src.req_access && !src.req_one_access) //no requirements
- return 1
if(!istype(src.req_access, /list)) //something's very wrong
return 1
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 644196c1c61..8f90db9ba41 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -327,7 +327,7 @@ var/global/lawyer = 0//Checks for another lawyer
H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/purpsuit(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/lawyer/purpjacket(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
@@ -336,6 +336,4 @@ var/global/lawyer = 0//Checks for another lawyer
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
- return 1
-
-
+ return 1
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 65552c19747..3cc81b68c26 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -31,7 +31,7 @@
/obj/item/weapon/circuitboard/turbine_computer
name = "circuit board (Turbine Computer)"
build_path = /obj/machinery/computer/turbine_computer
- origin_tech = "programming=4;engineering=4;power=4"
+ origin_tech = "programming=4;engineering=4;powerstorage=4"
/obj/item/weapon/circuitboard/telesci_console
name = "circuit board (Telescience Console)"
build_path = /obj/machinery/computer/telescience
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 94430c382ce..b3672caa522 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -116,6 +116,7 @@
item_quants[n]++
else
item_quants[n] = 1
+ item_quants = sortAssoc(item_quants)
/obj/machinery/smartfridge/attack_paw(mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index a1b3e83847a..7da5a499992 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -767,13 +767,12 @@
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,/obj/item/clothing/under/sundress = 1,/obj/item/clothing/head/witchwig = 1,/obj/item/weapon/staff/broom = 1,
/obj/item/clothing/suit/wizrobe/fake = 1,/obj/item/clothing/head/wizard/fake = 1,/obj/item/weapon/staff = 3,/obj/item/clothing/mask/gas/sexyclown = 1,
/obj/item/clothing/under/sexyclown = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,/obj/item/clothing/suit/apron/overalls = 1,
- /obj/item/clothing/head/rabbitears =1, /obj/item/clothing/head/sombrero, /obj/item/clothing/head/sombrero/green =1, /obj/item/clothing/suit/poncho = 1,
- /obj/item/clothing/suit/poncho/green = 1, /obj/item/clothing/suit/poncho/red = 1,) //Pretty much everything that had a chance to spawn.
- contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1)
+ /obj/item/clothing/head/rabbitears =1, /obj/item/clothing/head/sombrero = 1, /obj/item/clothing/head/sombrero/green = 1, /obj/item/clothing/suit/poncho = 1,
+ /obj/item/clothing/suit/poncho/green = 1, /obj/item/clothing/suit/poncho/red = 1) //Pretty much everything that had a chance to spawn.
+ contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1, /obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1)
premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1)
refill_canister = /obj/item/weapon/vending_refill/autodrobe
-
/obj/machinery/vending/autodrobe/New()
..()
component_parts = list()
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
index 8bc32a61042..97e7ed3f775 100644
--- a/code/game/mecha/combat/combat.dm
+++ b/code/game/mecha/combat/combat.dm
@@ -114,7 +114,7 @@
if(!istype(target, /obj) && !istype(target, /mob)) return
if(istype(target, /mob))
var/mob/M = target
- M.make_dizzy(3)
+ M.Dizzy(3)
M.adjustBruteLoss(1)
M.updatehealth()
for (var/mob/V in viewers(src))
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 71ce4e29b80..257d4d133c2 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -134,7 +134,7 @@
M.Stun(10)
M.Paralyse(4)
else
- M.make_jittery(500)
+ M.Jitter(500)
/* //else the mousetraps are useless
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 1dd8b09b71a..a0d807b634c 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -13,6 +13,8 @@
var/times_used = 0 //Number of times it's been used.
var/broken = 0 //Is the flash burnt out?
var/last_used = 0 //last world.time it was used.
+ var/burnt = "flashburnt"
+ var/flashanim = "flash2"
/obj/item/device/flash/proc/clown_check(mob/user)
if(user && (CLUMSY in user.mutations) && prob(50))
@@ -33,7 +35,7 @@
/obj/item/device/flash/proc/burn_out(mob/user = null) //Made so you can override it if you want to have an invincible flash from R&D or something.
broken = 1
- icon_state = "flashburnt"
+ icon_state = burnt
if(user)
user << "The bulb has burnt out!"
@@ -112,7 +114,7 @@
del(animation)
if(!flashfail)
- flick("flash2", src)
+ flick(flashanim, src)
if(!issilicon(M))
user.visible_message("[user] blinds [M] with the flash!")
@@ -201,4 +203,12 @@
/obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
..()
if(!broken)
- burn_out(user)
\ No newline at end of file
+ burn_out(user)
+
+/obj/item/device/flash/memorizer
+ name = "memorizer"
+ desc = "If you see this, you're not likely to remember it any time soon."
+ icon_state = "memorizer"
+ item_state = "nullrod"
+ burnt = "memorizerburnt"
+ flashanim = "memorizer2"
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index d0452e9d244..52e2ee146e8 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -7,95 +7,73 @@
/obj/item/weapon/grenade/flashbang/prime()
update_mob()
- for(var/obj/structure/closet/L in view(get_turf(src), null))
- if(locate(/mob/living/carbon/, L))
- for(var/mob/living/carbon/M in L)
- bang(get_turf(src), M)
+ var/flashbang_turf = get_turf(src)
+ for(var/obj/structure/closet/L in view(7, flashbang_turf))
+ for(var/mob/living/M in L)
+ bang(get_turf(M), M)
+ for(var/mob/living/M in view(7, flashbang_turf))
+ bang(get_turf(M), M)
- for(var/mob/living/carbon/M in viewers(get_turf(src), null))
- bang(get_turf(src), M)
-
- for(var/obj/effect/blob/B in view(8,get_turf(src))) //Blob damage here
+ for(var/obj/effect/blob/B in view(8,flashbang_turf)) //Blob damage here
var/damage = round(30/(get_dist(B,get_turf(src))+1))
B.health -= damage
B.update_icon()
del(src)
-/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M)
- // Added a new proc called 'bang' that takes a location and a person to be banged.
- // Called during the loop that bangs people in lockers/containers and when banging
- // people in normal view. Could theroetically be called during other explosions.
- // -- Polymorph
- M << "\red BANG"
+/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M)
+ M << "BANG"
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
//Checking for protections
var/eye_safety = 0
- var/ear_safety = 0
+ var/ear_safety = 2
+ var/distance = max(1, get_dist(src, T))
+ var/takes_eye_damage = 0
if(iscarbon(M))
- eye_safety = M.eyecheck()
- if(ishuman(M))
- if(istype(M:ears, /obj/item/clothing/ears/earmuffs))
- ear_safety += 2
- if(HULK in M.mutations)
- ear_safety += 1
- if(istype(M:head, /obj/item/clothing/head/helmet))
- ear_safety += 1
+ var/mob/living/carbon/C = M
+ eye_safety = C.eyecheck()
+ if(ishuman(C))
+ takes_eye_damage = 1
+ var/mob/living/carbon/human/H = C
+ ear_safety = 0
+ if(istype(H.ears, /obj/item/clothing/ears/earmuffs) || istype(H.head, /obj/item/clothing/head/helmet))
+ ear_safety++
+ if(ismonkey(C))
+ ear_safety = 0
+ takes_eye_damage = 1
-//Flashing everyone
+//Flash
if(eye_safety < 1)
flick("e_flash", M.flash)
M.eye_stat += rand(1, 3)
- M.Stun(2)
- M.Weaken(5)
-
-
-
-//Now applying sound
- if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
- if(ear_safety > 0)
- M.Stun(2)
- M.Weaken(1)
+ M.Stun(max(10/distance, 3))
+ M.Weaken(max(10/distance, 3))
+ if (M.eye_stat >= 20 && takes_eye_damage)
+ M << "Your eyes start to burn badly!"
+ M.disabilities |= NEARSIGHTED
+ if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if (prob(M.eye_stat - 20 + 1))
+ M << "You can't see anything!"
+ M.sdisabilities |= BLIND
+//Bang
+ if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
+ M.Stun(10)
+ M.Weaken(10)
+ if(!ear_safety)
+ M.Stun(max(10/distance, 3))
+ M.Weaken(max(10/distance, 3))
+ M.ear_damage += rand(0, 5)
+ M.ear_deaf = max(M.ear_deaf,15)
+ if (M.ear_damage >= 15)
+ M << "Your ears start to ring badly!"
+ if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if (prob(M.ear_damage - 10 + 5))
+ M << "You can't hear anything!"
+ M.sdisabilities |= DEAF
else
- M.Stun(5)
- M.Weaken(3)
- if ((prob(14) || (M == src.loc && prob(70))))
- M.ear_damage += rand(1, 10)
- else
- M.ear_damage += rand(0, 5)
- M.ear_deaf = max(M.ear_deaf,15)
-
- else if(get_dist(M, T) <= 5)
- if(!ear_safety)
- M.Stun(8)
- M.ear_damage += rand(0, 3)
- M.ear_deaf = max(M.ear_deaf,10)
-
- else if(!ear_safety)
- M.Stun(4)
- M.ear_damage += rand(0, 1)
- M.ear_deaf = max(M.ear_deaf,5)
-
-//This really should be in mob not every check
- if (M.eye_stat >= 20)
- M << "\red Your eyes start to burn badly!"
- M.disabilities |= NEARSIGHTED
- if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
- if (prob(M.eye_stat - 20 + 1))
- M << "\red You can't see anything!"
- M.sdisabilities |= BLIND
- if (M.ear_damage >= 15)
- M << "\red Your ears start to ring badly!"
- if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
- if (prob(M.ear_damage - 10 + 5))
- M << "\red You can't hear anything!"
- M.sdisabilities |= DEAF
- else
- if (M.ear_damage >= 5)
- M << "\red Your ears start to ring!"
- M.update_icons()
-
+ if (M.ear_damage >= 5)
+ M << "Your ears start to ring!"
/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index bc317891e04..d7cab0a8be1 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -40,7 +40,7 @@
var/turf/user_loc = user.loc
var/turf/C_loc = C.loc
- if(do_after(user, 40))
+ if(do_after(user, 30))
if(!C || C.handcuffed)
return
if(user_loc == user.loc && C_loc == C.loc)
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 2224652f68b..14b152cdca5 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -99,5 +99,7 @@
new /obj/item/clothing/suit/lawyer/bluejacket(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/lawyer/purpjacket(src)
- new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/shoes/black(src)
\ No newline at end of file
+ new /obj/item/clothing/under/lawyer/blacksuit(src)
+ new /obj/item/clothing/suit/lawyer/blackjacket(src)
+ new /obj/item/clothing/shoes/laceup(src)
+ new /obj/item/clothing/shoes/laceup(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index ba8d90e318c..b4823cc5181 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -25,6 +25,8 @@
new /obj/item/device/radio/headset/heads/captain(src)
new /obj/item/clothing/gloves/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
+ new /obj/item/clothing/under/captainformal(src)
+ new /obj/item/clothing/head/helmet/HoS/dermal(src)
return
@@ -91,6 +93,8 @@
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/storage/belt/security(src)
+ new /obj/item/clothing/under/hosformalfem(src)
+ new /obj/item/clothing/under/hosformalmale(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 8b26ac4ced2..b355ad88802 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -301,6 +301,10 @@
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
+ if(prob(40))
+ new /obj/item/clothing/under/assistantformal(src)
+ if(prob(40))
+ new /obj/item/clothing/under/assistantformal(src)
return
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 398539f6b4a..33eff71e825 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -19,7 +19,7 @@
/* 21st Sept 2010
Updated by Skie -- Still not perfect but better!
Stuff you can't do:
-Call proc /mob/proc/make_dizzy() for some player
+Call proc /mob/proc/Dizzy() for some player
Because if you select a player mob as owner it tries to do the proc for
/mob/living/carbon/human/ instead. And that gives a run-time error.
But you can call procs that are of type /mob/living/carbon/human/proc/ for that player.
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index ae36e72a041..7c14bd2ffc1 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -96,4 +96,12 @@
src.chained = 1
src.slowdown = 15
src.icon_state = "orange1"
- return
\ No newline at end of file
+ return
+
+/obj/item/clothing/shoes/orange/attack_hand(mob/user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/C = user
+ if(C.shoes == src && src.chained == 1)
+ user << "You need help taking these off!"
+ return
+ ..()
\ No newline at end of file
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 924c0e21997..bb12a94f227 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -100,6 +100,14 @@
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
+/obj/item/clothing/suit/lawyer/blackjacket
+ name = "black suit jacket"
+ desc = "A professional suit jacket."
+ icon_state = "suitjacket_black"
+ item_state = "ro_suit"
+ blood_overlay_type = "coat"
+ body_parts_covered = CHEST|ARMS
+
//Mime
/obj/item/clothing/suit/suspenders
name = "suspenders"
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 6eef367f8cb..e7c7aeb259a 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -2,7 +2,9 @@
name = "wizard hat"
desc = "Strange-looking hat-wear that most certainly belongs to a real magic user."
icon_state = "wizard"
- //Not given any special protective value since the magic robes are full-body protection --NEO
+ gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
+ permeability_coefficient = 0.01
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
/obj/item/clothing/head/wizard/red
name = "red wizard hat"
@@ -13,6 +15,9 @@
name = "wizard hat"
desc = "It has WIZZARD written across it in sequins. Comes with a cool beard."
icon_state = "wizard-fake"
+ gas_transfer_coefficient = 1
+ permeability_coefficient = 1
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/wizard/marisa
name = "witch hat"
@@ -31,10 +36,10 @@
desc = "A magnificant, gem-lined robe that seems to radiate power."
icon_state = "wizard"
item_state = "wizrobe"
- gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
+ gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- body_parts_covered = CHEST|GROIN|ARMS|LEGS //It's magic, I ain't gotta explain shit. --NEO //fuck you neo, no way it covers his head -Pete
- armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20)
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
allowed = list(/obj/item/weapon/teleportation_scroll)
flags_inv = HIDEJUMPSUIT
@@ -70,18 +75,23 @@
desc = "A rather dull, blue robe meant to mimick real wizard robes."
icon_state = "wizard-fake"
item_state = "wizrobe"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ gas_transfer_coefficient = 1
+ permeability_coefficient = 1
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/wizard/marisa/fake
name = "witch hat"
desc = "Strange-looking hat-wear, makes you want to cast fireballs."
icon_state = "marisa"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ gas_transfer_coefficient = 1
+ permeability_coefficient = 1
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "witch robe"
desc = "Magic is all about the spell power, ZE!"
icon_state = "marisa"
item_state = "marisarobe"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
-
+ gas_transfer_coefficient = 1
+ permeability_coefficient = 1
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 1b150e281ff..897fa1f2604 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -111,7 +111,7 @@
/obj/item/clothing/under/lawyer/bluesuit
- name = "Blue Suit"
+ name = "blue suit"
desc = "A classy suit and tie"
icon_state = "bluesuit"
item_state = "bluesuit"
@@ -119,12 +119,19 @@
/obj/item/clothing/under/lawyer/purpsuit
- name = "Purple Suit"
+ name = "purple suit"
icon_state = "lawyer_purp"
item_state = "lawyer_purp"
item_color = "lawyer_purp"
fitted = 0
+/obj/item/clothing/under/lawyer/blacksuit
+ name = "black suit"
+ desc = "A professional black suit. Nanotrasen Investigation Bureau approved!"
+ icon_state = "blacksuit"
+ item_state = "ba_suit"
+ item_color = "blacksuit"
+
/obj/item/clothing/under/librarian
name = "sensible suit"
desc = "It's very... sensible."
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 642d7585a75..badfb26b91b 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -174,6 +174,41 @@
item_state = "r_suit"
item_color = "red_suit"
+/obj/item/clothing/under/suit_jacket/charcoal
+ name = "charcoal suit"
+ desc = "A charcoal suit and red tie. Very professional."
+ icon_state = "charcoal_suit"
+ item_state = "charcoal_suit"
+ item_color = "charcoal_suit"
+
+/obj/item/clothing/under/suit_jacket/navy
+ name = "navy suit"
+ desc = "A navy suit and red tie, intended for the station's finest."
+ icon_state = "navy_suit"
+ item_state = "navy_suit"
+ item_color = "navy_suit"
+
+/obj/item/clothing/under/suit_jacket/burgundy
+ name = "burgundy suit"
+ desc = "A burgundy suit and black tie. Somewhat formal."
+ icon_state = "burgundy_suit"
+ item_state = "burgundy_suit"
+ item_color = "burgundy_suit"
+
+/obj/item/clothing/under/suit_jacket/checkered
+ name = "checkered suit"
+ desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
+ icon_state = "checkered_suit"
+ item_state = "checkered_suit"
+ item_color = "checkered_suit"
+
+/obj/item/clothing/under/suit_jacket/tan
+ name = "tan suit"
+ desc = "A tan suit with a yellow tie. Smart, but casual."
+ icon_state = "tan_suit"
+ item_state = "tan_suit"
+ item_color = "tan_suit"
+
/obj/item/clothing/under/blackskirt
name = "black skirt"
desc = "A black skirt, very fancy!"
@@ -253,4 +288,41 @@
item_state = "sundress"
item_color = "sundress"
body_parts_covered = CHEST|GROIN
+ fitted = 0
+
+/obj/item/clothing/under/captainformal
+ name = "captain's formal uniform"
+ desc = "A captain's formal-wear, for special occasions."
+ icon_state = "captain_formal"
+ item_state = "by_suit"
+ item_color = "captain_formal"
+
+/obj/item/clothing/under/hosformalmale
+ name = "head of security's formal uniform"
+ desc = "A male head of security's formal-wear, for special occasions."
+ icon_state = "hos_formal_male"
+ item_state = "r_suit"
+ item_color = "hos_formal_male"
+
+/obj/item/clothing/under/hosformalfem
+ name = "head of security's formal uniform"
+ desc = "A female head of security's formal-wear, for special occasions."
+ icon_state = "hos_formal_fem"
+ item_state = "r_suit"
+ item_color = "hos_formal_fem"
+ fitted = 0
+
+/obj/item/clothing/under/assistantformal
+ name = "assistant's formal uniform"
+ desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
+ icon_state = "assistant_formal"
+ item_state = "gy_suit"
+ item_color = "assistant_formal"
+
+/obj/item/clothing/under/blacktango
+ name = "black tango dress"
+ desc = "Filled with latin fire."
+ icon_state = "black_tango"
+ item_state = "wcoat"
+ item_color = "black_tango"
fitted = 0
\ No newline at end of file
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index 326f09c0c47..b1f1c924178 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -18,6 +18,11 @@
icon_state = "redtie"
item_color = "redtie"
+/obj/item/clothing/tie/black
+ name = "black tie"
+ icon_state = "blacktie"
+ item_color = "blacktie"
+
/obj/item/clothing/tie/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index d583e8db2e1..c67f22314d4 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -50,14 +50,136 @@
icon_state = "sextractor"
density = 1
anchored = 1
+ var/piles = list()
obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(isrobot(user))
return
+
+ if (istype(O,/obj/item/weapon/storage/bag/plants))
+ var/obj/item/weapon/storage/P = O
+ var/loaded = 0
+ for(var/obj/item/seeds/G in P.contents)
+ if(contents.len >= 999)
+ break
+ ++loaded
+ add(G)
+ if (loaded)
+ user << "You put the seeds from \the [O.name] into [src]."
+ else
+ user << "There are no seeds in \the [O.name]."
+ return
+
user.drop_item()
if(O && O.loc)
O.loc = src.loc
+
if(seedify(O,-1))
user << "You extract some seeds."
+ return
+ else if (istype(O,/obj/item/seeds))
+ add(O)
+ user << "You add [O] to [src.name]."
+ updateUsrDialog()
+ return
else
- user << "You can't extract any seeds from \the [O.name]."
\ No newline at end of file
+ user << "You can't extract any seeds from \the [O.name]."
+
+datum/seed_pile
+ var/name = ""
+ var/lifespan = 0 //Saved stats
+ var/endurance = 0
+ var/maturation = 0
+ var/production = 0
+ var/yield = 0
+ var/potency = 0
+ var/amount = 0
+
+datum/seed_pile/New(var/name, var/life, var/endur, var/matur, var/prod, var/yie, var/poten, var/am = 1)
+ src.name = name
+ src.lifespan = life
+ src.endurance = endur
+ src.maturation = matur
+ src.production = prod
+ src.yield = yie
+ src.potency = poten
+ src.amount = am
+
+/obj/machinery/seed_extractor/attack_hand(mob/user as mob)
+ user.set_machine(src)
+ interact(user)
+
+obj/machinery/seed_extractor/interact(mob/user as mob)
+ if (stat)
+ return 0
+
+ var/dat = "Stored seeds:
"
+
+ if (contents.len == 0)
+ dat += "No seeds"
+ else
+ dat += "
| Name | Lifespan | Endurance | Maturation | Production | Yield | Potency | Stock |
"
+ for (var/datum/seed_pile/O in piles)
+ dat += "| [O.name] | [O.lifespan] | [O.endurance] | [O.maturation] | "
+ dat += "[O.production] | [O.yield] | [O.potency] | "
+ dat += "Vend ([O.amount] left) |
"
+ dat += "
"
+ var/datum/browser/popup = new(user, "seed_ext", name, 700, 400)
+ popup.set_content(dat)
+ popup.open()
+ return
+
+obj/machinery/seed_extractor/Topic(var/href, var/list/href_list)
+ if(..())
+ return
+ usr.set_machine(src)
+
+ href_list["li"] = text2num(href_list["li"])
+ href_list["en"] = text2num(href_list["en"])
+ href_list["ma"] = text2num(href_list["ma"])
+ href_list["pr"] = text2num(href_list["pr"])
+ href_list["yi"] = text2num(href_list["yi"])
+ href_list["pot"] = text2num(href_list["pot"])
+
+ for (var/datum/seed_pile/N in piles)//Find the pile we need to reduce...
+ if (href_list["name"] == N.name && href_list["li"] == N.lifespan && href_list["en"] == N.endurance && href_list["ma"] == N.maturation && href_list["pr"] == N.production && href_list["yi"] == N.yield && href_list["pot"] == N.potency)
+ if(N.amount <= 0)
+ return
+ N.amount = max(N.amount - 1, 0)
+ if (N.amount <= 0)
+ piles -= N
+ del(N)
+ break
+
+ for (var/obj/T in contents)//Now we find the seed we need to vend
+ var/obj/item/seeds/O = T
+ if (O.plantname == href_list["name"] && O.lifespan == href_list["li"] && O.endurance == href_list["en"] && O.maturation == href_list["ma"] && O.production == href_list["pr"] && O.yield == href_list["yi"] && O.potency == href_list["pot"])
+ O.loc = src.loc
+ break
+
+ src.updateUsrDialog()
+ return
+
+obj/machinery/seed_extractor/proc/add(var/obj/item/seeds/O as obj)
+ if(contents.len >= 999)
+ usr << "\The [src] is full."
+ return 0
+
+ if(istype(O.loc,/mob))
+ var/mob/M = O.loc
+ if(!M.unEquip(O))
+ usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return
+ else if(istype(O.loc,/obj/item/weapon/storage))
+ var/obj/item/weapon/storage/S = O.loc
+ S.remove_from_storage(O,src)
+
+ O.loc = src
+
+ for (var/datum/seed_pile/N in piles)
+ if (O.plantname == N.name && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency)
+ ++N.amount
+ return
+
+ piles += new /datum/seed_pile(O.plantname, O.lifespan, O.endurance, O.maturation, O.production, O.yield, O.potency)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 2de3f3ef8d4..ddbaeafd8b7 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -11,6 +11,7 @@
gender = NEUTER
dna = null
faction = "alien"
+ ventcrawler = 2
var/storedPlasma = 250
var/max_plasma = 500
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 524405ec1d5..bdbb5bbcad5 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -7,6 +7,7 @@
status_flags = CANPARALYSE
heal_rate = 5
plasma_rate = 20
+ ventcrawler = 0 //pull over that ass too fat
/mob/living/carbon/alien/humanoid/queen/New()
@@ -22,7 +23,6 @@
real_name = src.name
verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin)
- verbs -= /mob/living/carbon/alien/verb/ventcrawl
..()
/mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates()
@@ -85,4 +85,4 @@
else
icon_state = "queen_s"
for(var/image/I in overlays_standing)
- overlays += I
+ overlays += I
diff --git a/code/modules/mob/living/carbon/alien/powers.dm b/code/modules/mob/living/carbon/alien/powers.dm
deleted file mode 100644
index d9452a8d799..00000000000
--- a/code/modules/mob/living/carbon/alien/powers.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/mob/living/carbon/alien/verb/ventcrawl() // -- TLE
- set name = "Crawl through vent"
- set desc = "Enter an air vent and crawl through the pipe system."
- set category = "Alien"
- handle_ventcrawl()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 12fc3b4a5f5..aed4c267123 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -228,99 +228,6 @@
// ++++ROCKDTBEN++++ MOB PROCS //END
-/mob/living/carbon/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null) // -- TLE -- Merged by Carn
- if(stat)
- src << "You must be conscious to do this!"
- return
- if(lying)
- src << "You can't vent crawl while you're stunned!"
- return
-
- if(vent_found) // one was passed in, probably from vent/AltClick()
- if(vent_found.welded)
- src << "That vent is welded shut."
- return
- if(!vent_found.Adjacent(src))
- return // don't even acknowledge that
- else
- for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
- if(!v.welded)
- if(v.Adjacent(src))
- vent_found = v
- if(!vent_found)
- src << "You'll need a non-welded vent to crawl into!"
- return
-
- if(!vent_found.network || !vent_found.network.normal_members.len)
- src << "This vent is not connected to anything."
- return
-
- var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
- if(temp_vent.welded)
- continue
- if(temp_vent in loc)
- continue
- var/turf/T = get_turf(temp_vent)
-
- if(!T || T.z != loc.z)
- continue
-
- var/i = 1
- var/index = "[T.loc.name]\[[i]\]"
- while(index in vents)
- i++
- index = "[T.loc.name]\[[i]\]"
- vents[index] = temp_vent
- if(!vents.len)
- src << "\red There are no available vents to travel to, they could be welded."
- return
-
- var/obj/selection = input("Select a destination.", "Duct System") as null|anything in sortAssoc(vents)
- if(!selection) return
-
- if(!vent_found.Adjacent(src))
- src << "Never mind, you left."
- return
-
- for(var/obj/item/carried_item in contents)//If the monkey got on objects.
- if( !istype(carried_item, /obj/item/weapon/implant) && !istype(carried_item, /obj/item/clothing/mask/facehugger) )//If it's not an implant or a facehugger
- src << "\red You can't be carrying items or have items equipped when vent crawling!"
- return
- if(isslime(src))
- var/mob/living/carbon/slime/S = src
- if(S.Victim)
- src << "\red You'll have to let [S.Victim] go or finish eating \him first."
- return
-
- var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
- if(!target_vent)
- return
-
- for(var/mob/O in viewers(src, null))
- O.show_message(text("[src] scrambles into the ventillation ducts!"), 1)
- loc = target_vent
-
- var/travel_time = round(get_dist(loc, target_vent.loc) / 2)
-
- spawn(travel_time)
-
- if(!target_vent) return
- for(var/mob/O in hearers(target_vent,null))
- O.show_message("You hear something squeezing through the ventilation ducts.",2)
-
- sleep(travel_time)
-
- if(!target_vent) return
- if(target_vent.welded) //the vent can be welded while alien scrolled through the list or travelled.
- target_vent = vent_found //travel back. No additional time required.
- src << "\red The vent you were heading to appears to be welded."
- loc = target_vent.loc
- var/area/new_area = get_area(loc)
- if(new_area)
- new_area.Entered(src)
-
-
/mob/living/carbon/clean_blood()
if(ishuman(src))
var/mob/living/carbon/human/H = src
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 430ba3f23a5..0f7690a1a4d 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -182,12 +182,12 @@
msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id].\n"
//Jitters
- if(is_jittery)
- if(jitteriness >= 300)
+ switch(jitteriness)
+ if(300 to INFINITY)
msg += "[t_He] [t_is] convulsing violently!\n"
- else if(jitteriness >= 200)
+ if(200 to 300)
msg += "[t_He] [t_is] extremely jittery.\n"
- else if(jitteriness >= 100)
+ if(100 to 200)
msg += "[t_He] [t_is] twitching ever so slightly.\n"
if(suiciding)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index d03a2c1e8a0..d5847142b99 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -119,6 +119,7 @@
else
return ONE_ATMOSPHERE - pressure_difference
+
/mob/living/carbon/human
proc/handle_disabilities()
@@ -130,30 +131,23 @@
continue
O.show_message(text("\red [src] starts having a seizure!"), 1)
Paralyse(10)
- make_jittery(1000)
+ Jitter(1000)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
- spawn( 0 )
- emote("cough")
- return
+ emote("cough")
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
- spawn( 0 )
- switch(rand(1, 3))
- if(1)
- emote("twitch")
- if(2 to 3)
- say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
- var/old_x = pixel_x
- var/old_y = pixel_y
- pixel_x += rand(-2,2)
- pixel_y += rand(-1,1)
- sleep(2)
- pixel_x = old_x
- pixel_y = old_y
- return
+ switch(rand(1, 3))
+ if(1)
+ emote("twitch")
+ if(2 to 3)
+ say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
+ var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point.
+ var/y_offset = pixel_y + rand(-1,1)
+ animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1)
+ animate(pixel_x = pixel_x - x_offset, pixel_y = pixel_y - y_offset, time = 1)
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
@@ -912,6 +906,50 @@
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
ear_damage = max(ear_damage-0.05, 0)
+ //Dizziness
+ if(dizziness)
+ var/client/C = client
+ var/pixel_x_diff = 0
+ var/pixel_y_diff = 0
+ var/temp
+ var/saved_dizz = dizziness
+ dizziness = max(dizziness-1, 0)
+ if(C)
+ var/oldsrc = src
+ var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength
+ src = null
+ spawn(0)
+ if(C)
+ temp = amplitude * sin(0.008 * saved_dizz * world.time)
+ pixel_x_diff += temp
+ C.pixel_x += temp
+ temp = amplitude * cos(0.008 * saved_dizz * world.time)
+ pixel_y_diff += temp
+ C.pixel_y += temp
+ sleep(3)
+ if(C)
+ temp = amplitude * sin(0.008 * saved_dizz * world.time)
+ pixel_x_diff += temp
+ C.pixel_x += temp
+ temp = amplitude * cos(0.008 * saved_dizz * world.time)
+ pixel_y_diff += temp
+ C.pixel_y += temp
+ sleep(3)
+ if(C)
+ C.pixel_x -= pixel_x_diff
+ C.pixel_y -= pixel_y_diff
+ src = oldsrc
+
+ //Jitteryness
+ if(jitteriness)
+ var/amplitude = min(4, (jitteriness/100) + 1)
+ var/pixel_x_diff = rand(-amplitude, amplitude)
+ var/pixel_y_diff = rand(-amplitude/3, amplitude/3)
+
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = -1)
+ animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2)
+ jitteriness = max(jitteriness-1, 0)
+
//Other
if(stunned)
AdjustStunned(-1)
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 3fb28610f17..52233ec7b4f 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -5,6 +5,7 @@
pass_flags = PASSTABLE
voice_message = "skree!"
say_message = "hums"
+ ventcrawler = 2
var/is_adult = 0
layer = 5
diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm
index 6f186f0087c..ed7149cdd83 100644
--- a/code/modules/mob/living/carbon/metroid/powers.dm
+++ b/code/modules/mob/living/carbon/metroid/powers.dm
@@ -225,13 +225,4 @@
else
src << "I am not ready to reproduce yet..."
else
- src << "I am not old enough to reproduce yet..."
-
-
-
-/mob/living/carbon/slime/verb/ventcrawl()
- set name = "Crawl through Vent"
- set desc = "Enter an air vent and crawl through the pipe system."
- set category = "Slime"
- if(Victim) return
- handle_ventcrawl()
\ No newline at end of file
+ src << "I am not old enough to reproduce yet..."
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 3a84a20eeb4..bdb2c232142 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -8,6 +8,7 @@
gender = NEUTER
pass_flags = PASSTABLE
update_icon = 0 ///no need to call regenerate_icon
+ ventcrawler = 1
/mob/living/carbon/monkey/New()
create_reagents(1000)
diff --git a/code/modules/mob/living/carbon/monkey/powers.dm b/code/modules/mob/living/carbon/monkey/powers.dm
deleted file mode 100644
index e7c6937cda2..00000000000
--- a/code/modules/mob/living/carbon/monkey/powers.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/mob/living/carbon/monkey/verb/ventcrawl()
- set name = "Crawl through Vent"
- set desc = "Enter an air vent and crawl through the pipe system."
- set category = "Monkey"
- handle_ventcrawl()
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 9af8ddf1526..8168e11778a 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -35,3 +35,5 @@
var/on_fire = 0 //The "Are we on fire?" var
var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20
+
+ var/ventcrawler = 0 //0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index a033f81ac63..0df85076f4f 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -16,6 +16,7 @@
response_harm = "stomps"
stop_automated_movement = 1
friendly = "pinches"
+ ventcrawler = 2
var/obj/item/inventory_head
var/obj/item/inventory_mask
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index e997036477f..e56df2e9648 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -166,6 +166,7 @@
response_harm = "kicks"
attacktext = "kicks"
health = 1
+ ventcrawler = 2
var/amount_grown = 0
pass_flags = PASSTABLE | PASSGRILLE
@@ -206,6 +207,7 @@ var/global/chicken_count = 0
response_harm = "kicks"
attacktext = "kicks"
health = 10
+ ventcrawler = 2
var/eggsleft = 0
var/body_color
pass_flags = PASSTABLE
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 48b5685e6dc..5cfb67fa0e3 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -13,4 +13,5 @@
melee_damage_upper = 2
response_help = "pets"
response_disarm = "shoos"
- response_harm = "stomps on"
\ No newline at end of file
+ response_harm = "stomps on"
+ ventcrawler = 2
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index e1b266d7edf..6fd06c6a3cb 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -18,6 +18,7 @@
response_disarm = "gently pushes aside"
response_harm = "splats"
density = 0
+ ventcrawler = 2
var/body_color //brown, gray and white, leave blank for random
/mob/living/simple_animal/mouse/New()
diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm
index b49c3e9eabc..de3b5e5a313 100644
--- a/code/modules/mob/living/simple_animal/friendly/slime.dm
+++ b/code/modules/mob/living/simple_animal/friendly/slime.dm
@@ -12,6 +12,7 @@
response_disarm = "shoos"
response_harm = "stomps on"
emote_see = list("jiggles", "bounces in place")
+ ventcrawler = 2
var/colour = "grey"
/mob/living/simple_animal/slime/Bump(atom/movable/AM as mob|obj, yes)
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index 57c0f4c939b..30e675e5a8e 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -12,4 +12,5 @@
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
- harm_intent_damage = 5
\ No newline at end of file
+ harm_intent_damage = 5
+ ventcrawler = 2
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index c4e1c38c32d..e0a39a8aa8d 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -34,6 +34,7 @@
var/busy = 0
pass_flags = PASSTABLE
move_to_delay = 6
+ ventcrawler = 2
//nursemaids - these create webs and eggs
/mob/living/simple_animal/hostile/giant_spider/nurse
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index 88770679633..42ee3d600f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -22,6 +22,7 @@
stat_attack = 2
mouse_opacity = 1
speed = 1
+ ventcrawler = 2
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index 5c575649e83..8e32e320b36 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -23,6 +23,7 @@
faction = "carp"
attack_sound = 'sound/weapons/bite.ogg'
environment_smash = 0
+ ventcrawler = 2
//Space bats need no air to fly in.
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5c0584eeefc..590305bc8af 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -569,79 +569,6 @@ var/list/slot_equipment_priority = list( \
for(var/mob/M in viewers())
M.see(message)
-/*
-adds a dizziness amount to a mob
-use this rather than directly changing var/dizziness
-since this ensures that the dizzy_process proc is started
-currently only humans get dizzy
-
-value of dizziness ranges from 0 to 1000
-below 100 is not dizzy
-*/
-/mob/proc/make_dizzy(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- dizziness = min(1000, dizziness + amount) // store what will be new value
- // clamped to max 1000
- if(dizziness > 100 && !is_dizzy)
- spawn(0)
- dizzy_process()
-
-
-/*
-dizzy process - wiggles the client's pixel offset over time
-spawned from make_dizzy(), will terminate automatically when dizziness gets <100
-note dizziness decrements automatically in the mob's Life() proc.
-*/
-/mob/proc/dizzy_process()
- is_dizzy = 1
- while(dizziness > 100)
- if(client)
- var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70
- client.pixel_x = amplitude * sin(0.008 * dizziness * world.time)
- client.pixel_y = amplitude * cos(0.008 * dizziness * world.time)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_dizzy = 0
- if(client)
- client.pixel_x = 0
- client.pixel_y = 0
-
-// jitteriness - copy+paste of dizziness
-
-/mob/proc/make_jittery(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- jitteriness = min(1000, jitteriness + amount) // store what will be new value
- // clamped to max 1000
- if(jitteriness > 100 && !is_jittery)
- spawn(0)
- jittery_process()
-
-
-// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above.
-/mob/proc/jittery_process()
- var/old_x = pixel_x
- var/old_y = pixel_y
- is_jittery = 1
- while(jitteriness > 100)
-// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70
-// pixel_x = amplitude * sin(0.008 * jitteriness * world.time)
-// pixel_y = amplitude * cos(0.008 * jitteriness * world.time)
-
- var/amplitude = min(4, jitteriness / 100)
- pixel_x = rand(-amplitude, amplitude)
- pixel_y = rand(-amplitude/3, amplitude/3)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_jittery = 0
- pixel_x = old_x
- pixel_y = old_y
-
/mob/Stat()
..()
@@ -768,6 +695,11 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
return 0
+/mob/proc/Jitter(amount)
+ jitteriness = max(jitteriness,amount,0)
+
+/mob/proc/Dizzy(amount)
+ dizziness = max(dizziness,amount,0)
/mob/proc/Stun(amount)
if(status_flags & CANSTUN)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index eb2c904c047..1a6896915c9 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -74,8 +74,6 @@
var/bodytemperature = 310.055 //98.7 F
var/drowsyness = 0//Carbon
var/dizziness = 0//Carbon
- var/is_dizzy = 0
- var/is_jittery = 0
var/jitteriness = 0//Carbon
var/nutrition = 400//Carbon
@@ -167,4 +165,4 @@
var/robot_talk_understand = 0
var/alien_talk_understand = 0
- var/turf/listed_turf = null //the current turf being examined in the stat panel
+ var/turf/listed_turf = null //the current turf being examined in the stat panel
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 4e18c895f15..154474e3c85 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -266,7 +266,7 @@ datum
if(data >= 30)
if (!M.stuttering) M.stuttering = 1
M.stuttering += 4
- M.make_dizzy(5)
+ M.Dizzy(5)
if(data >= 30*2.5 && prob(33))
if (!M.confused) M.confused = 1
M.confused += 3
@@ -825,7 +825,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- M.make_dizzy(1)
+ M.Dizzy(1)
if(!M.confused) M.confused = 1
M.confused = max(M.confused, 20)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
@@ -1151,8 +1151,8 @@ datum
M.status_flags &= ~DISFIGURED
if(35 to INFINITY)
M.adjustToxLoss(1)
- M.make_dizzy(5)
- M.make_jittery(5)
+ M.Dizzy(5)
+ M.Jitter(5)
..()
return
@@ -1995,18 +1995,18 @@ datum
switch(data)
if(1 to 5)
if (!M.stuttering) M.stuttering = 1
- M.make_dizzy(5)
+ M.Dizzy(5)
if(prob(10)) M.emote(pick("twitch","giggle"))
if(5 to 10)
if (!M.stuttering) M.stuttering = 1
- M.make_jittery(10)
- M.make_dizzy(10)
+ M.Jitter(10)
+ M.Dizzy(10)
M.druggy = max(M.druggy, 35)
if(prob(20)) M.emote(pick("twitch","giggle"))
if (10 to INFINITY)
if (!M.stuttering) M.stuttering = 1
- M.make_jittery(20)
- M.make_dizzy(20)
+ M.Jitter(20)
+ M.Dizzy(20)
M.druggy = max(M.druggy, 40)
if(prob(30)) M.emote(pick("twitch","giggle"))
holder.remove_reagent(src.id, 0.2)
@@ -2394,7 +2394,7 @@ datum
M.sleeping = max(0,M.sleeping - 2)
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
if(holder.has_reagent("frostoil"))
holder.remove_reagent("frostoil", 5)
..()
@@ -2434,7 +2434,7 @@ datum
M.sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
..()
return
@@ -2479,7 +2479,7 @@ datum
color = "#100800" // rgb: 16, 8, 0
on_mob_life(var/mob/living/M as mob)
- M.make_jittery(20)
+ M.Jitter(20)
M.druggy = max(M.druggy, 30)
M.dizziness +=5
M.drowsyness = 0
@@ -2502,7 +2502,7 @@ datum
M.sleeping = max(0,M.sleeping-1)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
M.nutrition += 1
..()
return
@@ -2608,7 +2608,7 @@ datum
M.sleeping = 0
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
M.nutrition++
..()
@@ -2628,7 +2628,7 @@ datum
M.sleeping = 0
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
M.nutrition++
..()
@@ -2664,7 +2664,7 @@ datum
on_mob_life(var/mob/living/M as mob)
M.druggy = max(M.druggy, 50)
M.confused = max(M.confused+2,0)
- M.make_dizzy(10)
+ M.Dizzy(10)
if (!M.stuttering) M.stuttering = 1
M.stuttering += 3
if(!data) data = 1
@@ -2741,24 +2741,24 @@ datum
switch(data)
if(1 to 5)
if (!M.stuttering) M.stuttering = 1
- M.make_dizzy(10)
+ M.Dizzy(10)
if(prob(10)) M.emote(pick("twitch","giggle"))
if(5 to 10)
if (!M.stuttering) M.stuttering = 1
- M.make_jittery(20)
- M.make_dizzy(20)
+ M.Jitter(20)
+ M.Dizzy(20)
M.druggy = max(M.druggy, 45)
if(prob(20)) M.emote(pick("twitch","giggle"))
if (10 to 200)
if (!M.stuttering) M.stuttering = 1
- M.make_jittery(40)
- M.make_dizzy(40)
+ M.Jitter(40)
+ M.Dizzy(40)
M.druggy = max(M.druggy, 60)
if(prob(30)) M.emote(pick("twitch","giggle"))
if(200 to INFINITY)
if (!M.stuttering) M.stuttering = 1
- M.make_jittery(60)
- M.make_dizzy(60)
+ M.Jitter(60)
+ M.Dizzy(60)
M.druggy = max(M.druggy, 75)
if(prob(40)) M.emote(pick("twitch","giggle"))
if(prob(30)) M.adjustToxLoss(2)
@@ -2789,7 +2789,7 @@ datum
if(data >= boozepwr)
if (!M.stuttering) M.stuttering = 1
M.stuttering += 4
- M.make_dizzy(5)
+ M.Dizzy(5)
if(data >= boozepwr*2.5 && prob(33))
if (!M.confused) M.confused = 1
M.confused += 3
@@ -2841,7 +2841,7 @@ datum
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.sleeping = max(0,M.sleeping-2)
- M.make_jittery(5)
+ M.Jitter(5)
..()
return
@@ -2864,7 +2864,7 @@ datum
M.sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.make_jittery(5)
+ M.Jitter(5)
M.nutrition += 1
..()
return
diff --git a/html/changelog.html b/html/changelog.html
index 094a498c348..2bbfb2731c2 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -52,25 +52,115 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
-
-
-
17 February 2014
-
Ergovisavi updated:
-
- - Mining has been significantly overhauled. Hostile alien life has infested the western asteroid! Miners are given an equipment voucher to obtain equipment to protect themselves. There is a spare voucher in the HoP's office, should someone want to switch to mining mid-shift.
- - The Ore Redemption Machine has been added just outside of the Science wing. Ore goes in, Sheets go out, and points are tallied on the machine. Insert your ID to claim points, then spend them on goods at Mining Equipment Lockers. You require specific accesses to tell the Ore Redemption Machine to unload its sheets.
- - Should you not care for being eaten alive by horrible alien life, it is suggested you stick to the eastern asteroid, where there is no hostile alien life... though the yield on ore is not as good.
- - Most ore is no longer visible to the naked eye. You must ping it with a Mining Scanner (Available in all mining lockers) to locate nearby ore. Make sure to equip your mesons first, or it won't be visible.
- - Mesons no longer remove the darkness overlay, you must properly light your environment. Hull breaches to space can still be clearly seen, and it will still protect you from the singulo.
- - Mineral spawn rates have been significantly tweaked to cut down on unnecessary inflation of mineral economy.
- - The asteroid no longer has ambient power on the entire asteroid. AI's who go onto asteroid turf will slowly die of power loss. Mining outposts are unaffected.
- - Fixed an issue where projectiles shot by simple mobs or thrown would hit multiple times.
-
-
-
+
+
+
+
3 maart 2014
+
Miauw updated:
+
+ - Changelings have a new power, Dissonant Shriek. This power causes an EMP in the surrounding area.
+
+
+
+
+
3 March 2014
+
Incoming5643 updated:
+
+ - Improved blob spores to zombify people adjacent to their tile.
+ - If a hand-teleporter is activated while you're stuck inside a wall, you'll automatically go through it.
+
+
Miauw updated:
+
+ - Decreased the lethality of Mutagen in small doses.
+
+
Drovidi Corv updated:
+
+ - Facehuggers no longer die to zero-force weapons or projectiles like lasertag beams.
+
+
TZK13 updated:
+
+ - Added Incendiary Shotgun Shells made at a hacked autolathe; Xenos be wary.
+
+
ChuckTheSheep updated:
+
+ - Round-end report now shows what items were bought with a traitor's or nuke-op's uplink and how many TCs they used.
+
+
+
+
+
26 February 2014
+
Incoming5643 updated:
+
+ - Color blending Kitty Ears have returned.
+
+
+
+
+
25 February 2014
+
Incoming5643 updated:
+
+ - Colored burgers! Include a crayon in your microwave when cooking a burger and it'll come out just like a Pretty Pattie.
+ - Fixed AI's being able to interact with syndicate bombs.
+
+
+
+
+
24 February 2014
+
Miauw updated:
+
+ - No more removing cursed horseheads.
+
+
Incoming5643 updated:
+
+ - Improved the Syndicate Implant bundle to contain freedom, uplink, EMP, adrenalin and explosive implanters.
+ - Added Mineral Storeroom to R&D containing the Ore Redemption Machine; no more assistants stealing your ore in the open hallway.
+
+
Ergovisavi updated:
+
+ - Added Advanced Mesons and Night Vision Goggles to the protolathe.
+
+
HornyGranny updated:
+
+ - Reduced the range of Violin notes.
+ - Low quality violin midi-notes replaced with better .ogg-notes.
+
+
Giacom updated:
+
+ - Silicons no longer stop statues from moving when in sight.
+ - Increased the health of statues.
+ - Increased the range of statues's blinding spell.
+
+
Razharas updated:
+
+ - Fixed infinite telecrystal exploit.
+
+
+
+
+
19 February 2014
+
Perakp updated:
+
+ - Added Iatot's cyborg module selection transformation animations.
+
+
Aranclanos updated:
+
+ - Removed the chance of your hat falling off when slipping.
+
+
+
17 February 2014
+
Ergovisavi updated:
+
+ - Mining has been significantly overhauled. Hostile alien life has infested the western asteroid! Miners are given an equipment voucher to obtain equipment to protect themselves. There is a spare voucher in the HoP's office, should someone want to switch to mining mid-shift.
+ - The Ore Redemption Machine has been added just outside of the Science wing. Ore goes in, Sheets go out, and points are tallied on the machine. Insert your ID to claim points, then spend them on goods at Mining Equipment Lockers. You require specific accesses to tell the Ore Redemption Machine to unload its sheets.
+ - Should you not care for being eaten alive by horrible alien life, it is suggested you stick to the eastern asteroid, where there is no hostile alien life... though the yield on ore is not as good.
+ - Most ore is no longer visible to the naked eye. You must ping it with a Mining Scanner (Available in all mining lockers) to locate nearby ore. Make sure to equip your mesons first, or it won't be visible.
+ - Mesons no longer remove the darkness overlay, you must properly light your environment. Hull breaches to space can still be clearly seen, and it will still protect you from the singulo.
+ - Mineral spawn rates have been significantly tweaked to cut down on unnecessary inflation of mineral economy.
+ - The asteroid no longer has ambient power on the entire asteroid. AI's who go onto asteroid turf will slowly die of power loss. Mining outposts are unaffected.
+ - Fixed an issue where projectiles shot by simple mobs or thrown would hit multiple times.
+
Fleure updated:
- Reduced chicken crates to contain 1-3 chicks, down from 3-6
@@ -113,57 +203,57 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
-
9 February 2014
-
Demas updated:
-
- - Banana peel size is based on banana size.
- - Bigger peels slip for longer than smaller ones. Remember that produce size is based on potency.
- - The clown now spawns with a decent sized banana.
- - The banana mortar now shoots 65 potency peels.
-
-
+
+
9 February 2014
+
Demas updated:
+
+ - Banana peel size is based on banana size.
+ - Bigger peels slip for longer than smaller ones. Remember that produce size is based on potency.
+ - The clown now spawns with a decent sized banana.
+ - The banana mortar now shoots 65 potency peels.
+
+
-
-
-
8 February 2014
-
Razharas updated:
-
- - Adds more constructible and deconstructable machines!
- - Added constructible miniature chemical dispensers, upgradable
- - Sleepers are now constructible and upgradable, open and close like DNA scanners, and don't require a console
- - Cryogenic tubes are now constructible and upgradable, open and close like DNA scanners, and you can set the cryogenic tube's pipe's direction by opening its panel and wrenching it to connect it to piping
- - Telescience pads are now constructible and upgradable
- - Telescience consoles are now constructible
- - Telescience tweaked (you can save data on GPS units now)
- - Teleporters are now constructible and upgradable, the console has a new interface and you can lock onto places saved to GPS units in telescience
- - Teleporters start unconnected. You need to manually reconnect the console, station and hub by opening the panel of the station and applying wire cutters to it.
- - Biogenerators are now constructible and upgradable
- - Atmospherics heaters and freezers are now constructible and upgradable and can be rotated with a wrench when their panel is open to connect them to pipes. Screw the board to switch between heater and freezer.
- - Mech chargers are now constructible and upgradable
- - Microwaves are now constructible and upgradable
- - All kitchen machinery can now be wrenched free
- - SMES are now constructible
- - Dragging a human's sprite to a cryogenic tube or sleeper will put them inside and activate it if it's cryo
- - Constructible newscasters, their frames are made with autolathes
- - Constructible pandemics
- - Constructible power turbines and their computers
- - Constructible power compressors
- - Constructible vending machines. Screw the board to switch vendor type.
- - Constructible hydroponics trays
- - Sprites for all this
- - This update will have unforeseen bugs, please report those you find at https://github.com/tgstation/-tg-station/issues/new if you want them fixed.
- - As usual, machines are deconstructed by screwing open their panels and crowbarring them. While constructing machines, examining them will tell you what parts you're missing.
-
-
-
-
-
8 February 2014
-
MrPerson updated:
-
- - Added a NanoUI for the SMES
-
-
+
+
+
8 February 2014
+
Razharas updated:
+
+ - Adds more constructible and deconstructable machines!
+ - Added constructible miniature chemical dispensers, upgradable
+ - Sleepers are now constructible and upgradable, open and close like DNA scanners, and don't require a console
+ - Cryogenic tubes are now constructible and upgradable, open and close like DNA scanners, and you can set the cryogenic tube's pipe's direction by opening its panel and wrenching it to connect it to piping
+ - Telescience pads are now constructible and upgradable
+ - Telescience consoles are now constructible
+ - Telescience tweaked (you can save data on GPS units now)
+ - Teleporters are now constructible and upgradable, the console has a new interface and you can lock onto places saved to GPS units in telescience
+ - Teleporters start unconnected. You need to manually reconnect the console, station and hub by opening the panel of the station and applying wire cutters to it.
+ - Biogenerators are now constructible and upgradable
+ - Atmospherics heaters and freezers are now constructible and upgradable and can be rotated with a wrench when their panel is open to connect them to pipes. Screw the board to switch between heater and freezer.
+ - Mech chargers are now constructible and upgradable
+ - Microwaves are now constructible and upgradable
+ - All kitchen machinery can now be wrenched free
+ - SMES are now constructible
+ - Dragging a human's sprite to a cryogenic tube or sleeper will put them inside and activate it if it's cryo
+ - Constructible newscasters, their frames are made with autolathes
+ - Constructible pandemics
+ - Constructible power turbines and their computers
+ - Constructible power compressors
+ - Constructible vending machines. Screw the board to switch vendor type.
+ - Constructible hydroponics trays
+ - Sprites for all this
+ - This update will have unforeseen bugs, please report those you find at https://github.com/tgstation/-tg-station/issues/new if you want them fixed.
+ - As usual, machines are deconstructed by screwing open their panels and crowbarring them. While constructing machines, examining them will tell you what parts you're missing.
+
+
+
+
+
8 February 2014
+
MrPerson updated:
+
+ - Added a NanoUI for the SMES
+
+
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 247a9148863..6576436d5fa 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 9045a89b745..8abb1d5a214 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 9a805ab162f..c1e68ca3ec0 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index acfb656c318..c0d073039bb 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 63241a21829..bb4c740aef6 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 6c14e3f929d..224ad0f413c 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index c857e0d39d4..a424ea49f5e 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index e8aba5cf9e3..77eb778af60 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 50e8e5b0a6c..1e3090a1c63 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index ac83c403228..59dc085ef39 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6,6 +6,48 @@
// BEGIN_FILE_DIR
#define FILE_DIR .
+#define FILE_DIR "html"
+#define FILE_DIR "icons"
+#define FILE_DIR "icons/ass"
+#define FILE_DIR "icons/effects"
+#define FILE_DIR "icons/mecha"
+#define FILE_DIR "icons/misc"
+#define FILE_DIR "icons/mob"
+#define FILE_DIR "icons/obj"
+#define FILE_DIR "icons/obj/assemblies"
+#define FILE_DIR "icons/obj/atmospherics"
+#define FILE_DIR "icons/obj/clothing"
+#define FILE_DIR "icons/obj/doors"
+#define FILE_DIR "icons/obj/flora"
+#define FILE_DIR "icons/obj/machines"
+#define FILE_DIR "icons/obj/pipes"
+#define FILE_DIR "icons/obj/power_cond"
+#define FILE_DIR "icons/pda_icons"
+#define FILE_DIR "icons/spideros_icons"
+#define FILE_DIR "icons/stamp_icons"
+#define FILE_DIR "icons/Testing"
+#define FILE_DIR "icons/turf"
+#define FILE_DIR "icons/vending_icons"
+#define FILE_DIR "nano"
+#define FILE_DIR "nano/images"
+#define FILE_DIR "sound"
+#define FILE_DIR "sound/AI"
+#define FILE_DIR "sound/ambience"
+#define FILE_DIR "sound/effects"
+#define FILE_DIR "sound/hallucinations"
+#define FILE_DIR "sound/items"
+#define FILE_DIR "sound/machines"
+#define FILE_DIR "sound/mecha"
+#define FILE_DIR "sound/misc"
+#define FILE_DIR "sound/piano"
+#define FILE_DIR "sound/violin"
+#define FILE_DIR "sound/voice"
+#define FILE_DIR "sound/voice/complionator"
+#define FILE_DIR "sound/vox_fem"
+#define FILE_DIR "sound/weapons"
+#define FILE_DIR "tools"
+#define FILE_DIR "tools/AddToChangelog"
+#define FILE_DIR "tools/AddToChangelog/AddToChangelog"
// END_FILE_DIR
// BEGIN_PREFERENCES
@@ -893,7 +935,6 @@
#include "code\modules\mob\living\carbon\alien\death.dm"
#include "code\modules\mob\living\carbon\alien\login.dm"
#include "code\modules\mob\living\carbon\alien\logout.dm"
-#include "code\modules\mob\living\carbon\alien\powers.dm"
#include "code\modules\mob\living\carbon\alien\say.dm"
#include "code\modules\mob\living\carbon\alien\screen.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
@@ -960,7 +1001,6 @@
#include "code\modules\mob\living\carbon\monkey\life.dm"
#include "code\modules\mob\living\carbon\monkey\login.dm"
#include "code\modules\mob\living\carbon\monkey\monkey.dm"
-#include "code\modules\mob\living\carbon\monkey\powers.dm"
#include "code\modules\mob\living\carbon\monkey\say.dm"
#include "code\modules\mob\living\carbon\monkey\update_icons.dm"
#include "code\modules\mob\living\silicon\death.dm"