diff --git a/_maps/map_files/templates/shelter_1.dmm b/_maps/map_files/templates/shelter_1.dmm index b260f0558a4..76276379e5b 100644 --- a/_maps/map_files/templates/shelter_1.dmm +++ b/_maps/map_files/templates/shelter_1.dmm @@ -1,18 +1,18 @@ -"a" = (/turf/simulated/wall/survival,/area/survivalpod) -"b" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"a" = (/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "c" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) "d" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) "e" = (/obj/item/device/gps/computer,/turf/simulated/floor/pod,/area/survivalpod) -"f" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"f" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "g" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "h" = (/turf/simulated/floor/pod,/area/survivalpod) "i" = (/obj/structure/stool/bed/pod,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/pod,/area/survivalpod) -"j" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"j" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "k" = (/obj/structure/table/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "l" = (/obj/structure/tubes,/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/pod,/area/survivalpod) -"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "n" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod/glass,/turf/simulated/floor/pod,/area/survivalpod) -"o" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) +"o" = (/obj/structure/sign/mining,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) (1,1,1) = {" aabaa diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index b61f4f62a44..99fba63fcc4 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -1,16 +1,16 @@ -"a" = (/turf/simulated/wall/survival,/area/survivalpod) -"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"a" = (/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "c" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) "d" = (/turf/simulated/floor/pod,/area/survivalpod) "e" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) "f" = (/obj/machinery/light,/turf/simulated/floor/carpet/black,/area/survivalpod) -"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "h" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) "i" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) "j" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/brute{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/pod,/area/survivalpod) "k" = (/obj/structure/table/wood/fancy/black{pixel_y = -9},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/microwave,/turf/simulated/floor/carpet/black,/area/survivalpod) "l" = (/obj/structure/sink/kitchen{dir = 4; pixel_x = -11},/turf/simulated/floor/carpet/black,/area/survivalpod) -"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "n" = (/obj/structure/curtain/black,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/pod{pixel_y = 0},/area/survivalpod) "o" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) "p" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/carpet/black,/area/survivalpod) @@ -21,13 +21,13 @@ "u" = (/obj/structure/tubes,/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/pod,/area/survivalpod) "v" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/displaycase{desc = "A display case containing an expensive forgery, probably."; locked = 1; pixel_y = -4; req_access_txt = "48"; start_showpiece_type = /obj/item/fakeartefact},/turf/simulated/floor/carpet/black{dir = 1},/area/survivalpod) "w" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod/glass,/turf/simulated/floor/pod,/area/survivalpod) -"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) "y" = (/obj/structure/toilet/secret{pixel_y = 12},/turf/simulated/floor/pod,/area/survivalpod) "z" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/cardboard_cutout{desc = "A cardboard cutout of a xenomorph maid."; icon_state = "cutout_lusty"; name = "lusty xenomorph maid"}, /turf/simulated/floor/carpet/black,/area/survivalpod) "A" = (/obj/structure/table/wood/fancy/black,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/carpet/black,/area/survivalpod) "B" = (/obj/structure/table/wood/fancy/black,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 1},/obj/effect/spawner/lootdrop/three_course_meal,/turf/simulated/floor/carpet/black,/area/survivalpod) "C" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) -"D" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) +"D" = (/obj/structure/sign/mining,/turf/simulated/wall/mineral/titanium/survival,/area/survivalpod) (1,1,1) = {" agagaga diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index a7f5ee69d39..a2414d9cac3 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -318,7 +318,7 @@ to_chat(src, "The pressure sends you flying!") if(ishuman(src)) var/mob/living/carbon/human/H = src - H.Weaken(min(pressure_difference / 10, 10)) + H.Weaken(min(pressure_difference / 50, 2)) spawn() throw_at(general_direction, pressure_difference / 10, pressure_difference / 200, null, 0, 0, null) last_forced_movement = air_master.current_cycle diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index eda6c6d2699..fc7fc98e25f 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -26,3 +26,22 @@ //plastic flaps construction states #define PLASTIC_FLAPS_NORMAL 0 #define PLASTIC_FLAPS_DETACHED 1 + +//Material defines, for determining how much of a given material an item contains +#define MAT_METAL "$metal" +#define MAT_GLASS "$glass" +#define MAT_SILVER "$silver" +#define MAT_GOLD "$gold" +#define MAT_DIAMOND "$diamond" +#define MAT_URANIUM "$uranium" +#define MAT_PLASMA "$plasma" +#define MAT_BANANIUM "$bananium" +#define MAT_TRANQUILLITE "$tranquillite" +#define MAT_TITANIUM "$titanium" +#define MAT_BIOMASS "$biomass" +//The amount of materials you get from a sheet of mineral like iron/diamond/glass etc +#define MINERAL_MATERIAL_AMOUNT 2000 +//The maximum size of a stack object. +#define MAX_STACK_SIZE 50 +//maximum amount of cable in a coil +#define MAXCOIL 30 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index c18fb516f4b..b23c5699e4b 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -3,7 +3,7 @@ #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_LAYER 10 // drawing layer for lighting overlays -#define LIGHTING_ICON 'icons/effects/lighting_overlay.png' // icon used for lighting shading effects +#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects #define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index b46427979fb..146d3bf27f0 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -15,8 +15,6 @@ #define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried. #define NETWORK_FAILURE 32 -#define MINERAL_MATERIAL_AMOUNT 2000 //The amount of materials you get from a sheet of mineral like iron/diamond/glass etc - #define IMPRINTER 1 //For circuits. Uses glass/chemicals. #define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals #define AUTOLATHE 4 //Uses glass/metal only. diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 867421d428c..f6cb33eb527 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -162,20 +162,6 @@ #define MIN_SUPPLIED_LAW_NUMBER 15 #define MAX_SUPPLIED_LAW_NUMBER 50 -//Material defines -#define MAT_METAL "$metal" -#define MAT_GLASS "$glass" -#define MAT_SILVER "$silver" -#define MAT_GOLD "$gold" -#define MAT_DIAMOND "$diamond" -#define MAT_URANIUM "$uranium" -#define MAT_PLASMA "$plasma" -#define MAT_BANANIUM "$bananium" -#define MAT_TRANQUILLITE "$tranquillite" -#define MAT_BIOMASS "$biomass" - -#define MAX_STACK_SIZE 50 - //check_target_facings() return defines #define FACING_FAILED 0 #define FACING_SAME_DIR 1 diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 712c57b3b3e..7e131dcaa21 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -2,14 +2,15 @@ #define CHANNEL_LOBBYMUSIC 1024 #define CHANNEL_ADMIN 1023 #define CHANNEL_VOX 1022 -#define CHANNEL_HEARTBEAT 1021 //sound channel for heartbeats -#define CHANNEL_BUZZ 1020 -#define CHANNEL_AMBIENCE 1019 +#define CHANNEL_JUKEBOX 1021 +#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats +#define CHANNEL_BUZZ 1019 +#define CHANNEL_AMBIENCE 1018 //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1018 +#define CHANNEL_HIGHEST_AVAILABLE 1017 #define SOUND_MINIMUM_PRESSURE 10 diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index aa73b686b9d..c0c22872a32 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -116,3 +116,8 @@ var/gaussian_next if(num < 0) return 0 return sqrt(num) + +/proc/round_down(num) + if(round(num) != num) + return round(num--) + else return num \ No newline at end of file diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 6b90ace2489..d6ae4ea9b1b 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -17,19 +17,7 @@ var/church_name = null var/command_name = null /proc/command_name() - if(command_name) - return command_name - - var/name = "Central Command" - - command_name = name - return name - -/proc/change_command_name(var/name) - - command_name = name - - return name + return using_map.dock_name var/religion_name = null /proc/religion_name() @@ -44,20 +32,10 @@ var/religion_name = null return capitalize(name) /proc/system_name() - return "Nyx" + return using_map.starsys_name /proc/station_name() - if(station_name) - return station_name - - var/name = "" - - if(config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = station_name - - return station_name + return using_map.station_name /proc/new_station_name() var/random = rand(1,5) @@ -102,18 +80,6 @@ var/religion_name = null new_station_name += pick("13","XIII","Thirteen") return new_station_name - -/proc/world_name(var/name) - - station_name = name - - if(config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = name - - return name - var/syndicate_name = null /proc/syndicate_name() if(syndicate_name) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 4f9c08a9dc5..ef2f8578783 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -505,6 +505,7 @@ proc/checkhtml(var/t) text = replacetext(text, "\[row\]", "") text = replacetext(text, "\[cell\]", "") text = replacetext(text, "\[logo\]", "") + text = replacetext(text, "\[time\]", "[gameTimestamp()]") // TO DO if(P) text = "[text]" else diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 4b71a2c7162..e4d834a35a0 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -69,4 +69,100 @@ proc/isDay(var/month, var/day) /proc/seconds_to_time(var/seconds as num) var/numSeconds = seconds % 60 var/numMinutes = (seconds - numSeconds) / 60 - return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds." \ No newline at end of file + return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds." + +//Takes a value of time in deciseconds. +//Returns a text value of that number in hours, minutes, or seconds. +/proc/DisplayTimeText(time_value) + var/second = time_value * 0.1 + var/second_adjusted = null + var/second_rounded = FALSE + var/minute = null + var/hour = null + var/day = null + + if(!second) + return "0 seconds" + if(second >= 60) + minute = round_down(second / 60) + second = round(second - (minute * 60), 0.1) + second_rounded = TRUE + if(second) //check if we still have seconds remaining to format, or if everything went into minute. + second_adjusted = round(second) //used to prevent '1 seconds' being shown + if(day || hour || minute) + if(second_adjusted == 1 && second >= 1) + second = " and 1 second" + else if(second > 1) + second = " and [second_adjusted] seconds" + else //shows a fraction if seconds is < 1 + if(second_rounded) //no sense rounding again if it's already done + second = " and [second] seconds" + else + second = " and [round(second, 0.1)] seconds" + else + if(second_adjusted == 1 && second >= 1) + second = "1 second" + else if(second > 1) + second = "[second_adjusted] seconds" + else + if(second_rounded) + second = "[second] seconds" + else + second = "[round(second, 0.1)] seconds" + else + second = null + + if(!minute) + return "[second]" + if(minute >= 60) + hour = round_down(minute / 60,1) + minute = (minute - (hour * 60)) + if(minute) //alot simpler from here since you don't have to worry about fractions + if(minute != 1) + if((day || hour) && second) + minute = ", [minute] minutes" + else if((day || hour) && !second) + minute = " and [minute] minutes" + else + minute = "[minute] minutes" + else + if((day || hour) && second) + minute = ", 1 minute" + else if((day || hour) && !second) + minute = " and 1 minute" + else + minute = "1 minute" + else + minute = null + + if(!hour) + return "[minute][second]" + if(hour >= 24) + day = round_down(hour / 24,1) + hour = (hour - (day * 24)) + if(hour) + if(hour != 1) + if(day && (minute || second)) + hour = ", [hour] hours" + else if(day && (!minute || !second)) + hour = " and [hour] hours" + else + hour = "[hour] hours" + else + if(day && (minute || second)) + hour = ", 1 hour" + else if(day && (!minute || !second)) + hour = " and 1 hour" + else + hour = "1 hour" + else + hour = null + + if(!day) + return "[hour][minute][second]" + if(day > 1) + day = "[day] days" + else + day = "1 day" + + return "[day][hour][minute][second]" \ No newline at end of file diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index 88d4594e740..d26dc711339 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -2,7 +2,6 @@ var/datum/configuration/config = null var/host = null var/join_motd = null -var/station_name = "NSS Cyberiad" var/game_version = "Custom ParaCode" var/changelog_hash = md5('html/changelog.html') //used to check if the CL changed var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) diff --git a/code/datums/cargoprofile.dm b/code/datums/cargoprofile.dm index 4636495489f..310593d0d6b 100644 --- a/code/datums/cargoprofile.dm +++ b/code/datums/cargoprofile.dm @@ -1,4 +1,3 @@ -#define MAXCOIL 30 /datum/cargoprofile var/name = "All Items" var/id = "all" // unique ID for the UI @@ -787,4 +786,3 @@ var/punches = punch(M,remaining / PUNCH_WORK) if(punches>1)master.sleep++ return punches * PUNCH_WORK -#undef MAXCOIL diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index 2ae6da75863..8e31e8ae033 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -40,6 +40,8 @@ materials[MAT_BANANIUM] = new /datum/material/bananium() if(mat_list[MAT_TRANQUILLITE]) materials[MAT_TRANQUILLITE] = new /datum/material/tranquillite() + if(mat_list[MAT_TITANIUM]) + materials[MAT_TITANIUM] = new /datum/material/titanium() /datum/material_container/Destroy() QDEL_LIST_ASSOC_VAL(materials) @@ -276,6 +278,13 @@ material_type = MAT_TRANQUILLITE sheet_type = /obj/item/stack/sheet/mineral/tranquillite +/datum/material/titanium + +/datum/material/titanium/New() + ..() + material_type = MAT_TITANIUM + sheet_type = /obj/item/stack/sheet/mineral/titanium + /datum/material/biomass /datum/material/biomass/New() diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm new file mode 100644 index 00000000000..ea94aa6407b --- /dev/null +++ b/code/datums/mutable_appearance.dm @@ -0,0 +1,13 @@ +// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. +// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. +// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. + +// Mutable appearances are children of images, just so you know. + +// Helper similar to image() +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER) + var/mutable_appearance/MA = new() + MA.icon = icon + MA.icon_state = icon_state + MA.layer = layer + return MA \ No newline at end of file diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index b458b95d8dc..7b6ada9364b 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -76,8 +76,15 @@ return 0 //helper for getting the appropriate health status UPDATED BY PUCKABOO2 TO INCLUDE NEGATIVES. -/proc/RoundHealth(health) - switch(health) +/proc/RoundHealth(mob/living/M) + if(M.stat == DEAD || (M.status_flags & FAKEDEATH)) + return "health-100" //what's our health? it doesn't matter, we're dead, or faking + var/maxi_health = M.maxHealth + if(iscarbon(M) && M.health < 0) + maxi_health = 100 //so crit shows up right for aliens and other high-health carbon mobs; noncarbons don't have crit. + var/resulthealth = (M.health / maxi_health) * 100 + + switch(resulthealth) if(100 to INFINITY) return "health100" if(95 to 100) @@ -138,7 +145,7 @@ //called when a living mob changes health /mob/living/proc/med_hud_set_health() var/image/holder = hud_list[HEALTH_HUD] - holder.icon_state = "hud[RoundHealth(health)]" + holder.icon_state = "hud[RoundHealth(src)]" //called when a carbon changes stat, virus or XENO_HOST diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 54bdaf1b9cf..ba7f91e2c37 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -115,6 +115,7 @@ /mob/living/simple_animal/borer/New(atom/newloc, var/gen=1) ..(newloc) + remove_from_all_data_huds() generation = gen add_language("Cortical Link") notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK) diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 338484a5ebc..caec78f3594 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -53,6 +53,7 @@ var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. var/image/ghostimage = null //Visible to ghost with darkness off + /mob/living/simple_animal/revenant/Life() ..() if(revealed && essence <= 0) @@ -117,6 +118,7 @@ ghostimage = image(src.icon,src,src.icon_state) ghost_darkness_images |= ghostimage updateallghostimages() + remove_from_all_data_huds() spawn(5) if(src.mind) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 25ebd7bc379..416610dd1c2 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -57,6 +57,7 @@ /mob/living/simple_animal/slaughter/New() ..() + remove_from_all_data_huds() var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) whisper_action = new() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 01d4e0ed3a7..ea796011e96 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -264,7 +264,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu if(!location) return 0 - if(istype(location, /turf/simulated/shuttle/floor4)) // Fails traitors if they are in the shuttle brig -- Polymorph + if(istype(location, /turf/simulated/shuttle/floor4) || istype(location, /turf/simulated/floor/mineral/plastitanium/brig)) // Fails traitors if they are in the shuttle brig -- Polymorph return 0 if(location.onCentcom() || location.onSyndieBase()) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 464381f0fa5..8289e8714e3 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -369,6 +369,7 @@ P.name = "paper - 'Security Record'" printing = 0 +/* Removed due to BYOND issue else if(href_list["print_p"]) if(!printing) printing = 1 @@ -377,6 +378,7 @@ if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) create_record_photo(active1) printing = 0 +*/ else if(href_list["printlogs"]) if(cell_logs.len && !printing) @@ -510,6 +512,8 @@ /obj/machinery/computer/secure_data/proc/setTemp(text, list/buttons = list()) temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0) +/* Proc disabled due to BYOND Issue + /obj/machinery/computer/secure_data/proc/create_record_photo(datum/data/record/R) // basically copy-pasted from the camera code but different enough that it has to be redone var/icon/photoimage = get_record_photo(R) @@ -536,6 +540,8 @@ var/obj/item/weapon/photo/PH = new/obj/item/weapon/photo(loc) PH.construct(P) +*/ + /obj/machinery/computer/secure_data/proc/get_record_photo(datum/data/record/R) // similar to the code to make a photo, but of course the actual rendering is completely different var/icon/res = icon('icons/effects/96x96.dmi', "") diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index d50d0355d5c..b29d79f40d8 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -231,7 +231,7 @@ var/specops_shuttle_timeleft = 0 for(var/turf/T in get_area_turfs(end_location) ) var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived to [station_name]. Commence operation!") + to_chat(M, "You have arrived to [station_name()]. Commence operation!") for(var/obj/machinery/computer/specops_shuttle/S in world) S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY @@ -275,8 +275,8 @@ var/specops_shuttle_timeleft = 0 dat = temp else dat += {"
Special Operations Shuttle
- \nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]
- [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
\n
":specops_shuttle_at_station ? "\nShuttle standing by...
\n
":"\nDepart to [station_name]
\n
"] + \nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name()] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]
+ [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*
\n
":specops_shuttle_at_station ? "\nShuttle standing by...
\n
":"\nDepart to [station_name()]
\n
"] \nClose"} user << browse(dat, "window=computer;size=575x450") @@ -318,7 +318,7 @@ var/specops_shuttle_timeleft = 0 to_chat(usr, "The Special Operations shuttle is unable to leave.") return - to_chat(usr, "The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds.") + to_chat(usr, "The Special Operations shuttle will arrive on [station_name()] in [(SPECOPS_MOVETIME/10)] seconds.") temp += "Shuttle departing.

OK" updateUsrDialog() @@ -337,4 +337,4 @@ var/specops_shuttle_timeleft = 0 add_fingerprint(usr) updateUsrDialog() - return \ No newline at end of file + return diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index 14a3fdb72ca..b1a278a8955 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -172,7 +172,7 @@ var/syndicate_elite_shuttle_timeleft = 0 for(var/turf/T in get_area_turfs(end_location) ) var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived to [station_name]. Commence operation!") + to_chat(M, "You have arrived to [station_name()]. Commence operation!") /proc/syndicate_elite_can_move() if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0 @@ -209,8 +209,8 @@ var/syndicate_elite_shuttle_timeleft = 0 dat = temp else dat = {"
Special Operations Shuttle
- \nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]
- [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "\n*The Syndicate Elite shuttle is already leaving.*
\n
":syndicate_elite_shuttle_at_station ? "\nShuttle Offline
\n
":"\nDepart to [station_name]
\n
"] + \nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [station_name()] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]
+ [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "\n*The Syndicate Elite shuttle is already leaving.*
\n
":syndicate_elite_shuttle_at_station ? "\nShuttle Offline
\n
":"\nDepart to [station_name()]
\n
"] \nClose"} user << browse(dat, "window=computer;size=575x450") @@ -237,7 +237,7 @@ var/syndicate_elite_shuttle_timeleft = 0 to_chat(usr, "The Syndicate Elite shuttle is unable to leave.") return - to_chat(usr, "The Syndicate Elite shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.") + to_chat(usr, "The Syndicate Elite shuttle will arrive on [station_name()] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.") temp = "Shuttle departing.

OK" updateUsrDialog() @@ -257,4 +257,4 @@ var/syndicate_elite_shuttle_timeleft = 0 add_fingerprint(usr) updateUsrDialog() - return \ No newline at end of file + return diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm new file mode 100644 index 00000000000..a7ddc648df6 --- /dev/null +++ b/code/game/machinery/dance_machine.dm @@ -0,0 +1,479 @@ +/obj/machinery/disco + name = "radiant dance machine mark IV" + desc = "The first three prototypes were discontinued after mass casualty incidents." + icon = 'icons/obj/lighting.dmi' + icon_state = "disco0" + anchored = FALSE + atom_say_verb = "states" + density = TRUE + var/active = FALSE + var/list/rangers = list() + var/charge = 35 + var/stop = 0 + var/list/spotlights = list() + var/list/sparkles = list() + var/static/list/songs = list( + new /datum/track("Engineering's Basic Beat", 'sound/misc/disco.ogg', 600, 5), + new /datum/track("Engineering's Domination Dance", 'sound/misc/e1m1.ogg', 950, 6), + new /datum/track("Engineering's Superiority Shimmy", 'sound/misc/paradox.ogg', 2400, 4), + new /datum/track("Engineering's Ultimate High-Energy Hustle", 'sound/misc/boogie2.ogg', 1770, 5), + ) + var/datum/track/selection = null + +/datum/track + var/song_name = "generic" + var/song_path = null + var/song_length = 0 + var/song_beat = 0 + var/GBP_required = 0 + +/datum/track/New(name, path, length, beat) + song_name = name + song_path = path + song_length = length + song_beat = beat + +/obj/machinery/disco/proc/add_track(file, name, length, beat) + var/sound/S = file + if(!istype(S)) + return + if(!name) + name = "[file]" + if(!beat) + beat = 5 + if(!length) + length = 2400 //Unless there's a way to discern via BYOND. + var/datum/track/T = new /datum/track(name, file, length, beat) + songs += T + +/obj/machinery/disco/New() + . = ..() + selection = songs[1] + + +/obj/machinery/disco/Destroy() + dance_over() + selection = null + return ..() + +/obj/machinery/disco/attackby(obj/item/O, mob/user, params) + if(!active) + if(iswrench(O)) + if(!anchored && !isinspace()) + to_chat(user,"You secure [src] to the floor.") + anchored = TRUE + else if(anchored) + to_chat(user,"You unsecure and disconnect [src].") + anchored = FALSE + playsound(src, 'sound/items/deconstruct.ogg', 50, 1) + return + return ..() + +/obj/machinery/disco/update_icon() + if(active) + icon_state = "disco1" + else + icon_state = "disco0" + ..() + + +/obj/machinery/disco/attack_hand(mob/user) + if(..()) + return + + interact(user) + +/obj/machinery/disco/interact(mob/user) + if(!anchored) + to_chat(user,"This device must be anchored by a wrench!") + return + if(!Adjacent(user) && !isAI(user)) + return + user.set_machine(src) + var/list/dat = list() + dat +="
" + dat += "[!active ? "BREAK IT DOWN" : "SHUT IT DOWN"]
" + dat += "

" + dat += " Select Track
" + dat += "Track Selected: [selection.song_name]
" + dat += "Track Length: [DisplayTimeText(selection.song_length)]

" + dat += "
DJ's Soundboard:
" + dat +="
" + dat += "Air Horn " + dat += "Station Alert " + dat += "Warning Siren " + dat += "Honk
" + dat += "Shotgun Pump" + dat += "Gunshot" + dat += "Esword" + dat += "Harm Alarm" + var/datum/browser/popup = new(user, "vending", "Radiance Dance Machine - Mark IV", 400, 350) + popup.set_content(dat.Join()) + popup.open() + + +/obj/machinery/disco/Topic(href, href_list) + if(..()) + return + add_fingerprint(usr) + switch(href_list["action"]) + if("toggle") + if(qdeleted(src)) + return + if(!active) + if(stop > world.time) + to_chat(usr, "Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].") + playsound(src, 'sound/misc/compiler-failure.ogg', 50, 1) + return + active = TRUE + update_icon() + dance_setup() + processing_objects.Add(src) + lights_spin() + updateUsrDialog() + else if(active) + stop = 0 + updateUsrDialog() + if("select") + if(active) + to_chat(usr, "Error: You cannot change the song until the current one is over.") + return + + var/list/available = list() + for(var/datum/track/S in songs) + available[S.song_name] = S + var/selected = input(usr, "Choose your song", "Track:") as null|anything in available + if(qdeleted(src) || !selected || !istype(available[selected], /datum/track)) + return + selection = available[selected] + updateUsrDialog() + if("horn") + deejay('sound/items/airhorn2.ogg') + if("alert") + deejay('sound/misc/notice1.ogg') + if("siren") + deejay('sound/machines/engine_alert1.ogg') + if("honk") + deejay('sound/items/bikehorn.ogg') + if("pump") + deejay('sound/weapons/shotgunpump.ogg') + if("pop") + deejay('sound/weapons/gunshot3.ogg') + if("saber") + deejay('sound/weapons/saberon.ogg') + if("harm") + deejay('sound/ai/harmalarm.ogg') + +/obj/machinery/disco/proc/deejay(S) + if(qdeleted(src) || !active || charge < 5) + to_chat(usr, "The device is not able to play more DJ sounds at this time.") + return + charge -= 5 + playsound(src, S, 300, 1) + +/obj/machinery/disco/proc/dance_setup() + stop = world.time + selection.song_length + var/turf/cen = get_turf(src) + FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) + if(t.x == cen.x && t.y > cen.y) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "red" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x == cen.x && t.y < cen.y) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "purple" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x > cen.x && t.y == cen.y) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "#ffff00" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if(t.x < cen.x && t.y == cen.y) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "green" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1+get_dist(src, L) + spotlights+=L + continue + if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "sw" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "ne" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "se" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) + var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t) + L.light_color = "nw" + L.light_power = 30 - (get_dist(src, L) * 8) + L.range = 1.4+get_dist(src, L) + spotlights+=L + continue + continue + END_FOR_DVIEW + +/obj/machinery/disco/proc/hierofunk() + for(var/i in 1 to 10) + new /obj/effect/temp_visual/hierophant/telegraph/edge(get_turf(src)) + sleep(5) + +/obj/machinery/disco/proc/lights_spin() + for(var/i in 1 to 25) + if(qdeleted(src) || !active) + return + var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) + S.alpha = 0 + sparkles += S + switch(i) + if(1 to 8) + spawn(0) + S.orbit(src, 30, TRUE, 60, 36, TRUE, FALSE) + if(9 to 16) + spawn(0) + S.orbit(src, 62, TRUE, 60, 36, TRUE, FALSE) + if(17 to 24) + spawn(0) + S.orbit(src, 95, TRUE, 60, 36, TRUE, FALSE) + if(25) + S.pixel_y = 7 + S.forceMove(get_turf(src)) + sleep(7) + if(selection.song_name == "Engineering's Ultimate High-Energy Hustle") + sleep(280) + for(var/obj/reveal in sparkles) + reveal.alpha = 255 + while(active) + for(var/obj/item/device/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests + if(qdeleted(src) || !active || qdeleted(glow)) + return + if(glow.light_color == "red") + glow.light_color = "nw" + glow.light_power = glow.light_power * 1.48 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "nw") + glow.light_color = "green" + glow.light_range = glow.range * 1.1 + glow.light_power = glow.light_power * 2 // Any changes to power must come in pairs to neutralize it for other colors + glow.update_light() + continue + if(glow.light_color == "green") + glow.light_color = "sw" + glow.light_power = glow.light_power * 0.5 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "sw") + glow.light_color = "purple" + glow.light_power = glow.light_power * 2.27 + glow.light_range = glow.range * 1.15 + glow.update_light() + continue + if(glow.light_color == "purple") + glow.light_color = "se" + glow.light_power = glow.light_power * 0.44 + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "se") + glow.light_color = "#ffff00" + glow.light_range = glow.range * 0.9 + glow.update_light() + continue + if(glow.light_color == "#ffff00") + glow.light_color = "ne" + glow.light_range = 0 + glow.update_light() + continue + if(glow.light_color == "ne") + glow.light_color = "red" + glow.light_power = glow.light_power * 0.68 + glow.light_range = glow.range * 0.85 + glow.update_light() + continue + if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up + INVOKE_ASYNC(src, .proc/hierofunk) + sleep(selection.song_beat) + + +/obj/machinery/disco/proc/dance(mob/living/M) //Show your moves + set waitfor = FALSE + switch(rand(0,9)) + if(0 to 1) + dance2(M) + if(2 to 3) + dance3(M) + if(4 to 6) + dance4(M) + if(7 to 9) + dance5(M) + +/obj/machinery/disco/proc/dance2(mob/living/M) + for(var/i = 1, i < 10, i++) + for(var/d in list(NORTH, SOUTH, EAST, WEST, EAST, SOUTH, NORTH, SOUTH, EAST, WEST, EAST, SOUTH)) + M.setDir(d) + if(i == WEST && !M.incapacitated()) + M.SpinAnimation(7, 1) + sleep(1) + sleep(20) + +/obj/machinery/disco/proc/dance3(mob/living/M) + var/matrix/initial_matrix = matrix(M.transform) + for(var/i in 1 to 75) + if(!M) + return + switch(i) + if(1 to 15) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0, 1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(16 to 30) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(1, -1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(31 to 45) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-1, -1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(46 to 60) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-1, 1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(61 to 75) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(1, 0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + M.setDir(turn(M.dir, 90)) + switch(M.dir) + if(NORTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(SOUTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(EAST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(WEST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + sleep(1) + M.lying_fix() + + +/obj/machinery/disco/proc/dance4(mob/living/M) + var/speed = rand(1, 3) + set waitfor = 0 + var/time = 30 + while(time) + sleep(speed) + for(var/i in 1 to speed) + M.setDir(pick(cardinal)) + M.resting = !M.resting + M.update_canmove() + time-- + +/obj/machinery/disco/proc/dance5(mob/living/M) + animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) + var/matrix/initial_matrix = matrix(M.transform) + for(var/i in 1 to 60) + if(!M) + return + if(i<31) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(i>30) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-1) + animate(M, transform = initial_matrix, time = 1, loop = 0) + M.setDir(turn(M.dir, 90)) + switch(M.dir) + if(NORTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(SOUTH) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(0,-3) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(EAST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + if(WEST) + initial_matrix = matrix(M.transform) + initial_matrix.Translate(-3,0) + animate(M, transform = initial_matrix, time = 1, loop = 0) + sleep(1) + M.lying_fix() + + + +/mob/living/proc/lying_fix() + animate(src, transform = null, time = 1, loop = 0) + lying_prev = 0 + +/obj/machinery/disco/proc/dance_over() + QDEL_LIST(spotlights) + QDEL_LIST(sparkles) + for(var/mob/living/L in rangers) + if(!L || !L.client) + continue + L.stop_sound_channel(CHANNEL_JUKEBOX) + rangers = list() + + + +/obj/machinery/disco/process() + if(charge < 35) + charge += 1 + if(world.time < stop && active) + var/sound/song_played = sound(selection.song_path) + + for(var/mob/M in range(10,src)) + if(!(M in rangers)) + rangers[M] = TRUE + M.playsound_local(get_turf(M), null, 100, channel = CHANNEL_JUKEBOX, S = song_played) + if(prob(5+(allowed(M) * 4)) && M.canmove) + dance(M) + for(var/mob/L in rangers) + if(get_dist(src, L) > 10) + rangers -= L + if(!L || !L.client) + continue + L.stop_sound_channel(CHANNEL_JUKEBOX) + else if(active) + active = FALSE + processing_objects.Remove(src) + dance_over() + playsound(src,'sound/machines/terminal_off.ogg',50,1) + icon_state = "disco0" + stop = world.time + 100 diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 6c1ebccca14..223a3f1d50e 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -234,6 +234,16 @@ opacity = 0 glass = TRUE +/obj/machinery/door/airlock/titanium + name = "shuttle airlock" + assemblytype = /obj/structure/door_assembly/door_assembly_titanium + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + +/obj/machinery/door/airlock/titanium/glass + opacity = 0 + glass = TRUE + ////////////////////////////////// /* Station2 Airlocks @@ -481,9 +491,11 @@ //Terribly sorry for the code doubling, but things go derpy otherwise. /obj/machinery/door/airlock/multi_tile name = "large airlock" + dir = EAST width = 2 icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' assemblytype = "obj/structure/door_assembly/multi_tile" /obj/machinery/door/airlock/multi_tile/narsie_act() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index ee18a81385b..842b08b577c 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -26,7 +26,6 @@ var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. //Multi-tile doors - dir = EAST var/width = 1 /obj/machinery/door/New() diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 059c6268005..270d3a064e4 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -3,6 +3,7 @@ desc = "Heavy duty metal shutters that opens mechanically." icon = 'icons/obj/doors/rapid_pdoor.dmi' icon_state = "shutter1" + dir = EAST /obj/machinery/door/poddoor/shutters/New() ..() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 32c03d22dcd..b9910e00997 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -6,6 +6,7 @@ visible = 0.0 flags = ON_BORDER opacity = 0 + dir = EAST var/obj/item/weapon/airlock_electronics/electronics = null var/base_state = "left" var/health = 150.0 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index f7272e8e29a..a67580d0ebb 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -4,6 +4,7 @@ /datum/feed_message var/author = "" + var/title = "" var/body = "" var/message_type = "Story" var/backup_body = "" @@ -42,8 +43,10 @@ is_admin_channel = 0 total_view_count = 0 -/datum/feed_channel/proc/announce_news() - return "Breaking news from [channel_name]!" +/datum/feed_channel/proc/announce_news(title="") + if(title) + return "Breaking news from [channel_name]: [title]" + return "Breaking news from [channel_name]" /datum/feed_channel/station/announce_news() return "New Station Announcement Available" @@ -87,6 +90,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co // 1 = there has var/scanned_user = "Unknown" //Will contain the name of the person who currently uses the newscaster var/msg = "" //Feed message + var/msg_title = "" // Feed message title var/obj/item/weapon/photo/photo = null var/channel_name = "" //the feed channel which will be receiving the feed, or being created var/c_locked = 0 //Will our new channel be locked to public submissions? @@ -213,6 +217,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(3) data["scanned_user"] = scanned_user data["channel_name"] = channel_name + data["title"] = msg_title data["msg"] = msg data["photo"] = photo ? 1 : 0 if(4) @@ -236,7 +241,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/list/messages = list() data["messages"] = messages for(var/datum/feed_message/M in viewing_channel.messages) - messages[++messages.len] = list("body" = M.body, "img" = M.img ? icon2base64(M.img) : null, "message_type" = M.message_type, "author" = M.author, "view_count" = M.view_count) + messages[++messages.len] = list("title" = M.title, "body" = M.body, "img" = M.img ? icon2base64(M.img) : null, "message_type" = M.message_type, "author" = M.author, "view_count" = M.view_count) if(8, 9) data["channel_name"] = viewing_channel.channel_name data["ref"] = "\ref[viewing_channel]" @@ -247,7 +252,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/list/messages = list() data["messages"] = messages for(var/datum/feed_message/M in viewing_channel.messages) - messages[++messages.len] = list("body" = M.body, "body_redacted" = (M.body == REDACTED ? 1 : 0) , "message_type" = M.message_type, "author" = M.author, "author_redacted" = (M.author == REDACTED ? 1 : 0), "ref" = "\ref[M]", "view_count" = M.view_count) + messages[++messages.len] = list("title" = M.title, "body" = M.body, "body_redacted" = (M.body == REDACTED ? 1 : 0) , "message_type" = M.message_type, "author" = M.author, "author_redacted" = (M.author == REDACTED ? 1 : 0), "ref" = "\ref[M]", "view_count" = M.view_count) if(10) var/wanted_already = 0 var/end_param = 1 @@ -283,9 +288,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co return 1 if(href_list["set_channel_name"]) - channel_name = sanitizeSQL(strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))) - while(findtext(channel_name," ") == 1) - channel_name = copytext(channel_name, 2, lentext(channel_name) + 1) + channel_name = trim(sanitize(strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "")))) else if(href_list["set_channel_lock"]) c_locked = !c_locked @@ -333,10 +336,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co available_channels += F.channel_name channel_name = strip_html_simple(input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels) + else if(href_list["set_message_title"]) + msg_title = trim(strip_html(input(usr, "Write a title for your feed story", "Network Channel Handler", ""))) + msg_title = dd_limittext(msg_title, 256) + else if(href_list["set_new_message"]) - msg = strip_html(input(usr, "Write your feed story", "Network Channel Handler", "")) - while(findtext(msg, " ") == 1) - msg = copytext(msg, 2, lentext(msg) + 1) + msg = trim(strip_html(input(usr, "Write your feed story", "Network Channel Handler", ""))) else if(href_list["set_attachment"]) AttachPhoto(usr) @@ -355,6 +360,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else var/datum/feed_message/newMsg = new /datum/feed_message newMsg.author = scanned_user + newMsg.title = msg_title newMsg.body = msg if(photo) newMsg.img = photo.img @@ -363,7 +369,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co for(var/datum/feed_channel/FC in news_network.network_channels) if(FC.channel_name == channel_name) FC.messages += newMsg //Adding message to the network's appropriate feed_channel - announcement = FC.announce_news() + announcement = FC.announce_news(msg_title) break temp = "Feed story successfully submitted to [channel_name]." temp_back_screen = NEWSCASTER_MAIN @@ -408,14 +414,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co screen = NEWSCASTER_W_ISSUE_H else if(href_list["set_wanted_name"]) - channel_name = strip_html(input(usr, "Provide the name of the wanted person", "Network Security Handler", "")) - while(findtext(channel_name, " ") == 1) - channel_name = copytext(channel_name, 2, lentext(channel_name) + 1) + channel_name = trim(strip_html(input(usr, "Provide the name of the wanted person", "Network Security Handler", ""))) else if(href_list["set_wanted_desc"]) - msg = strip_html(input(usr, "Provide the a description of the wanted person and any other details you deem important", "Network Security Handler", "")) - while(findtext(msg, " ") == 1) - msg = copytext(msg, 2, lentext(msg) + 1) + msg = trim(strip_html(input(usr, "Provide the a description of the wanted person and any other details you deem important", "Network Security Handler", ""))) else if(href_list["submit_wanted"]) var/input_param = text2num(href_list["submit_wanted"]) @@ -534,6 +536,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(screen == NEWSCASTER_MAIN) scanned_user = "Unknown" msg = "" + msg_title = "" c_locked = 0 channel_name = "" viewing_channel = null @@ -687,7 +690,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/i = 0 for(var/datum/feed_message/MESSAGE in C.messages) i++ - dat+="-[MESSAGE.body]
" + dat+="[MESSAGE.title]
" + dat+="[MESSAGE.body]
" if(MESSAGE.img) user << browse_rsc(MESSAGE.img, "tmp_photo[i].png") dat+="
" diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9cf58846feb..43fda1c6e00 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -24,7 +24,7 @@ var/const/SAFETY_COOLDOWN = 100 component_parts += new /obj/item/weapon/circuitboard/recycler(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1, MAT_TRANQUILLITE=1)) + materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1, MAT_TRANQUILLITE=1, MAT_TITANIUM=1)) RefreshParts() update_icon() diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 1cf769624e9..21f22866eb5 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -19,7 +19,8 @@ MAT_GOLD=0, MAT_PLASMA=0, MAT_SILVER=0, - MAT_URANIUM=0 + MAT_URANIUM=0, + MAT_TITANIUM=0 ) var/res_max_amount = 200000 var/datum/research/files @@ -435,6 +436,8 @@ type = /obj/item/stack/sheet/mineral/bananium if(MAT_TRANQUILLITE) type = /obj/item/stack/sheet/mineral/tranquillite + if(MAT_TITANIUM) + type = /obj/item/stack/sheet/mineral/titanium else return 0 var/result = 0 @@ -492,6 +495,8 @@ material = MAT_TRANQUILLITE if(/obj/item/stack/sheet/mineral/uranium) material = MAT_URANIUM + if(/obj/item/stack/sheet/mineral/titanium) + material = MAT_TITANIUM else return ..() diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index a0a4417de4e..830d12cfd12 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -40,6 +40,11 @@ icon = 'icons/misc/beach.dmi' icon_state = "coconuts" +/obj/effect/overlay/sparkles + name = "sparkles" + icon = 'icons/effects/effects.dmi' + icon_state = "shieldsparkles" + /obj/effect/overlay/adminoverlay name = "adminoverlay" icon = 'icons/effects/effects.dmi' diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 61f27730d77..8a82d3cd73a 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -284,3 +284,19 @@ obj/item/device/flashlight/lamp/bananalamp else to_chat(user, "\The [src] needs time to recharge!") return + +/obj/item/device/flashlight/spotlight //invisible lighting source + name = "disco light" + desc = "Groovy..." + icon_state = null + light_color = null + brightness_on = 0 + light_range = 0 + light_power = 10 + alpha = 0 + layer = 0 + on = TRUE + anchored = TRUE + var/range = null + unacidable = TRUE + burn_state = LAVA_PROOF \ No newline at end of file diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 75b2ad94d95..3c9be2c67de 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -1,4 +1,6 @@ /obj/item/flag + name = "flag" + desc = "It's a flag." icon = 'icons/obj/flag.dmi' icon_state = "ntflag" lefthand_file = 'icons/mob/inhands/flags_lefthand.dmi' @@ -6,13 +8,19 @@ w_class = WEIGHT_CLASS_BULKY burntime = 20 burn_state = FLAMMABLE + var/rolled = FALSE /obj/item/flag/attackby(obj/item/weapon/W, mob/user, params) ..() if(is_hot(W) && burn_state != ON_FIRE) - user.visible_message("[user] lights the [name] with [W].") + user.visible_message("[user] lights [src] with [W].", "You light [src] with [W].", "You hear a low whoosh.") fire_act() +/obj/item/flag/attack_self(mob/user) + rolled = !rolled + user.visible_message("[user] [rolled ? "rolls up" : "unfurls"] [src].", "You [rolled ? "roll up" : "unfurl"] [src].", "You hear fabric rustling.") + update_icon() + /obj/item/flag/fire_act(global_overlay = FALSE) ..() update_icon() @@ -23,16 +31,24 @@ /obj/item/flag/update_icon() overlays.Cut() + updateFlagIcon() + item_state = icon_state + if(rolled) + icon_state = "[icon_state]_rolled" if(burn_state == ON_FIRE) + item_state = "[item_state]_fire" + if(burn_state == ON_FIRE && rolled) + overlays += image('icons/obj/flag.dmi', src , "fire_rolled") + else if(burn_state == ON_FIRE && !rolled) overlays += image('icons/obj/flag.dmi', src , "fire") - item_state = "[icon_state]_fire" - else - item_state = initial(icon_state) if(ismob(loc)) var/mob/M = loc M.update_inv_r_hand() M.update_inv_l_hand() +/obj/item/flag/proc/updateFlagIcon() + icon_state = initial(icon_state) + /obj/item/flag/nt name = "Nanotrasen flag" desc = "A flag proudly boasting the logo of NT." @@ -187,11 +203,16 @@ desc = "A poor recreation of the official NT flag. It seems to shimmer a little." icon_state = "ntflag" origin_tech = "syndicate=4;magnets=4" - var/used = 0 + var/updated_icon_state = null + var/used = FALSE + +/obj/item/flag/chameleon/New() + updated_icon_state = icon_state + ..() /obj/item/flag/chameleon/attack_self(mob/user) if(used) - return + return ..() var/list/flag_types = typesof(/obj/item/flag) - list(src.type, /obj/item/flag) var/list/flag = list() @@ -208,12 +229,16 @@ var/obj/item/flag/chosen_flag = flag[input_flag] - if(chosen_flag) + if(chosen_flag && !used) name = chosen_flag.name icon_state = chosen_flag.icon_state + updated_icon_state = icon_state desc = chosen_flag.desc - used = 1 + used = TRUE /obj/item/flag/chameleon/burn() explosion(loc,1,2,4,4, flame_range = 4) qdel(src) + +/obj/item/flag/chameleon/updateFlagIcon() + icon_state = updated_icon_state diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index bc46eb54239..3757faffba9 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -103,9 +103,8 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ ) /obj/item/stack/sheet/mineral - force = 5.0 + force = 5 throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL throw_speed = 3 /obj/item/stack/sheet/mineral/New() @@ -226,6 +225,56 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ ..() recipes = tranquillite_recipes +/* + * Titanium + */ +/obj/item/stack/sheet/mineral/titanium + name = "titanium" + icon_state = "sheet-titanium" + singular_name = "titanium sheet" + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_NORMAL + throw_speed = 1 + throw_range = 3 + sheettype = "titanium" + materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) + +var/global/list/datum/stack_recipe/titanium_recipes = list ( + new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), + ) + +/obj/item/stack/sheet/mineral/titanium/New(loc, amount=null) + recipes = titanium_recipes + ..() + +/obj/item/stack/sheet/mineral/titanium/fifty + amount = 50 + + +/* + * Plastitanium + */ +/obj/item/stack/sheet/mineral/plastitanium + name = "plastitanium" + icon_state = "sheet-plastitanium" + singular_name = "plastitanium sheet" + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_NORMAL + throw_speed = 1 + throw_range = 3 + sheettype = "plastitanium" + materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000) + +var/global/list/datum/stack_recipe/plastitanium_recipes = list ( + new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), + ) + +/obj/item/stack/sheet/mineral/plastitanium/New(loc, amount=null) + recipes = plastitanium_recipes + ..() + /obj/item/stack/sheet/mineral/enruranium name = "enriched uranium" icon_state = "sheet-enruranium" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d2b6bf9ccd1..ccfe2a47c22 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -370,6 +370,7 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \ new/datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plastic fork", /obj/item/weapon/kitchen/utensil/pfork, 1, on_floor = 1), \ new/datum/stack_recipe("plastic spoon", /obj/item/weapon/kitchen/utensil/pspoon, 1, on_floor = 1), \ + new/datum/stack_recipe("plastic spork", /obj/item/weapon/kitchen/utensil/pspork, 1, on_floor = 1), \ new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/knife/plastic, 1, on_floor = 1), \ new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \ new/datum/stack_recipe("bear mould", /obj/item/weapon/kitchen/mould/bear, 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index 8e830f27407..86590026f53 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -111,4 +111,22 @@ var/global/list/datum/stack_recipe/silverfancy_tile_recipes = list ( \ icon_state = "tile_abductor" origin_tech = "materials=6;abductor=1" turf_type = /turf/simulated/floor/mineral/abductor - mineralType = "abductor" \ No newline at end of file + mineralType = "abductor" + +/obj/item/stack/tile/mineral/titanium + name = "titanium tile" + singular_name = "titanium floor tile" + desc = "A tile made of titanium, used for shuttles." + icon_state = "tile_shuttle" + turf_type = /turf/simulated/floor/mineral/titanium + mineralType = "titanium" + materials = list(MAT_TITANIUM=500) + +/obj/item/stack/tile/mineral/plastitanium + name = "plas-titanium tile" + singular_name = "plas-titanium floor tile" + desc = "A tile made of plas-titanium, used for very evil shuttles." + icon_state = "tile_darkshuttle" + turf_type = /turf/simulated/floor/mineral/plastitanium + mineralType = "plastitanium" + materials = list(MAT_TITANIUM=250, MAT_PLASMA=250) \ No newline at end of file diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 2c23c6ae2b0..4979b94eb92 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -209,6 +209,7 @@ force_wielded = 0 origin_tech = null attack_verb = list("attacked", "struck", "hit") + brightness_on = 0 /obj/item/weapon/twohanded/dualsaber/toy/hit_reaction() return 0 diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 13b0f0b8140..fb10c7cedc2 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -1,70 +1,6 @@ //improvised explosives// -//iedcasing assembly crafting// -/obj/item/weapon/reagent_containers/food/drinks/cans/attackby(var/obj/item/I, mob/user as mob) - if(istype(I, /obj/item/device/assembly/igniter)) - var/obj/item/device/assembly/igniter/G = I - var/obj/item/weapon/grenade/iedcasing/W = new /obj/item/weapon/grenade/iedcasing - user.unEquip(G) - user.unEquip(src) - user.put_in_hands(W) - to_chat(user, "You stuff the [I] in the [src], emptying the contents beforehand.") - W.underlays += image(src.icon, icon_state = src.icon_state) - qdel(I) - qdel(src) - - /obj/item/weapon/grenade/iedcasing - name = "improvised explosive assembly" - desc = "An igniter stuffed into an aluminum shell." - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "improvised_grenade" - item_state = "flashbang" - throw_speed = 3 - throw_range = 7 - flags = CONDUCT - slot_flags = SLOT_BELT - var/assembled = 0 - active = 1 - det_time = 50 - display_timer = 0 - var/range = 3 - var/times = list() - - - -/obj/item/weapon/grenade/iedcasing/afterattack(atom/target, mob/user , flag) //Filling up the can - if(assembled == 0) - if( istype(target, /obj/structure/reagent_dispensers/fueltank)) - if(target.reagents.total_volume < 50) - to_chat(user, "There's not enough fuel left to work with.") - return - var/obj/structure/reagent_dispensers/fueltank/F = target - F.reagents.remove_reagent("fuel", 50, 1)//Deleting 50 fuel from the welding fuel tank, - assembled = 1 - to_chat(user, "You've filled the makeshift explosive with welding fuel.") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - desc = "An improvised explosive assembly. Filled to the brim with 'Explosive flavor'" - overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") - return - - -/obj/item/weapon/grenade/iedcasing/attackby(var/obj/item/I, mob/user as mob) //Wiring the can for ignition - if(istype(I, /obj/item/stack/cable_coil)) - if(assembled == 1) - var/obj/item/stack/cable_coil/C = I - C.use(1) - assembled = 2 - to_chat(user, "You wire the igniter to detonate the fuel.") - desc = "A weak, improvised explosive." - overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired") - name = "improvised explosive" - active = 0 - det_time = rand(30,80) - - -/obj/item/weapon/grenade/iedcasing/filled name = "improvised firebomb" desc = "A weak, improvised incendiary device." w_class = WEIGHT_CLASS_SMALL @@ -77,53 +13,53 @@ slot_flags = SLOT_BELT active = 0 det_time = 50 - assembled = 2 + display_timer = 0 + var/list/times - - -/obj/item/weapon/grenade/iedcasing/filled/New(loc) +/obj/item/weapon/grenade/iedcasing/New() ..() - overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") - overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired") - times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] + overlays += "improvised_grenade_filled" + overlays += "improvised_grenade_wired" + times = list("5" = 10, "-1" = 20, "[rand(30, 80)]" = 50, "[rand(65, 180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] det_time = text2num(pickweight(times)) if(det_time < 0) //checking for 'duds' - range = 1 det_time = rand(30,80) - else - range = pick(2,2,2,3,3,3,4) /obj/item/weapon/grenade/iedcasing/CheckParts(list/parts_list) ..() var/obj/item/weapon/reagent_containers/food/drinks/cans/can = locate() in contents if(can) - underlays += can + can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED + can.pixel_y = 0 + var/mutable_appearance/can_underlay = new(can) + can_underlay.layer = FLOAT_LAYER + can_underlay.plane = FLOAT_PLANE + underlays += can_underlay -/obj/item/weapon/grenade/iedcasing/attack_self(mob/user as mob) // +/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) // if(!active) if(clown_check(user)) to_chat(user, "You light the [name]!") - active = 1 - overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") + active = TRUE + overlays -= "improvised_grenade_filled" icon_state = initial(icon_state) + "_active" add_fingerprint(user) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - message_admins("[key_name_admin(usr)] has primed a [name] for detonation at [A.name] (JMP)") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])") + message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].") + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() - spawn(det_time) - prime() + addtimer(src, "prime", det_time) /obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up update_mob() - explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball. + explosion(loc, -1, -1, 2, flame_range = 4) // small explosion, plus a very large fireball. qdel(src) /obj/item/weapon/grenade/iedcasing/examine(mob/user) - ..(user) + ..() to_chat(user, "You can't tell when it will explode!") diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 0b7850bba1f..24bcb7a8c2c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -29,7 +29,7 @@ if(ishuman(C)) var/mob/living/carbon/human/H = C - if(!(H.get_organ("l_hand") || H.get_organ("r_hand"))) + if(!H.has_left_hand() || !H.has_right_hand()) to_chat(user, "How do you suggest handcuffing someone with no hands?") return diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 4bf40a3ae15..c2067935ee6 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -82,6 +82,18 @@ icon_state = "pspoon" attack_verb = list("attacked", "poked") +/obj/item/weapon/kitchen/utensil/spork + name = "spork" + desc = "It's a spork. Marvel at its innovative design." + icon_state = "spork" + attack_verb = list("attacked", "sporked") + +/obj/item/weapon/kitchen/utensil/pspork + name = "plastic spork" + desc = "It's a plastic spork. It's the fork side of the spoon!" + icon_state = "pspork" + attack_verb = list("attacked", "sporked") + /* * Knives */ diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index 21845a47515..21d8828310f 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -52,23 +52,12 @@ if(sig) to_chat(user, "This beartrap already has a signaler hooked up to it!") return - IED = I - switch(IED.assembled) - if(0,1) //if it's not fueled/hooked up - to_chat(user, "You haven't prepared this IED yet!") - IED = null - return - if(2,3) - user.drop_item() - I.forceMove(src) - message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.") - log_game("[key_name(user)] has rigged a beartrap with an IED.") - to_chat(user, "You sneak the [IED] underneath the pressure plate and connect the trigger wire.") - desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." - else - to_chat(user, "You shouldn't be reading this message! Contact a coder or someone, something broke!") - IED = null - return + user.drop_item() + I.forceMove(src) + message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.") + log_game("[key_name(user)] has rigged a beartrap with an IED.") + to_chat(user, "You sneak [IED] underneath the pressure plate and connect the trigger wire.") + desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." if(istype(I, /obj/item/device/assembly/signaler)) if(IED) to_chat(user, "This beartrap already has an IED hooked up to it!") @@ -110,9 +99,6 @@ if(IED && isturf(src.loc)) IED.active = 1 - IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") - IED.icon_state = initial(icon_state) + "_active" - IED.assembled = 3 message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].") log_game("[key_name(usr)] has triggered an IED-rigged [name].") spawn(IED.det_time) @@ -127,7 +113,7 @@ H.apply_damage(trap_damage, BRUTE,"chest") else H.apply_damage(trap_damage, BRUTE,(pick("l_leg", "r_leg"))) - if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs. + if(!H.legcuffed && H.get_num_legs() >= 2) //beartrap can't cuff you leg if there's already a beartrap or legcuffs. H.legcuffed = src forceMove(H) H.update_inv_legcuffed() diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 1c4ff92708a..16b8d302c7f 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -9,7 +9,10 @@ hitsound = 'sound/weapons/blade1.ogg' // Probably more appropriate than the previous hitsound. -- Dave usesound = 'sound/weapons/blade1.ogg' toolspeed = 1 - + light_power = 2 + var/brightness_on = 2 + var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE) + /obj/item/weapon/melee/energy/suicide_act(mob/user) user.visible_message(pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.")) @@ -29,8 +32,10 @@ attack_verb = attack_verb_on if(!item_color) icon_state = icon_state_on + set_light(brightness_on) else icon_state = "sword[item_color]" + set_light(brightness_on, l_color=colormap[item_color]) w_class = w_class_on playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness to_chat(user, "[src] is now active.") @@ -44,6 +49,7 @@ icon_state = initial(icon_state) w_class = initial(w_class) playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness + set_light(0) to_chat(user, "[src] can now be concealed.") if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -71,6 +77,7 @@ attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") attack_verb_on = list() sharp = 1 + light_color = LIGHT_COLOR_WHITE /obj/item/weapon/melee/energy/axe/suicide_act(mob/user) user.visible_message("[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide.") @@ -92,7 +99,6 @@ block_chance = 50 sharp = 1 var/hacked = 0 - var/blade_color /obj/item/weapon/melee/energy/sword/New() if(item_color == null) @@ -129,6 +135,7 @@ hitcost = 75 //Costs more than a standard cyborg esword item_color = null w_class = WEIGHT_CLASS_NORMAL + light_color = LIGHT_COLOR_WHITE /obj/item/weapon/melee/energy/sword/cyborg/saw/New() ..() @@ -192,6 +199,7 @@ desc = "Arrrr matey." icon_state = "cutlass0" icon_state_on = "cutlass1" + light_color = LIGHT_COLOR_RED /obj/item/weapon/melee/energy/sword/pirate/New() return @@ -224,4 +232,4 @@ name = "hardlight blade" desc = "An extremely sharp blade made out of hard light. Packs quite a punch." icon_state = "lightblade" - item_state = "lightblade" \ No newline at end of file + item_state = "lightblade" diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 22c4acbf098..31ba83fc444 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -58,7 +58,7 @@ icon_state = "drill_bolt" item_state = "drill" usesound = 'sound/items/drill_use.ogg' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change throwforce = 8 @@ -180,7 +180,7 @@ desc = "A simple hand drill with a screwdriver bit attached." icon_state = "drill_screw" item_state = "drill" - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change throwforce = 8 @@ -276,7 +276,7 @@ icon_state = "jaws_cutter" item_state = "jawsoflife" origin_tech = "materials=2;engineering=2" - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.25 @@ -691,7 +691,7 @@ obj/item/weapon/weldingtool/experimental/process() desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a prying head." icon_state = "jaws_pry" item_state = "jawsoflife" - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_DIAMOND=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) origin_tech = "materials=2;engineering=2" usesound = 'sound/items/jaws_pry.ogg' force = 15 diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 5d1755dc9d3..96628da9a26 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -208,15 +208,21 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 sharp = 1 + light_power = 2 + var/brightness_on = 2 + var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE) /obj/item/weapon/twohanded/dualsaber/New() - blade_color = pick("red", "blue", "green", "purple") + if(!blade_color) + blade_color = pick("red", "blue", "green", "purple") /obj/item/weapon/twohanded/dualsaber/update_icon() if(wielded) icon_state = "dualsaber[blade_color][wielded]" + set_light(brightness_on, l_color=colormap[blade_color]) else icon_state = "dualsaber0" + set_light(0) /obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob) if(HULK in user.mutations) @@ -239,16 +245,16 @@ return ..() return 0 -/obj/item/weapon/twohanded/dualsaber/green/New() +/obj/item/weapon/twohanded/dualsaber/green blade_color = "green" -/obj/item/weapon/twohanded/dualsaber/red/New() +/obj/item/weapon/twohanded/dualsaber/red blade_color = "red" -/obj/item/weapon/twohanded/dualsaber/purple/New() +/obj/item/weapon/twohanded/dualsaber/purple blade_color = "purple" -/obj/item/weapon/twohanded/dualsaber/blue/New() +/obj/item/weapon/twohanded/dualsaber/blue blade_color = "blue" /obj/item/weapon/twohanded/dualsaber/unwield() diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 5b26b46eacd..b93ad13c98c 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -100,6 +100,14 @@ if(pickednum >= 40) new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max)) + //Titanium (rare ore) + if(pickednum >= 40) + new /obj/item/stack/sheet/mineral/titanium(src, rand(rare_min, rare_max)) + + //Plastitanium (rare ore) + if(pickednum >= 40) + new /obj/item/stack/sheet/mineral/plastitanium(src, rand(rare_min, rare_max)) + //Diamond (rare HONK) if(pickednum >= 45) new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max)) @@ -122,6 +130,8 @@ /obj/item/stack/sheet/mineral/uranium, /obj/item/stack/sheet/mineral/diamond, /obj/item/stack/sheet/mineral/bananium, + /obj/item/stack/sheet/mineral/titanium, + /obj/item/stack/sheet/mineral/plastitanium, /obj/item/stack/sheet/plasteel, /obj/item/stack/rods ) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index d0aacb78d53..2475e9e1b4d 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -246,6 +246,15 @@ mineral = "sandstone" glass_type = /obj/machinery/door/airlock/sandstone/glass +/obj/structure/door_assembly/door_assembly_titanium + name = "titanium airlock assembly" + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + base_name = "shuttle airlock" + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + glass_type = /obj/machinery/door/airlock/titanium/glass + airlock_type = /obj/machinery/door/airlock/titanium + mineral = "titanium" + /obj/structure/door_assembly/door_assembly_wood name = "wooden airlock assembly" icon = 'icons/obj/doors/airlocks/station/wood.dmi' diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index aa661e57aa8..e318dd6f289 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -80,9 +80,9 @@ /obj/structure/falsewall/update_icon() if(density) + icon_state = initial(icon_state) smooth = SMOOTH_TRUE smooth_icon(src) - icon_state = "" else icon_state = "fwall_open" @@ -304,4 +304,22 @@ icon_state = "abductor" mineral = "abductor" walltype = "abductor" - canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/simulated/wall/mineral/abductor) \ No newline at end of file + canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/simulated/wall/mineral/abductor) + +/obj/structure/falsewall/titanium + desc = "A light-weight titanium wall used in shuttles." + icon = 'icons/turf/walls/shuttle_wall.dmi' + icon_state = "shuttle" + mineral = /obj/item/stack/sheet/mineral/titanium + walltype = /turf/simulated/wall/mineral/titanium + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/simulated/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater) + +/obj/structure/falsewall/plastitanium + desc = "An evil wall of plasma and titanium." + icon = 'icons/turf/walls/plastitanium_wall.dmi' + icon_state = "shuttle" + mineral = /obj/item/stack/sheet/mineral/plastitanium + walltype = /turf/simulated/wall/mineral/plastitanium + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater) \ No newline at end of file diff --git a/code/game/objects/structures/fullwindow.dm b/code/game/objects/structures/fullwindow.dm index f9e8adbf9aa..f2663063dea 100644 --- a/code/game/objects/structures/fullwindow.dm +++ b/code/game/objects/structures/fullwindow.dm @@ -94,6 +94,7 @@ basestate = "window" health = 160 reinf = 1 + explosion_block = 3 /obj/structure/window/full/shuttle/New() ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 8e148d75eb5..9c8624df444 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -39,9 +39,7 @@ if(ishuman(buckled_mob)) var/mob/living/carbon/human/driver = user - var/obj/item/organ/external/l_hand = driver.get_organ("l_hand") - var/obj/item/organ/external/r_hand = driver.get_organ("r_hand") - if(!l_hand && !r_hand) + if(!driver.has_left_hand() && !driver.has_right_hand()) return 0 // No hands to drive your chair? Tough luck! for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm")) diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index e66d4383407..218599f9e9d 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -6,6 +6,7 @@ * Bananium floor * Diamond floor * Uranium floor + * Shuttle floor (Titanium) */ /turf/simulated/floor/mineral @@ -76,6 +77,61 @@ floor_tile = /obj/item/stack/tile/mineral/silver/fancy icons = list("silverfancy","silverfancy_dam") +//TITANIUM (shuttle) + +/turf/simulated/floor/mineral/titanium/blue + icon_state = "shuttlefloor" + icons = list("shuttlefloor","shuttlefloor_dam") + +/turf/simulated/floor/mineral/titanium/blue/airless + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + +/turf/simulated/floor/mineral/titanium/yellow + icon_state = "shuttlefloor2" + icons = list("shuttlefloor2","shuttlefloor2_dam") + +/turf/simulated/floor/mineral/titanium/yellow/airless + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + +/turf/simulated/floor/mineral/titanium + name = "shuttle floor" + icon_state = "shuttlefloor3" + floor_tile = /obj/item/stack/tile/mineral/titanium + icons = list("shuttlefloor3","shuttlefloor3_dam") + +/turf/simulated/floor/mineral/titanium/airless + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + +/turf/simulated/floor/mineral/titanium/purple + icon_state = "shuttlefloor5" + icons = list("shuttlefloor5","shuttlefloor5_dam") + +/turf/simulated/floor/mineral/titanium/purple/airless + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + +//PLASTITANIUM (syndieshuttle) +/turf/simulated/floor/mineral/plastitanium + name = "shuttle floor" + icon_state = "shuttlefloor4" + floor_tile = /obj/item/stack/tile/mineral/plastitanium + icons = list("shuttlefloor4","shuttlefloor4_dam") + +/turf/simulated/floor/mineral/plastitanium/airless + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + +/turf/simulated/floor/mineral/plastitanium/brig + name = "brig floor" + //BANANIUM /turf/simulated/floor/mineral/bananium name = "bananium floor" diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index d2db056e824..80ce5f842be 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -156,4 +156,111 @@ smooth = SMOOTH_TRUE|SMOOTH_DIAGONAL sheet_type = /obj/item/stack/sheet/mineral/abductor explosion_block = 3 - canSmoothWith = list(/turf/simulated/wall/mineral/abductor, /obj/structure/falsewall/abductor) \ No newline at end of file + canSmoothWith = list(/turf/simulated/wall/mineral/abductor, /obj/structure/falsewall/abductor) + +/////////////////////Titanium walls///////////////////// + +/turf/simulated/wall/mineral/titanium //has to use this path due to how building walls works + name = "wall" + desc = "A light-weight titanium wall used in shuttles." + icon = 'icons/turf/walls/shuttle_wall.dmi' + icon_state = "map-shuttle" + explosion_block = 3 + sheet_type = /obj/item/stack/sheet/mineral/titanium + smooth = SMOOTH_MORE|SMOOTH_DIAGONAL + canSmoothWith = list(/turf/simulated/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) + +/turf/simulated/wall/mineral/titanium/nodiagonal + smooth = SMOOTH_MORE + icon_state = "map-shuttle_nd" + +/turf/simulated/wall/mineral/titanium/nosmooth + icon = 'icons/turf/shuttle.dmi' + icon_state = "wall" + smooth = SMOOTH_FALSE + +/turf/simulated/wall/mineral/titanium/overspace + icon_state = "map-overspace" + fixed_underlay = list("space"=1) + +//sub-type to be used for interior shuttle walls +//won't get an underlay of the destination turf on shuttle move +/turf/simulated/wall/mineral/titanium/interior/copyTurf(turf/T) + if(T.type != type) + T.ChangeTurf(type) + if(underlays.len) + T.underlays = underlays + if(T.icon_state != icon_state) + T.icon_state = icon_state + if(T.icon != icon) + T.icon = icon + if(T.color != color) + T.color = color + if(T.dir != dir) + T.dir = dir + T.transform = transform + return T + +/turf/simulated/wall/mineral/titanium/copyTurf(turf/T) + . = ..() + T.transform = transform + +/turf/simulated/wall/mineral/titanium/survival + name = "pod wall" + desc = "An easily-compressable wall used for temporary shelter." + icon = 'icons/turf/walls/survival_pod_walls.dmi' + icon_state = "smooth" + smooth = SMOOTH_MORE|SMOOTH_DIAGONAL + canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock, /obj/structure/window/full, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine) + +/turf/simulated/wall/mineral/titanium/survival/nodiagonal + smooth = SMOOTH_MORE + +/turf/simulated/wall/mineral/titanium/survival/pod + canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod) + +/////////////////////Plastitanium walls///////////////////// + +/turf/simulated/wall/mineral/plastitanium + name = "wall" + desc = "An evil wall of plasma and titanium." + icon = 'icons/turf/walls/plastitanium_wall.dmi' + icon_state = "map-shuttle" + explosion_block = 4 + sheet_type = /obj/item/stack/sheet/mineral/plastitanium + smooth = SMOOTH_MORE|SMOOTH_DIAGONAL + canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium) + +/turf/simulated/wall/mineral/plastitanium/nodiagonal + smooth = SMOOTH_MORE + icon_state = "map-shuttle_nd" + +/turf/simulated/wall/mineral/plastitanium/nosmooth + icon = 'icons/turf/shuttle.dmi' + icon_state = "wall" + smooth = SMOOTH_FALSE + +/turf/simulated/wall/mineral/plastitanium/overspace + icon_state = "map-overspace" + fixed_underlay = list("space"=1) + +//have to copypaste this code +/turf/simulated/wall/mineral/plastitanium/interior/copyTurf(turf/T) + if(T.type != type) + T.ChangeTurf(type) + if(underlays.len) + T.underlays = underlays + if(T.icon_state != icon_state) + T.icon_state = icon_state + if(T.icon != icon) + T.icon = icon + if(T.color != color) + T.color = color + if(T.dir != dir) + T.dir = dir + T.transform = transform + return T + +/turf/simulated/wall/mineral/plastitanium/copyTurf(turf/T) + . = ..() + T.transform = transform \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 3fbcf39ed08..4e7093bf5cf 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -16,7 +16,7 @@ /datum/crafting_recipe/IED name = "IED" - result = /obj/item/weapon/grenade/iedcasing/filled + result = /obj/item/weapon/grenade/iedcasing reqs = list(/datum/reagent/fuel = 50, /obj/item/stack/cable_coil = 1, /obj/item/device/assembly/igniter = 1, diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 0b5b2171f86..f80a58f7fba 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -43,6 +43,9 @@ /obj/item/weapon/reagent_containers/food/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! var/mob/living/carbon/chugger = over_object + if (!(flags & OPENCONTAINER)) + to_chat(chugger, "You need to open [src] first!") + return if(istype(chugger) && loc == chugger && src == chugger.get_active_hand() && reagents.total_volume) chugger.visible_message("[chugger] raises the [src] to their mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!", "You start chugging \the [src].", "You hear what sounds like gulping.") while(do_mob(chugger, chugger, 40)) //Between the default time for do_mob and the time it takes for a vampire to suck blood. diff --git a/code/modules/holiday/holiday.dm b/code/modules/holiday/holiday.dm index 85162a75c2d..414df7f7589 100644 --- a/code/modules/holiday/holiday.dm +++ b/code/modules/holiday/holiday.dm @@ -349,10 +349,8 @@ holiday_master.holidays = list() holiday_master.holidays[H.name] = H - station_name = null - station_name() //update our hub status world.update_status() message_admins("ADMIN: Event: [key_name_admin(src)] force-set Holiday to \"[H]\"") - log_admin("[key_name(src)] force-set Holiday to \"[H]\"") \ No newline at end of file + log_admin("[key_name(src)] force-set Holiday to \"[H]\"") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 700803792e2..3d3ce0aa613 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -19,7 +19,7 @@ var/ore_pickup_rate = 15 var/sheet_per_ore = 1 var/point_upgrade = 1 - var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60)) + var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("titanium" = 30), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60)) var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold")) speed_process = 1 @@ -175,17 +175,28 @@ dat += "
" //just looks nicer dat += text("[capitalize(s.name)]: [s.amount] Release
") - if((/obj/item/stack/sheet/metal in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list)) - var/obj/item/stack/sheet/metalstack = stack_list[/obj/item/stack/sheet/metal] - var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] - if(min(metalstack.amount, plasmastack.amount)) - dat += text("Plasteel Alloy (Metal + Plasma): Smelt
") - if((/obj/item/stack/sheet/glass in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list)) - var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass] - var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] - if(min(glassstack.amount, plasmastack.amount)) - dat += "Plasma Glass (Glass + Plasma): Smelt
" + var/obj/item/stack/sheet/metalstack + if(/obj/item/stack/sheet/metal in stack_list) + metalstack = stack_list[/obj/item/stack/sheet/metal] + var/obj/item/stack/sheet/glass/glassstack + if(/obj/item/stack/sheet/glass in stack_list) + glassstack = stack_list[/obj/item/stack/sheet/glass] + + var/obj/item/stack/sheet/plasmastack + if((/obj/item/stack/sheet/mineral/plasma in stack_list)) + plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] + + var/obj/item/stack/sheet/mineral/titaniumstack + if((/obj/item/stack/sheet/mineral/titanium in stack_list)) + titaniumstack = stack_list[/obj/item/stack/sheet/mineral/titanium] + + if(metalstack && plasmastack && min(metalstack.amount, plasmastack.amount)) + dat += text("Plasteel Alloy (Metal + Plasma): Smelt
") + if(titaniumstack && plasmastack && min(titaniumstack.amount, plasmastack.amount)) + dat += text("Plastitanium Alloy (Titanium + Plasma): Smelt
") + if(glassstack && plasmastack && min(glassstack.amount, plasmastack.amount)) + dat += text("Plasma Glass (Glass + Plasma): Smelt
") dat += text("
Mineral Value List:
[get_ore_values()]
") var/datum/browser/popup = new(user, "console_stacking_machine", "Ore Redemption Machine", 400, 500) @@ -242,37 +253,24 @@ else to_chat(usr, "Required access not found.") - if(href_list["plasteel"]) + if(href_list["alloytype1"] && href_list["alloytype2"] && href_list["alloytypeout"]) + var/alloytype1 = text2path(href_list["alloytype1"]) + var/alloytype2 = text2path(href_list["alloytype2"]) + var/alloytypeout = text2path(href_list["alloytypeout"]) if(check_access(inserted_id) || allowed(usr)) - if(!(/obj/item/stack/sheet/metal in stack_list)) return - if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return - var/obj/item/stack/sheet/metalstack = stack_list[/obj/item/stack/sheet/metal] - var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] - + if(!(alloytype1 in stack_list)) + return + if(!(alloytype2 in stack_list)) + return + var/obj/item/stack/sheet/stack1 = stack_list[alloytype1] + var/obj/item/stack/sheet/stack2 = stack_list[alloytype2] var/desired = input("How much?", "How much would you like to smelt?", 1) as num - var/obj/item/stack/sheet/plasteel/plasteelout = new - plasteelout.amount = round(min(desired,50,metalstack.amount,plasmastack.amount)) - if(plasteelout.amount >= 1) - metalstack.amount -= plasteelout.amount - plasmastack.amount -= plasteelout.amount - unload_mineral(plasteelout) - else - to_chat(usr, "Required access not found.") - - if(href_list["plasglass"]) - if(check_access(inserted_id) || allowed(usr)) - if(!(/obj/item/stack/sheet/glass in stack_list)) return - if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return - var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass] - var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] - - var/desired = input("How much?", "How much would you like to smelt?", 1) as num - var/obj/item/stack/sheet/plasmaglass/plasglassout = new - plasglassout.amount = round(min(desired, 50, glassstack.amount, plasmastack.amount)) - if(plasglassout.amount >= 1) - glassstack.amount -= plasglassout.amount - plasmastack.amount -= plasglassout.amount - unload_mineral(plasglassout) + var/obj/item/stack/sheet/alloyout = new alloytypeout + alloyout.amount = round(min(desired,50,stack1.amount,stack2.amount)) + if(alloyout.amount >= 1) + stack1.amount -= alloyout.amount + stack2.amount -= alloyout.amount + unload_mineral(alloyout) else to_chat(usr, "Required access not found.") updateUsrDialog() diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 212e8488ac8..4fe8edbe7f6 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -25,93 +25,102 @@ if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_mime || machine.ore_adamantine) if(machine.ore_iron) if(machine.selected_iron==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Iron: [machine.ore_iron]
") + dat += "Not smelting " + dat += "Iron: [machine.ore_iron]
" else machine.selected_iron = 0 //sand - glass if(machine.ore_glass) if(machine.selected_glass==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Sand: [machine.ore_glass]
") + dat += "Not smelting " + dat += "Sand: [machine.ore_glass]
" else machine.selected_glass = 0 //plasma if(machine.ore_plasma) if(machine.selected_plasma==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Plasma: [machine.ore_plasma]
") + dat += "Not smelting " + dat += "Plasma: [machine.ore_plasma]
" else machine.selected_plasma = 0 //uranium if(machine.ore_uranium) if(machine.selected_uranium==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Uranium: [machine.ore_uranium]
") + dat += "Not smelting " + dat += "Uranium: [machine.ore_uranium]
" else machine.selected_uranium = 0 //gold if(machine.ore_gold) if(machine.selected_gold==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Gold: [machine.ore_gold]
") + dat += "Not smelting " + dat += "Gold: [machine.ore_gold]
" else machine.selected_gold = 0 //silver if(machine.ore_silver) if(machine.selected_silver==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Silver: [machine.ore_silver]
") + dat += "Not smelting " + dat += "Silver: [machine.ore_silver]
" else machine.selected_silver = 0 //diamond if(machine.ore_diamond) if(machine.selected_diamond==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Diamond: [machine.ore_diamond]
") + dat += "Not smelting " + dat += "Diamond: [machine.ore_diamond]
" else machine.selected_diamond = 0 //bananium if(machine.ore_clown) if(machine.selected_clown==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Bananium: [machine.ore_clown]
") + dat += "Not smelting " + dat += "Bananium: [machine.ore_clown]
" else machine.selected_clown = 0 //tranquillite if(machine.ore_mime) if(machine.selected_mime==1) - dat += text("Smelting ") + dat += "Smelting " else - dat += text("Not smelting ") - dat += text("Tranquillite: [machine.ore_mime]
") + dat += "Not smelting " + dat += "Tranquillite: [machine.ore_mime]
" else machine.selected_mime = 0 + //titanium + if(machine.ore_titanium) + if (machine.selected_titanium==1) + dat += "Smelting " + else + dat += "Not smelting " + dat += "Titanium: [machine.ore_titanium]
" + else + machine.selected_titanium = 0 //On or off dat += text("Machine is currently ") @@ -175,6 +184,11 @@ machine.selected_mime = 1 else machine.selected_mime = 0 + if(href_list["sel_titanium"]) + if (href_list["sel_titanium"] == "yes") + machine.selected_titanium = 1 + else + machine.selected_titanium = 0 if(href_list["set_on"]) if(href_list["set_on"] == "on") machine.on = 1 @@ -203,6 +217,7 @@ var/ore_clown = 0 var/ore_mime = 0 var/ore_adamantine = 0 + var/ore_titanium = 0 var/selected_gold = 0 var/selected_silver = 0 var/selected_diamond = 0 @@ -212,92 +227,106 @@ var/selected_iron = 0 var/selected_clown = 0 var/selected_mime = 0 + var/selected_titanium = 0 var/on = 0 //0 = off, 1 =... oh you know! /obj/machinery/mineral/processing_unit/process() - var/i - for(i = 0; i < 10; i++) + for(var/i in 1 to 10) if(on) - if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_glass > 0) - ore_glass--; + ore_glass-- generate_mineral(/obj/item/stack/sheet/glass) else on = 0 continue - if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime) if(ore_glass > 0 && ore_iron > 0) - ore_glass--; - ore_iron--; + ore_glass-- + ore_iron-- generate_mineral(/obj/item/stack/sheet/rglass) else on = 0 continue - if(selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_gold > 0) - ore_gold--; + ore_gold-- generate_mineral(/obj/item/stack/sheet/mineral/gold) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_silver > 0) - ore_silver--; + ore_silver-- generate_mineral(/obj/item/stack/sheet/mineral/silver) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_diamond > 0) - ore_diamond--; + ore_diamond-- generate_mineral(/obj/item/stack/sheet/mineral/diamond) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_plasma > 0) - ore_plasma--; + ore_plasma-- generate_mineral(/obj/item/stack/sheet/mineral/plasma) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && selected_uranium && !selected_iron && !selected_clown && !selected_mime) if(ore_uranium > 0) - ore_uranium--; + ore_uranium-- generate_mineral(/obj/item/stack/sheet/mineral/uranium) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime) if(ore_iron > 0) - ore_iron--; + ore_iron-- generate_mineral(/obj/item/stack/sheet/metal) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime) if(ore_iron > 0 && ore_plasma > 0) - ore_iron--; - ore_plasma--; + ore_iron-- + ore_plasma-- generate_mineral(/obj/item/stack/sheet/plasteel) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1 && selected_mime == 0) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && selected_clown && !selected_mime) if(ore_clown > 0) - ore_clown--; + ore_clown-- generate_mineral(/obj/item/stack/sheet/mineral/bananium) else on = 0 continue - if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 1) + if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && selected_mime) if(ore_mime > 0) - ore_mime--; + ore_mime-- generate_mineral(/obj/item/stack/sheet/mineral/tranquillite) else on = 0 continue - + if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium) + if (ore_titanium > 0) + ore_titanium-- + generate_mineral(/obj/item/stack/sheet/mineral/titanium) + else + on = 0 + continue + if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium) + if (ore_titanium > 0) + ore_titanium-- + ore_plasma-- + generate_mineral(/obj/item/stack/sheet/mineral/plastitanium) + else + on = 0 + continue //if a non valid combination is selected @@ -333,6 +362,9 @@ if(selected_mime == 1) if(ore_mime <= 0) b = 0 + if(selected_titanium == 1) + if(ore_titanium <= 0) + b = 0 if(b) //if they are, deduct one from each, produce slag and shut the machine off if(selected_gold == 1) @@ -351,6 +383,8 @@ ore_clown-- if(selected_mime == 1) ore_mime-- + if(selected_titanium == 1) + ore_titanium-- generate_mineral(/obj/item/weapon/ore/slag) on = 0 else @@ -402,6 +436,10 @@ ore_mime++ O.loc = null continue + if(istype(O,/obj/item/weapon/ore/titanium)) + ore_titanium++ + O.loc = null + continue unload_mineral(O) /obj/machinery/mineral/processing_unit/proc/generate_mineral(var/P) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index bf671764197..7b7f4a4fd48 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -362,15 +362,6 @@ icon_regular_floor = "podfloor" floor_tile = /obj/item/stack/tile/pod -//Walls -/turf/simulated/wall/survival - name = "pod wall" - desc = "An easily-compressable wall used for temporary shelter." - icon = 'icons/turf/walls/survival_pod_walls.dmi' - icon_state = "smooth" - smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/simulated/wall/survival, /obj/machinery/door/airlock/survival_pod) - //Door /obj/machinery/door/airlock/survival_pod icon = 'icons/obj/doors/airlocks/survival/survival.dmi' diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d57f509e13e..d2f8e2c8bc1 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -110,8 +110,7 @@ var/global/list/rockTurfEdgeCache = list( "Uranium" = 5, "Diamond" = 1, "Gold" = 10, "Silver" = 12, "Plasma" = 20, "Iron" = 40, "Gibtonite" = 4, "Cave" = 2, "BScrystal" = 1, - /*, "Adamantine" =5*/) - //Currently, Adamantine won't spawn as it has no uses. -Durandan + "Titanium" = 11) var/mineralChance = 13 /turf/simulated/mineral/random/New() @@ -142,6 +141,8 @@ var/global/list/rockTurfEdgeCache = list( M = new/turf/simulated/mineral/clown(src) if("Tranquillite") M = new/turf/simulated/mineral/mime(src) + if("Titanium") + M = new/turf/simulated/mineral/titanium(src) if("BScrystal") M = new/turf/simulated/mineral/bscrystal(src) if(M) @@ -155,9 +156,9 @@ var/global/list/rockTurfEdgeCache = list( icon_state = "rock_highchance" mineralChance = 25 mineralSpawnChanceList = list( - "Uranium" = 35, "Diamond" = 30, - "Gold" = 45, "Silver" = 50, "Plasma" = 50, - "BScrystal" = 20) + "Uranium" = 35, "Diamond" = 30, "Gold" = 45, + "Silver" = 50, "Plasma" = 50, "BScrystal" = 20, + "Titanium" = 45) /turf/simulated/mineral/random/high_chance_clown @@ -177,7 +178,7 @@ var/global/list/rockTurfEdgeCache = list( mineralSpawnChanceList = list( "Uranium" = 2, "Diamond" = 1, "Gold" = 4, "Silver" = 6, "Plasma" = 15, "Iron" = 40, - "Gibtonite" = 2, "BScrystal" = 1) + "Gibtonite" = 2, "BScrystal" = 1, "Titanium" = 4) /turf/simulated/mineral/random/low_chance/New() icon_state = "rock" @@ -228,6 +229,14 @@ var/global/list/rockTurfEdgeCache = list( hidden = 1 scan_state = "rock_Silver" +/turf/simulated/mineral/titanium + name = "titanium deposit" + mineralType = /obj/item/weapon/ore/titanium + spreadChance = 5 + spread = 1 + hidden = 1 + scan_state = "rock_Titanium" + /turf/simulated/mineral/plasma name = "plasma deposit" icon_state = "rock_Plasma" diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index fbf14349a53..a9cdbffed7d 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -37,7 +37,8 @@ speak_emote = list("states") wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver, /obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron, - /obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass) + /obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass, + /obj/item/weapon/ore/titanium) healable = 0 var/mode = MINEDRONE_COLLECT var/light_on = 0 diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index cf987c654bc..3158b1b524a 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -142,6 +142,13 @@ refined_type = /obj/item/stack/sheet/mineral/tranquillite materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT) +/obj/item/weapon/ore/titanium + name = "titanium ore" + icon_state = "Titanium ore" + points = 50 + materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) + refined_type = /obj/item/stack/sheet/mineral/titanium + /obj/item/weapon/ore/slag name = "slag" desc = "Completely useless" diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 5cf24a394ee..5f21412f3b8 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -33,6 +33,7 @@ var/amt_iron = 0 var/amt_plasma = 0 var/amt_uranium = 0 + var/amt_titanium = 0 var/amt_clown = 0 var/amt_mime = 0 var/amt_bluespace = 0 @@ -56,6 +57,8 @@ amt_clown++ if(istype(C,/obj/item/weapon/ore/tranquillite)) amt_mime++ + if(istype(C, /obj/item/weapon/ore/titanium)) + amt_titanium++ if(istype(C,/obj/item/weapon/ore/bluespace_crystal)) amt_bluespace++ @@ -74,6 +77,8 @@ dat += text("Plasma ore: [amt_plasma]
") if(amt_uranium) dat += text("Uranium ore: [amt_uranium]
") + if(amt_titanium) + dat += text("Titanium ore: [amt_titanium]
") if(amt_clown) dat += text("Bananium ore: [amt_clown]
") if(amt_mime) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dad8fae62f7..27aa1d6b4da 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1800,7 +1800,10 @@ ..() /mob/living/carbon/human/canBeHandcuffed() - return 1 + if(get_num_arms() >= 2) + return TRUE + else + return FALSE /mob/living/carbon/human/InCritical() return (health <= config.health_threshold_crit && stat == UNCONSCIOUS) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index b7834d873f1..d8c80c8b3fe 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -287,6 +287,7 @@ // Do species-specific reagent handling here // Return 1 if it should do normal processing too +// Return the parent value if processing does not explicitly stop // Return 0 if it shouldn't deplete and do its normal effect // Other return values will cause weird badness /datum/species/proc/handle_reagents(mob/living/carbon/human/H, datum/reagent/R) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index b895ed0fdd4..96a3571f113 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -744,6 +744,12 @@ if(speech_pref) H.mind.speech_span = "wingdings" +/datum/species/grey/handle_reagents(mob/living/carbon/human/H, datum/reagent/R) + if(R.id == "sacid") + H.reagents.del_reagent(R.id) + return 0 + return ..() + /datum/species/diona name = "Diona" name_plural = "Dionaea" @@ -963,10 +969,10 @@ speech_chance = 20 male_scream_sound = 'sound/voice/DraskTalk2.ogg' female_scream_sound = 'sound/voice/DraskTalk2.ogg' - male_cough_sounds = null //whale cough when - female_cough_sounds = null - male_sneeze_sound = null - female_sneeze_sound = null + male_cough_sounds = 'sound/voice/DraskCough.ogg' + female_cough_sounds = 'sound/voice/DraskCough.ogg' + male_sneeze_sound = 'sound/voice/DraskSneeze.ogg' + female_sneeze_sound = 'sound/voice/DraskSneeze.ogg' burn_mod = 2 //exotic_blood = "cryoxadone" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 07c4d2f25cd..054c94d7a25 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -490,6 +490,10 @@ Difficulty: Hard icon_state = "hierophant_telegraph_teleport" duration = 9 +/obj/effect/temp_visual/hierophant/telegraph/edge + icon_state = "hierophant_telegraph_edge" + duration = 40 + /obj/effect/temp_visual/hierophant/blast icon = 'icons/effects/effects.dmi' icon_state = "hierophant_blast" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9d9f0ed0c11..461b5193b69 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -108,18 +108,6 @@ health = Clamp(health, 0, maxHealth) med_hud_set_status() -/mob/living/simple_animal/handle_hud_icons_health() - ..() - if(healths && maxHealth > 0) - switch(health / maxHealth * 30) - if(30 to INFINITY) healths.icon_state = "health0" - if(26 to 29) healths.icon_state = "health1" - if(21 to 25) healths.icon_state = "health2" - if(16 to 20) healths.icon_state = "health3" - if(11 to 15) healths.icon_state = "health4" - if(6 to 10) healths.icon_state = "health5" - if(1 to 5) healths.icon_state = "health6" - if(0) healths.icon_state = "health7" /mob/living/simple_animal/proc/process_ai() handle_automated_movement() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index b33413d115c..ec416a14a74 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -17,26 +17,29 @@ //The byond version of these verbs wait for the next tick before acting. // instant verbs however can run mid tick or even during the time between ticks. +#define DO_MOVE(this_dir) var/final_dir = turn(this_dir, -dir2angle(dir)); Move(get_step(mob, final_dir), final_dir); + /client/verb/moveup() set name = ".moveup" set instant = 1 - Move(get_step(mob, NORTH), NORTH) + DO_MOVE(NORTH) /client/verb/movedown() set name = ".movedown" set instant = 1 - Move(get_step(mob, SOUTH), SOUTH) + DO_MOVE(SOUTH) /client/verb/moveright() set name = ".moveright" set instant = 1 - Move(get_step(mob, EAST), EAST) + DO_MOVE(EAST) /client/verb/moveleft() set name = ".moveleft" set instant = 1 - Move(get_step(mob, WEST), WEST) + DO_MOVE(WEST) +#undef DO_MOVE /client/Northeast() swap_hand() diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 255be518671..d070baa3766 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -982,6 +982,14 @@ icon_state = "skrell_hair_f" gender = FEMALE +/datum/sprite_accessory/hair/skrell/skr_tentacleslong + name = "Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + +/datum/sprite_accessory/hair/skrell/skr_tentaclesshort + name = "Short Skrell Tentacles" + icon_state = "skrell_hair_veryshort" + /datum/sprite_accessory/hair/skrell/skr_gold_m name = "Gold plated Skrell Male Tentacles" icon_state = "skrell_hair_m" @@ -1008,6 +1016,117 @@ gender = FEMALE secondary_theme = "cloth" +/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m + name = "Ombre Dye, Skrell Male Tentacles" + icon_state = "skrell_hair_m" + gender = MALE + secondary_theme = "gradient" + +/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f + name = "Ombre Dye, Skrell Female Tentacles" + icon_state = "skrell_hair_f" + gender = FEMALE + secondary_theme = "gradient" + +/datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong + name = "Ombre Dye, Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + secondary_theme = "gradient" + +/datum/sprite_accessory/hair/skrell/skr_gclothtentaclesshort + name = "Ombre Dye, Short Skrell Tentacles" + icon_state = "skrell_hair_veryshort" + secondary_theme = "gradient" + +/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m + name = "Black headress Skrell Male Tentacles" + icon_state = "skrell_hair_m" + gender = MALE + secondary_theme = "blackdia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f + name = "Black headress Skrell Female Tentacles" + icon_state = "skrell_hair_f" + gender = FEMALE + secondary_theme = "blackdia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diablacktentacleslong + name = "Black headress Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + secondary_theme = "blackdia" + no_sec_colour = 1 + + +/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m + name = "Gold headress Skrell Male Tentacles" + icon_state = "skrell_hair_m" + gender = MALE + secondary_theme = "golddia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f + name = "Gold headress Skrell Female Tentacles" + icon_state = "skrell_hair_f" + gender = FEMALE + secondary_theme = "golddia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diagoldtentacleslong + name = "Gold headress Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + secondary_theme = "golddia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m + name = "Silver headress Skrell Male Tentacles" + icon_state = "skrell_hair_m" + gender = MALE + secondary_theme = "silvdia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f + name = "Silver headress Skrell Female Tentacles" + icon_state = "skrell_hair_f" + gender = FEMALE + secondary_theme = "silvdia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_diasilvertentacleslong + name = "Silver headress Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + secondary_theme = "silvdia" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_festivetentacle_m + name = "Festive headress Skrell Male Tentacles" + icon_state = "skrell_hair_m" + gender = MALE + secondary_theme = "fest" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_festivetentacle_f + name = "Festive headress Skrell Female Tentacles" + icon_state = "skrell_hair_f" + gender = FEMALE + secondary_theme = "fest" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_festivetentacleslong + name = "Festive headress Long Skrell Tentacles" + icon_state = "skrell_hair_verylong" + secondary_theme = "fest" + no_sec_colour = 1 + +/datum/sprite_accessory/hair/skrell/skr_festivetentaclesshort + name = "Festive headress Short Skrell Tentacles" + icon_state = "skrell_hair_veryshort" + secondary_theme = "fest" + no_sec_colour = 1 + +//Tajaran styles + /datum/sprite_accessory/hair/tajara species_allowed = list("Tajaran") glasses_over = 1 @@ -1064,6 +1183,11 @@ icon_state = "hair_curly" glasses_over = null +/datum/sprite_accessory/hair/tajara/taj_hair_bedhead + name = "Tajara bedhead" + icon_state = "hair_tbedhead" + glasses_over = null + /datum/sprite_accessory/hair/tajara/taj_hair_retro name = "Tajaran Ladies' Retro" icon_state = "hair_ladies_retro" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 121f47a9e9e..34a447306db 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -239,6 +239,7 @@ \[list\] - \[/list\] : A list.
\[*\] : A dot used for lists.
\[hr\] : Adds a horizontal rule. + \[time\] : Inserts the current station time in HH:MM:SS.
"}, "window=paper_help") /obj/item/weapon/paper/Topic(href, href_list) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm new file mode 100644 index 00000000000..c51cd39e56e --- /dev/null +++ b/code/modules/paperwork/paperplane.dm @@ -0,0 +1,129 @@ +// Ported from TG +/obj/item/weapon/paperplane + name = "paper plane" + desc = "Paper, folded in the shape of a plane." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "paperplane" + throw_range = 7 + throw_speed = 1 + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + burn_state = FLAMMABLE + burntime = 5 + no_spin = TRUE + + var/obj/item/weapon/paper/internal_paper + +/obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/new_paper) + ..() + pixel_y = rand(-8, 8) + pixel_x = rand(-9, 9) + if(new_paper) + internal_paper = new_paper + flags = new_paper.flags + color = new_paper.color + new_paper.forceMove(src) + else + internal_paper = new /obj/item/weapon/paper(src) + update_icon() + +/obj/item/weapon/paperplane/Destroy() + QDEL_NULL(internal_paper) + return ..() + +/obj/item/weapon/paperplane/suicide_act(mob/living/user) + user.Stun(10) + user.visible_message("[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!") + user.EyeBlurry(6) + var/obj/item/organ/internal/eyes/E = user.get_int_organ(/obj/item/organ/internal/eyes) + if(E) + E.take_damage(8, 1) + sleep(10) + return BRUTELOSS + +/obj/item/weapon/paperplane/update_icon() + overlays.Cut() + var/list/stamped = internal_paper.stamped + if(!stamped) + stamped = new + else if(stamped) + for(var/S in stamped) + var/obj/item/weapon/stamp = S + var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]") + overlays += stampoverlay + +/obj/item/weapon/paperplane/attack_self(mob/user) // Unfold the paper plane + to_chat(user, "You unfold [src].") + if(internal_paper) + internal_paper.forceMove(get_turf(src)) + user.put_in_hands(internal_paper) + internal_paper = null + qdel(src) + +/obj/item/weapon/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) + ..() + + if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + to_chat(user, "You should unfold [src] before changing it.") + return + + else if(istype(P, /obj/item/weapon/stamp)) //we don't randomize stamps on a paperplane + internal_paper.attackby(P, user) //spoofed attack to update internal paper. + update_icon() + + else if(is_hot(P)) + if(user.disabilities & CLUMSY && prob(10)) + user.visible_message("[user] accidentally ignites themselves!", \ + "You miss [src] and accidentally light yourself on fire!") + user.unEquip(P) + user.adjust_fire_stacks(1) + user.IgniteMob() + return + + if(!in_range(user, src)) //to prevent issues as a result of telepathically lighting a paper + return + user.unEquip(src) + user.visible_message("[user] lights [src] on fire with [P]!", "You lights [src] on fire!") + fire_act() + + add_fingerprint(user) + +/obj/item/weapon/paperplane/throw_impact(atom/hit_atom) + if(..()) + return + if(!ishuman(hit_atom)) + return + var/mob/living/carbon/human/H = hit_atom + if(prob(2)) + if(H.head && H.head.flags_cover & HEADCOVERSEYES) + return + if(H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) + return + if(H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES) + return + visible_message("[src] hits [H] in the eye!") + H.EyeBlurry(6) + H.Weaken(2) + var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) + if(E) + E.take_damage(8, 1) + H.emote("scream") + +/obj/item/weapon/paper/AltClick(mob/user, obj/item/I) + var/mob/living/carbon/human/H = user + I = H.is_in_hands(/obj/item/weapon/paper) + if(I) + ProcFoldPlane(H, I) + else + ..() + +/obj/item/weapon/paper/proc/ProcFoldPlane(mob/living/carbon/user, obj/item/I) + if(istype(user)) + if((!in_range(src, user)) || user.stat || user.restrained()) + return + to_chat(user, "You fold [src] into the shape of a plane!") + user.unEquip(src) + I = new /obj/item/weapon/paperplane(user, src) + user.put_in_hands(I) + else + to_chat(user, "You lack the dexterity to fold [src].") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index d93281f2468..1523f241e69 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -149,6 +149,8 @@ origin_tech = "combat=3;syndicate=1" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") //these wont show up if the pen is off var/on = 0 + var/brightness_on = 2 + light_color = LIGHT_COLOR_RED /obj/item/weapon/pen/edagger/attack_self(mob/living/user) if(on) @@ -162,6 +164,7 @@ throwforce = initial(throwforce) playsound(user, 'sound/weapons/saberoff.ogg', 5, 1) to_chat(user, "[src] can now be concealed.") + set_light(0) else on = 1 force = 18 @@ -173,6 +176,7 @@ throwforce = 35 playsound(user, 'sound/weapons/saberon.ogg', 5, 1) to_chat(user, "[src] is now active.") + set_light(brightness_on, 1) update_icon() /obj/item/weapon/pen/edagger/update_icon() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 62313ddbccb..0914cdc8d32 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -467,8 +467,6 @@ obj/structure/cable/proc/cableColor(var/colorC) // Definitions //////////////////////////////// -#define MAXCOIL 30 - var/global/list/datum/stack_recipe/cable_coil_recipes = list( new /datum/stack_recipe/cable_restraints("cable restraints", /obj/item/weapon/restraints/handcuffs/cable, 15), ) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 7d174799b37..ebcb5ea92db 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -263,6 +263,22 @@ build_path = /obj/item/weapon/kitchen/utensil/fork category = list("initial","Dinnerware") +/datum/design/spoon + name = "Spoon" + id = "spoon" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/weapon/kitchen/utensil/spoon + category = list("initial","Dinnerware") + +/datum/design/spork + name = "Spork" + id = "spork" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/weapon/kitchen/utensil/spork + category = list("initial","Dinnerware") + /datum/design/tray name = "Tray" id = "tray" diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index a3e9b82b722..b9f5b108f05 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -186,7 +186,7 @@ id = "handdrill" req_tech = list("materials" = 4, "engineering" = 6) build_type = PROTOLATHE - materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_GOLD = 1000) + materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500) build_path = /obj/item/weapon/screwdriver/power category = list("Equipment") @@ -197,7 +197,7 @@ req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) // added one more requirment since the Jaws of Life are a bit OP build_path = /obj/item/weapon/crowbar/power build_type = PROTOLATHE - materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_DIAMOND = 1000) + materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500) category = list("Equipment") /datum/design/alienwrench @@ -207,7 +207,7 @@ req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) build_path = /obj/item/weapon/wrench/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") /datum/design/alienwirecutters @@ -217,7 +217,7 @@ req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) build_path = /obj/item/weapon/wirecutters/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") /datum/design/alienscrewdriver @@ -227,7 +227,7 @@ req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) build_path = /obj/item/weapon/screwdriver/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") /datum/design/aliencrowbar @@ -237,7 +237,7 @@ req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) build_path = /obj/item/weapon/crowbar/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") /datum/design/alienwelder @@ -247,7 +247,7 @@ req_tech = list("engineering" = 5, "plasmatech" = 5, "abductor" = 4) build_path = /obj/item/weapon/weldingtool/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") /datum/design/alienmultitool @@ -257,5 +257,5 @@ req_tech = list("engineering" = 5, "programming" = 5, "abductor" = 4) build_path = /obj/item/device/multitool/abductor build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) category = list("Equipment") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 6054fd1f859..697b3e3abaf 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -318,7 +318,7 @@ id = "gygax_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_armour - materials = list(MAT_METAL=25000,MAT_DIAMOND=10000) + materials = list(MAT_METAL=15000,MAT_DIAMOND=10000,MAT_TITANIUM=10000) construction_time = 600 category = list("Gygax") @@ -391,7 +391,7 @@ id = "durand_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_armor - materials = list(MAT_METAL=50000,MAT_URANIUM=30000) + materials = list(MAT_METAL=30000,MAT_URANIUM=25000,MAT_TITANIUM=20000) construction_time = 600 category = list("Durand") @@ -592,7 +592,7 @@ id = "phazon_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_armor - materials = list(MAT_METAL=45000,MAT_PLASMA=30000) + materials = list(MAT_METAL=25000,MAT_PLASMA=20000,MAT_TITANIUM=20000) construction_time = 300 category = list("Phazon") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 2a791e8c61a..cb73a0afe8c 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -192,7 +192,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/scalpel/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical") /datum/design/alienhemostat @@ -202,7 +202,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/hemostat/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical") /datum/design/alienretractor @@ -212,7 +212,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/retractor/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical") /datum/design/aliensaw @@ -222,7 +222,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/circular_saw/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) category = list("Medical") /datum/design/aliendrill @@ -232,7 +232,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/surgicaldrill/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) category = list("Medical") /datum/design/aliencautery @@ -242,7 +242,7 @@ req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/cautery/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical") ///////////////////////////////////////// diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index f1b361a4b5b..88fac1905da 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -52,7 +52,7 @@ id = "bluespace_cell" req_tech = list("powerstorage" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 800, MAT_GOLD = 300, MAT_SILVER = 300, MAT_GLASS = 160, MAT_DIAMOND = 160) + materials = list(MAT_METAL = 800, MAT_GOLD = 120, MAT_SILVER = 150, MAT_GLASS = 160, MAT_DIAMOND = 160, MAT_TITANIUM = 300) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/bluespace category = list("Misc","Power") diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index eb79a54b219..9c68127d0e1 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -203,7 +203,7 @@ id = "femto_mani" req_tech = list("materials" = 7, "programming" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE - materials = list(MAT_METAL = 200, MAT_DIAMOND = 60) + materials = list(MAT_METAL = 200, MAT_DIAMOND = 30, MAT_TITANIUM = 30) build_path = /obj/item/weapon/stock_parts/manipulator/femto category = list("Stock Parts") lathe_time_factor = 0.2 diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 1384e193f8b..0c880fb8484 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -8,7 +8,7 @@ id = "nuclear_gun" req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 5) build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 4000) + materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 3000, MAT_TITANIUM = 1000) build_path = /obj/item/weapon/gun/energy/gun/nuclear locked = 1 category = list("Weapons") @@ -116,7 +116,7 @@ id = "tele_shield" req_tech = list("combat" = 4, "materials" = 3, "engineering" = 4) build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_GLASS = 5000, MAT_SILVER = 300) + materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200) build_path = /obj/item/weapon/shield/riot/tele category = list("Weapons") @@ -242,7 +242,7 @@ id = "xray" req_tech = list("combat" = 7, "magnets" = 5, "biotech" = 5, "powerstorage" = 4) build_type = PROTOLATHE - materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000, MAT_METAL = 5000) + materials = list(MAT_GOLD = 5000,MAT_URANIUM = 8000, MAT_METAL = 5000, MAT_TITANIUM = 2000) build_path = /obj/item/weapon/gun/energy/xray locked = 1 category = list("Weapons") diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index ad90dcce9f6..46355f144da 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -42,7 +42,7 @@ Note: Must be placed west/left of and R&D console to function. component_parts += new /obj/item/weapon/stock_parts/manipulator(null) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null) - materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1, MAT_TRANQUILLITE=1)) + materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1, MAT_TRANQUILLITE=1, MAT_TITANIUM=1)) RefreshParts() reagents.my_atom = src diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 790819bd49b..ee499b8eac3 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -98,6 +98,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, return_name = "Bananium" if("mime") return_name = "Tranquillite" + if("titanium") + return_name = "Titanium" return return_name else for(var/R in subtypesof(/datum/reagent)) @@ -808,6 +810,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, materials_list[++materials_list.len] = list("name" = "Diamond", "id" = MAT_DIAMOND, "amount" = linked_lathe.materials.amount(MAT_DIAMOND)) materials_list[++materials_list.len] = list("name" = "Bananium", "id" = MAT_BANANIUM, "amount" = linked_lathe.materials.amount(MAT_BANANIUM)) materials_list[++materials_list.len] = list("name" = "Tranquillite", "id" = MAT_TRANQUILLITE, "amount" = linked_lathe.materials.amount(MAT_TRANQUILLITE)) + materials_list[++materials_list.len] = list("name" = "Titanium", "id" = MAT_TITANIUM, "amount" = linked_lathe.materials.amount(MAT_TITANIUM)) if(submenu == 3) var/list/loaded_chemicals = list() data["loaded_chemicals"] = loaded_chemicals diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 4a060385dea..77d77c5706d 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -297,7 +297,7 @@ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(_loc) playsound(_loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) reqform.name = "Requisition Form - [crates] '[object.name]' for [orderedby]" - reqform.info += "

