diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index f7098594a93..abf71c4ea0d 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -93,14 +93,11 @@ Pipelines + Other Objects -> Pipe network return ..() /obj/machinery/atmospherics/Deconstruct() - var/turf/T = loc - stored.loc = T - transfer_fingerprints_to(stored) - if(istype(src, /obj/machinery/atmospherics/pipe)) - for(var/obj/machinery/meter/meter in T) - if(meter.target == src) - new /obj/item/pipe_meter(T) - qdel(meter) + if(can_unwrench) + var/turf/T = loc + stored.loc = T + transfer_fingerprints_to(stored) + qdel(src) /obj/machinery/atmospherics/proc/nullifyPipenet(datum/pipeline/P) @@ -127,7 +124,7 @@ Pipelines + Other Objects -> Pipe network return img -/obj/machinery/atmospherics/proc/construction(D, P) +/obj/machinery/atmospherics/construction(D, P) dir = D initialize_directions = P var/turf/T = loc diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 7884a5ad12c..a3bb5355947 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -40,4 +40,13 @@ return ..() /obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/P) - parent = P \ No newline at end of file + parent = P + +/obj/machinery/atmospherics/pipe/Destroy() + var/turf/T = loc + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) + var/obj/item/pipe_meter/PM = new (T) + meter.transfer_fingerprints_to(PM) + qdel(meter) + ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index 29f16311b63..434a4b3c9e7 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -25,6 +25,8 @@ /obj/machinery/atmospherics/pipe/manifold/New() color = pipe_color + ..() + switch(dir) if(NORTH) initialize_directions = EAST|SOUTH|WEST @@ -34,7 +36,6 @@ initialize_directions = SOUTH|WEST|NORTH if(WEST) initialize_directions = NORTH|EAST|SOUTH - ..() /obj/machinery/atmospherics/pipe/manifold/initialize() for(var/D in cardinal) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 1af635b5d18..c9754a87c48 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -176,7 +176,7 @@ var/datum/controller/vote/vote = new() if(mode == "custom") text += "\n[question]" log_vote(text) - world << "\n[text]\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote." + world << "\n[text]\nType vote or click here to place your votes.\nYou have [config.vote_period/10] seconds to vote." time_remaining = round(config.vote_period/10) return 1 return 0 diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index e98fec043ed..368a3e69c93 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -79,6 +79,105 @@ if(foundrecord) foundrecord.fields["rank"] = assignment +/obj/effect/datacore/proc/get_manifest(monochrome, OOC) + var/list/heads = list() + var/list/sec = list() + var/list/eng = list() + var/list/med = list() + var/list/sci = list() + var/list/civ = list() + var/list/bot = list() + var/list/misc = list() + var/dat = {" + + + + "} + var/even = 0 + // sort mobs + for(var/datum/data/record/t in data_core.general) + var/name = t.fields["name"] + var/rank = t.fields["rank"] + var/department = 0 + if(rank in command_positions) + heads[name] = rank + department = 1 + if(rank in security_positions) + sec[name] = rank + department = 1 + if(rank in engineering_positions) + eng[name] = rank + department = 1 + if(rank in medical_positions) + med[name] = rank + department = 1 + if(rank in science_positions) + sci[name] = rank + department = 1 + if(rank in civilian_positions) + civ[name] = rank + department = 1 + if(rank in nonhuman_positions) + bot[name] = rank + department = 1 + if(!department && !(name in heads)) + misc[name] = rank + if(heads.len > 0) + dat += "" + for(name in heads) + dat += "" + even = !even + if(sec.len > 0) + dat += "" + for(name in sec) + dat += "" + even = !even + if(eng.len > 0) + dat += "" + for(name in eng) + dat += "" + even = !even + if(med.len > 0) + dat += "" + for(name in med) + dat += "" + even = !even + if(sci.len > 0) + dat += "" + for(name in sci) + dat += "" + even = !even + if(civ.len > 0) + dat += "" + for(name in civ) + dat += "" + even = !even + // in case somebody is insane and added them to the manifest, why not + if(bot.len > 0) + dat += "" + for(name in bot) + dat += "" + even = !even + // misc guys + if(misc.len > 0) + dat += "" + for(name in misc) + dat += "" + even = !even + + dat += "
NameRank
Heads
[name][heads[name]]
Security
[name][sec[name]]
Engineering
[name][eng[name]]
Medical
[name][med[name]]
Science
[name][sci[name]]
Civilian
[name][civ[name]]
Silicon
[name][bot[name]]
Miscellaneous
[name][misc[name]]
" + dat = replacetext(dat, "\n", "") + dat = replacetext(dat, "\t", "") + return dat + + var/record_id_num = 1001 /obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H) if(H.mind && (H.mind.assigned_role != "MODE")) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index b1ae4c99fd7..f0443ee1683 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -395,4 +395,7 @@ var/list/blood_splatter_icons = list() return /atom/proc/emag_act() - return + return + +/atom/proc/narsie_act() + return \ No newline at end of file diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm index f8974fd36c8..78a56a386f0 100644 --- a/code/game/machinery/Freezer.dm +++ b/code/game/machinery/Freezer.dm @@ -21,6 +21,9 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/atmospherics/unary/cold_sink/freezer/construction() + ..(dir,dir) + /obj/machinery/atmospherics/unary/cold_sink/freezer/RefreshParts() var/H var/T @@ -141,6 +144,9 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/atmospherics/unary/heat_reservoir/heater/construction() + ..(dir,dir) + /obj/machinery/atmospherics/unary/heat_reservoir/heater/RefreshParts() var/H var/T @@ -204,7 +210,7 @@ //user << browse(dat, "window=freezer;size=400x500") //onclose(user, "freezer") - var/datum/browser/popup = new(user, "freezer", "Cryo Gas Cooling System", 400, 240) // Set up the popup browser window + var/datum/browser/popup = new(user, "freezer", "Cryo Gas Heating System", 400, 240) // Set up the popup browser window popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.set_content(dat) popup.open() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index d7bde33688d..8441647f791 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -130,6 +130,7 @@ if(component_check) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) + new_machine.construction() for(var/obj/O in new_machine.component_parts) qdel(O) new_machine.component_parts = list() diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index eb5faffcafd..24312770103 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -18,7 +18,6 @@ /obj/machinery/atmospherics/unary/cryo_cell/New() ..() initialize_directions = dir - initialize() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) @@ -29,6 +28,9 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/atmospherics/unary/cryo_cell/construction() + ..(dir,dir) + /obj/machinery/atmospherics/unary/cryo_cell/RefreshParts() var/C for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c6828169bd7..3f799cc41a8 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -335,8 +335,8 @@ Class Procs: /obj/machinery/proc/default_change_direction_wrench(var/mob/user, var/obj/item/weapon/wrench/W) if(panel_open && istype(W)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - dir = pick(WEST,EAST,SOUTH,NORTH) - user << "You clumsily rotate [src]." + dir = turn(dir,-90) + user << "You rotate [src]." return 1 return 0 @@ -382,3 +382,7 @@ Class Procs: W.play_rped_sound() return 1 return 0 + +//called on machinery construction (i.e from frame to machinery) but not on initialization +/obj/machinery/proc/construction() + return diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index eee59dd82b2..30e11d25386 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -354,12 +354,16 @@ var/atom/cur_target = null var/scan_range = 9 //You will never see them coming var/health = 200 //Because it lacks a cover, and is mostly to keep people from touching the syndie shuttle. + var/base_icon_state = "syndieturret" + var/projectile_type = /obj/item/projectile/bullet + var/fire_sound = 'sound/weapons/Gunshot.ogg' icon = 'icons/obj/turrets.dmi' icon_state = "syndieturret0" /obj/machinery/gun_turret/New() ..() take_damage(0) //check your health + icon_state = "[base_icon_state]" + "0" /obj/machinery/gun_turret/ex_act(severity, target) switch(severity) @@ -377,7 +381,7 @@ /obj/machinery/gun_turret/update_icon() if(state > 2 || state < 0) //someone fucked up the vars so fix them take_damage(0) - icon_state = "syndieturret" + "[state]" + icon_state = "[base_icon_state]" + "[state]" return @@ -479,8 +483,8 @@ return if (targloc == curloc) return - playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1) - var/obj/item/projectile/A = new /obj/item/projectile/bullet(curloc) + playsound(src, fire_sound, 50, 1) + var/obj/item/projectile/A = new projectile_type(curloc) A.current = curloc A.yo = targloc.y - curloc.y A.xo = targloc.x - curloc.x diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 754e97444fd..c19882fb69a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -976,7 +976,7 @@ /obj/item/clothing/tie/scarf/lightblue=1,/obj/item/clothing/tie/scarf/white=1,/obj/item/clothing/tie/scarf/black=1, /obj/item/clothing/tie/scarf/zebra=1,/obj/item/clothing/tie/scarf/christmas=1,/obj/item/clothing/tie/stripedredscarf=1, /obj/item/clothing/tie/stripedbluescarf=1,/obj/item/clothing/tie/stripedgreenscarf=1,/obj/item/clothing/tie/waistcoat=1, - /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, + /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, /obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1, /obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/sneakers/black=4, /obj/item/clothing/shoes/sandal=1) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 3b7ab8924b7..7111ef392aa 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -184,12 +184,11 @@ ..() if(severity == 3) if(prob(25)) - density = 0 + table_destroy(1) /obj/structure/table/blob_act() if(prob(75)) table_destroy(1) - qdel(src) return /obj/structure/table/attack_alien(mob/living/user) @@ -231,8 +230,11 @@ else return 0 - -/obj/structure/table/MouseDrop_T(obj/O, mob/user) +/obj/structure/table/MouseDrop_T(atom/movable/O, mob/user) + if(ismob(O) && user == O && ishuman(user)) + if(user.canmove) + climb_table(user) + return if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) return if(isrobot(user)) @@ -358,10 +360,6 @@ * TABLE CLIMBING */ -/obj/structure/table/MouseDrop_T(mob/target, mob/living/carbon/human/user) - if(istype(target) && user == target && istype(user)) - if(user.canmove) - climb_table(user) /obj/structure/table/proc/climb_table(mob/user) src.add_fingerprint(user) @@ -494,21 +492,20 @@ if(1.0) qdel(src) if(2.0) - qdel(src) if(prob(50)) - new /obj/item/weapon/rack_parts(src.loc) + rack_destroy() + else + qdel(src) if(3.0) if(prob(25)) - qdel(src) - new /obj/item/weapon/rack_parts(src.loc) + rack_destroy() /obj/structure/rack/blob_act() if(prob(75)) qdel(src) return else if(prob(50)) - new /obj/item/weapon/rack_parts(src.loc) - qdel(src) + rack_destroy() return /obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0) @@ -534,9 +531,8 @@ /obj/structure/rack/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/weapon/rack_parts( src.loc ) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) + rack_destroy() return if(isrobot(user)) @@ -559,38 +555,42 @@ "You kick [src].") if(HULK in user.mutations) - health -= 5 + rack_destroy() else health -= rand(1,2) - healthcheck() + healthcheck() /obj/structure/rack/attack_alien(mob/living/user) user.do_attack_animation(src) visible_message("[user] slices [src] apart!") - new /obj/item/weapon/rack_parts(loc) - density = 0 - qdel(src) + rack_destroy() /obj/structure/rack/attack_animal(mob/living/simple_animal/user) if(user.environment_smash) user.do_attack_animation(src) visible_message("[user] smashes [src] apart!") - new /obj/item/weapon/rack_parts(loc) - density = 0 - qdel(src) + rack_destroy() /obj/structure/rack/attack_tk() // no telehulk sorry return /obj/structure/rack/proc/healthcheck() if(health <= 0) - density = 0 - var/obj/item/weapon/rack_parts/newparts = new(loc) - transfer_fingerprints_to(newparts) - qdel(src) + rack_destroy() return +/* + * Rack destruction + */ + +/obj/structure/rack/proc/rack_destroy() + density = 0 + var/obj/item/weapon/rack_parts/newparts = new(loc) + transfer_fingerprints_to(newparts) + qdel(src) + + /* * Rack Parts */ diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 9e641352434..0be1070747c 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -158,3 +158,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," make_plating() else if(prob(50)) ReplaceWithLattice() + +/turf/simulated/floor/narsie_act() + if(prob(20)) + ChangeTurf(/turf/simulated/floor/engine/cult) \ No newline at end of file diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index f1033633551..51f52b5de4c 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -8,7 +8,7 @@ luminosity = 5 icon_state = "light_on" floor_tile = /obj/item/stack/tile/light - broken_states = list("light-broken") + broken_states = list("light_broken") var/on = 1 var/state //0 = fine, 1 = flickering, 2 = breaking, 3 = broken diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index fd6b3e5e452..bd74639bd6d 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -110,6 +110,9 @@ name = "engraved floor" icon_state = "cult" +/turf/simulated/floor/engine/cult/narsie_act() + return + /turf/simulated/floor/engine/n20/New() ..() var/datum/gas_mixture/adding = new diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index fed36f77b71..d30300fd82e 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -286,4 +286,8 @@ return if(current_size == STAGE_FOUR) if(prob(30)) - dismantle_wall() \ No newline at end of file + dismantle_wall() + +/turf/simulated/wall/narsie_act() + if(prob(20)) + ChangeTurf(/turf/simulated/wall/cult) \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 2f773d52b04..9c6b1529172 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -13,6 +13,9 @@ new /obj/effect/decal/cleanable/blood(src) new /obj/effect/decal/remains/human(src) +/turf/simulated/wall/cult/narsie_act() + return + /turf/simulated/wall/vault icon_state = "rockvault" diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 7ef70f87ae2..381b167fb6e 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -2,6 +2,9 @@ //SS13 Optimized Map loader ////////////////////////////////////////////////////////////// +//global datum that will preload variables on atoms instanciation +var/global/dmm_suite/preloader/_preloader = null + /** * Construct the model map and control the loading process @@ -163,7 +166,7 @@ //first instance the /area and remove it from the members list index = members.len var/atom/instance - var/dmm_suite/preloader/_preloader = new(members_attributes[index])//preloader for assigning set variables on atom creation + _preloader = new(members_attributes[index])//preloader for assigning set variables on atom creation instance = locate(members[index]) instance.contents.Add(locate(xcrd,ycrd,zcrd)) @@ -191,34 +194,6 @@ T = UT index++ - - //Replace the previous part of the code with this if it's unsafe to assume tiles have ALWAYS an /area AND a /turf - /*while(members.len > 0) - var/length = members.len - var/member = members[length] - - if(ispath(member,/area)) - var/atom/instance - var/dmm_suite/preloader/_preloader = new(members_attributes[length]) - - instance = locate(member) - instance.contents.Add(locate(xcrd,ycrd,zcrd)) - - if(_preloader && instance) - _preloader.load(instance) - - members.Remove(member) - continue - - else if(ispath(member,/turf)) - instance_atom(member,members_attributes[length],xcrd,ycrd,zcrd) - members.Remove(member) - continue - - else - break - */ - //finally instance all remainings objects/mobs for(index=1,index < first_turf_index,index++) instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd) @@ -230,11 +205,11 @@ //Instance an atom at (x,y,z) and gives it the variables in attributes /dmm_suite/proc/instance_atom(var/path,var/list/attributes, var/x, var/y, var/z) var/atom/instance - var/dmm_suite/preloader/_preloader = new(attributes) + _preloader = new(attributes, path) - instance = new path (locate(x,y,z), _preloader)//first preloader pass + instance = new path (locate(x,y,z))//first preloader pass - if(_preloader && instance)//second preloader pass, as some variables may have been reset/changed by New() + if(_preloader && instance)//second preloader pass, for those atoms that don't ..() in New() _preloader.load(instance) return instance @@ -242,9 +217,9 @@ //text trimming (both directions) helper proc //optionally removes quotes before and after the text (for variable name) /dmm_suite/proc/trim_text(var/what as text,var/trim_quotes=0) - while(length(what) && (findtext(what," ",1,2)))// || findtext(what,quote,1,2))) + while(length(what) && (findtext(what," ",1,2))) what=copytext(what,2,0) - while(length(what) && (findtext(what," ",length(what),0)))// || findtext(what,quote,length(what),0))) + while(length(what) && (findtext(what," ",length(what),0))) what=copytext(what,1,length(what)) if(trim_quotes) while(length(what) && (findtext(what,quote,1,2))) @@ -298,14 +273,18 @@ else if(isnum(text2num(trim_right))) trim_right = text2num(trim_right) - //Check for file - else if(copytext(trim_right,1,2) == "'") - trim_right = file(copytext(trim_right,2,length(trim_right))) + //Check for null + else if(trim_right == "null") + trim_right = null //Check for list else if(copytext(trim_right,1,5) == "list") trim_right = text2list(copytext(trim_right,6,length(trim_right))) + //Check for file + else if(copytext(trim_right,1,2) == "'") + trim_right = file(copytext(trim_right,2,length(trim_right))) + to_return[trim_left] = trim_right else//simple var @@ -323,10 +302,11 @@ placed.opacity = 1 placed.underlays += turfs_underlays -//atom creation method that preloads variables before creation -/atom/New(atom/loc, dmm_suite/preloader/_dmm_preloader) - if(istype(_dmm_preloader, /dmm_suite/preloader)) - _dmm_preloader.load(src) +//atom creation method that preloads variables at creation +/atom/New() + if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() + _preloader.load(src) + . = ..() ////////////////// @@ -336,12 +316,15 @@ /dmm_suite/preloader parent_type = /datum var/list/attributes + var/target_path -/dmm_suite/preloader/New(list/the_attributes) +/dmm_suite/preloader/New(var/list/the_attributes, var/path) .=..() if(!the_attributes.len) Del() + return attributes = the_attributes + target_path = path /dmm_suite/preloader/proc/load(atom/what) for(var/attribute in attributes) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index a97d1f13f30..b8cfb519a50 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -163,7 +163,7 @@ var/sc_safecode5 = "[rand(0,9)]" desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - + var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment /obj/singularity/narsie/sc_Narsie/admin_investigate_setup() return diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index e6147a9de4d..88cc52f77bd 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -376,6 +376,33 @@ fitted = 0 can_adjust = 0 +/obj/item/clothing/under/stripeddress + name = "striped dress" + desc = "Fashion in space." + icon_state = "striped_dress" + item_state = "stripeddress" + item_color = "striped_dress" + fitted = 0 + can_adjust = 0 + +/obj/item/clothing/under/sailordress + name = "sailor dress" + desc = "Formal wear for a leading lady." + icon_state = "sailor_dress" + item_state = "sailordress" + item_color = "sailor_dress" + fitted = 0 + can_adjust = 0 + +/obj/item/clothing/under/redeveninggown + name = "red evening gown" + desc = "Fancy dress for space bar singers." + icon_state = "red_evening_gown" + item_state = "redeveninggown" + item_color = "red_evening_gown" + fitted = 0 + can_adjust = 0 + /obj/item/clothing/under/maid name = "maid costume" desc = "Maid in China." diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food&drinks/food/snacks_pastry.dm index 319b1db0562..af97eab4323 100644 --- a/code/modules/food&drinks/food/snacks_pastry.dm +++ b/code/modules/food&drinks/food/snacks_pastry.dm @@ -211,21 +211,10 @@ name = "\improper Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" - var/warm = 0 /obj/item/weapon/reagent_containers/food/snacks/donkpocket/New() ..() reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 5) - -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp? - if(warm) - spawn(4200) //ew - warm = 0 - reagents.del_reagent("tricordrazine") - reagents.add_reagent("sugar", 5) - name = initial(name) - return /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "fortune cookie" diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm index 8320a99f771..b7621899467 100644 --- a/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm +++ b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm @@ -71,34 +71,10 @@ /datum/recipe/donkpocket reagents = list("flour" = 5) items = list( - /obj/item/weapon/reagent_containers/food/snacks/faggot, + /obj/item/weapon/reagent_containers/food/snacks/faggot ) - result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL + result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket -/datum/recipe/donkpocket/proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked) - being_cooked.warm = 1 - being_cooked.reagents.add_reagent("tricordrazine", 5) - being_cooked.reagents.del_reagent("sugar") - being_cooked.bitesize = 6 - being_cooked.name = "Warm " + being_cooked.name - being_cooked.cooltime() - -/datum/recipe/donkpocket/make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container) - warm_up(being_cooked) - return being_cooked - -/datum/recipe/donkpocket/warm - reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour - items = list( - /obj/item/weapon/reagent_containers/food/snacks/donkpocket - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container - if(being_cooked && !being_cooked.warm) - warm_up(being_cooked) - return being_cooked ////////////////////////////////////////////////MUFFINS//////////////////////////////////////////////// diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f7da665c052..703d4b577e0 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -301,3 +301,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 0 usr.visible_message("[src] points to [A]") return 1 + +/mob/dead/observer/verb/view_manfiest() + set name = "View Crew Manifest" + set category = "Ghost" + + var/dat + dat += "

