Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into RingRingHello
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
to_chat(src, "<span class='userdanger'>The pressure sends you flying!</span>")
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -505,6 +505,7 @@ proc/checkhtml(var/t)
|
||||
text = replacetext(text, "\[row\]", "</td><tr>")
|
||||
text = replacetext(text, "\[cell\]", "<td>")
|
||||
text = replacetext(text, "\[logo\]", "<img src = ntlogo.png>")
|
||||
text = replacetext(text, "\[time\]", "[gameTimestamp()]") // TO DO
|
||||
if(P)
|
||||
text = "<font face=\"[deffont]\" color=[P ? P.colour : "black"]>[text]</font>"
|
||||
else
|
||||
|
||||
@@ -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."
|
||||
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]"
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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())
|
||||
|
||||
@@ -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,"<span class='notice'>You secure [src] to the floor.</span>")
|
||||
anchored = TRUE
|
||||
else if(anchored)
|
||||
to_chat(user,"<span class='notice'>You unsecure and disconnect [src].</span>")
|
||||
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,"<span class='warning'>This device must be anchored by a wrench!</span>")
|
||||
return
|
||||
if(!Adjacent(user) && !isAI(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/list/dat = list()
|
||||
dat +="<div class='statusDisplay' style='text-align:center'>"
|
||||
dat += "<b><A href='?src=[UID()];action=toggle'>[!active ? "BREAK IT DOWN" : "SHUT IT DOWN"]<b></A><br>"
|
||||
dat += "</div><br>"
|
||||
dat += "<A href='?src=[UID()];action=select'> Select Track</A><br>"
|
||||
dat += "Track Selected: [selection.song_name]<br>"
|
||||
dat += "Track Length: [DisplayTimeText(selection.song_length)]<br><br>"
|
||||
dat += "<br>DJ's Soundboard:<b><br>"
|
||||
dat +="<div class='statusDisplay'><div style='text-align:center'>"
|
||||
dat += "<A href='?src=[UID()];action=horn'>Air Horn</A> "
|
||||
dat += "<A href='?src=[UID()];action=alert'>Station Alert</A> "
|
||||
dat += "<A href='?src=[UID()];action=siren'>Warning Siren</A> "
|
||||
dat += "<A href='?src=[UID()];action=honk'>Honk</A><br>"
|
||||
dat += "<A href='?src=[UID()];action=pump'>Shotgun Pump</A>"
|
||||
dat += "<A href='?src=[UID()];action=pop'>Gunshot</A>"
|
||||
dat += "<A href='?src=[UID()];action=saber'>Esword</A>"
|
||||
dat += "<A href='?src=[UID()];action=harm'>Harm Alarm</A>"
|
||||
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, "<span class='warning'>Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].</span>")
|
||||
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, "<span class='warning'>Error: You cannot change the song until the current one is over.</span>")
|
||||
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, "<span class='warning'>The device is not able to play more DJ sounds at this time.</span>")
|
||||
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
|
||||
@@ -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
|
||||
|
||||
@@ -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 = "<span class='good'>Feed story successfully submitted to [channel_name].</span>"
|
||||
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] <BR>"
|
||||
dat+="<b>[MESSAGE.title]</b> <br>"
|
||||
dat+="[MESSAGE.body] <BR>"
|
||||
if(MESSAGE.img)
|
||||
user << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
|
||||
dat+="<img src='tmp_photo[i].png' width = '180'><BR>"
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -284,3 +284,19 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] needs time to recharge!</span>")
|
||||
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
|
||||
@@ -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("<span class='notice'>[user] lights the [name] with [W].</span>")
|
||||
user.visible_message("<span class='notice'>[user] lights [src] with [W].</span>", "<span class='notice'>You light [src] with [W].</span>", "<span class='warning'>You hear a low whoosh.</span>")
|
||||
fire_act()
|
||||
|
||||
/obj/item/flag/attack_self(mob/user)
|
||||
rolled = !rolled
|
||||
user.visible_message("<span class='notice'>[user] [rolled ? "rolls up" : "unfurls"] [src].</span>", "<span class='notice'>You [rolled ? "roll up" : "unfurl"] [src].</span>", "<span class='warning'>You hear fabric rustling.</span>")
|
||||
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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
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)
|
||||
@@ -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, "<span class='notice'>You stuff the [I] in the [src], emptying the contents beforehand.</span>")
|
||||
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, "<span class='notice'>There's not enough fuel left to work with.</span>")
|
||||
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, "<span class='notice'>You've filled the makeshift explosive with welding fuel.</span>")
|
||||
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, "<span class='notice'>You wire the igniter to detonate the fuel.</span>")
|
||||
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, "<span class='warning'>You light the [name]!</span>")
|
||||
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 HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>")
|
||||
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!")
|
||||
|
||||
@@ -52,23 +52,12 @@
|
||||
if(sig)
|
||||
to_chat(user, "<span class='warning'>This beartrap already has a signaler hooked up to it!</span>")
|
||||
return
|
||||
IED = I
|
||||
switch(IED.assembled)
|
||||
if(0,1) //if it's not fueled/hooked up
|
||||
to_chat(user, "<span class='warning'>You haven't prepared this IED yet!</span>")
|
||||
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, "<span class='notice'>You sneak the [IED] underneath the pressure plate and connect the trigger wire.</span>")
|
||||
desc = "A trap used to catch bears and other legged creatures. <span class='warning'>There is an IED hooked up to it.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You shouldn't be reading this message! Contact a coder or someone, something broke!</span>")
|
||||
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, "<span class='notice'>You sneak [IED] underneath the pressure plate and connect the trigger wire.</span>")
|
||||
desc = "A trap used to catch bears and other legged creatures. <span class='warning'>There is an IED hooked up to it.</span>"
|
||||
if(istype(I, /obj/item/device/assembly/signaler))
|
||||
if(IED)
|
||||
to_chat(user, "<span class='warning'>This beartrap already has an IED hooked up to it!</span>")
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
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)
|
||||
@@ -94,6 +94,7 @@
|
||||
basestate = "window"
|
||||
health = 160
|
||||
reinf = 1
|
||||
explosion_block = 3
|
||||
|
||||
/obj/structure/window/full/shuttle/New()
|
||||
..()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
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
|
||||
@@ -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,
|
||||
|
||||
@@ -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 += "<br>" //just looks nicer
|
||||
dat += text("[capitalize(s.name)]: [s.amount] <A href='?src=[UID()];release=[s.type]'>Release</A><br>")
|
||||
|
||||
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): <A href='?src=[UID()];plasteel=1'>Smelt</A><BR>")
|
||||
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): <A href='?src=[UID()];plasglass=1'>Smelt</A><BR>"
|
||||
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): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/metal;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/plasteel'>Smelt</A><BR>")
|
||||
if(titaniumstack && plasmastack && min(titaniumstack.amount, plasmastack.amount))
|
||||
dat += text("Plastitanium Alloy (Titanium + Plasma): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/mineral/titanium;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/mineral/plastitanium'>Smelt</A><BR>")
|
||||
if(glassstack && plasmastack && min(glassstack.amount, plasmastack.amount))
|
||||
dat += text("Plasma Glass (Glass + Plasma): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/glass;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/plasmaglass'>Smelt</A><BR>")
|
||||
dat += text("<br><div class='statusDisplay'><b>Mineral Value List:</b><BR>[get_ore_values()]</div>")
|
||||
|
||||
var/datum/browser/popup = new(user, "console_stacking_machine", "Ore Redemption Machine", 400, 500)
|
||||
@@ -242,37 +253,24 @@
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
|
||||
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, "<span class='warning'>Required access not found.</span>")
|
||||
|
||||
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, "<span class='warning'>Required access not found.</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -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("<A href='?src=[UID()];sel_iron=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_iron=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_iron=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Iron: [machine.ore_iron]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_iron=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Iron: [machine.ore_iron]<br>"
|
||||
else
|
||||
machine.selected_iron = 0
|
||||
|
||||
//sand - glass
|
||||
if(machine.ore_glass)
|
||||
if(machine.selected_glass==1)
|
||||
dat += text("<A href='?src=[UID()];sel_glass=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_glass=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_glass=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Sand: [machine.ore_glass]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_glass=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Sand: [machine.ore_glass]<br>"
|
||||
else
|
||||
machine.selected_glass = 0
|
||||
|
||||
//plasma
|
||||
if(machine.ore_plasma)
|
||||
if(machine.selected_plasma==1)
|
||||
dat += text("<A href='?src=[UID()];sel_plasma=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_plasma=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_plasma=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Plasma: [machine.ore_plasma]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_plasma=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Plasma: [machine.ore_plasma]<br>"
|
||||
else
|
||||
machine.selected_plasma = 0
|
||||
|
||||
//uranium
|
||||
if(machine.ore_uranium)
|
||||
if(machine.selected_uranium==1)
|
||||
dat += text("<A href='?src=[UID()];sel_uranium=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_uranium=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_uranium=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Uranium: [machine.ore_uranium]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_uranium=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Uranium: [machine.ore_uranium]<br>"
|
||||
else
|
||||
machine.selected_uranium = 0
|
||||
|
||||
//gold
|
||||
if(machine.ore_gold)
|
||||
if(machine.selected_gold==1)
|
||||
dat += text("<A href='?src=[UID()];sel_gold=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_gold=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_gold=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Gold: [machine.ore_gold]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_gold=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Gold: [machine.ore_gold]<br>"
|
||||
else
|
||||
machine.selected_gold = 0
|
||||
|
||||
//silver
|
||||
if(machine.ore_silver)
|
||||
if(machine.selected_silver==1)
|
||||
dat += text("<A href='?src=[UID()];sel_silver=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_silver=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_silver=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Silver: [machine.ore_silver]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_silver=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Silver: [machine.ore_silver]<br>"
|
||||
else
|
||||
machine.selected_silver = 0
|
||||
|
||||
//diamond
|
||||
if(machine.ore_diamond)
|
||||
if(machine.selected_diamond==1)
|
||||
dat += text("<A href='?src=[UID()];sel_diamond=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_diamond=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_diamond=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Diamond: [machine.ore_diamond]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_diamond=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Diamond: [machine.ore_diamond]<br>"
|
||||
else
|
||||
machine.selected_diamond = 0
|
||||
|
||||
//bananium
|
||||
if(machine.ore_clown)
|
||||
if(machine.selected_clown==1)
|
||||
dat += text("<A href='?src=[UID()];sel_clown=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_clown=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_clown=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Bananium: [machine.ore_clown]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_clown=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Bananium: [machine.ore_clown]<br>"
|
||||
else
|
||||
machine.selected_clown = 0
|
||||
|
||||
//tranquillite
|
||||
if(machine.ore_mime)
|
||||
if(machine.selected_mime==1)
|
||||
dat += text("<A href='?src=[UID()];sel_mime=no'><font color='green'>Smelting</font></A> ")
|
||||
dat += "<A href='?src=[UID()];sel_mime=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += text("<A href='?src=[UID()];sel_mime=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Tranquillite: [machine.ore_mime]<br>")
|
||||
dat += "<A href='?src=[UID()];sel_mime=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Tranquillite: [machine.ore_mime]<br>"
|
||||
else
|
||||
machine.selected_mime = 0
|
||||
|
||||
//titanium
|
||||
if(machine.ore_titanium)
|
||||
if (machine.selected_titanium==1)
|
||||
dat += "<A href='?src=\ref[src];sel_titanium=no'><font color='green'>Smelting</font></A> "
|
||||
else
|
||||
dat += "<A href='?src=\ref[src];sel_titanium=yes'><font color='red'>Not smelting</font></A> "
|
||||
dat += "Titanium: [machine.ore_titanium]<br>"
|
||||
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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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]<br>")
|
||||
if(amt_uranium)
|
||||
dat += text("Uranium ore: [amt_uranium]<br>")
|
||||
if(amt_titanium)
|
||||
dat += text("Titanium ore: [amt_titanium]<br>")
|
||||
if(amt_clown)
|
||||
dat += text("Bananium ore: [amt_clown]<br>")
|
||||
if(amt_mime)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -239,6 +239,7 @@
|
||||
\[list\] - \[/list\] : A list.<br>
|
||||
\[*\] : A dot used for lists.<br>
|
||||
\[hr\] : Adds a horizontal rule.
|
||||
\[time\] : Inserts the current station time in HH:MM:SS.<br>
|
||||
</BODY></HTML>"}, "window=paper_help")
|
||||
|
||||
/obj/item/weapon/paper/Topic(href, href_list)
|
||||
|
||||
@@ -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("<span class='suicide'>[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!</span>")
|
||||
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, "<span class='notice'>You unfold [src].</span>")
|
||||
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, "<span class='notice'>You should unfold [src] before changing it.</span>")
|
||||
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("<span class='warning'>[user] accidentally ignites themselves!</span>", \
|
||||
"<span class='userdanger'>You miss [src] and accidentally light yourself on fire!</span>")
|
||||
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("<span class='danger'>[user] lights [src] on fire with [P]!</span>", "<span class='danger'>You lights [src] on fire!</span>")
|
||||
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("<span class='danger'>[src] hits [H] in the eye!</span>")
|
||||
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, "<span class='notice'>You fold [src] into the shape of a plane!</span>")
|
||||
user.unEquip(src)
|
||||
I = new /obj/item/weapon/paperplane(user, src)
|
||||
user.put_in_hands(I)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You lack the dexterity to fold [src].</span>")
|
||||
@@ -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),
|
||||
)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}."
|
||||
)
|
||||
),
|
||||
|
||||
@@ -56,6 +56,56 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">21 February 2018</h2>
|
||||
<h3 class="author">uraniummeltdown updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added titanium and plastitanium. Mine the asteroid for titanium, make plastitanium by smelting together titanium and plasma</li>
|
||||
<li class="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</li>
|
||||
<li class="tweak">Shuttle windows have explosion resistance now</li>
|
||||
<li class="tweak">A few RnD recipes require titanium now</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">20 February 2018</h2>
|
||||
<h3 class="author">Alffd updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Reduce all atmospheric stuns by 80%</li>
|
||||
<li class="tweak">Cap the maximum atmospheric stun time to 4 seconds</li>
|
||||
</ul>
|
||||
<h3 class="author">Anasari updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Add paperplane. Alt-click or use a verb on a piece of paper in your hand to make them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Birdtalon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">adds [time] tag for paperwork</li>
|
||||
</ul>
|
||||
<h3 class="author">Citinited updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">You can now roll up flags.</li>
|
||||
</ul>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds in a Dance Machine</li>
|
||||
<li class="tweak">IEDs now have a blast radius again</li>
|
||||
<li class="tweak">Slap crafting of IEDs is gone; use personal crafting instead</li>
|
||||
</ul>
|
||||
<h3 class="author">HugoLuman updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">coughing and sneezing sounds for the Drask</li>
|
||||
</ul>
|
||||
<h3 class="author">MarcellusPye updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Grays can now drink sulphuric acid without being burnt</li>
|
||||
</ul>
|
||||
<h3 class="author">Shazbot updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes Patch's patch</li>
|
||||
</ul>
|
||||
<h3 class="author">Tayyyyyyy, bryanayalalugo updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">News reporters can now add titles to their stories!</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">05 February 2018</h2>
|
||||
<h3 class="author">IK3I updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -6051,3 +6051,34 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
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
|
||||
|
||||
|
Before Width: | Height: | Size: 366 KiB After Width: | Height: | Size: 358 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 282 KiB |
|
Before Width: | Height: | Size: 443 KiB After Width: | Height: | Size: 443 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 395 KiB After Width: | Height: | Size: 416 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -96,6 +96,13 @@ Property of Nanotrasen</font><br>
|
||||
{{:helper.link('Edit', 'pencil', {'set_channel_receiving' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>Title:</div>
|
||||
<div class='itemContent'>
|
||||
<a style='float: left; padding-right: 6px;'>{{:data.title}}</a>
|
||||
{{:helper.link('Edit', 'pencil', {'set_message_title' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>Message body:</div>
|
||||
<div class='itemContent'>
|
||||
@@ -132,7 +139,8 @@ Property of Nanotrasen</font><br>
|
||||
{{else}}
|
||||
{{for data.messages}}
|
||||
<div class='statusDisplay'>
|
||||
- {{:value.body}}<br>
|
||||
<b>{{:value.title}}</b><br>
|
||||
{{:value.body}}<br>
|
||||
{{if value.img}}
|
||||
<img src='data:image/png;base64,{{:value.img}}' width=180><br>
|
||||
{{/if}}
|
||||
@@ -198,7 +206,8 @@ Property of Nanotrasen</font><br>
|
||||
<i>{{:helper.link(data.author_redacted ? 'Undo author censorship' : 'Censor channel author', null, {'censor_channel_author' : data.ref})}}</i><br><hr>
|
||||
{{for data.messages}}
|
||||
<div class='statusDisplay'>
|
||||
- {{:value.body}}<br>
|
||||
<b>{{:value.title}}</b><br>
|
||||
{{:value.body}}<br>
|
||||
{{if value.img}}
|
||||
<img src='{{:value.img}}' width=180><br>
|
||||
{{/if}}
|
||||
@@ -217,7 +226,7 @@ Property of Nanotrasen</font><br>
|
||||
</div>
|
||||
{{else data.screen == 9}} <!-- NEWSCASTER_D_NOTICE_FC -->
|
||||
<b>{{:data.channel_name}}</b> <i><font size=1>[created by: <span class='good'>{{:data.author}}</span>]</font></i><br>
|
||||
<i>Channel messages listed below. If you deem them dangerous to the station, you can <div style='clear: both;'>{{:helper.link('Bestow a D-Notice upon the channel', null, {'toggle_d_notice' : data.ref})}}</div></i><br><hr>
|
||||
<i>Channel messages listed below. If you deem them dangerous to the station, you can <div style='clear: both;'>{{:helper.link(data.censored ? 'Remove the D-Notice on the channel' : 'Bestow a D-Notice upon the channel', null, {'toggle_d_notice' : data.ref})}}</div></i><br><hr>
|
||||
{{if data.censored}}
|
||||
<div class='statusDisplay'>
|
||||
<b class='bad'>ATTENTION: </b>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</font><br>
|
||||
{{else}}
|
||||
{{for data.messages}}
|
||||
<div class='statusDisplay'>
|
||||
- {{:value.body}}<br>
|
||||
<b>{{:value.title}}</b><br>
|
||||
{{:value.body}}<br>
|
||||
{{if value.img}}
|
||||
<img src='{{:value.img}}' width=180><br>
|
||||
{{/if}}
|
||||
|
||||
@@ -216,6 +216,7 @@
|
||||
#include "code\datums\mind.dm"
|
||||
#include "code\datums\mixed.dm"
|
||||
#include "code\datums\modules.dm"
|
||||
#include "code\datums\mutable_appearance.dm"
|
||||
#include "code\datums\periodic_news.dm"
|
||||
#include "code\datums\progressbar.dm"
|
||||
#include "code\datums\recipe.dm"
|
||||
@@ -535,6 +536,7 @@
|
||||
#include "code\game\machinery\constructable_frame.dm"
|
||||
#include "code\game\machinery\cryo.dm"
|
||||
#include "code\game\machinery\cryopod.dm"
|
||||
#include "code\game\machinery\dance_machine.dm"
|
||||
#include "code\game\machinery\deployable.dm"
|
||||
#include "code\game\machinery\door_control.dm"
|
||||
#include "code\game\machinery\doppler_array.dm"
|
||||
@@ -1884,6 +1886,7 @@
|
||||
#include "code\modules\paperwork\paper.dm"
|
||||
#include "code\modules\paperwork\paper_bundle.dm"
|
||||
#include "code\modules\paperwork\paperbin.dm"
|
||||
#include "code\modules\paperwork\paperplane.dm"
|
||||
#include "code\modules\paperwork\pen.dm"
|
||||
#include "code\modules\paperwork\photocopier.dm"
|
||||
#include "code\modules\paperwork\photography.dm"
|
||||
|
||||