diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index 47daf9254fa..ee7a1bfa9b9 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -99,7 +99,7 @@ var/canmove = 1.0 var/eye_stat = null//Living, potentially Carbon - + var/name_archive //For admin things like possession var/timeofdeath = 0.0//Living var/cpr_time = 1.0//Carbon diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index b7e7e942f15..bad0d4a1043 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -10,69 +10,73 @@ if(!ticker || wavesecret) return + wavesecret = 1 + for(var/i = 0 to number) + spawn(rand(10,100)) + spawn_meteor() + spawn(meteor_wave_delay) + wavesecret = 0 + +/proc/spawn_meteors(var/number = meteors_in_small_wave) + for(var/i = 0; i < number; i++) + spawn(0) + spawn_meteor() + +/proc/spawn_meteor() + var/startx var/starty var/endx var/endy var/turf/pickedstart var/turf/pickedgoal - switch(pick(1,2,3,4)) - if(1) //NORTH - starty = world.maxy-3 - startx = rand(1, world.maxx-1) - endy = 1 - endx = rand(1, world.maxx-1) - if(2) //EAST - starty = rand(1,world.maxy-1) - startx = world.maxx-3 - endy = rand(1, world.maxy-1) - endx = 1 - if(3) //SOUTH - starty = 3 - startx = rand(1, world.maxx-1) - endy = world.maxy-1 - endx = rand(1, world.maxx-1) - if(4) //WEST - starty = rand(1, world.maxy-1) - startx = 3 - endy = rand(1,world.maxy-1) - endx = world.maxx-1 - pickedstart = locate(startx, starty, 1) - pickedgoal = locate(endx, endy, 1) - wavesecret = 1 - for(var/i = 0 to number) - spawn(rand(10,100)) - spawn_meteor(pickedstart, pickedgoal) - spawn(meteor_wave_delay) - wavesecret = 0 + var/max_i = 10//number of tries to spawn meteor. -/proc/spawn_meteors(var/turf/pickedstart, var/turf/pickedgoal, var/number = meteors_in_small_wave) - for(var/i = 0; i < number; i++) - spawn(0) - spawn_meteor(pickedstart, pickedgoal) -/proc/spawn_meteor(var/turf/pickedstart, var/turf/pickedgoal) + do + switch(pick(1,2,3,4)) + if(1) //NORTH + starty = world.maxy-3 + startx = rand(1, world.maxx-1) + endy = 1 + endx = rand(1, world.maxx-1) + if(2) //EAST + starty = rand(1,world.maxy-1) + startx = world.maxx-3 + endy = rand(1, world.maxy-1) + endx = 1 + if(3) //SOUTH + starty = 3 + startx = rand(1, world.maxx-1) + endy = world.maxy-1 + endx = rand(1, world.maxx-1) + if(4) //WEST + starty = rand(1, world.maxy-1) + startx = 3 + endy = rand(1,world.maxy-1) + endx = world.maxx-1 + + pickedstart = locate(startx, starty, 1) + pickedgoal = locate(endx, endy, 1) + max_i-- + if(max_i<=0) return + + while (!istype(pickedstart, /turf/space) || pickedstart.loc.name != "Space" ) //FUUUCK, should never happen. - var/route = rand(1,5) - var/turf/tempgoal = pickedgoal - for(var/i, i < route, i++) - tempgoal = get_step(tempgoal,rand(1,8)) var/obj/effect/meteor/M switch(rand(1, 100)) - if(1 to 15) - M = new /obj/effect/meteor/big(pickedstart) - if(16 to 75) + + if(1 to 10) + M = new /obj/effect/meteor/big( pickedstart ) + if(11 to 75) M = new /obj/effect/meteor( pickedstart ) if(76 to 100) M = new /obj/effect/meteor/small( pickedstart ) - M.dest = tempgoal - - do - sleep(1) + M.dest = pickedgoal + spawn(0) walk_towards(M, M.dest, 1) - while (!istype(M.loc, /turf/space) || pickedstart.loc.name != "Space" ) //FUUUCK, should never happen. return @@ -133,12 +137,7 @@ if(!M.stat && !istype(M, /mob/living/silicon/ai)) //bad idea to shake an ai's view shake_camera(M, 3, 1) if (A) - if(isobj(A)) - del(A) - else - A.meteorhit(src) - src.hits-- - return + explosion(src.loc, 0, 1, 2, 3, 0) playsound(src.loc, 'meteorimpact.ogg', 40, 1) if (--src.hits <= 0) if(prob(15) && !istype(A, /obj/structure/grille)) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 6c0bc8b1481..f0388c880c1 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -26,11 +26,12 @@ Buildable meters var/pipe_type = 0 //var/pipe_dir = 0 var/pipename + force = 7 icon = 'pipe-item.dmi' icon_state = "simple" item_state = "buildpipe" flags = TABLEPASS|FPRINT - w_class = 4 + w_class = 3 level = 2 /obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index f3fc7c70ff5..e3d27b1256b 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -93,7 +93,7 @@ var/list/supply_groups = new() icon_state = "request" circuit = "/obj/item/weapon/circuitboard/ordercomp" var/temp = null - + var/reqtime = 0 //Cooldown for requisitions - Quarxink /obj/machinery/computer/ordercomp/New() // add the supply pack groups, if they haven't already been added if(supply_groups.len == 0) @@ -154,10 +154,12 @@ var/list/supply_groups = new() //if((locate(/mob/living) in T) && (!locate(/mob/living/carbon/monkey) in T)) return 0 //old check for living excluded monkeys if((locate(/mob/living) in T)) return 0 if((locate(/obj/item/device/radio/beacon) in T)) return 0 + if((locate(/obj/mecha) in T)) return 0 for(var/atom/ATM in T) if((locate(/mob/living/carbon) in ATM)) return 0 // allow simple_animals to be transported in containers if((locate(/mob/living/silicon) in ATM)) return 0 if((locate(/obj/item/device/radio/beacon) in ATM)) return 0 + if((locate(/obj/mecha ) in ATM)) return 0 return 1 @@ -302,44 +304,55 @@ var/list/supply_groups = new() src.temp += "
OK" else if (href_list["printform"]) - var/supplytype = href_list["printform"] - var/datum/supply_packs/P = new supplytype () - var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(src.loc) - var/idname = "Unknown" - var/idrank = "Unknown" - var/reason = input(usr,"Reason:","Why do you require this item?","") + if (!reqtime) + var/supplytype = href_list["printform"] + var/datum/supply_packs/P = new supplytype () + var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(src.loc) + var/idname = "Unknown" + var/idrank = "Unknown" + var/reason = input(usr,"Reason:","Why do you require this item?","") - reqform.name = "Requisition Form - [P.name]" - reqform.overlays += "paper_words" - reqform.info += "

