Conflict fix

This commit is contained in:
Razharas
2014-03-05 06:30:29 +04:00
63 changed files with 807 additions and 473 deletions
+67 -10
View File
@@ -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 << "<span class='warning'> There are no available vents to travel to, they could be welded. </span>"
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 << "<span class='warning'> You can't be carrying items or have items equipped when vent crawling!</span>"
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("<B>[L] scrambles into the ventillation ducts!</B>"), 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 << "<span class='warning'> The vent you were heading to appears to be welded.</span>"
L.loc = target_vent.loc
var/area/new_area = get_area(loc)
if(new_area)
new_area.Entered(L)
+4 -11
View File
@@ -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
+22 -12
View File
@@ -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)
@@ -33,5 +33,5 @@ Bonus
M << "<span class='notice'>[pick("You feel dizzy.", "Your head starts spinning.")]</span>"
else
M << "<span class='notice'>You are unable to look straight!</span>"
M.make_dizzy(5)
M.Dizzy(5)
return
+31
View File
@@ -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"
@@ -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"
@@ -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."
+1 -1
View File
@@ -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
+18 -25
View File
@@ -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
+2 -4
View File
@@ -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
@@ -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
@@ -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)
+3 -4
View File
@@ -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()
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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
+13 -3
View File
@@ -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 << "<span class='warning'>The bulb has burnt out!</span>"
@@ -112,7 +114,7 @@
del(animation)
if(!flashfail)
flick("flash2", src)
flick(flashanim, src)
if(!issilicon(M))
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
@@ -201,4 +203,12 @@
/obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
..()
if(!broken)
burn_out(user)
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"
@@ -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 <B>BANG</B>"
/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M)
M << "<span class='warning'>BANG</span>"
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 << "<span class='warning'>Your eyes start to burn badly!</span>"
M.disabilities |= NEARSIGHTED
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
if (prob(M.eye_stat - 20 + 1))
M << "<span class='warning'>You can't see anything!</span>"
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 << "<span class='warning'>Your ears start to ring badly!</span>"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
if (prob(M.ear_damage - 10 + 5))
M << "<span class='warning'>You can't hear anything!</span>"
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 << "<span class='warning'>Your ears start to ring!</span>"
/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."
+1 -1
View File
@@ -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)
@@ -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)
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)
@@ -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
@@ -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
+1 -1
View File
@@ -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.
+9 -1
View File
@@ -96,4 +96,12 @@
src.chained = 1
src.slowdown = 15
src.icon_state = "orange1"
return
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 << "<span class='notice'>You need help taking these off!</span>"
return
..()
+8
View File
@@ -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"
+18 -8
View File
@@ -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)
+9 -2
View File
@@ -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."
@@ -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
+5
View File
@@ -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."
+123 -1
View File
@@ -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 << "<span class='notice'>You put the seeds from \the [O.name] into [src].</span>"
else
user << "<span class='notice'>There are no seeds in \the [O.name].</span>"
return
user.drop_item()
if(O && O.loc)
O.loc = src.loc
if(seedify(O,-1))
user << "<span class='notice'>You extract some seeds.</span>"
return
else if (istype(O,/obj/item/seeds))
add(O)
user << "<span class='notice'>You add [O] to [src.name].</span>"
updateUsrDialog()
return
else
user << "<span class='notice'>You can't extract any seeds from \the [O.name].</span>"
user << "<span class='notice'>You can't extract any seeds from \the [O.name].</span>"
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 = "<b>Stored seeds:</b><br>"
if (contents.len == 0)
dat += "<font color='red'>No seeds</font>"
else
dat += "<table cellpadding='3' style='text-align:center;'><tr><td>Name</td><td>Lifespan</td><td>Endurance</td><td>Maturation</td><td>Production</td><td>Yield</td><td>Potency</td><td>Stock</td></tr>"
for (var/datum/seed_pile/O in piles)
dat += "<tr><td>[O.name]</td><td>[O.lifespan]</td><td>[O.endurance]</td><td>[O.maturation]</td>"
dat += "<td>[O.production]</td><td>[O.yield]</td><td>[O.potency]</td><td>"
dat += "<a href='byond://?src=\ref[src];name=[O.name];li=[O.lifespan];en=[O.endurance];ma=[O.maturation];pr=[O.production];yi=[O.yield];pot=[O.potency]'>Vend</a> ([O.amount] left)</td></tr>"
dat += "</table>"
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 << "<span class='notice'>\The [src] is full.</span>"
return 0
if(istype(O.loc,/mob))
var/mob/M = O.loc
if(!M.unEquip(O))
usr << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
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
@@ -11,6 +11,7 @@
gender = NEUTER
dna = null
faction = "alien"
ventcrawler = 2
var/storedPlasma = 250
var/max_plasma = 500
@@ -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
@@ -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()
-93
View File
@@ -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("<B>[src] scrambles into the ventillation ducts!</B>"), 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
@@ -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 += "<span class='warning'><B>[t_He] [t_is] convulsing violently!</B></span>\n"
else if(jitteriness >= 200)
if(200 to 300)
msg += "<span class='warning'>[t_He] [t_is] extremely jittery.</span>\n"
else if(jitteriness >= 100)
if(100 to 200)
msg += "<span class='warning'>[t_He] [t_is] twitching ever so slightly.</span>\n"
if(suiciding)
+56 -18
View File
@@ -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 <B>[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)
@@ -5,6 +5,7 @@
pass_flags = PASSTABLE
voice_message = "skree!"
say_message = "hums"
ventcrawler = 2
var/is_adult = 0
layer = 5
@@ -225,13 +225,4 @@
else
src << "<i>I am not ready to reproduce yet...</i>"
else
src << "<i>I am not old enough to reproduce yet...</i>"
/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()
src << "<i>I am not old enough to reproduce yet...</i>"
@@ -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)
@@ -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()
@@ -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
@@ -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
@@ -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
@@ -13,4 +13,5 @@
melee_damage_upper = 2
response_help = "pets"
response_disarm = "shoos"
response_harm = "stomps on"
response_harm = "stomps on"
ventcrawler = 2
@@ -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()
@@ -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)
@@ -12,4 +12,5 @@
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
harm_intent_damage = 5
harm_intent_damage = 5
ventcrawler = 2
@@ -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
@@ -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
@@ -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.
+5 -73
View File
@@ -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)
+1 -3
View File
@@ -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
+26 -26
View File
@@ -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
+157 -67
View File
@@ -52,25 +52,115 @@ should be listed in the changelog upon commit tho. Thanks. -->
<!-- You can simply add changelogs using AddToChangelog.exe -->
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
<div class='commit sansserif'>
<h2 class='date'>17 February 2014</h2>
<h3 class='author'>Ergovisavi updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='tweak'>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.</li>
<li class='tweak'>Mineral spawn rates have been significantly tweaked to cut down on unnecessary inflation of mineral economy.</li>
<li class='tweak'>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.</li>
<li class ='bugfix'>Fixed an issue where projectiles shot by simple mobs or thrown would hit multiple times.</li>
</ul>
</div>
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
<div class='commit sansserif'>
<h2 class='date'>3 maart 2014</h2>
<h3 class='author'>Miauw updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Changelings have a new power, Dissonant Shriek. This power causes an EMP in the surrounding area.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>3 March 2014</h2>
<h3 class='author'>Incoming5643 updated:</h3>
<ul class='changes bgimages16'>
<li class='tweak'>Improved blob spores to zombify people adjacent to their tile. </li>
<li class='bugfix'>If a hand-teleporter is activated while you're stuck inside a wall, you'll automatically go through it. </li>
</ul>
<h3 class='author'>Miauw updated:</h3>
<ul class='changes bgimages16'>
<li class='tweak'>Decreased the lethality of Mutagen in small doses. </li>
</ul>
<h3 class='author'>Drovidi Corv updated:</h3>
<ul class='changes bgimages16'>
<li class='bugfix'>Facehuggers no longer die to zero-force weapons or projectiles like lasertag beams. </li>
</ul>
<h3 class='author'>TZK13 updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Added Incendiary Shotgun Shells made at a hacked autolathe; Xenos be wary. </li>
</ul>
<h3 class='author'>ChuckTheSheep updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Round-end report now shows what items were bought with a traitor's or nuke-op's uplink and how many TCs they used.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>26 February 2014</h2>
<h3 class='author'>Incoming5643 updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Color blending Kitty Ears have returned. </li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>25 February 2014</h2>
<h3 class='author'>Incoming5643 updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Colored burgers! Include a crayon in your microwave when cooking a burger and it'll come out just like a Pretty Pattie. </li>
<li class='bugfix'>Fixed AI's being able to interact with syndicate bombs. </li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>24 February 2014</h2>
<h3 class='author'>Miauw updated:</h3>
<ul class='changes bgimages16'>
<li class='bugfix'>No more removing cursed horseheads. </li>
</ul>
<h3 class='author'>Incoming5643 updated:</h3>
<ul class='changes bgimages16'>
<li class='tweak'>Improved the Syndicate Implant bundle to contain freedom, uplink, EMP, adrenalin and explosive implanters. </li>
<li class='tweak'>Added Mineral Storeroom to R&D containing the Ore Redemption Machine; no more assistants stealing your ore in the open hallway. </li>
</ul>
<h3 class='author'>Ergovisavi updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Added Advanced Mesons and Night Vision Goggles to the protolathe. </li>
</ul>
<h3 class='author'>HornyGranny updated:</h3>
<ul class='changes bgimages16'>
<li class='sounddel'>Reduced the range of Violin notes. </li>
<li class='soundadd'>Low quality violin midi-notes replaced with better .ogg-notes. </li>
</ul>
<h3 class='author'>Giacom updated:</h3>
<ul class='changes bgimages16'>
<li class='bugfix'>Silicons no longer stop statues from moving when in sight. </li>
<li class='wip'>Increased the health of statues. </li>
<li class='wip'>Increased the range of statues's blinding spell. </li>
</ul>
<h3 class='author'>Razharas updated:</h3>
<ul class='changes bgimages16'>
<li class='bugfix'>Fixed infinite telecrystal exploit. </li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>19 February 2014</h2>
<h3 class='author'>Perakp updated:</h3>
<ul class='changes bgimages16'>
<li class='imageadd'>Added Iatot's cyborg module selection transformation animations. </li>
</ul>
<h3 class='author'>Aranclanos updated:</h3>
<ul class='changes bgimages16'>
<li class='bugfix'>Removed the chance of your hat falling off when slipping. </li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>17 February 2014</h2>
<h3 class='author'>Ergovisavi updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>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.</li>
<li class='tweak'>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.</li>
<li class='tweak'>Mineral spawn rates have been significantly tweaked to cut down on unnecessary inflation of mineral economy.</li>
<li class='tweak'>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.</li>
<li class ='bugfix'>Fixed an issue where projectiles shot by simple mobs or thrown would hit multiple times.</li>
</ul>
<h3 class='author'>Fleure updated:</h3>
<ul class='changes bgimages16'>
<li class='tweak'>Reduced chicken crates to contain 1-3 chicks, down from 3-6</li>
@@ -113,57 +203,57 @@ should be listed in the changelog upon commit tho. Thanks. -->
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>9 February 2014</h2>
<h3 class='author'>Demas updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Banana peel size is based on banana size. </li>
<li class='rscadd'>Bigger peels slip for longer than smaller ones. Remember that produce size is based on potency.</li>
<li class='tweak'>The clown now spawns with a decent sized banana.</li>
<li class='tweak'>The banana mortar now shoots 65 potency peels.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>9 February 2014</h2>
<h3 class='author'>Demas updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Banana peel size is based on banana size. </li>
<li class='rscadd'>Bigger peels slip for longer than smaller ones. Remember that produce size is based on potency.</li>
<li class='tweak'>The clown now spawns with a decent sized banana.</li>
<li class='tweak'>The banana mortar now shoots 65 potency peels.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>8 February 2014</h2>
<h3 class='author'>Razharas updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Adds more constructible and deconstructable machines!</li>
<li class='rscadd'>Added constructible miniature chemical dispensers, upgradable</li>
<li class='rscadd'>Sleepers are now constructible and upgradable, open and close like DNA scanners, and don't require a console</li>
<li class='rscadd'>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</li>
<li class='rscadd'>Telescience pads are now constructible and upgradable</li>
<li class='rscadd'>Telescience consoles are now constructible</li>
<li class='rscadd'>Telescience tweaked (you can save data on GPS units now)</li>
<li class='rscadd'>Teleporters are now constructible and upgradable, the console has a new interface and you can lock onto places saved to GPS units in telescience</li>
<li class='tweak'>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.</li>
<li class='rscadd'>Biogenerators are now constructible and upgradable</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>Mech chargers are now constructible and upgradable</li>
<li class='rscadd'>Microwaves are now constructible and upgradable</li>
<li class='rscadd'>All kitchen machinery can now be wrenched free</li>
<li class='rscadd'>SMES are now constructible</li>
<li class='rscadd'>Dragging a human's sprite to a cryogenic tube or sleeper will put them inside and activate it if it's cryo</li>
<li class='rscadd'>Constructible newscasters, their frames are made with autolathes</li>
<li class='rscadd'>Constructible pandemics</li>
<li class='rscadd'>Constructible power turbines and their computers</li>
<li class='rscadd'>Constructible power compressors</li>
<li class='rscadd'>Constructible vending machines. Screw the board to switch vendor type.</li>
<li class='rscadd'>Constructible hydroponics trays</li>
<li class='imageadd'>Sprites for all this</li>
<li class='wip'>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.</li>
<li class='rscadd'>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.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>8 February 2014</h2>
<h3 class='author'>MrPerson updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Added a NanoUI for the SMES</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>8 February 2014</h2>
<h3 class='author'>Razharas updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Adds more constructible and deconstructable machines!</li>
<li class='rscadd'>Added constructible miniature chemical dispensers, upgradable</li>
<li class='rscadd'>Sleepers are now constructible and upgradable, open and close like DNA scanners, and don't require a console</li>
<li class='rscadd'>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</li>
<li class='rscadd'>Telescience pads are now constructible and upgradable</li>
<li class='rscadd'>Telescience consoles are now constructible</li>
<li class='rscadd'>Telescience tweaked (you can save data on GPS units now)</li>
<li class='rscadd'>Teleporters are now constructible and upgradable, the console has a new interface and you can lock onto places saved to GPS units in telescience</li>
<li class='tweak'>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.</li>
<li class='rscadd'>Biogenerators are now constructible and upgradable</li>
<li class='rscadd'>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.</li>
<li class='rscadd'>Mech chargers are now constructible and upgradable</li>
<li class='rscadd'>Microwaves are now constructible and upgradable</li>
<li class='rscadd'>All kitchen machinery can now be wrenched free</li>
<li class='rscadd'>SMES are now constructible</li>
<li class='rscadd'>Dragging a human's sprite to a cryogenic tube or sleeper will put them inside and activate it if it's cryo</li>
<li class='rscadd'>Constructible newscasters, their frames are made with autolathes</li>
<li class='rscadd'>Constructible pandemics</li>
<li class='rscadd'>Constructible power turbines and their computers</li>
<li class='rscadd'>Constructible power compressors</li>
<li class='rscadd'>Constructible vending machines. Screw the board to switch vendor type.</li>
<li class='rscadd'>Constructible hydroponics trays</li>
<li class='imageadd'>Sprites for all this</li>
<li class='wip'>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.</li>
<li class='rscadd'>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.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>8 February 2014</h2>
<h3 class='author'>MrPerson updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Added a NanoUI for the SMES</li>
</ul>
</div>
<div class='commit sansserif'>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

+42 -2
View File
@@ -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"