diff --git a/.travis.yml b/.travis.yml index 8bd7d2795ba..425f9a95fa2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,3 +45,4 @@ script: - DreamDaemon baystation12.dmb -invisible -trusted -core 2>&1 | tee log.txt - grep "All Unit Tests Passed" log.txt - (! grep "runtime error:" log.txt) + - (! grep 'Process scheduler caught exception processing' log.txt) diff --git a/code/_helpers/datum_pool.dm b/code/_helpers/datum_pool.dm index 007a9976104..2706fcef83d 100644 --- a/code/_helpers/datum_pool.dm +++ b/code/_helpers/datum_pool.dm @@ -94,17 +94,32 @@ var/global/list/GlobalPool = list() loc = args ..() -/datum/proc/ResetVars(var/list/exclude = list()) - var/list/excluded = list("animate_movement", "loc", "locs", "parent_type", "vars", "verbs", "type") + exclude +var/list/excluded_vars = list("animate_movement", "contents", "loc", "locs", "parent_type", "vars", "verbs", "type") +var/list/pooledvariables = list() +//thanks to clusterfack @ /vg/station for these two procs +/datum/proc/createVariables(var/list/excluded) + pooledvariables[type] = new/list() + var/list/all_excluded = excluded_vars + excluded - for(var/V in vars) - if(V in excluded) + for(var/key in vars) + if(key in all_excluded) continue + pooledvariables[type][key] = initial(vars[key]) - vars[V] = initial(vars[V]) +/datum/proc/ResetVars(var/list/excluded = list()) + if(!pooledvariables[type]) + createVariables(excluded) + + for(var/key in pooledvariables[type]) + vars[key] = pooledvariables[type][key] /atom/movable/ResetVars() ..() - vars["loc"] = null + loc = null + contents = initial(contents) //something is really wrong if this object still has stuff in it by this point + +/image/ResetVars() + ..() + loc = null #undef ATOM_POOL_COUNT diff --git a/code/datums/wires/nuclearbomb.dm b/code/datums/wires/nuclearbomb.dm index a83532ef143..b67ffc3a604 100644 --- a/code/datums/wires/nuclearbomb.dm +++ b/code/datums/wires/nuclearbomb.dm @@ -30,7 +30,7 @@ var/const/NUCLEARBOMB_WIRE_SAFETY = 4 if(NUCLEARBOMB_WIRE_TIMING) if(N.timing) spawn - log_and_message_admins_with_location("pulsed a nuclear bomb's detonation wire, causing it to explode.", holder.x, holder.y, holder.z) + log_and_message_admins("pulsed a nuclear bomb's detonation wire, causing it to explode.") N.explode() if(NUCLEARBOMB_WIRE_SAFETY) N.safety = !N.safety @@ -49,7 +49,7 @@ var/const/NUCLEARBOMB_WIRE_SAFETY = 4 N.safety = mended if(N.timing) spawn - log_and_message_admins_with_location("cut a nuclear bomb's timing wire, causing it to explode.", holder.x, holder.y, holder.z) + log_and_message_admins("cut a nuclear bomb's timing wire, causing it to explode.") N.explode() if(NUCLEARBOMB_WIRE_TIMING) N.secure_device() diff --git a/code/game/antagonist/antagonist_panel.dm b/code/game/antagonist/antagonist_panel.dm index ed8f1d95632..821f3a8e807 100644 --- a/code/game/antagonist/antagonist_panel.dm +++ b/code/game/antagonist/antagonist_panel.dm @@ -27,7 +27,7 @@ var/mob/M = player.current dat += "" if(M) - dat += "[M.real_name]" + dat += "[M.real_name]" if(!M.client) dat += " (logged out)" if(M.stat == DEAD) dat += " (DEAD)" dat += "" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f8d2f3493f8..e45be4bb6a6 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -13,6 +13,7 @@ var/throw_range = 7 var/moved_recently = 0 var/mob/pulledby = null + var/item_state = null // Used to specify the item state for the on-mob overlays. var/auto_init = 1 diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 75472e9c96c..2607db9f21b 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -10,6 +10,10 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' required_players = 15 required_enemies = 4 round_description = "An unidentified bluespace signature has slipped past the Icarus and is approaching the station!" + extended_round_description = "The Company's majority control of phoron in Nyx has marked the \ + station to be a highly valuable target for many competing organizations and individuals. Being a \ + colony of sizable population and considerable wealth causes it to often be the target of various \ + attempts of robbery, fraud and other malicious actions." end_on_antag_death = 1 antag_tags = list(MODE_RAIDER) diff --git a/code/game/gamemodes/mixed/bughunt.dm b/code/game/gamemodes/mixed/bughunt.dm index 5ca6ed82a29..45365db328d 100644 --- a/code/game/gamemodes/mixed/bughunt.dm +++ b/code/game/gamemodes/mixed/bughunt.dm @@ -1,6 +1,7 @@ /datum/game_mode/bughunt name = "Bughunt" round_description = "A mercenary strike force is approaching the station to eradicate a xenomorph infestation!" + extended_round_description = "Mercenaries and xenomorphs spawn in this game mode." config_tag = "bughunt" required_players = 15 required_enemies = 1 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f6c9bccd7c5..8bf8057f01e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -7,6 +7,10 @@ var/list/nuke_disks = list() /datum/game_mode/nuclear name = "Mercenary" round_description = "A mercenary strike force is approaching the station!" + extended_round_description = "The Company's majority control of phoron in Nyx has marked the \ + station to be a highly valuable target for many competing organizations and individuals. Being a \ + colony of sizable population and considerable wealth causes it to often be the target of various \ + attempts of robbery, fraud and other malicious actions." config_tag = "mercenary" required_players = 15 required_enemies = 1 diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 0bd3e922000..a16a47560a9 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -285,7 +285,7 @@ var/bomb_set if (!timing && !safety) timing = 1 - log_and_message_admins_with_location("engaged a nuclear bomb", x, y, ,z) + log_and_message_admins("engaged a nuclear bomb") bomb_set++ //There can still be issues with this resetting when there are multiple bombs. Not a big deal though for Nuke/N update_icon() else @@ -413,7 +413,7 @@ if(!N.lighthack) var/turf/T = pick_area_turf(/area/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) if(T) var/obj/D = new /obj/item/weapon/disk/nuclear(T) - log_and_message_admins_with_location("[src], the last authentication disk, has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).", T.x, T.y, T.z) + log_and_message_admins("[src], the last authentication disk, has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).", location = T) else log_and_message_admins("[src], the last authentication disk, has been destroyed. Failed to respawn disc!") return ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 35ad6db8677..e3d3bf80b5a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -47,7 +47,6 @@ var/zoom = 0 //1 if item is actively being used to zoom. For scoped guns and binoculars. var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc. - var/item_state = null // Used to specify the item state for the on-mob overlays. //** These specify item/icon overrides for _slots_ @@ -615,6 +614,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. usr.visible_message("[zoomdevicename ? "[usr] looks up from the [src.name]" : "[usr] lowers the [src.name]"].") return - + /obj/item/proc/pwr_drain() - return 0 // Process Kill + return 0 // Process Kill diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index b9a605c6cb2..2a85fbdfc9e 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -14,9 +14,9 @@ matter = list(DEFAULT_WALL_MATERIAL = 90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - var/spray_particles = 6 - var/spray_amount = 8 //units of liquid per particle - var/max_water = 240 + var/spray_particles = 3 + var/spray_amount = 10 //units of liquid per particle + var/max_water = 300 var/last_use = 1.0 var/safety = 1 var/sprite_name = "fire_extinguisher" @@ -30,8 +30,8 @@ throwforce = 2 w_class = 2.0 force = 3.0 - max_water = 120 - spray_particles = 5 + max_water = 150 + spray_particles = 3 sprite_name = "miniFE" /obj/item/weapon/extinguisher/New() @@ -63,7 +63,7 @@ if(C) C.propelled = (6-i) O.Move(get_step(user,movementdirection), movementdirection) sleep(move_speed[i]) - + //additional movement for(var/i in 1 to 3) O.Move(get_step(user,movementdirection), movementdirection) @@ -106,7 +106,7 @@ for(var/a = 1 to spray_particles) spawn(0) if(!src || !reagents.total_volume) return - + var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(src)) var/turf/my_target if(a <= the_targets.len) diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm index 918739ec8ff..dd49331a7e0 100644 --- a/code/modules/admin/admin_attack_log.dm +++ b/code/modules/admin/admin_attack_log.dm @@ -2,10 +2,11 @@ /mob/var/lastattacked = null /mob/var/attack_log = list() -proc/log_and_message_admins_with_location(var/message, var/x, var/y, var/z, var/mob/user = usr) - log_and_message_admins("[message] (JMP)", user) +proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location) + var/turf/T = location ? location : (user ? get_turf(user) : null) + if(T) + message = message + " (JMP)" -proc/log_and_message_admins(var/message as text, var/mob/user = usr) log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]") message_admins(user ? "[key_name_admin(user)] [message]" : "EVENT [message]") diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 7ca66a8260a..78eb7eeeae6 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -13,7 +13,7 @@ kill() return - log_and_message_admins_with_location("Event: Blob spawned at \the [get_area(T)] ([T.x],[T.y],[T.z])", T.x, T.y, T.z) + log_and_message_admins("Blob spawned at \the [get_area(T)]", location = T) Blob = new /obj/effect/blob/core(T) for(var/i = 1; i < rand(3, 4), i++) Blob.process() diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 0faf957787f..14e4741565e 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -16,7 +16,7 @@ vine.mature_time = 0 vine.process() - log_and_message_admins_with_location("Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])", T.x, T.y, T.z) + log_and_message_admins("Spacevines spawned at \the [get_area(T)]", location = T) return log_and_message_admins("Event: Spacevines failed to find a viable turf.") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index c921ac51645..997a434124a 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -353,6 +353,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f if(!query.Execute()) usr << query.ErrorMsg() else + log_and_message_admins("has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") alert("Upload Complete.") diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index c878425be49..59974bda063 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -60,6 +60,7 @@ var/list/holder_mob_icon_cache = list() overlays.Cut() icon = M.icon icon_state = M.icon_state + item_state = M.item_state color = M.color name = M.name desc = M.desc diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index bd2d5dc78e1..eeebde6d269 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -4,6 +4,7 @@ adult_form = /mob/living/carbon/human speak_emote = list("chirrups") icon_state = "nymph" + item_state = "nymph" language = "Rootspeak" death_msg = "expires with a pitiful chirrup..." universal_understand = 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 376feec24e3..cff28f14957 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -235,8 +235,8 @@ M.visible_message("[M] tries to pat out [src]'s flames!", "You try to pat out [src]'s flames! Hot!") if(do_mob(M, src, 15)) + src.fire_stacks -= 0.5 if (prob(10) && (M.fire_stacks <= 0)) - src.fire_stacks -= 0.5 M.fire_stacks += 1 M.IgniteMob() if (M.on_fire) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e781ef607a7..f912b40ee99 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -101,7 +101,7 @@ ) var/list/cold_discomfort_strings = list( "You feel chilly.", - "You shiver suddely.", + "You shiver suddenly.", "Your chilly flesh stands out in goosebumps." ) diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm index 73410552fb9..d8606524e21 100644 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ b/code/modules/mob/living/simple_animal/borer/borer.dm @@ -8,6 +8,7 @@ response_disarm = "prods" response_harm = "stomps on" icon_state = "brainslug" + item_state = "brainslug" icon_living = "brainslug" icon_dead = "brainslug_dead" speed = 5 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index d429140d10e..1cc8894f4fb 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -3,6 +3,7 @@ name = "cat" desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." icon_state = "cat2" + item_state = "cat2" icon_living = "cat2" icon_dead = "cat2_dead" speak = list("Meow!","Esp!","Purr!","HSSSSS") @@ -217,6 +218,7 @@ desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." gender = FEMALE icon_state = "cat" + item_state = "cat" icon_living = "cat" icon_dead = "cat_dead" befriend_job = "Chief Medical Officer" @@ -225,6 +227,7 @@ name = "kitten" desc = "D'aaawwww" icon_state = "kitten" + item_state = "kitten" icon_living = "kitten" icon_dead = "kitten_dead" gender = NEUTER @@ -241,6 +244,7 @@ desc = "That's Bones the cat. He's a laid back, black cat. Meow." gender = MALE icon_state = "cat3" + item_state = "cat3" icon_living = "cat3" icon_dead = "cat3_dead" holder_type = /obj/item/weapon/holder/cat/fluff/bones diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index ceacccfdb72..1dfb5ed6f04 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -3,6 +3,7 @@ real_name = "mouse" desc = "It's a small rodent." icon_state = "mouse_gray" + item_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" speak = list("Squeek!","SQUEEK!","Squeek?") @@ -67,6 +68,7 @@ if(!body_color) body_color = pick( list("brown","gray","white") ) icon_state = "mouse_[body_color]" + item_state = "mouse_[body_color]" icon_living = "mouse_[body_color]" icon_dead = "mouse_[body_color]_dead" desc = "It's a small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 054afb2ade1..9addd7b54aa 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -995,7 +995,13 @@ mob/proc/yank_out_object() if (ishuman(U)) var/mob/living/carbon/human/human_user = U human_user.bloody_hands(H) - + + else if(issilicon(src)) + var/mob/living/silicon/robot/R = src + R.embedded -= selection + R.adjustBruteLoss(5) + R.adjustFireLoss(10) + selection.forceMove(get_turf(src)) if(!(U.l_hand && U.r_hand)) U.put_in_hands(selection) diff --git a/html/changelog.html b/html/changelog.html index 026768c24c6..a0dea4fdb91 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,16 @@ -->
+

08 January 2016

+

Chinsky updated:

+ +

RavingManiac updated:

+ +

01 January 2016

Atlantis updated: