From 0698fb759a23e7e1b62f01cd3faf8b5fd2224139 Mon Sep 17 00:00:00 2001 From: CIB Date: Thu, 31 May 2012 20:59:51 +0300 Subject: [PATCH 1/6] Reduce health loss in crit. (For Erthilo) --- code/modules/mob/living/carbon/human/life.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e16ea5fe505..bb1dfe2287d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -468,7 +468,12 @@ if(!breath || (breath.total_moles == 0)) if(reagents.has_reagent("inaprovaline")) return - adjustOxyLoss(HUMAN_MAX_OXYLOSS) + if(health < config.health_threshold_crit) + // in crit, we pretend your metabolism has become slower, which + // will reduce the rate at which you lose health + adjustOxyLoss(round(HUMAN_MAX_OXYLOSS / 2)) + else + adjustOxyLoss(HUMAN_MAX_OXYLOSS) oxygen_alert = max(oxygen_alert, 1) From d4393c482daea7ff9416b0d869216bc677404d2b Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sun, 3 Jun 2012 15:57:28 -0700 Subject: [PATCH 2/6] Removed a duplicate proc. Pimped out the Blueprints. --- baystation12.dme | 1 - code/defines/procs/helpers.dm | 7 - code/game/area/areas.dm | 27 ++ code/game/gamemodes/blob/theblob.dm | 2 +- code/game/machinery/computer/prisoner.dm | 2 +- code/game/master_controller.dm | 2 +- code/game/objects/items/apc_frame.dm | 2 +- code/game/objects/items/blueprints.dm | 383 +++++++++++++----- code/game/objects/items/food.dm | 2 +- .../game/objects/items/weapons/papers_bins.dm | 2 +- code/game/objects/shooting_range.dm | 4 +- code/modules/admin/player_panel.dm | 2 +- code/modules/admin/verbs/playsound.dm | 2 +- code/modules/chemical/Chemistry-Recipes.dm | 16 +- .../carbon/alien/humanoid/alien_powers.dm | 2 +- .../mob/living/carbon/alien/larva/powers.dm | 2 +- .../mob/living/carbon/metroid/powers.dm | 2 +- .../mob/living/carbon/monkey/powers.dm | 2 +- code/modules/power/apc.dm | 2 +- 19 files changed, 337 insertions(+), 127 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index d972490d4bb..4a5685547d2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -896,7 +896,6 @@ #include "code\modules\food\meat.dm" #include "code\modules\food\recipes_microwave.dm" #include "code\modules\maps\dmm_suite.dm" -#include "code\modules\maps\randomZlevel.dm" #include "code\modules\maps\reader.dm" #include "code\modules\maps\SwapMaps.dm" #include "code\modules\maps\writer.dm" diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 5ba10519160..8bfb13504d1 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -1024,13 +1024,6 @@ Turf and target are seperate in case you want to teleport some distance from a t output += A return output -/proc/get_turf_loc(var/atom/movable/M) //gets the location of the turf that the atom is on, or what the atom is in is on, etc - //in case they're in a closet or sleeper or something - var/atom/loc = M.loc - while(!istype(loc, /turf/)) - loc = loc.loc - return loc - // returns the turf located at the map edge in the specified direction relative to A // used for mass driver /proc/get_edge_target_turf(var/atom/A, var/direction) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 24cdd185011..18967989a51 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -392,3 +392,30 @@ mob << "Gravity!" +/area/proc/absorb(var/area/A) + if(!istype(A)) + return + var/list/total_contents = list() + for(var/area/RA in A.related) + total_contents |= RA.contents + RA.contents = list() + src += total_contents + spawn(5) + power_change() + set_area_machinery_title() + + +/area/proc/set_area_machinery_title(var/oldtitle) + if(!oldtitle) + return + for(var/area/RA in related) + for(var/obj/machinery/alarm/M in RA) + M.name = dd_replacetext(M.name,oldtitle,name) + for(var/obj/machinery/power/apc/M in RA) + M.name = dd_replacetext(M.name,oldtitle,name) + for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in RA) + M.name = dd_replacetext(M.name,oldtitle,name) + for(var/obj/machinery/atmospherics/unary/vent_pump/M in RA) + M.name = dd_replacetext(M.name,oldtitle,name) + for(var/obj/machinery/door/M in RA) + M.name = dd_replacetext(M.name,oldtitle,name) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index d2b1c1923e9..5036d737e0f 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -55,7 +55,7 @@ //might need an else for the ..() DblClick() if((usr.hand && istype(usr.l_hand, /obj/item/weapon/flamethrower)) || (!usr.hand && istype(usr.r_hand, /obj/item/weapon/flamethrower))) - var/turf/location = get_turf_loc(src) + var/turf/location = get_turf(src) location.DblClick() return ..() diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index f478d8656e6..21dcb39a368 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -50,7 +50,7 @@ var/loc_display = "Unknown" var/mob/living/carbon/M = T.imp_in if(M.z == 1 && !istype(M.loc, /turf/space)) - var/turf/mob_loc = get_turf_loc(M) + var/turf/mob_loc = get_turf(M) loc_display = mob_loc.loc dat += "ID: [T.id] | Location: [loc_display]
" dat += "(Message Holder) |
" diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 33dffbcb83b..f77e9f4a77a 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -47,7 +47,7 @@ datum/controller/game_controller world.tick_lag = config.Ticklag - createRandomZlevel() +// createRandomZlevel() // Sleep for about 5 seconds to allow background initialization procs to finish sleep(50) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index 10791618fbf..ba1a2597c18 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -12,7 +12,7 @@ var/ndir = get_dir(usr,on_wall) if (!(ndir in cardinal)) return - var/turf/loc = get_turf_loc(usr) + var/turf/loc = get_turf(usr) var/area/A = loc.loc if (!istype(loc, /turf/simulated/floor)) usr << "\red APC cannot be placed on this spot." diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 325a6cbdc75..11ea1670586 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -1,4 +1,11 @@ /obj/item/blueprints + name = "station blueprints" + desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it. Looks like you can edit the station's layout with these." + icon = 'items.dmi' + icon_state = "blueprints" + + var/list/image/helper_images = list() + var/const/AREA_ERRNONE = 0 var/const/AREA_STATION = 1 var/const/AREA_SPACE = 2 @@ -9,6 +16,7 @@ var/const/BORDER_BETWEEN = 2 var/const/BORDER_2NDTILE = 3 var/const/BORDER_SPACE = 4 + var/const/BORDER_AREA = 5 var/const/ROOM_ERR_LOLWAT = 0 var/const/ROOM_ERR_SPACE = -1 @@ -16,7 +24,7 @@ /obj/item/blueprints/attack_self(mob/M as mob) if (!istype(M,/mob/living/carbon/human)) - M << "This is stack of useless pieces of harsh paper." //monkeys cannot into projecting + M << "This is stack of useless pieces of heavy paper." //monkeys cannot into projecting return interact() return @@ -32,12 +40,24 @@ if (get_area_type()!=AREA_SPACE) interact() return - create_area() + spawn() + create_area(usr.client) + if(usr && usr.client) + for(var/image/to_remove in helper_images) + if(to_remove in usr.client.images) + usr.client.images.Remove(to_remove) + del(to_remove) if ("edit_area") if (get_area_type()!=AREA_STATION) interact() return - edit_area() + spawn() + edit_area(usr.client) + if(usr && usr.client) + for(var/image/to_remove in helper_images) + if(to_remove in usr.client.images) + usr.client.images.Remove(to_remove) + del(to_remove) /obj/item/blueprints/proc/interact() var/area/A = get_area() @@ -48,18 +68,18 @@ switch (get_area_type()) if (AREA_SPACE) text += {" -