[station_name] Supply Requisition Form


" + reqform.name = "Requisition Form - [P.name]" + reqform.overlays += "paper_words" + reqform.info += "

[station_name] Supply Requisition Form


" + + if (istype(usr:wear_id, /obj/item/weapon/card/id)) + if(usr:wear_id.registered) + idname = usr:wear_id.registered + if(usr:wear_id.assignment) + idrank = usr:wear_id.assignment + if (istype(usr:wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = usr:wear_id + if(pda.owner) + idname = pda.owner + if(pda.ownjob) + idrank = pda.ownjob + else + idname = usr.name + + reqform.info += "REQUESTED BY: [idname]
" + reqform.info += "RANK: [idrank]
" + reqform.info += "REASON: [reason]
" + reqform.info += "SUPPLY CRATE TYPE: [P.name]
" + reqform.info += "Contents:

" + reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" + + reqtime = 5 //5 second cooldown initiated after each printed req, change the number to change the cooldown (in seconds) - Quarxink + spawn(0) + while(reqtime >=1 && src) + sleep(10) + reqtime -- + reqtime = 0 - if (istype(usr:wear_id, /obj/item/weapon/card/id)) - if(usr:wear_id.registered) - idname = usr:wear_id.registered - if(usr:wear_id.assignment) - idrank = usr:wear_id.assignment - if (istype(usr:wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = usr:wear_id - if(pda.owner) - idname = pda.owner - if(pda.ownjob) - idrank = pda.ownjob else - idname = usr.name - - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "Contents:

" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" - + for (var/mob/V in hearers(src)) + V.show_message("[src]'s monitor flashes, \"[reqtime] seconds remaining until another requisition form may be printed.\"") else if (href_list["vieworders"]) src.temp = "Current approved orders:

" for(var/S in supply_shuttle_shoppinglist) @@ -433,7 +446,7 @@ var/list/supply_groups = new() if(!supply_shuttle_at_station || supply_shuttle_moving) return if (!supply_can_move()) - usr << "\red The supply shuttle can not transport station employees or homing beacons." + usr << "\red The supply shuttle can not transport station employees, exosuits, or homing beacons." return src.temp = "Shuttle sent.

OK" diff --git a/code/game/vials.dm b/code/game/vials.dm index 0e27b6b6ee6..9e127e4baba 100644 --- a/code/game/vials.dm +++ b/code/game/vials.dm @@ -271,6 +271,18 @@ /proc/possess(obj/O as obj in world) set name = "Possess Obj" set category = "Object" + var/turf/T = get_turf(O) + + if(T) + log_admin("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])") + message_admins("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])", 1) + else + log_admin("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location") + message_admins("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location", 1) + + if(!usr.control_object) //If you're not already possessing something... + usr.name_archive = usr.real_name + usr.loc = O usr.real_name = O.name usr.name = O.name @@ -281,10 +293,17 @@ set name = "Release Obj" set category = "Object" //usr.loc = get_turf(usr) + + if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object + usr.real_name = usr.name_archive + usr.name = usr.real_name + usr.update_clothing() //So the name is updated properly + usr.loc = O.loc // Appear where the object you were controlling is -- TLE usr.client.eye = usr usr.control_object = null + /proc/givetestverbs(mob/M as mob in world) set desc = "Give this guy possess/release verbs" set category = "Debug" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index bc3af304fde..b7b61cfee11 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -873,6 +873,8 @@ /obj/machinery/power/apc/proc/malfoccupy(var/mob/living/silicon/ai/malf) if(!istype(malf)) return + if(src.z != 1) + return src.occupant = new /mob/living/silicon/ai(src,malf.laws,null,1) src.occupant.adjustOxyLoss(malf.getOxyLoss()) src.occupant.name = "[malf.name] APC Copy" diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index cc99d9aad1f..be24897cf11 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -108,6 +108,13 @@ if(istext(text)) details = text + proc/add_details(var/text) + if(istext(text)) + if(!details) + details = text + else + details += " [text]" + proc/get_details() return details @@ -241,4 +248,16 @@ proc/feedback_set_details(var/variable,var/details) if(!FV) return - FV.set_details(details) \ No newline at end of file + FV.set_details(details) + +proc/feedback_add_details(var/variable,var/details) + if(!blackbox) return + + variable = sql_sanitize_text(variable) + details = sql_sanitize_text(details) + + var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + + if(!FV) return + + FV.add_details(details) \ No newline at end of file diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index f8a1b8857de..28a0f0a8c66 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