Merge pull request #2808 from CIB/feature

Some changes
This commit is contained in:
Chinsky
2013-05-19 02:04:43 -07:00
21 changed files with 10511 additions and 10423 deletions

View File

@@ -35,15 +35,22 @@
random_junk random_junk
cheesy_honkers cheesy_honkers
author = "Assistant Editor Carl Ritz" author = "Assistant Editor Carl Ritz"
channel_name = "Gibson Gazzette" channel_name = "The Gibson Gazzette"
message = "Do cheesy honkers increase risk of having a miscarriage? Several health administrations say so!" message = "Do cheesy honkers increase risk of having a miscarriage? Several health administrations say so!"
round_time = 60 * 15 round_time = 60 * 15
net_block net_block
author = "Assistant Editor Carl Ritz" author = "Assistant Editor Carl Ritz"
channel_name = "Gibson Gazzette" channel_name = "The Gibson Gazzette"
message = "Several corporations banding together to block access to 'wetskrell.nt', site administrators claiming violation of net laws." message = "Several corporations banding together to block access to 'wetskrell.nt', site administrators claiming violation of net laws."
round_time = 60 * 15 round_time = 60 * 50
found_ssd
channel_name = "Tau Ceti Daily"
author = "Doctor Eric Hanfield"
message = "Several people have been found unconscious at their terminals. It is thought that it was due to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage reveals that many of them were playing games instead of working and their pay has been docked accordingly."
round_time = 60 * 90
lotus_tree lotus_tree
explosions explosions
@@ -53,7 +60,23 @@
message = "The newly-christened civillian transport Lotus Tree suffered two very large explosions near the bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of the explosions remain unknown, but there is speculation that it might have something to do with the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L announced that they were officially acknowledging inter-species marriage and providing couples with marriage tax-benefits." message = "The newly-christened civillian transport Lotus Tree suffered two very large explosions near the bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of the explosions remain unknown, but there is speculation that it might have something to do with the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L announced that they were officially acknowledging inter-species marriage and providing couples with marriage tax-benefits."
round_time = 60 * 30 round_time = 60 * 30
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk) food_riots
breaking_news
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = "Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae Lupus system. This comes only hours after NanoTrasen officials announced they will no longer trade with the colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to continue. NanoTrasen officials have not given any details about said factions. More on that at the top of the hour."
round_time = 60 * 10
more
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = "More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from the colony, claiming \"there has been no increase in anti-NanoTrasen activity\", and \"\[the only] reason NanoTrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out. We have little to trade with them now\". NanoTrasen officials have denied these allegations, calling them \"further proof\" of the colony's anti-NanoTrasen stance. Meanwhile, Refuge Security has been unable to quell the riots. More on this at 6."
round_time = 60 * 60
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/lotus_tree)
proc/process_newscaster() proc/process_newscaster()
check_for_newscaster_updates(ticker.mode.newscaster_announcements) check_for_newscaster_updates(ticker.mode.newscaster_announcements)
@@ -62,7 +85,7 @@ var/global/tmp/announced_news_types = list()
proc/check_for_newscaster_updates(type) proc/check_for_newscaster_updates(type)
for(var/subtype in typesof(type)-type) for(var/subtype in typesof(type)-type)
var/datum/news_announcement/news = new subtype() var/datum/news_announcement/news = new subtype()
if(news.round_time * 10 >= world.time && !(subtype in announced_news_types)) if(news.round_time * 10 <= world.time && !(subtype in announced_news_types))
announced_news_types += subtype announced_news_types += subtype
announce_newscaster_news(news) announce_newscaster_news(news)

View File