[station_name] Supply Requisition Form


" + reqform.info += "

[station_name()] Supply Requisition Form


" reqform.info += "INDEX: #[shuttle_master.ordernum]
" reqform.info += "REQUESTED BY: [orderedby]
" reqform.info += "RANK: [orderedbyRank]
" diff --git a/code/modules/spacepods/construction.dm b/code/modules/spacepods/construction.dm index a997a23f585..080973b1f25 100644 --- a/code/modules/spacepods/construction.dm +++ b/code/modules/spacepods/construction.dm @@ -140,7 +140,7 @@ state_next = list( "key" = /obj/item/stack/sheet/metal, "amount" = 5, - "vis_msg" = "{USER} frabricates a pressure bulkhead for the {HOLDER}.", + "vis_msg" = "{USER} fabricates a pressure bulkhead for the {HOLDER}.", "self_msg" = "You frabricate a pressure bulkhead for the {HOLDER}." ) ), diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 47912c1c90f..bf67002d3e4 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -63,7 +63,7 @@ "pod_black" = "#3B8FE5", \ "pod_industrial" = "#CCCC00") - var/unlocked = 1 + var/unlocked = TRUE var/move_delay = 2 var/next_move = 0 @@ -378,12 +378,17 @@ "You start drilling through the [src]'s lock!") if(do_after(user, 100 * W.toolspeed, target = src)) QDEL_NULL(equipment_system.lock_system) + unlocked = TRUE user.visible_message(user, "[user] has destroyed the [src]'s lock!", "You destroy the [src]'s lock!") else user.visible_message(user, "[user] fails to break through the [src]'s lock!", "You were unable to break through the [src]'s lock!") return + if(L.on && unlocked == FALSE) //The buster is on, we don't have a lock system, and the pod is still somehow locked, unlocking. + unlocked = TRUE + user.visible_message(user, "[user] repairs [src]'s doors with [L].", + "You repair [src]'s doors with [L].") to_chat(user, "Turn the [L] on first.") return @@ -606,7 +611,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair.") return use_internal_tank = !use_internal_tank to_chat(usr, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") @@ -825,11 +830,15 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr in passengers && usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair.") return - unlocked = !unlocked - to_chat(usr, "You [unlocked ? "unlock" : "lock"] the doors.") + if(!equipment_system.lock_system) + to_chat(usr, "[src] has no locking mechanism.") + unlocked = TRUE //Should never be false without a lock, but if it somehow happens, that will force an unlock. + else + unlocked = !unlocked + to_chat(usr, "You [unlocked ? "unlock" : "lock"] the doors.") /obj/spacepod/verb/toggleDoors() @@ -841,7 +850,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair") return for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src)) @@ -876,7 +885,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair.") return if(!equipment_system.weapon_system) to_chat(usr, "[src] has no weapons!") @@ -893,7 +902,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair.") return if(!equipment_system.cargo_system) to_chat(usr, "[src] has no cargo system!") @@ -909,7 +918,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") + to_chat(usr, "You can't reach the controls from your chair.") return lightsToggle() diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index 61ed78d0e3b..c8e5cb8422a 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -44,3 +44,79 @@ for(var/obj/item/organ/external/O in bodyparts) if(limb_name == O.limb_name) return O + + +/mob/proc/has_left_hand() + return TRUE + +/mob/living/carbon/human/has_left_hand() + if(has_organ("l_hand")) + return TRUE + return FALSE + + +/mob/proc/has_right_hand() + return TRUE + +/mob/living/carbon/human/has_right_hand() + if(has_organ("r_hand")) + return TRUE + return FALSE + + +//Limb numbers +/mob/proc/get_num_arms() + return 2 + +/mob/living/carbon/human/get_num_arms() + . = 0 + for(var/X in bodyparts) + var/obj/item/organ/external/affecting = X + if(affecting.body_part == ARM_RIGHT) + .++ + if(affecting.body_part == ARM_LEFT) + .++ + +//sometimes we want to ignore that we don't have the required amount of arms. +/mob/proc/get_arm_ignore() + return FALSE + + +/mob/proc/get_num_legs() + return 2 + +/mob/living/carbon/human/get_num_legs() + . = 0 + for(var/X in bodyparts) + var/obj/item/organ/external/affecting = X + if(affecting.body_part == LEG_RIGHT) + .++ + if(affecting.body_part == LEG_LEFT) + .++ + +//sometimes we want to ignore that we don't have the required amount of legs. +/mob/proc/get_leg_ignore() + return FALSE + + +/mob/living/carbon/human/get_leg_ignore() + + if(flying == 1) + return TRUE + + var/obj/item/weapon/tank/jetpack/J + if(istype(back,/obj/item/weapon/tank/jetpack)) + J = back + if(J.on == 1) + return TRUE + return FALSE + +/mob/living/proc/get_missing_limbs() + return list() + +/mob/living/carbon/human/get_missing_limbs() + var/list/full = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg") + for(var/zone in full) + if(has_organ(zone)) + full -= zone + return full \ No newline at end of file diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 0d077a7999b..7e61bc866a7 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -96,35 +96,6 @@ return ..() -/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) - switch(open) - if(0) - if(istype(W,/obj/item/weapon/scalpel)) - spread_germs_to_organ(src, user, W) - user.visible_message("[user] cuts [src] open with [W]!") - open++ - return - if(1) - if(istype(W,/obj/item/weapon/retractor)) - spread_germs_to_organ(src, user, W) - user.visible_message("[user] cracks [src] open like an egg with [W]!") - open++ - return - if(2) - if(istype(W,/obj/item/weapon/hemostat)) - spread_germs_to_organ(src, user, W) - if(contents.len) - var/obj/item/removing = pick(contents) - var/obj/item/organ/internal/O = removing - if(istype(O)) - spread_germs_to_organ(O, user, W) // This wouldn't be any cleaner than the actual surgery - user.put_in_hands(removing) - user.visible_message("[user] extracts [removing] from [src] with [W]!") - else - user.visible_message("[user] fishes around fruitlessly in [src] with [W].") - return - . = ..() - /obj/item/organ/external/update_health() damage = min(max_damage, (brute_dam + burn_dam)) @@ -552,6 +523,63 @@ Note that amputating the affected organ does in fact remove the infection from t qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES return null +/obj/item/organ/external/proc/disembowel(spillage_zone = "chest") + if(!owner) + return + + var/mob/living/carbon/C = owner + + if(!hasorgans(C)) + return + + var/organ_spilled = FALSE + var/turf/T = get_turf(C) + C.add_splatter_floor(T) + playsound(get_turf(C), 'sound/effects/splat.ogg', 25, 1) + for(var/X in C.internal_organs) + var/obj/item/organ/O = X + var/org_zone = check_zone(O.parent_organ) + if(org_zone == spillage_zone) + O.remove(C) + O.forceMove(T) + organ_spilled = TRUE + + if(organ_spilled) + C.visible_message("[C]'s internal organs spill out onto the floor!") + return TRUE + +/obj/item/organ/external/chest/droplimb() + if(disembowel()) + return TRUE + +/obj/item/organ/external/groin/droplimb() + if(disembowel("groin")) + return TRUE + + + +/obj/item/organ/external/attackby(obj/item/I, mob/user, params) + if(I.sharp) + add_fingerprint(user) + if(!contents.len) + to_chat(user, "There is nothing left inside [src]!") + return + playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) + user.visible_message("[user] begins to cut open [src].",\ + "You begin to cut open [src]...") + if(do_after(user, 54, target = src)) + drop_organs(user) + else + return ..() + +//empties the bodypart from its organs and other things inside it +/obj/item/organ/external/proc/drop_organs(mob/user) + var/turf/T = get_turf(src) + if(status != ORGAN_ROBOT) + playsound(T, 'sound/effects/splat.ogg', 25, 1) + for(var/obj/item/I in src) + I.forceMove(T) + /**************************************************** HELPERS ****************************************************/ diff --git a/code/modules/surgery/organs/subtypes/standard.dm b/code/modules/surgery/organs/subtypes/standard.dm index 8efff94e872..3fd8effd56a 100644 --- a/code/modules/surgery/organs/subtypes/standard.dm +++ b/code/modules/surgery/organs/subtypes/standard.dm @@ -13,7 +13,6 @@ vital = 1 amputation_point = "spine" gendered_icon = 1 - cannot_amputate = 1 parent_organ = null encased = "ribcage" var/fat = FALSE @@ -46,7 +45,6 @@ w_class = WEIGHT_CLASS_BULKY // if you know what I mean ;) body_part = LOWER_TORSO vital = 1 - cannot_amputate = TRUE parent_organ = "chest" amputation_point = "lumbar" gendered_icon = 1 diff --git a/code/world.dm b/code/world.dm index 542e19ef619..b9063683763 100644 --- a/code/world.dm +++ b/code/world.dm @@ -61,8 +61,12 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG map_name = "[using_map.name]" else map_name = "Unknown" - - + + + if(config && config.server_name) + name = "[config.server_name]: [station_name()]" + else + name = station_name() #undef RECOMMENDED_VERSION diff --git a/html/changelog.html b/html/changelog.html index 8c25014a063..958e0720a79 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,81 @@ -->
+