According this blueprints you are in open space now.

-

Mark this place as new area.

+

According \the [src] you are in open space now.

+

Mark this place as a new area.

"} if (AREA_STATION) text += {" -

According this blueprints you are in [A.name] now.

+

According \the [src] you are in \The [A] now.

You may -move an amendment to the drawing.

+move an amendment to the designs.

"} if (AREA_SPECIAL) text += {" -

This place doesn't noted on this blueprints.

+

This place isn't noted on \the [src].

"} else return @@ -67,14 +87,10 @@ move an amendment to the drawing.

usr << browse(text, "window=blueprints") onclose(usr, "blueprints") - -/obj/item/blueprints/proc/get_area() - var/turf/T = get_turf_loc(usr) - var/area/A = T.loc - A = A.master - return A - -/obj/item/blueprints/proc/get_area_type(var/area/A = get_area()) +/obj/item/blueprints/proc/get_area_type(var/turf/T = get_turf(src)) + if(!T) + return AREA_SPECIAL + var/area/A = get_area(T) if (A.name == "Space") return AREA_SPACE var/list/SPECIALS = list( @@ -87,99 +103,235 @@ move an amendment to the drawing.

/area/syndicate_station, /area/wizard_station, /area/prison - // /area/derelict //commented out, all hail derelict-rebuilders! ) for (var/type in SPECIALS) if ( istype(A,type) ) return AREA_SPECIAL return AREA_STATION -/obj/item/blueprints/proc/create_area() +/obj/item/blueprints/proc/create_area(var/client/user) //world << "DEBUG: create_area" - var/res = detect_room(get_turf_loc(usr)) - if(!istype(res,/list)) - switch(res) + var/list/turf/turfs = detect_room(get_turf(user.mob),user) + if(!istype(turfs)) + switch(turfs) if(ROOM_ERR_SPACE) - usr << "\red New area must be complete airtight!" + usr << "\red The new area must be completly airtight!" return if(ROOM_ERR_TOOLARGE) - usr << "\red New area too large!" + usr << "\red The new area is too large!" return else usr << "\red Error! Please notify administration!" return - var/list/turf/turfs = res - var/str = sanitize(trim(input(usr,"New area title","Blueprints editing"))) - if(!str || !length(str)) //cancel - return - if(length(str) > 50) - usr << "\red Text too long." - return - var/area/A = new - A.name = str - A.tag="[A.type]_[md5(str)]" // without this dynamic light system ruin everithing - //var/ma - //ma = A.master ? "[A.master]" : "(null)" - //world << "DEBUG: create_area:
A.name=[A.name]
A.tag=[A.tag]
A.master=[ma]" - A.power_equip = 0 - A.power_light = 0 - A.power_environ = 0 - move_turfs_to_area(turfs, A) + var/choice = alert("Would you like to add this to an adjacent area, or make a brand new one?","Creating new area.","New Area", "Add to Area", "Cancel") + switch(choice) + + if("New Area") + var/list/turf/new_turfs = list() + for(var/reference in turfs) + if(turfs[reference] == "Space") + var/turf/simulated/T = locate(reference) in world + if(istype(T)) + new_turfs |= T + if(!new_turfs.len) + usr << "No aporpriate tiles found." + return + if(new_turfs.len > 500) + usr << "\red Too big of an area!" + return + + var/str = sanitize(trim(input(usr,"New area title","Blueprints editing") as null|text)) + if(!str || !length(str)) //cancel + return + if(length(str) > 50) + usr << "\red Text too long." + return + var/area/A = new + A.name = str + A.tag="[A.type]_[md5(str)]" // without this dynamic light system ruin everithing + A.power_equip = 0 + A.power_light = 0 + A.power_environ = 0 + A.contents |= new_turfs + + + if("Add to Area") + var/list/adjacent_areas = list() + for(var/reference in turfs) + adjacent_areas |= turfs[reference] + + +//POSSIBLE FUTURE CHANGE + adjacent_areas.Remove("Space") //It's not something you want... or is it? We can try this out later. + + + var/decision = input("Which adjacent area do you want to combine with?","Blueprints Interface") as null|anything in adjacent_areas + if(decision && decision in adjacent_areas) + var/area/merge_target + for(var/reference in turfs) + if(turfs[reference] == decision) + var/turf/simulated/T = locate(reference) + if(istype(T)) + merge_target = get_area(T) + break + if(!merge_target) + usr << "Something's gone badly wrong. Sorry!" + return + + var/list/turf/new_turfs = list() + for(var/reference in turfs) + if(turfs[reference] == "Space") + var/turf/simulated/T = locate(reference) in world + if(istype(T)) + new_turfs |= T + merge_target.contents |= new_turfs + spawn(2) + merge_target.power_change() + + else + return + + if("Cancel") + return + spawn(5) - //ma = A.master ? "[A.master]" : "(null)" - //world << "DEBUG: create_area(5):
A.name=[A.name]
A.tag=[A.tag]
A.master=[ma]" interact() return -/obj/item/blueprints/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A) - A.contents.Add(turfs) - //oldarea.contents.Remove(usr.loc) // not needed - //T.loc = A //error: cannot change constant value - - -/obj/item/blueprints/proc/edit_area() - var/area/A = get_area() +/obj/item/blueprints/proc/edit_area(var/client/user) + var/area/A = get_area(src) //world << "DEBUG: edit_area" - var/prevname = A.name - var/str = sanitize(trim(input(usr,"New area title","Blueprints editing",prevname))) - if(!str || !length(str) || str==prevname) //cancel - return - if(length(str) > 50) - usr << "\red Text too long." - return - set_area_machinery_title(A,str,prevname) - for(var/area/RA in A.related) - RA.name = str - usr << "\blue You set the area '[prevname]' title to '[str]'." - interact() + var/choice = alert("Would you like to rename the area, or merge it with an adjacent one?", "Blueprint Interface", "Rename", "Merge", "Cancel") + switch(choice) + if("Rename") + var/str = sanitize(trim(input(usr,"New area title","Blueprints editing",A.name) as null|text)) + if(!str || !length(str) || str==A.name) //cancel + return + if(length(str) > 50) + usr << "\red Text too long." + return + var/old_name = A.name + for(var/area/RA in A.related) + RA.name = str + A.name = str + A.set_area_machinery_title(old_name) + usr << "\blue You retitle the area '[A.name]' to '[str]'." + + + if("Merge") + var/list/turf/search_remaining_turfs = A.contents.Copy() + var/list/turfs = list() + for(var/turf/simulated/T in search_remaining_turfs) + if(T.density || locate(/obj/machinery/door) in T || locate(/obj/machinery/door) in T) + search_remaining_turfs.Remove(T) + + var/limiter = 50 + + var/iteration = 0 + while(search_remaining_turfs.len > (A.contents.len)/10 ) + iteration++ + if(iteration > limiter) + break + var/turf/simulated/test_turf = pick(search_remaining_turfs) + if(!istype(test_turf)) + continue + var/list/turf/temp_turf_list = detect_room(test_turf,user) + if(!istype(temp_turf_list)) + switch(temp_turf_list) + if(ROOM_ERR_SPACE) + usr << "\red \The [A] is not completly airtight!" + return + if(ROOM_ERR_TOOLARGE) + usr << "\red \The [A] is too large to expand!" + return + else + usr << "\red Error! Please notify administration!" + return + for(var/reference in temp_turf_list) + var/turf/simulated/T = locate(reference) + if(T) + search_remaining_turfs.Remove(T) + turfs |= temp_turf_list + + var/list/adjacent_areas = list() + for(var/reference in turfs) + adjacent_areas |= turfs[reference] + adjacent_areas.Remove("[A]") + + var/decision = input("Which adjacent area do you want to merge with?","Blueprints Interface") as null|anything in adjacent_areas + if(decision && decision in adjacent_areas) + var/area/merge_target + for(var/reference in turfs) + if(turfs[reference] == decision) + var/turf/simulated/T = locate(reference) + if(istype(T)) + merge_target = get_area(T) + break + + if(!merge_target) + usr << "Something's gone badly wrong. Sorry!" + return + + search_remaining_turfs = merge_target.contents.Copy() + for(var/turf/simulated/T in search_remaining_turfs) + if(T.density || locate(/obj/machinery/door) in T || locate(/obj/machinery/door) in T) + search_remaining_turfs.Remove(T) + + var/turf/simulated/T + iteration = 0 + while(search_remaining_turfs.len > (merge_target.contents.len)/10 ) + T = pick(search_remaining_turfs) + if(istype(T)) + var/list/turf_references = detect_room(T,user) + if(!istype(turf_references)) + switch(turf_references) + if(ROOM_ERR_SPACE) + usr << "\red \The [merge_target] is not completly airtight!" + return + if(ROOM_ERR_TOOLARGE) + usr << "\red \The [merge_target] is too large to expand!" + return + else + usr << "\red Error! Please notify administration!" + return + for(var/reference in turf_references) + T = locate(reference) + if(T) + search_remaining_turfs.Remove(T) + iteration++ + if(iteration >= limiter) + break + + var/area_master = alert("If this is approximately the right shape for the combined area, which should the new area be?", "Blueprint Interface", "\The [A]", "\The [merge_target]", "Looks Wrong/Cancel") + if(area_master == "\The [A]") + + A.absorb(merge_target) + + else if(area_master == "\The [merge_target]") + + merge_target.absorb(A) + + else if(area_master == "Looks Wrong/Cancel") + return + + else + return + + if("Cancel") + return + + spawn(5) + interact() return -/obj/item/blueprints/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle) - if (!oldtitle) // or dd_replacetext goes to infinite loop - return - for(var/area/RA in A.related) - for(var/obj/machinery/alarm/M in RA) - M.name = dd_replacetext(M.name,oldtitle,title) - for(var/obj/machinery/power/apc/M in RA) - M.name = dd_replacetext(M.name,oldtitle,title) - for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in RA) - M.name = dd_replacetext(M.name,oldtitle,title) - for(var/obj/machinery/atmospherics/unary/vent_pump/M in RA) - M.name = dd_replacetext(M.name,oldtitle,title) - for(var/obj/machinery/door/M in RA) - M.name = dd_replacetext(M.name,oldtitle,title) - //TODO: much much more. Unnamed airlocks, cameras, etc. - /obj/item/blueprints/proc/check_tile_is_border(var/turf/T2,var/dir) if (istype(T2, /turf/space)) return BORDER_SPACE //omg hull breach we all going to die here if (istype(T2, /turf/simulated/shuttle)) return BORDER_SPACE - if (get_area_type(T2.loc)!=AREA_SPACE) - return BORDER_BETWEEN if (istype(T2, /turf/simulated/wall)) return BORDER_2NDTILE if (!istype(T2, /turf/simulated)) @@ -200,41 +352,80 @@ move an amendment to the drawing.

if (locate(/obj/structure/falserwall) in T2) return BORDER_2NDTILE + + if(get_area_type(T2) == AREA_SPECIAL) + return BORDER_BETWEEN + return BORDER_NONE -/obj/item/blueprints/proc/detect_room(var/turf/first) - var/list/turf/found = new - var/list/turf/pending = list(first) - while(pending.len) - if (found.len+pending.len > 300) +/obj/item/blueprints/proc/detect_room(var/turf/first, var/client/user) + var/list/found = list() + var/list/pending = list(first) + var/area/B = get_area(first) + var/list/areas = list(B.name) + do + if (found.len+pending.len > 800) return ROOM_ERR_TOOLARGE - var/turf/T = pending[1] //why byond havent list::pop()? - pending -= T + var/turf/T = pending[1] + pending.Remove(T) + B = get_area(T) for (var/dir in cardinal) var/skip = 0 for (var/obj/structure/window/W in T) if(dir == W.dir || (W.dir in list(NORTHEAST,SOUTHEAST,NORTHWEST,SOUTHWEST))) - skip = 1; break - if (skip) continue + skip = 1 + break + if (skip) + continue for(var/obj/machinery/door/window/D in T) if(dir == D.dir) - skip = 1; break - if (skip) continue + skip = 1 + break + if (skip) + continue var/turf/NT = get_step(T,dir) - if (!isturf(NT) || (NT in found) || (NT in pending)) + + if (!istype(NT)) + continue + if("\ref[NT]" in found) + continue + if("\ref[NT]" in pending) continue switch(check_tile_is_border(NT,dir)) if(BORDER_NONE) - pending+=NT + var/area/A = get_area(NT) + if( ( A.name in areas || A.name == "Space" || B.name == "Space" ) &&\ + !( "\ref[NT]" in pending || "\ref[NT]" in found) ) + //If it is another area, and neither of them are space AND it is not in the list of adjacent areas, then do not add it. + pending |= NT + areas |= A.name if(BORDER_BETWEEN) - //do nothing, may be later i'll add 'rejected' list as optimization + found["\ref[NT]"] = "[get_area(NT)]" + if(user && !locate(/image) in NT) + var/image/Z = image('ULIcons.dmi',NT,"7-0-0",19) + helper_images |= Z + user.images += Z + if(BORDER_2NDTILE) - found+=NT //tile included to new area, but we dont seek more + found["\ref[NT]"] = "[get_area(NT)]" //tile included to new area, but we dont seek more + if(user && !locate(/image) in NT) + var/image/Z = image('ULIcons.dmi',NT,"7-0-0",19) + helper_images |= Z + user.images += Z if(BORDER_SPACE) return ROOM_ERR_SPACE - found+=T + found["\ref[T]"] = "[get_area(T)]" + if(user) + for(var/image/I in user.images) + if(I.loc == T) + user.images.Remove(I) + del(I) + var/image/Z = image('ULIcons.dmi',T,"0-0-7",19) + helper_images |= Z + user.images += Z + while(pending.len) return found /* diff --git a/code/game/objects/items/food.dm b/code/game/objects/items/food.dm index cce942fa728..d42a66757b8 100644 --- a/code/game/objects/items/food.dm +++ b/code/game/objects/items/food.dm @@ -82,7 +82,7 @@ MONKEY CUBE BOX usr.put_in_hand(D) usr << "You take a donut out of the box." else - D.loc = get_turf_loc(src) + D.loc = get_turf(src) usr << "You take a donut out of the box." src.update() diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm index e284daf9ca9..c3b8a87196d 100644 --- a/code/game/objects/items/weapons/papers_bins.dm +++ b/code/game/objects/items/weapons/papers_bins.dm @@ -360,7 +360,7 @@ NOTEBOOK usr.put_in_hand(P) usr << "You take a paper out of the bin." else - P.loc = get_turf_loc(src) + P.loc = get_turf(src) usr << "You take a paper out of the bin." src.update() diff --git a/code/game/objects/shooting_range.dm b/code/game/objects/shooting_range.dm index 6731b3e9e2c..8bb6edd4ab4 100644 --- a/code/game/objects/shooting_range.dm +++ b/code/game/objects/shooting_range.dm @@ -52,7 +52,7 @@ user.put_in_hand(pinned_target) user << "You take the target out of the stake." else - pinned_target.loc = get_turf_loc(user) + pinned_target.loc = get_turf(user) user << "You take the target out of the stake." pinned_target = null @@ -122,7 +122,7 @@ user.put_in_hand(src) user << "You take the target out of the stake." else - src.loc = get_turf_loc(user) + src.loc = get_turf(user) user << "You take the target out of the stake." stake.pinned_target = null diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 408815774e9..4fcb919ef5b 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -341,7 +341,7 @@ if(M) dat += "[M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" - var/turf/mob_loc = get_turf_loc(M) + var/turf/mob_loc = get_turf(M) dat += "[mob_loc.loc]" else dat += "Head not found!" diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 4ca0125f63a..9b4fe6ac589 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -45,7 +45,7 @@ if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin") log_admin("[key_name(src)] played a local sound [S]") message_admins("[key_name_admin(src)] played a local sound [S]", 1) - playsound(get_turf_loc(src.mob), S, 50, 0, 0) + playsound(get_turf(src.mob), S, 50, 0, 0) return //feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index 098f1ccb9ee..43052a475f3 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -684,8 +684,8 @@ datum if(chosen) // Calculate previous position for transition - var/turf/FROM = get_turf_loc(holder.my_atom) // the turf of origin we're travelling FROM - var/turf/TO = get_turf_loc(chosen) // the turf of origin we're travelling TO + var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM + var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO playsound(TO, 'phasein.ogg', 100, 1) @@ -733,16 +733,16 @@ datum var/list/critters = typesof(/obj/effect/critter) - /obj/effect/critter // list of possible critters - playsound(get_turf_loc(holder.my_atom), 'phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null)) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) if(M:eyecheck() <= 0) flick("e_flash", M.flash) for(var/i = 1, i <= created_volume, i++) var/chosen = pick(critters) var/obj/effect/critter/C = new chosen - C.loc = get_turf_loc(holder.my_atom) + C.loc = get_turf(holder.my_atom) if(prob(50)) for(var/j = 1, j <= rand(1, 3), j++) step(C, pick(NORTH,SOUTH,EAST,WEST)) @@ -759,9 +759,9 @@ datum var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks // BORK BORK BORK - playsound(get_turf_loc(holder.my_atom), 'phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null)) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) if(M:eyecheck() <= 0) flick("e_flash", M.flash) @@ -769,7 +769,7 @@ datum var/chosen = pick(borks) var/obj/B = new chosen if(B) - B.loc = get_turf_loc(holder.my_atom) + B.loc = get_turf(holder.my_atom) if(prob(50)) for(var/j = 1, j <= rand(1, 3), j++) step(B, pick(NORTH,SOUTH,EAST,WEST)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 840a5cbb826..61ca2c72c40 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -149,7 +149,7 @@ I kind of like the right click only--the window version can get a little confusi vents.Add(temp_vent) - var/atom/a = get_turf_loc(temp_vent) + var/atom/a = get_turf(temp_vent) ventAreas.Add(a.loc) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 0f632a380be..17c2ee70f4b 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -23,7 +23,7 @@ for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) if(vent.loc.z != loc.z) continue - var/atom/a = get_turf_loc(vent) + var/atom/a = get_turf(vent) choices.Add(a.loc) var/turf/startloc = loc var/obj/selection = input("Select a destination.", "Duct System") in choices diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 63169dedad6..fb1fd241041 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -258,7 +258,7 @@ for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) if(vent.loc.z != loc.z) continue - var/atom/a = get_turf_loc(vent) + var/atom/a = get_turf(vent) choices.Add(a.loc) var/turf/startloc = loc var/obj/selection = input("Select a destination.", "Duct System") in choices diff --git a/code/modules/mob/living/carbon/monkey/powers.dm b/code/modules/mob/living/carbon/monkey/powers.dm index 9a8f95283e8..3f170b6a4d1 100644 --- a/code/modules/mob/living/carbon/monkey/powers.dm +++ b/code/modules/mob/living/carbon/monkey/powers.dm @@ -22,7 +22,7 @@ for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) if(vent.loc.z != loc.z) continue - var/atom/a = get_turf_loc(vent) + var/atom/a = get_turf(vent) choices.Add(a.loc) var/turf/startloc = loc var/obj/selection = input("Select a destination.", "Duct System") in choices diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 05b1c48a284..31b0c8870a8 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -354,7 +354,7 @@ user << "You start adding cables to the APC frame..." playsound(src.loc, 'Deconstruct.ogg', 50, 1) if(do_after(user, 20) && C.amount >= 10) - var/turf/T = get_turf_loc(src) + var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if (prob(50) && electrocute_mob(usr, N, N)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread From 5765aac899371109a863d31ace0ed4eeedd83e31 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 13 Jun 2012 17:28:03 -0700 Subject: [PATCH 3/6] Fuck it, good enough for now. --- code/game/area/areas.dm | 21 +++++++++++++++++---- code/game/objects/items/blueprints.dm | 4 +++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 18967989a51..629e420d529 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -395,14 +395,27 @@ /area/proc/absorb(var/area/A) if(!istype(A)) return + var/oldname = A.name + var/list/other_related = A.related + var/area/other_master = A.master + other_related -= other_master var/list/total_contents = list() - for(var/area/RA in A.related) + for(var/area/RA in other_related) + RA.sd_lighting = 0 total_contents |= RA.contents - RA.contents = list() + del RA.contents + del RA.related + RA.master = null + other_master.master = null + del other_master.related + total_contents |= other_master.contents + del other_master.contents + for(var/area/RA in other_related) + del(RA) src += total_contents spawn(5) power_change() - set_area_machinery_title() + set_area_machinery_title(oldname) /area/proc/set_area_machinery_title(var/oldtitle) @@ -418,4 +431,4 @@ for(var/obj/machinery/atmospherics/unary/vent_pump/M in RA) M.name = dd_replacetext(M.name,oldtitle,name) for(var/obj/machinery/door/M in RA) - M.name = dd_replacetext(M.name,oldtitle,name) + M.name = dd_replacetext(M.name,oldtitle,name) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 11ea1670586..575c49d81c6 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -220,6 +220,8 @@ move an amendment to the designs.

if("Merge") + usr << "We appologize, but this function is not availible" + /* var/list/turf/search_remaining_turfs = A.contents.Copy() var/list/turfs = list() for(var/turf/simulated/T in search_remaining_turfs) @@ -316,7 +318,7 @@ move an amendment to the designs.

return else - return + return*/ if("Cancel") return From 3748b07ec1dd981bba31df79b0f287ed00c28fd7 Mon Sep 17 00:00:00 2001 From: CompactNinja Date: Fri, 15 Jun 2012 03:03:42 +0930 Subject: [PATCH 4/6] Custom item for RawrTaicho. --- code/modules/customitems/item_defines.dm | 8 ++++++++ config/custom_items.txt | 2 ++ icons/obj/custom_items.dmi | Bin 20272 -> 25525 bytes 3 files changed, 10 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 60ef6d82ac7..7ddce21420c 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -104,6 +104,14 @@ icon_on = "bluezippoon" icon_off = "bluezippo" +/obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1 //rawrtaicho: Riley Rohtin + name = "Riley's black zippo" + desc = "A black zippo lighter, which holds some form of sentimental value." + icon = 'custom_items.dmi' + icon_state = "blackzippo" + icon_on = "blackzippoon" + icon_off = "blackzippo" + /obj/item/weapon/fluff/cado_keppel_1 //sparklysheep: Cado Keppel name = "purple comb" desc = "A pristine purple comb made from flexible plastic. It has a small K etched into its side." diff --git a/config/custom_items.txt b/config/custom_items.txt index 14eb2f9ed84..7bdf289ede5 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -3,6 +3,7 @@ atomicdog92: Seth Sealis: /obj/item/clothing/suit/storage/det_suit/fluff/leather botanistpower: Walter Brooks: /obj/item/clothing/gloves/fluff/walter_brooks_1 chinsky: Victor Kaminski: /obj/item/fluff/victor_kaminsky_1 chinsky: Summer Springfield: /obj/item/weapon/camera_test/fluff/orange +compactninja: Al Peterson: /obj/item/clothing/head/flatcap compactninja: Ysyr Rylias: /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen desiderium: Momiji Inubashiri: /obj/item/clothing/under/fluff/olddressuniform desiderium: Rook Maudlin: /obj/item/clothing/suit/storage/det_suit/fluff/retpolcoat, /obj/item/clothing/head/det_hat/fluff/retpolcap, /obj/item/clothing/under/det/fluff/retpoluniform @@ -21,6 +22,7 @@ misterfox: Rashid Siraj: /obj/item/weapon/storage/bible/tajaran morrinn: Maye Day: /obj/item/weapon/storage/fluff/maye_daye_1 orangebottle: Lillian Levett: /obj/item/weapon/pen/fluff/fancypen orangebottle: Lilliana Reade: /obj/item/weapon/pen/fluff/fancypen +rawrtaicho: Riley Rohtin: /obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1 roaper: Enos Adlai: /obj/item/clothing/head/fluff/enos_adlai_1 searif: Yuki Matsuda: /obj/item/clothing/under/fluff/jumpsuitdown, /obj/item/clothing/head/helmet/welding/fluff/yuki_matsuda_1 searif: Tsiokeriio Tarbell: /obj/item/clothing/mask/fluff/flagmask diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 07f53f4a8de493e65ddcdbbe0b04d6ed473bab44..93e64a4a618c2e4df8e1b8c1ae4030f902ad460c 100644 GIT binary patch literal 25525 zcma%ibyQo?*JTp4Emqv6cq#4_*W%Vfp+G1_io3g&;_mLWP~6?!-91nog8RJwzHer& znKf(8{E@u30=cC|Yf?p#{#JF$Or1pzSM}B#&hEP=;Q;gfLIA=TZ>I zk#_Mvz6-&i3l$$8MQ)Y(5IL4dF>+ET(ua9|=XJ=!5XhJ6?|OSSeWU?*!npzeMHK4nO} z=7kI)sYK1_`ytL9cf=!ix}Ot~-Z57p2SzlDrm2_`6?6l*&<6QVrrQX046&>+w6umo(n? z`-xV&?48CK1#8#$UeB2~H0At1oFF?=J3k|)#xo4CEbWLG-ySo5Hi^(C5HUrmN|@I9 zQ=-C6+lN|+n4fNn-%sxlrIIC-MVajbv$ZHpmM)2lYDIst+SE2K-Od*!tqxnGKb-On)+5wn~(KaEXw6pnJH-FEZ=g<2X}yhylu1 zj1*d7NgJ{E8?EE-rI&ME?_IddPWp~n&58DYrYwCD0)Z$&vXWvSUD6KI-F0w3-M6

dwSeT&E`Aq@@=#%`v4nV#dzu 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

Q$M6TVq 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 M8OzgUhVHTd2F=kBDgXcg From 647e1c71fdb7551cd04b888c3bff5ed4f25597ba Mon Sep 17 00:00:00 2001 From: cib Date: Thu, 14 Jun 2012 20:24:38 +0200 Subject: [PATCH 5/6] Added a separate config/moderators.txt config file --- code/game/cellautomata.dm | 20 ++++++++++++++++++++ config/moderators.txt | 3 +++ 2 files changed, 23 insertions(+) create mode 100644 config/moderators.txt diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm index 3210bac6526..7034c022a2b 100644 --- a/code/game/cellautomata.dm +++ b/code/game/cellautomata.dm @@ -41,6 +41,26 @@ admins[m_key] = a_lev diary << ("ADMIN: [m_key] = [a_lev]") + // look for moderators in a separate file + text = file2text("config/moderators.txt") + if (!text) + diary << "Failed to load config/moderators.txt\n" + else + var/list/lines = dd_text2list(text, "\n") + for(var/line in lines) + world.log << line + if (!line) + continue + + if (copytext(line, 1, 2) == ";") + continue + + var/m_key = copytext(line, 1, length(line)+1) + var/a_lev = "Moderator" + admins[m_key] = a_lev + world.log << ("ADMIN: [m_key] = [a_lev]") + + /world/proc/load_testers() var/text = file2text("config/testers.txt") if (!text) diff --git a/config/moderators.txt b/config/moderators.txt new file mode 100644 index 00000000000..28619a2835f --- /dev/null +++ b/config/moderators.txt @@ -0,0 +1,3 @@ +; just add the ckey (lowercase) of every moderator on a separate line +; lines starting with ; are comments and will be ignored +asanadas From f75a1c76e94bfdcae077cd2086ee327be319e92a Mon Sep 17 00:00:00 2001 From: cib Date: Thu, 14 Jun 2012 21:02:53 +0200 Subject: [PATCH 6/6] Added some people on the moderator list whom I asked and who agreed. --- config/moderators.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/moderators.txt b/config/moderators.txt index 28619a2835f..8b2b3fad664 100644 --- a/config/moderators.txt +++ b/config/moderators.txt @@ -1,3 +1,6 @@ ; just add the ckey (lowercase) of every moderator on a separate line ; lines starting with ; are comments and will be ignored -asanadas +chinsky +dakonic +themij +sparklysheep