@@ -165,7 +165,7 @@ datum/controller/vote
proc/initiate_vote(var/vote_type, var/initiator_key) proc/initiate_vote(var/vote_type, var/initiator_key)
if(!mode) if(!mode)
if(started_time != null) if(started_time != null && !check_rights(R_ADMIN))
var/next_allowed_time = (started_time + config.vote_delay) var/next_allowed_time = (started_time + config.vote_delay)
if(next_allowed_time > world.time) if(next_allowed_time > world.time)
return 0 return 0
@@ -200,7 +200,13 @@ datum/controller/vote
log_vote(text) log_vote(text)
world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>" world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>"
world << sound('misc/bloblarm.ogg') switch(vote_type)
if("crew_transfer")
world << sound('sound/voice/Serithi/Shuttlehere.ogg')
if("gamemode")
world << sound('sound/voice/Serithi/pretenddemoc.ogg')
if("custom")
world << sound('sound/voice/Serithi/weneedvote.ogg')
if(mode == "gamemode" && going) if(mode == "gamemode" && going)
going = 0 going = 0
world << "<font color='red'><b>Round start has been delayed.</b></font>" world << "<font color='red'><b>Round start has been delayed.</b></font>"
@@ -305,4 +311,4 @@ datum/controller/vote
set name = "Vote" set name = "Vote"
if(vote) if(vote)
src << browse(vote.interface(client),"window=vote;can_close=0") src << browse(vote.interface(client),"window=vote;can_close=0")

View File

@@ -225,7 +225,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
next_dest_loc = closest_loc next_dest_loc = closest_loc
if (next_dest_loc) if (next_dest_loc)
src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null) src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null)
src.patrol_path = reverselist(src.patrol_path)
else else
patrol_move() patrol_move()
@@ -235,7 +234,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
spawn(0) spawn(0)
if(!src || !target) return if(!src || !target) return
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 0, 30) src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 0, 30)
src.path = reverselist(src.path)
if(src.path.len == 0) if(src.path.len == 0)
src.oldtarget = src.target src.oldtarget = src.target
src.target = null src.target = null

View File

@@ -615,7 +615,6 @@ Auto Patrol: []"},
// given an optional turf to avoid // given an optional turf to avoid
/obj/machinery/bot/ed209/proc/calc_path(var/turf/avoid = null) /obj/machinery/bot/ed209/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid) src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
src.path = reverselist(src.path)
// look for a criminal in view of the bot // look for a criminal in view of the bot

View File

@@ -357,7 +357,6 @@
var/turf/dest = get_step_towards(target,src) //Can't pathfind to a tray, as it is dense, so pathfind to the spot next to the tray var/turf/dest = get_step_towards(target,src) //Can't pathfind to a tray, as it is dense, so pathfind to the spot next to the tray
src.path = AStar(src.loc, dest, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard) src.path = AStar(src.loc, dest, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
src.path = reverselist(src.path)
if(src.path.len == 0) if(src.path.len == 0)
for ( var/turf/spot in orange(1,target) ) //The closest one is unpathable, try the other spots for ( var/turf/spot in orange(1,target) ) //The closest one is unpathable, try the other spots
if ( spot == dest ) //We already tried this spot if ( spot == dest ) //We already tried this spot

View File

@@ -244,7 +244,6 @@
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30) src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
else else
src.path = AStar(src.loc, src.target, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30) src.path = AStar(src.loc, src.target, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
src.path = reverselist(src.path)
if(src.path.len == 0) if(src.path.len == 0)
src.oldtarget = src.target src.oldtarget = src.target
src.target = null src.target = null

View File

@@ -299,7 +299,6 @@
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1)) if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
spawn(0) spawn(0)
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard) src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
src.path = reverselist(src.path)
if(src.path.len == 0) if(src.path.len == 0)
src.oldpatient = src.patient src.oldpatient = src.patient
src.patient = null src.patient = null

View File

@@ -583,7 +583,6 @@ Auto Patrol: []"},
// given an optional turf to avoid // given an optional turf to avoid
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null) /obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid) src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
src.path = reverselist(src.path)
// look for a criminal in view of the bot // look for a criminal in view of the bot

View File

@@ -84,3 +84,45 @@
icon_state = icon_closed icon_state = icon_closed
else else
icon_state = icon_opened icon_state = icon_opened
/obj/item/bodybag/cryobag
name = "stasis bag"
desc = "A folded, non-reusable bag designed for the preservation of an occupant's brain by stasis."
icon = 'icons/obj/cryobag.dmi'
icon_state = "bodybag_folded"
attack_self(mob/user)
var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc)
R.add_fingerprint(user)
del(src)
/obj/structure/closet/body_bag/cryobag
name = "stasis bag"
desc = "A non-reusable plastic bag designed for the preservation of an occupant's brain by stasis."
icon = 'icons/obj/cryobag.dmi'
icon_state = "bodybag_closed"
icon_closed = "bodybag_closed"
icon_opened = "bodybag_open"
density = 0
var/used = 0
open()
. = ..()
if(used)
var/obj/item/O = new/obj/item(src.loc)
O.name = "used stasis bag"
O.icon = src.icon
O.icon_state = "bodybag_used"
O.desc = "Pretty useless now.."
del(src)
MouseDrop(over_object, src_location, over_location)
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if(!ishuman(usr)) return
usr << "\red You can't fold that up anymore.."
..()

View File

@@ -200,6 +200,8 @@ hi
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
desc = "A modified detective's camera, painted in bright orange. On the back you see \"Have fun\" written in small accurate letters with something black." desc = "A modified detective's camera, painted in bright orange. On the back you see \"Have fun\" written in small accurate letters with something black."
icon_state = "orangecamera" icon_state = "orangecamera"
icon_on = "orangecamera"
icon_off = "camera_off"
pictures_left = 30 pictures_left = 30
/obj/item/device/camera/fluff/oldcamera //magmaram: Maria Crash /obj/item/device/camera/fluff/oldcamera //magmaram: Maria Crash
@@ -207,6 +209,8 @@ hi
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
desc = "An old, slightly beat-up digital camera, with a cheap photo printer taped on. It's a nice shade of blue." desc = "An old, slightly beat-up digital camera, with a cheap photo printer taped on. It's a nice shade of blue."
icon_state = "oldcamera" icon_state = "oldcamera"
icon_on = "oldcamera"
icon_off = "oldcamera_off"
pictures_left = 30 pictures_left = 30
/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have /obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have
@@ -517,9 +521,10 @@ hi
icon_state = "deus_blueshield" icon_state = "deus_blueshield"
item_state = "deus_blueshield" item_state = "deus_blueshield"
/obj/item/clothing/suit/fluff/oldscarf //Writerer2: Sharik Israa /obj/item/clothing/suit/fluff/oldscarf //Writerer2: Javaria Zara
name = "old scarf" name = "old scarf"
desc = "An old looking scarf, it seems to be fairly worn." desc = "An old looking scarf, it seems to be fairly worn."
icon = 'clothing/suits.dmi'
icon_state = "mantle-unathi" icon_state = "mantle-unathi"
item_state = "mantle-unathi" item_state = "mantle-unathi"
body_parts_covered = UPPER_TORSO body_parts_covered = UPPER_TORSO

View File