Crew Manifest

" + dat += data_core.get_manifest() + + src << browse(dat, "window=manifest;size=370x420;can_close=1") \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a6c371d15fe..b4d6f44b902 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -762,6 +762,13 @@ /mob/living/singularity_pull(S) step_towards(src,S) +/mob/living/narsie_act() + if(client) + makeNewConstruct(/mob/living/simple_animal/construct/harvester, src, null, 1) + spawn_dust() + gib() + return + /mob/living/proc/do_attack_animation(atom/A) var/pixel_x_diff = 0 var/pixel_y_diff = 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index fda757d8aed..31b691a9071 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -261,6 +261,8 @@ var/list/department_radio_keys = list( if(stuttering) message = stutter(message) + message = capitalize(message) + return message /mob/living/proc/radio(message, message_mode, steps) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index f52831f11af..2f515596d37 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -70,7 +70,8 @@ Proj.on_hit(src, 0) return 0 - +/mob/living/simple_animal/construct/narsie_act() + return /////////////////Juggernaut/////////////// diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index fd087516a33..72c56c7f554 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -25,10 +25,13 @@ var/output = "

Setup Character

" if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) - if(!ready) output += "

Declare Ready

" - else output += "

You are ready Cancel

" + if(ready) + output += "

\[ Ready | Not Ready \]

