Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into rust

This commit is contained in:
Cael_Aislinn
2013-05-19 19:41:18 +10:00
39 changed files with 779 additions and 151 deletions
+16 -2
View File
@@ -64,6 +64,7 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_rejuvenate,
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/datum/admins/proc/show_skills,
/client/proc/check_customitem_activity
)
@@ -134,7 +135,8 @@ var/list/admin_verbs_debug = list(
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/enable_debug_verbs,
/client/proc/callproc
/client/proc/callproc,
/client/proc/toggledebuglogs
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -222,6 +224,7 @@ var/list/admin_verbs_mod = list(
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
/client/proc/toggledebuglogs,
/datum/admins/proc/PlayerNotes,
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/cmd_mod_say,
@@ -721,4 +724,15 @@ var/list/admin_verbs_mod = list(
if (prefs.toggles & CHAT_ATTACKLOGS)
usr << "You now will get attack log messages"
else
usr << "You now won't get attack log messages"
usr << "You now won't get attack log messages"
/client/proc/toggledebuglogs()
set name = "Toggle Debug Log Messages"
set category = "Preferences"
prefs.toggles ^= CHAT_DEBUGLOGS
if (prefs.toggles & CHAT_DEBUGLOGS)
usr << "You now will get debug log messages"
else
usr << "You now won't get debug log messages"
+15 -6
View File
@@ -61,6 +61,7 @@
possibleEvents[/datum/event/ionstorm] = 25 + active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
possibleEvents[/datum/event/grid_check] = 25 + 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/electrical_storm] = 75 + 25 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
possibleEvents[/datum/event/wallrot] = 50 * active_with_role["Engineer"] + 100 * active_with_role["Botanist"]
if(!spacevines_spawned)
possibleEvents[/datum/event/spacevine] = 5 + 10 * active_with_role["Engineer"]
@@ -69,11 +70,12 @@
possibleEvents[/datum/event/meteor_shower] = 80 * active_with_role["Engineer"]
possibleEvents[/datum/event/blob] = 30 * active_with_role["Engineer"]
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 25
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 100
if(active_with_role["Medical"] > 0)
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 100
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 75
possibleEvents[/datum/event/viral_outbreak] = active_with_role["Medical"] * 5
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 150
possibleEvents[/datum/event/viral_outbreak] = active_with_role["Medical"] * 10
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
if(active_with_role["Security"] > 0)
@@ -84,16 +86,19 @@
if(!sent_ninja_to_station && toggle_space_ninja)
possibleEvents[/datum/event/space_ninja] = max(active_with_role["Security"], 5)
var/picked_event = pickweight(possibleEvents)
// Debug code below here, very useful for testing so don't delete please.
/*var/debug_message = "Firing random event. "
var/debug_message = "Firing random event. "
for(var/V in active_with_role)
debug_message += "#[V]:[active_with_role[V]] "
debug_message += "||| "
for(var/V in possibleEvents)
debug_message += "[V]:[possibleEvents[V]]"
message_admins(debug_message)*/
debug_message += "|||Picked:[picked_event]"
log_debug(debug_message)
var/picked_event = pickweight(possibleEvents)
if(!picked_event)
return
@@ -176,6 +181,7 @@
active_with_role["AI"] = 0
active_with_role["Cyborg"] = 0
active_with_role["Janitor"] = 0
active_with_role["Botanist"] = 0
for(var/mob/M in player_list)
if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive
@@ -208,4 +214,7 @@
if(M.mind.assigned_role == "Janitor")
active_with_role["Janitor"]++
if(M.mind.assigned_role == "Botanist")
active_with_role["Botanist"]++
return active_with_role
+3 -1
View File
@@ -30,7 +30,9 @@ var/scheduledEvent = null
playercount_modifier = 0.9
if(36 to 100000)
playercount_modifier = 0.8
scheduledEvent = world.timeofday + rand(eventTimeLower, eventTimeUpper) * playercount_modifier
var/next_event_delay = rand(eventTimeLower, eventTimeUpper) * playercount_modifier
scheduledEvent = world.timeofday + next_event_delay
log_debug("Next event in [next_event_delay/600] minutes.")
else if(world.timeofday > scheduledEvent)
spawn_dynamic_event()
+28
View File
@@ -0,0 +1,28 @@
datum/event/organ_failure
var/severity = 1
datum/event/organ_failure/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
severity = rand(1, 3)
datum/event/organ_failure/announce()
command_alert("Confirmed outbreak of level [rand(3,7)] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
world << sound('sound/AI/outbreak5.ogg')
datum/event/organ_failure/start()
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD && G.health > 70))
candidates += G
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
while(severity > 0 && candidates.len)
var/mob/living/carbon/human/C = candidates[1]
// Bruise one of their organs
var/datum/organ/internal/I = pick(C.internal_organs)
I.damage = I.min_bruised_damage
candidates.Remove(C)
severity--
+37 -28
View File
@@ -1,36 +1,45 @@
/datum/event/radiation_storm
announceWhen = 5
announceWhen = 1
oneShot = 1
/datum/event/radiation_storm/announce()
command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert")
world << sound('sound/AI/radiation.ogg')
// Don't do anything, we want to pack the announcement with the actual event
/datum/event/radiation_storm/start()
for(var/mob/living/carbon/human/H in living_mob_list)
var/turf/T = get_turf(H)
if(!T)
continue
if(T.z != 1)
continue
if(istype(H,/mob/living/carbon/human))
H.apply_effect((rand(15,75)),IRRADIATE,0)
if(prob(5))
H.apply_effect((rand(90,150)),IRRADIATE,0)
if(prob(25))
if (prob(75))
randmutb(H)
domutcheck(H,null,1)
else
randmutg(H)
domutcheck(H,null,1)
spawn()
command_alert("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert")
for(var/mob/living/carbon/monkey/M in living_mob_list)
var/turf/T = get_turf(M)
if(!T)
continue
if(T.z != 1)
continue
M.apply_effect((rand(15,75)),IRRADIATE,0)
sleep(200)
command_alert("The station has entered the radiation belt. Please report to medbay if you experience any unusual symptoms.", "Anomaly Alert")
for(var/i = 0, i < 10, i++)
for(var/mob/living/carbon/human/H in living_mob_list)
var/turf/T = get_turf(H)
if(!T)
continue
if(T.z != 1)
continue
if(istype(T.loc, /area/maintenance) || istype(T.loc, /area/crew_quarters))
continue
if(istype(H,/mob/living/carbon/human))
H.apply_effect((rand(5,25)),IRRADIATE,0)
if(prob(5))
H.apply_effect((rand(30,50)),IRRADIATE,0)
if (prob(75))
randmutb(H)
domutcheck(H,null,1)
else
randmutg(H)
domutcheck(H,null,1)
for(var/mob/living/carbon/monkey/M in living_mob_list)
var/turf/T = get_turf(M)
if(!T)
continue
if(T.z != 1)
continue
M.apply_effect((rand(5,25)),IRRADIATE,0)
sleep(50)
command_alert("The station has passed the radiation belt", "Anomaly Alert")
+37
View File
@@ -0,0 +1,37 @@
/turf/simulated/wall
datum/event/wallrot
var/severity = 1
datum/event/wallrot/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
severity = rand(5, 10)
datum/event/wallrot/announce()
command_alert("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
datum/event/wallrot/start()
spawn()
var/turf/center = null
// 100 attempts
for(var/i=0, i<100, i++)
var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1)
if(istype(candidate, /turf/simulated/wall))
center = candidate
if(center)
// Make sure at least one piece of wall rots!
center:rot()
// Have a chance to rot lots of other walls.
var/rotcount = 0
for(var/turf/simulated/wall/W in range(5, center)) if(prob(50))
W:rot()
rotcount++
// Only rot up to severity walls
if(rotcount >= severity)
break
+1 -7
View File
@@ -32,19 +32,13 @@ mob/proc/custom_emote(var/m_type=1,var/message = null)
continue
if(findtext(message," snores.")) //Because we have so many sleeping people.
break
if(M.stat == 2 && M.client.ghost_sight && !(M in viewers(src,null)))
if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
M.show_message(message)
if (m_type & 1)
for (var/mob/O in viewers(src, null))
if(istype(O,/mob/living/carbon/human))
for(var/mob/living/parasite/P in O:parasites)
P.show_message(message, m_type)
O.show_message(message, m_type)
else if (m_type & 2)
for (var/mob/O in hearers(src.loc, null))
if(istype(O,/mob/living/carbon/human))
for(var/mob/living/parasite/P in O:parasites)
P.show_message(message, m_type)
O.show_message(message, m_type)
+11 -31
View File
@@ -53,27 +53,17 @@
var/input = copytext(sanitize(input("Choose an emote to display.") as text|null),1,MAX_MESSAGE_LEN)
if (!input)
return
if(copytext(input,1,5) == "says")
src << "\red Invalid emote."
return
else if(copytext(input,1,9) == "exclaims")
src << "\red Invalid emote."
return
else if(copytext(input,1,5) == "asks")
src << "\red Invalid emote."
return
else
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible")
m_type = 1
else if (input2 == "Hearable")
if (src.miming)
return
m_type = 2
else
alert("Unable to use this emote, must be either hearable or visible.")
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible")
m_type = 1
else if (input2 == "Hearable")
if (src.miming)
return
message = "<B>[src]</B> [input]"
m_type = 2
else
alert("Unable to use this emote, must be either hearable or visible.")
return
message = "<B>[src]</B> [input]"
if ("me")
if(silent)
@@ -88,17 +78,7 @@
return
if(!(message))
return
if(copytext(message,1,5) == "says")
src << "\red Invalid emote."
return
else if(copytext(message,1,9) == "exclaims")
src << "\red Invalid emote."
return
else if(copytext(message,1,5) == "asks")
src << "\red Invalid emote."
return
else
message = "<B>[src]</B> [message]"
message = "<B>[src]</B> [message]"
if ("salute")
if (!src.buckled)
+32 -14
View File
@@ -28,6 +28,7 @@
var/pressure_alert = 0
var/prev_gender = null // Debug for plural genders
var/temperature_alert = 0
var/in_stasis = 0
/mob/living/carbon/human/Life()
@@ -59,8 +60,11 @@
life_tick++
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.
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
breathe() //Only try to take a breath every 4 ticks, unless suffocating
@@ -86,18 +90,20 @@
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_environment(environment)
//stuff in the stomach
handle_stomach()
handle_shock()
handle_pain()
handle_medical_side_effects()
//Status updates, death etc.
handle_regular_status_updates() //TODO: optimise ~Carn
update_canmove()
@@ -196,6 +202,16 @@
src << "\red Your legs won't respond properly, you fall down."
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()
if(getFireLoss())
if((COLD_RESISTANCE in mutations) || (prob(1)))
@@ -787,8 +803,8 @@
var/total_plasmaloss = 0
for(var/obj/item/I in src)
if(I.contaminated)
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
if(status_flags & GODMODE) return 0 //godmode
total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
if(status_flags & GODMODE) return 0 //godmode
adjustToxLoss(total_plasmaloss)
// 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
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
handle_organs()
handle_blood()
if(!in_stasis)
handle_organs()
handle_blood()
if(health <= config.health_threshold_dead || brain_op_stage == 4.0)
death()
blinded = 1
@@ -1,4 +1,4 @@
/mob/living/carbon/slime/emote(var/act)
/mob/living/carbon/slime/emote(var/act, var/type, var/desc)
if (findtext(act, "-", 1, null))
@@ -13,6 +13,10 @@
var/message
switch(act)
if ("me")
return custom_emote(m_type, desc)
if ("custom")
return custom_emote(m_type, desc)
if("moan")
message = "<B>The [src.name]</B> moans."
m_type = 2
@@ -1,4 +1,4 @@
/mob/living/carbon/monkey/emote(var/act)
/mob/living/carbon/monkey/emote(var/act, var/type, var/desc)
var/param = null
if (findtext(act, "-", 1, null))
@@ -14,6 +14,12 @@
var/message
switch(act)
if ("me")
return custom_emote(m_type, desc)
if ("custom")
return custom_emote(m_type, desc)
if("sign")
if (!src.restrained())
message = text("<B>The monkey</B> signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null))
+6 -14
View File
@@ -9,6 +9,12 @@
act = copytext(act,1,length(act))
switch(act)
if ("me")
return custom_emote(m_type, message)
if ("custom")
return custom_emote(m_type, message)
if ("salute")
if (!src.buckled)
var/M = null
@@ -56,20 +62,6 @@
message = "<B>[src]</B> flaps his wings ANGRILY!"
m_type = 2
if ("custom")
var/input = copytext(sanitize(input("Choose an emote to display.") as text|null),1,MAX_MESSAGE_LEN)
if (!input)
return
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible")
m_type = 1
else if (input2 == "Hearable")
m_type = 2
else
alert("Unable to use this emote, must be either hearable or visible.")
return
message = "<B>[src]</B> [input]"
if ("me")
if (src.client)
if(client.prefs.muted & MUTE_IC)
@@ -226,14 +226,8 @@
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
if(act)
if(act == "scream") act = "makes a loud and pained whimper" //ugly hack to stop animals screaming when crushed :P
if(act == "me") //Allow me-emotes.
act = desc
if( findtext(act,".",lentext(act)) == 0 && findtext(act,"!",lentext(act)) == 0 && findtext(act,"?",lentext(act)) == 0 )
act = addtext(act,".") //Makes sure all emotes end with a period.
for (var/mob/O in viewers(src, null))
O.show_message("<B>[src]</B> [act]")
if(act == "scream") act = "whimper" //ugly hack to stop animals screaming when crushed :P
..(act, type, desc)
/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
@@ -277,6 +277,8 @@
character.loc = pick(latejoin)
character.lastarea = get_area(loc)
ticker.mode.latespawn(character)
//ticker.mode.latespawn(character)
if(character.mind.assigned_role != "Cyborg")
+12 -11
View File
@@ -75,31 +75,32 @@
//tcomms code is still runtiming somewhere here
var/ending = copytext(text, length(text))
if (is_speaking_soghun)
return "hisses, \"<span class='soghun'>[text]</span>\"";
return "<span class='say_quote'>hisses</span>, \"<span class='soghun'>[text]</span>\"";
if (is_speaking_skrell)
return "warbles, \"<span class='skrell'>[text]</span>\"";
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
if (is_speaking_tajaran)
return "mrowls, \"<span class='tajaran'>[text]</span>\"";
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
//Needs Virus2
// if (src.disease_symptoms & DISEASE_HOARSE)
// return "rasps, \"[text]\"";
if (src.stuttering)
return "stammers, \"[text]\"";
return "<span class='say_quote'>stammers</span>, \"[text]\"";
if (src.slurring)
return "slurrs, \"[text]\"";
return "<span class='say_quote'>slurrs</span>, \"[text]\"";
if(isliving(src))
var/mob/living/L = src
if (L.getBrainLoss() >= 60)
return "gibbers, \"[text]\"";
return "<span class='say_quote'>gibbers</span>, \"[text]\"";
if (ending == "?")
return "asks, \"[text]\"";
return "<span class='say_quote'>asks</span>, \"[text]\"";
if (ending == "!")
return "exclaims, \"[text]\"";
return "<span class='say_quote'>exclaims</span>, \"[text]\"";
return "says, \"[text]\"";
return "<span class='say_quote'>says</span>, \"[text]\"";
/mob/proc/emote(var/act)
return
/mob/proc/emote(var/act, var/type, var/message)
if(act == "me")
return custom_emote(type, message)
/mob/proc/get_ear()
// returns an atom representing a location on the map from which this
@@ -1214,6 +1214,17 @@ datum
..()
return
// Clear off wallrot fungi
reaction_turf(var/turf/T, var/volume)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
if(W.rotting)
W.rotting = 0
for(var/obj/effect/E in W) if(E.name == "Wallrot") del E
for(var/mob/O in viewers(W, null))
O.show_message(text("\blue The fungi are completely dissolved by the solution!"), 1)
reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/effect/alien/weeds/))
var/obj/effect/alien/weeds/alien_weeds = O
@@ -49,12 +49,20 @@
D.icon += mix_color_from_reagents(D.reagents.reagent_list)
var/turf/A_turf = get_turf(A)
spawn(0)
for(var/i=0, i<3, i++)
step_towards(D,A)
D.reagents.reaction(get_turf(D))
for(var/atom/T in get_turf(D))
D.reagents.reaction(T)
// When spraying against the wall, also react with the wall, but
// not its contents.
if(get_dist(D, A_turf) == 1 && A_turf.density)
D.reagents.reaction(A_turf)
sleep(2)
sleep(3)
del(D)