@@ -28,6 +28,7 @@
var/pressure_alert = 0 var/pressure_alert = 0
var/prev_gender = null // Debug for plural genders var/prev_gender = null // Debug for plural genders
var/temperature_alert = 0 var/temperature_alert = 0
var/in_stasis = 0
/mob/living/carbon/human/Life() /mob/living/carbon/human/Life()
@@ -59,8 +60,11 @@
life_tick++ life_tick++
var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/environment = loc.return_air()
in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0
if(in_stasis) loc:used++
//No need to update all of these procs if the guy is dead. //No need to update all of these procs if the guy is dead.
if(stat != DEAD) if(stat != DEAD && !in_stasis)
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
breathe() //Only try to take a breath every 4 ticks, unless suffocating breathe() //Only try to take a breath every 4 ticks, unless suffocating
@@ -86,18 +90,20 @@
handle_virus_updates() handle_virus_updates()
//stuff in the stomach
handle_stomach()
handle_shock()
handle_pain()
handle_medical_side_effects()
handle_stasis_bag()
//Handle temperature/pressure differences between body and environment //Handle temperature/pressure differences between body and environment
handle_environment(environment) handle_environment(environment)
//stuff in the stomach
handle_stomach()
handle_shock()
handle_pain()
handle_medical_side_effects()
//Status updates, death etc. //Status updates, death etc.
handle_regular_status_updates() //TODO: optimise ~Carn handle_regular_status_updates() //TODO: optimise ~Carn
update_canmove() update_canmove()
@@ -196,6 +202,16 @@
src << "\red Your legs won't respond properly, you fall down." src << "\red Your legs won't respond properly, you fall down."
lying = 1 lying = 1
proc/handle_stasis_bag()
// Handle side effects from stasis bag
if(in_stasis)
// First off, there's no oxygen supply, so the mob will slowly take brain damage
adjustBrainLoss(0.1)
// Next, the method to induce stasis has some adverse side-effects, manifesting
// as cloneloss
adjustCloneLoss(0.1)
proc/handle_mutations_and_radiation() proc/handle_mutations_and_radiation()
if(getFireLoss()) if(getFireLoss())
if((COLD_RESISTANCE in mutations) || (prob(1))) if((COLD_RESISTANCE in mutations) || (prob(1)))
@@ -787,8 +803,8 @@
var/total_plasmaloss = 0 var/total_plasmaloss = 0
for(var/obj/item/I in src) for(var/obj/item/I in src)
if(I.contaminated) if(I.contaminated)
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
if(status_flags & GODMODE) return 0 //godmode if(status_flags & GODMODE) return 0 //godmode
adjustToxLoss(total_plasmaloss) adjustToxLoss(total_plasmaloss)
// if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist // if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
@@ -886,8 +902,10 @@
silent = 0 silent = 0
else //ALIVE. LIGHTS ARE ON else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO updatehealth() //TODO
handle_organs() if(!in_stasis)
handle_blood() handle_organs()
handle_blood()
if(health <= config.health_threshold_dead || brain_op_stage == 4.0) if(health <= config.health_threshold_dead || brain_op_stage == 4.0)
death() death()
blinded = 1 blinded = 1

View File

@@ -192,7 +192,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount) /mob/living/carbon/human/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/blood/our = get_blood(vessel) var/datum/reagent/blood/our = get_blood(vessel)
var/datum/reagent/blood/injected = get_blood(container.reagents) var/datum/reagent/blood/injected = get_blood(container.reagents)
if (!injected)
return
if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) ) if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) )
reagents.add_reagent("toxin",amount * 0.5) reagents.add_reagent("toxin",amount * 0.5)
reagents.update_total() reagents.update_total()

View File

@@ -122,6 +122,8 @@
var/pictures_max = 10 var/pictures_max = 10
var/pictures_left = 10 var/pictures_left = 10
var/on = 1 var/on = 1
var/icon_on = "camera"
var/icon_off = "camera_off"
/obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob) /obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -130,9 +132,9 @@
/obj/item/device/camera/attack_self(mob/user as mob) /obj/item/device/camera/attack_self(mob/user as mob)
on = !on on = !on
if(on) if(on)
src.icon_state = "camera" src.icon_state = icon_on
else else
src.icon_state = "camera_off" src.icon_state = icon_off
user << "You switch the camera [on ? "on" : "off"]." user << "You switch the camera [on ? "on" : "off"]."
return return
@@ -253,8 +255,8 @@
pictures_left-- pictures_left--
desc = "A polaroid camera. It has [pictures_left] photos left." desc = "A polaroid camera. It has [pictures_left] photos left."
user << "<span class='notice'>[pictures_left] photos left.</span>" user << "<span class='notice'>[pictures_left] photos left.</span>"
icon_state = "camera_off" icon_state = icon_off
on = 0 on = 0
spawn(64) spawn(64)
icon_state = "camera" icon_state = icon_on
on = 1 on = 1

View File

@@ -534,6 +534,10 @@
proc/move() proc/move()
var/obj/structure/disposalpipe/last var/obj/structure/disposalpipe/last
while(active) while(active)
if(hasmob && prob(3))
for(var/mob/living/H in src)
H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie
if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
active = 0 active = 0
// find the fat guys // find the fat guys

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 B

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.