26 February 2018

+

Birdtalon updated:

+
    +
  • Removes printing photos on security consoles.
  • +
+ +

21 February 2018

+

uraniummeltdown updated:

+
    +
  • Added titanium and plastitanium. Mine the asteroid for titanium, make plastitanium by smelting together titanium and plasma
  • +
  • You can build shuttle floors and walls with titanium and plastitanium. Can also make shuttle airlocks by applying titanium to a non-mineral airlock
  • +
  • Shuttle windows have explosion resistance now
  • +
  • A few RnD recipes require titanium now
  • +
+ +

20 February 2018

+

Alffd updated:

+
    +
  • Reduce all atmospheric stuns by 80%
  • +
  • Cap the maximum atmospheric stun time to 4 seconds
  • +
+

Anasari updated:

+
    +
  • Add paperplane. Alt-click or use a verb on a piece of paper in your hand to make them.
  • +
+

Birdtalon updated:

+
    +
  • adds [time] tag for paperwork
  • +
+

Citinited updated:

+
    +
  • You can now roll up flags.
  • +
+

Fox McCloud updated:

+
    +
  • Adds in a Dance Machine
  • +
  • IEDs now have a blast radius again
  • +
  • Slap crafting of IEDs is gone; use personal crafting instead
  • +
+

HugoLuman updated:

+
    +
  • coughing and sneezing sounds for the Drask
  • +
+

MarcellusPye updated:

+
    +
  • Grays can now drink sulphuric acid without being burnt
  • +
+

Shazbot updated:

+
    +
  • Fixes Patch's patch
  • +
+

Tayyyyyyy, bryanayalalugo updated:

+
    +
  • News reporters can now add titles to their stories!
  • +
+ +

05 February 2018

+

IK3I updated:

+
    +
  • Next gen dining is now available at your local autolathe!
  • +
+

MarsM0nd updated:

+
    +
  • Pod lock busters can now unlock pods
  • +
  • Pods can only be locked with a locking system installed.
  • +
+

Tayyyyyyy updated:

+
    +
  • Energy swords, energy daggers, energy cutlasses, and energy axes emit light. Toy versions do not.
  • +
+

uraniummeltdown updated:

+
    +
  • Multitile airlock opening/closing animation is no longer glitchy and paper/photos don't float in the air when opening/closing them
  • +
+

02 February 2018

Fethas updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7f6a2726af6..6cc7bc2e24f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -6039,3 +6039,49 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Bots get access for 60 seconds to all doors to get to thier locations. rscadd:Pai controlled bots will get a notification they are being called. rscadd:all living mobs now can have a med hud. +2018-02-05: + IK3I: + - rscadd: Next gen dining is now available at your local autolathe! + MarsM0nd: + - bugfix: Pod lock busters can now unlock pods + - tweak: Pods can only be locked with a locking system installed. + Tayyyyyyy: + - tweak: Energy swords, energy daggers, energy cutlasses, and energy axes emit light. + Toy versions do not. + uraniummeltdown: + - bugfix: Multitile airlock opening/closing animation is no longer glitchy and paper/photos + don't float in the air when opening/closing them +2018-02-20: + Alffd: + - tweak: Reduce all atmospheric stuns by 80% + - tweak: Cap the maximum atmospheric stun time to 4 seconds + Anasari: + - rscadd: Add paperplane. Alt-click or use a verb on a piece of paper in your hand + to make them. + Birdtalon: + - rscadd: adds [time] tag for paperwork + Citinited: + - tweak: You can now roll up flags. + Fox McCloud: + - rscadd: Adds in a Dance Machine + - tweak: IEDs now have a blast radius again + - tweak: Slap crafting of IEDs is gone; use personal crafting instead + HugoLuman: + - rscadd: coughing and sneezing sounds for the Drask + MarcellusPye: + - bugfix: Grays can now drink sulphuric acid without being burnt + Shazbot: + - bugfix: Fixes Patch's patch + Tayyyyyyy, bryanayalalugo: + - rscadd: News reporters can now add titles to their stories! +2018-02-21: + uraniummeltdown: + - rscadd: Added titanium and plastitanium. Mine the asteroid for titanium, make + plastitanium by smelting together titanium and plasma + - rscadd: You can build shuttle floors and walls with titanium and plastitanium. + Can also make shuttle airlocks by applying titanium to a non-mineral airlock + - tweak: Shuttle windows have explosion resistance now + - tweak: A few RnD recipes require titanium now +2018-02-26: + Birdtalon: + - rscdel: Removes printing photos on security consoles. diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 9111297a266..2fdc968ebd6 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi new file mode 100644 index 00000000000..daa43134b3c Binary files /dev/null and b/icons/effects/lighting_overlay.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 12130e15e93..a5f810730fc 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index f356242fe67..bc282c185d8 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 44e4fa580bd..8b41a0ec07d 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/species/grey/uniform.dmi b/icons/mob/species/grey/uniform.dmi index fdd6a52144c..4927b69dc97 100644 Binary files a/icons/mob/species/grey/uniform.dmi and b/icons/mob/species/grey/uniform.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 3b3585ac0d3..8d887bb1e43 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 9e0eb73a992..720fafd8847 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/doors/airlocks/abductor/overlays.dmi b/icons/obj/doors/airlocks/abductor/overlays.dmi index ddb3fffcb8a..6bc8aae620f 100644 Binary files a/icons/obj/doors/airlocks/abductor/overlays.dmi and b/icons/obj/doors/airlocks/abductor/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/glass_large/glass_large.dmi b/icons/obj/doors/airlocks/glass_large/glass_large.dmi index 0c60a24f6f4..74a0aad0870 100644 Binary files a/icons/obj/doors/airlocks/glass_large/glass_large.dmi and b/icons/obj/doors/airlocks/glass_large/glass_large.dmi differ diff --git a/icons/obj/doors/airlocks/glass_large/overlays.dmi b/icons/obj/doors/airlocks/glass_large/overlays.dmi index 3708148db3b..dccaca00255 100644 Binary files a/icons/obj/doors/airlocks/glass_large/overlays.dmi and b/icons/obj/doors/airlocks/glass_large/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/hatch/overlays.dmi b/icons/obj/doors/airlocks/hatch/overlays.dmi index e41af3e44c5..affcbbf2ce4 100644 Binary files a/icons/obj/doors/airlocks/hatch/overlays.dmi and b/icons/obj/doors/airlocks/hatch/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/survival/survival.dmi b/icons/obj/doors/airlocks/survival/survival.dmi index 478834eb932..f6d8d3ce6b1 100644 Binary files a/icons/obj/doors/airlocks/survival/survival.dmi and b/icons/obj/doors/airlocks/survival/survival.dmi differ diff --git a/icons/obj/doors/airlocks/survival/survival_overlays.dmi b/icons/obj/doors/airlocks/survival/survival_overlays.dmi index f6b0d8eb699..f8e62144cd8 100644 Binary files a/icons/obj/doors/airlocks/survival/survival_overlays.dmi and b/icons/obj/doors/airlocks/survival/survival_overlays.dmi differ diff --git a/icons/obj/flag.dmi b/icons/obj/flag.dmi index 8b7b2d4a517..309b1d38d87 100644 Binary files a/icons/obj/flag.dmi and b/icons/obj/flag.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index abf090ef440..c21be1a7ffe 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 33cf8adf5fb..d5dcc49c0fc 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 484417b9e83..bf788f62bc5 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index 75211829f2f..b21738f2fed 100644 Binary files a/icons/obj/machines/research.dmi and b/icons/obj/machines/research.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 1fabc78bdd0..29196e625ae 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi index 2e896133851..08d8675ff06 100644 Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ diff --git a/icons/obj/smooth_structures/alien/nest.dmi b/icons/obj/smooth_structures/alien/nest.dmi index 4a1c757bc64..ac04f45c0bd 100644 Binary files a/icons/obj/smooth_structures/alien/nest.dmi and b/icons/obj/smooth_structures/alien/nest.dmi differ diff --git a/icons/obj/smooth_structures/alien/resin_membrane.dmi b/icons/obj/smooth_structures/alien/resin_membrane.dmi index 0aa0af20a4d..c7d484d7c07 100644 Binary files a/icons/obj/smooth_structures/alien/resin_membrane.dmi and b/icons/obj/smooth_structures/alien/resin_membrane.dmi differ diff --git a/icons/obj/smooth_structures/alien/resin_wall.dmi b/icons/obj/smooth_structures/alien/resin_wall.dmi index 949bd3197b6..45169192020 100644 Binary files a/icons/obj/smooth_structures/alien/resin_wall.dmi and b/icons/obj/smooth_structures/alien/resin_wall.dmi differ diff --git a/icons/obj/smooth_structures/alien_table.dmi b/icons/obj/smooth_structures/alien_table.dmi index 1d60bcc82f6..e2384b57e00 100644 Binary files a/icons/obj/smooth_structures/alien_table.dmi and b/icons/obj/smooth_structures/alien_table.dmi differ diff --git a/icons/obj/smooth_structures/catwalk.dmi b/icons/obj/smooth_structures/catwalk.dmi index d803dd71736..c9bcbc04b93 100644 Binary files a/icons/obj/smooth_structures/catwalk.dmi and b/icons/obj/smooth_structures/catwalk.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table.dmi b/icons/obj/smooth_structures/fancy_table.dmi index a57b165f4ac..401452360ac 100644 Binary files a/icons/obj/smooth_structures/fancy_table.dmi and b/icons/obj/smooth_structures/fancy_table.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_black.dmi b/icons/obj/smooth_structures/fancy_table_black.dmi index d4570e8a7c1..8275c48d3c6 100644 Binary files a/icons/obj/smooth_structures/fancy_table_black.dmi and b/icons/obj/smooth_structures/fancy_table_black.dmi differ diff --git a/icons/obj/smooth_structures/glass_table.dmi b/icons/obj/smooth_structures/glass_table.dmi index 3fa90ea0642..3cd0ac8f552 100644 Binary files a/icons/obj/smooth_structures/glass_table.dmi and b/icons/obj/smooth_structures/glass_table.dmi differ diff --git a/icons/obj/smooth_structures/lattice.dmi b/icons/obj/smooth_structures/lattice.dmi index 5adab0caf1b..ad676cc2835 100644 Binary files a/icons/obj/smooth_structures/lattice.dmi and b/icons/obj/smooth_structures/lattice.dmi differ diff --git a/icons/obj/smooth_structures/poker_table.dmi b/icons/obj/smooth_structures/poker_table.dmi index 2e16a5468dc..04412d4bffa 100644 Binary files a/icons/obj/smooth_structures/poker_table.dmi and b/icons/obj/smooth_structures/poker_table.dmi differ diff --git a/icons/obj/smooth_structures/reinforced_table.dmi b/icons/obj/smooth_structures/reinforced_table.dmi index 3c76b27e4fb..9bd21ac5d7d 100644 Binary files a/icons/obj/smooth_structures/reinforced_table.dmi and b/icons/obj/smooth_structures/reinforced_table.dmi differ diff --git a/icons/obj/smooth_structures/reinforced_window.dmi b/icons/obj/smooth_structures/reinforced_window.dmi index ff518e482ac..b5f24ebbd30 100644 Binary files a/icons/obj/smooth_structures/reinforced_window.dmi and b/icons/obj/smooth_structures/reinforced_window.dmi differ diff --git a/icons/obj/smooth_structures/rice_window.dmi b/icons/obj/smooth_structures/rice_window.dmi index f5e7a6dd57a..e3a82935cf2 100644 Binary files a/icons/obj/smooth_structures/rice_window.dmi and b/icons/obj/smooth_structures/rice_window.dmi differ diff --git a/icons/obj/smooth_structures/shuttle_window.dmi b/icons/obj/smooth_structures/shuttle_window.dmi index 85924dc449b..3db34cf1ba1 100644 Binary files a/icons/obj/smooth_structures/shuttle_window.dmi and b/icons/obj/smooth_structures/shuttle_window.dmi differ diff --git a/icons/obj/smooth_structures/table.dmi b/icons/obj/smooth_structures/table.dmi index 62706d62c9b..2ce85a3bd7f 100644 Binary files a/icons/obj/smooth_structures/table.dmi and b/icons/obj/smooth_structures/table.dmi differ diff --git a/icons/obj/smooth_structures/tinted_window.dmi b/icons/obj/smooth_structures/tinted_window.dmi index 85e27e09a67..ab992353275 100644 Binary files a/icons/obj/smooth_structures/tinted_window.dmi and b/icons/obj/smooth_structures/tinted_window.dmi differ diff --git a/icons/obj/smooth_structures/window.dmi b/icons/obj/smooth_structures/window.dmi index b680e44fa90..0197f5b20a7 100644 Binary files a/icons/obj/smooth_structures/window.dmi and b/icons/obj/smooth_structures/window.dmi differ diff --git a/icons/obj/smooth_structures/wood_table.dmi b/icons/obj/smooth_structures/wood_table.dmi index f7eac437421..1259c7d7c77 100644 Binary files a/icons/obj/smooth_structures/wood_table.dmi and b/icons/obj/smooth_structures/wood_table.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 67cc9682cf8..4d5fe2d875d 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 98d2d4bdd27..3e415202e7a 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index a7adf552d91..634b24d3eb5 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/Chasms.dmi b/icons/turf/floors/Chasms.dmi index cc4feb2e032..7901c84a48c 100644 Binary files a/icons/turf/floors/Chasms.dmi and b/icons/turf/floors/Chasms.dmi differ diff --git a/icons/turf/floors/ash.dmi b/icons/turf/floors/ash.dmi index 718cd120194..6c4c1cbc36d 100644 Binary files a/icons/turf/floors/ash.dmi and b/icons/turf/floors/ash.dmi differ diff --git a/icons/turf/floors/carpet.dmi b/icons/turf/floors/carpet.dmi index e1dc199b7f5..dc26a7ae5f8 100644 Binary files a/icons/turf/floors/carpet.dmi and b/icons/turf/floors/carpet.dmi differ diff --git a/icons/turf/floors/carpet_black.dmi b/icons/turf/floors/carpet_black.dmi index d1174203aa9..80e78a1a412 100644 Binary files a/icons/turf/floors/carpet_black.dmi and b/icons/turf/floors/carpet_black.dmi differ diff --git a/icons/turf/floors/lava.dmi b/icons/turf/floors/lava.dmi index 29afb2cc869..b2d9064ed2b 100644 Binary files a/icons/turf/floors/lava.dmi and b/icons/turf/floors/lava.dmi differ diff --git a/icons/turf/floors/ripple.dmi b/icons/turf/floors/ripple.dmi index 2830d2c4909..bf5b0869c82 100644 Binary files a/icons/turf/floors/ripple.dmi and b/icons/turf/floors/ripple.dmi differ diff --git a/icons/turf/floors/seadrop-o.dmi b/icons/turf/floors/seadrop-o.dmi index 9a352fa85ed..c0f325af36a 100644 Binary files a/icons/turf/floors/seadrop-o.dmi and b/icons/turf/floors/seadrop-o.dmi differ diff --git a/icons/turf/floors/seadrop.dmi b/icons/turf/floors/seadrop.dmi index 29622fa1064..2752d5f60ba 100644 Binary files a/icons/turf/floors/seadrop.dmi and b/icons/turf/floors/seadrop.dmi differ diff --git a/icons/turf/mining.dmi b/icons/turf/mining.dmi index fb5d8fd62aa..d36db34304b 100644 Binary files a/icons/turf/mining.dmi and b/icons/turf/mining.dmi differ diff --git a/icons/turf/walls/abductor_wall.dmi b/icons/turf/walls/abductor_wall.dmi index d1d8954bfb9..0ddff469211 100644 Binary files a/icons/turf/walls/abductor_wall.dmi and b/icons/turf/walls/abductor_wall.dmi differ diff --git a/icons/turf/walls/bananium_wall.dmi b/icons/turf/walls/bananium_wall.dmi index 47e249c42e5..b8922638e6c 100644 Binary files a/icons/turf/walls/bananium_wall.dmi and b/icons/turf/walls/bananium_wall.dmi differ diff --git a/icons/turf/walls/coated_reinforced_wall.dmi b/icons/turf/walls/coated_reinforced_wall.dmi index ad721037f22..13d6879f49f 100644 Binary files a/icons/turf/walls/coated_reinforced_wall.dmi and b/icons/turf/walls/coated_reinforced_wall.dmi differ diff --git a/icons/turf/walls/cult_wall.dmi b/icons/turf/walls/cult_wall.dmi index fa3fd530c00..47a76ee5cb3 100644 Binary files a/icons/turf/walls/cult_wall.dmi and b/icons/turf/walls/cult_wall.dmi differ diff --git a/icons/turf/walls/diamond_wall.dmi b/icons/turf/walls/diamond_wall.dmi index 0645aa2e6fd..8dff3420119 100644 Binary files a/icons/turf/walls/diamond_wall.dmi and b/icons/turf/walls/diamond_wall.dmi differ diff --git a/icons/turf/walls/gold_wall.dmi b/icons/turf/walls/gold_wall.dmi index c6ba713c649..107487b9d23 100644 Binary files a/icons/turf/walls/gold_wall.dmi and b/icons/turf/walls/gold_wall.dmi differ diff --git a/icons/turf/walls/hierophant_wall.dmi b/icons/turf/walls/hierophant_wall.dmi index 8482970eaf0..c51880ddef2 100644 Binary files a/icons/turf/walls/hierophant_wall.dmi and b/icons/turf/walls/hierophant_wall.dmi differ diff --git a/icons/turf/walls/icedmetal_wall.dmi b/icons/turf/walls/icedmetal_wall.dmi index 1782b9809b6..4cd148e5cfa 100644 Binary files a/icons/turf/walls/icedmetal_wall.dmi and b/icons/turf/walls/icedmetal_wall.dmi differ diff --git a/icons/turf/walls/iron_wall.dmi b/icons/turf/walls/iron_wall.dmi index 86bed015f15..f3380868c7d 100644 Binary files a/icons/turf/walls/iron_wall.dmi and b/icons/turf/walls/iron_wall.dmi differ diff --git a/icons/turf/walls/plasma_wall.dmi b/icons/turf/walls/plasma_wall.dmi index 4f2080d06ac..133cd7cd78e 100644 Binary files a/icons/turf/walls/plasma_wall.dmi and b/icons/turf/walls/plasma_wall.dmi differ diff --git a/icons/turf/walls/plastitanium_wall.dmi b/icons/turf/walls/plastitanium_wall.dmi new file mode 100644 index 00000000000..4f556752c24 Binary files /dev/null and b/icons/turf/walls/plastitanium_wall.dmi differ diff --git a/icons/turf/walls/reinforced_wall.dmi b/icons/turf/walls/reinforced_wall.dmi index a6f1bc20666..13b57ef7a36 100644 Binary files a/icons/turf/walls/reinforced_wall.dmi and b/icons/turf/walls/reinforced_wall.dmi differ diff --git a/icons/turf/walls/rusty_reinforced_wall.dmi b/icons/turf/walls/rusty_reinforced_wall.dmi index f33c517b781..97ea672a730 100644 Binary files a/icons/turf/walls/rusty_reinforced_wall.dmi and b/icons/turf/walls/rusty_reinforced_wall.dmi differ diff --git a/icons/turf/walls/rusty_wall.dmi b/icons/turf/walls/rusty_wall.dmi index dee277dee2e..410aee27068 100644 Binary files a/icons/turf/walls/rusty_wall.dmi and b/icons/turf/walls/rusty_wall.dmi differ diff --git a/icons/turf/walls/sandstone_wall.dmi b/icons/turf/walls/sandstone_wall.dmi index 4118a3dbabf..200d7ba43cd 100644 Binary files a/icons/turf/walls/sandstone_wall.dmi and b/icons/turf/walls/sandstone_wall.dmi differ diff --git a/icons/turf/walls/shuttle_wall.dmi b/icons/turf/walls/shuttle_wall.dmi new file mode 100644 index 00000000000..71166f3d7b6 Binary files /dev/null and b/icons/turf/walls/shuttle_wall.dmi differ diff --git a/icons/turf/walls/silver_wall.dmi b/icons/turf/walls/silver_wall.dmi index d8a93212199..9bb915e9a76 100644 Binary files a/icons/turf/walls/silver_wall.dmi and b/icons/turf/walls/silver_wall.dmi differ diff --git a/icons/turf/walls/snow_wall.dmi b/icons/turf/walls/snow_wall.dmi index dfcf459f2a1..d9df05b0d7c 100644 Binary files a/icons/turf/walls/snow_wall.dmi and b/icons/turf/walls/snow_wall.dmi differ diff --git a/icons/turf/walls/survival_pod_walls.dmi b/icons/turf/walls/survival_pod_walls.dmi index d6a8b097ce3..b364e3da054 100644 Binary files a/icons/turf/walls/survival_pod_walls.dmi and b/icons/turf/walls/survival_pod_walls.dmi differ diff --git a/icons/turf/walls/uranium_wall.dmi b/icons/turf/walls/uranium_wall.dmi index 67bbc307dd8..53146d93f12 100644 Binary files a/icons/turf/walls/uranium_wall.dmi and b/icons/turf/walls/uranium_wall.dmi differ diff --git a/icons/turf/walls/wall.dmi b/icons/turf/walls/wall.dmi index 5df919097ca..c330038999a 100644 Binary files a/icons/turf/walls/wall.dmi and b/icons/turf/walls/wall.dmi differ diff --git a/icons/turf/walls/wood_wall.dmi b/icons/turf/walls/wood_wall.dmi index 84e1c083288..a218c70a521 100644 Binary files a/icons/turf/walls/wood_wall.dmi and b/icons/turf/walls/wood_wall.dmi differ diff --git a/nano/templates/newscaster.tmpl b/nano/templates/newscaster.tmpl index c589bde4702..16c201407e3 100644 --- a/nano/templates/newscaster.tmpl +++ b/nano/templates/newscaster.tmpl @@ -96,6 +96,13 @@ Property of Nanotrasen
    {{:helper.link('Edit', 'pencil', {'set_channel_receiving' : 1})}}