" + else + output += "

\[ Ready | Not Ready \]

" else + output += "View the Crew Manifest

" output += "

Join Game!

" output += "

Observe

" @@ -98,7 +101,10 @@ return 1 if(href_list["ready"]) - ready = text2num(href_list["ready"]) + if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started + ready = !ready + else + ready = 0 if(href_list["refresh"]) src << browse(null, "window=playersetup") //closes the player setup window @@ -136,6 +142,9 @@ return LateChoices() + if(href_list["manifest"]) + ViewManifest() + if(href_list["SelectedJob"]) if(!enter_allowed) @@ -364,6 +373,12 @@ return new_character +/mob/new_player/proc/ViewManifest() + var/dat = "" + dat += "

Crew Manifest

" + dat += data_core.get_manifest(OOC = 1) + + src << browse(dat, "window=manifest;size=370x420;can_close=1") /mob/new_player/Move() return 0 diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index c33bc19bff7..1ed275131b6 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -10,7 +10,6 @@ move_self = 1 //Do we move on our own? grav_pull = 5 //How many tiles out do we pull? consume_range = 6 //How many tiles out do we eat - var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/construct) /obj/singularity/narsie/large name = "Nar-Sie" @@ -84,25 +83,7 @@ /obj/singularity/narsie/consume(var/atom/A) - if(is_type_in_list(A, uneatable)) - return 0 - - if(istype(A,/mob/living/)) - var/mob/living/C = A - if(C.client) - makeNewConstruct(/mob/living/simple_animal/construct/harvester, C, null, 1) - C.spawn_dust() - C.gib() - return - - if(isturf(A)) - var/turf/T = A - if(istype(T, /turf/simulated/floor) && !istype(T, /turf/simulated/floor/engine/cult)) - if(prob(20)) T.ChangeTurf(/turf/simulated/floor/engine/cult) - - else if(istype(T,/turf/simulated/wall) && !istype(T, /turf/simulated/wall/cult)) - if(prob(20)) T.ChangeTurf(/turf/simulated/wall/cult) - return + A.narsie_act() /obj/singularity/narsie/ex_act() //No throwing bombs at it either. --NEO diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f902ae5917d..240b2378209 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -83,23 +83,28 @@ M.drop_item() return + if(isliving(user)) + var/mob/living/L = user + if(!can_trigger_gun(L)) + return + + process_fire(target,user,flag,params) + +/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/user) if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" - return + return 0 if(trigger_guard) - if(istype(user, /mob/living)) - var/mob/living/M = user - if (HULK in M.mutations) - M << "Your meaty finger is much too large for the trigger guard!" - return + if (HULK in user.mutations) + user << "Your meaty finger is much too large for the trigger guard!" + return 0 if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.dna && NOGUNS in H.dna.species.specflags) user << "Your fingers don't fit in the trigger guard!" - return - - process_fire(target,user,flag,params) + return 0 + return 1 /obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 49727229591..c829cff0c4a 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -175,7 +175,7 @@ return /obj/item/weapon/gun/projectile/revolver/russian/attack_self(mob/user as mob) - if(!spun && get_ammo(0,0)) + if(!spun && can_shoot()) user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") Spin() else @@ -193,34 +193,35 @@ user << "[src] is empty." /obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) - if(!spun && get_ammo(0,0)) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - Spin() - ..() - spun = 0 - -/obj/item/weapon/gun/projectile/revolver/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj) - if(!spun && get_ammo(0,0)) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - Spin() + if(user.a_intent == "harm") // Flogging action + return + if(isliving(user)) + if(!can_trigger_gun(user)) + return + if(target != user) + user << "A mechanism prevents you from shooting anyone but yourself." return - - if(target == user) - if(!chambered) - user.visible_message("*click*", "*click*") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(!spun) + user << "You need to spin the revolver's chamber first." return - if(isliving(target) && isliving(user)) - var/obj/item/organ/limb/affecting = user.zone_sel.selecting - if(affecting == "head") - var/obj/item/ammo_casing/AC = chambered - if(AC.fire(user, user)) + spun = 0 + + if(chambered) + var/obj/item/ammo_casing/AC = chambered + if(AC.fire(user, user)) + playsound(user, fire_sound, 50, 1) + var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + var/limb_name = affecting.getDisplayName() + if(affecting == "head" || affecting == "eyes" || affecting == "mouth") user.apply_damage(300, BRUTE, affecting) - playsound(user, fire_sound, 50, 1) - user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(AC.BB, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") - return + user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!") else - user.visible_message("*click*", "*click*") - return - ..() + user.visible_message("[user.name] cowardly fires [src] at \his [limb_name]!", "You cowardly fire [src] at your [limb_name]!", "You hear a gunshot!") + return + + user.visible_message("*click*") + playsound(user, 'sound/weapons/empty.ogg', 100, 1) diff --git a/config/admins.txt b/config/admins.txt index 9cf93d215e0..cec937826ec 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -72,3 +72,4 @@ tkdrg = Game Master Cuboos = Game Master thunder12345 = Game Master wjohnston = Game Master +mandurrh = Game Master diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 3adb98612ea..30334b16415 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index c293586dc20..9cee4e8a3bb 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