+
+
Title:
+
+ {{:data.title}} + {{:helper.link('Edit', 'pencil', {'set_message_title' : 1})}} +
+
Message body:
@@ -132,7 +139,8 @@ Property of Nanotrasen
{{else}} {{for data.messages}}
- - {{:value.body}}
+ {{:value.title}}
+ {{:value.body}}
{{if value.img}}
{{/if}} @@ -198,7 +206,8 @@ Property of Nanotrasen
{{:helper.link(data.author_redacted ? 'Undo author censorship' : 'Censor channel author', null, {'censor_channel_author' : data.ref})}}

{{for data.messages}}
- - {{:value.body}}
+ {{:value.title}}
+ {{:value.body}}
{{if value.img}}
{{/if}} @@ -217,7 +226,7 @@ Property of Nanotrasen
{{else data.screen == 9}} {{:data.channel_name}} [created by: {{:data.author}}]
- Channel messages listed below. If you deem them dangerous to the station, you can
{{:helper.link('Bestow a D-Notice upon the channel', null, {'toggle_d_notice' : data.ref})}}


+ Channel messages listed below. If you deem them dangerous to the station, you can
{{:helper.link(data.censored ? 'Remove the D-Notice on the channel' : 'Bestow a D-Notice upon the channel', null, {'toggle_d_notice' : data.ref})}}


{{if data.censored}}
ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice. @@ -226,7 +235,8 @@ Property of Nanotrasen
{{else}} {{for data.messages}}
- - {{:value.body}}
+ {{:value.title}}
+ {{:value.body}}
{{if value.img}}
{{/if}} diff --git a/nano/templates/secure_data.tmpl b/nano/templates/secure_data.tmpl index d4d129e808b..bba32023a7f 100644 --- a/nano/templates/secure_data.tmpl +++ b/nano/templates/secure_data.tmpl @@ -29,24 +29,24 @@ Used In File(s): \code\game\machinery\computer\security.dm hidden.parent("td").parent("tr").hide() } } - + function selectTextField(){ var filter_text = document.getElementById('filter'); filter_text.focus(); filter_text.select(); } - + $(window).load(function() { selectTextField(); updateSearch(); }); - + $("#filter").keyup(function() { updateSearch(); }); {{/if}} -