Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into super-special-awesome-dynamic
This commit is contained in:
@@ -949,7 +949,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
<tr>
|
||||
<th>Uniform:</th>
|
||||
<td>
|
||||
[uniform_select]
|
||||
[uniform_select]
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
var/obj/chosen_obj = text2path(chosen)
|
||||
|
||||
var/list/settings = list(
|
||||
"mainsettings" = list(
|
||||
"name" = list("desc" = "Name", "type" = "string", "value" = "Bob"),
|
||||
"mainsettings" = list(
|
||||
"name" = list("desc" = "Name", "type" = "string", "value" = "Bob"),
|
||||
"maxhealth" = list("desc" = "Max. health", "type" = "number", "value" = 100),
|
||||
"access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"),
|
||||
"access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"),
|
||||
"objtype" = list("desc" = "Base obj type", "type" = "datum", "path" = "/obj", "value" = "[chosen]"),
|
||||
"googlyeyes" = list("desc" = "Googly eyes", "type" = "boolean", "value" = "No"),
|
||||
"disableai" = list("desc" = "Disable AI", "type" = "boolean", "value" = "Yes"),
|
||||
@@ -27,7 +27,7 @@
|
||||
"dropitem" = list("desc" = "Drop obj on death", "type" = "boolean", "value" = "Yes"),
|
||||
"mobtype" = list("desc" = "Base mob type", "type" = "datum", "path" = "/mob/living/simple_animal/hostile/mimic/copy", "value" = "/mob/living/simple_animal/hostile/mimic/copy"),
|
||||
"ckey" = list("desc" = "ckey", "type" = "ckey", "value" = "none"),
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
var/list/prefreturn = presentpreflikepicker(usr,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings)
|
||||
|
||||
@@ -393,23 +393,22 @@
|
||||
name = "Dissection Guide"
|
||||
icon_state = "alienpaper_words"
|
||||
info = {"<b>Dissection for Dummies</b><br>
|
||||
|
||||
<br>
|
||||
1.Acquire fresh specimen.<br>
|
||||
2.Put the specimen on operating table.<br>
|
||||
3.Apply surgical drapes, preparing for experimental dissection.<br>
|
||||
4.Apply scalpel to specimen's torso.<br>
|
||||
5.Clamp bleeders on specimen's torso with a hemostat.<br>
|
||||
6.Retract skin of specimen's torso with a retractor.<br>
|
||||
7.Apply scalpel again to specimen's torso.<br>
|
||||
8.Search through the specimen's torso with your hands to remove any superfluous organs.<br>
|
||||
9.Insert replacement gland (Retrieve one from gland storage).<br>
|
||||
10.Consider dressing the specimen back to not disturb the habitat. <br>
|
||||
11.Put the specimen in the experiment machinery.<br>
|
||||
12.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.<br>
|
||||
13.You will receive one supply credit, and the subject will be counted towards your quota.<br>
|
||||
<br>
|
||||
Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
<br>
|
||||
1.Acquire fresh specimen.<br>
|
||||
2.Put the specimen on operating table.<br>
|
||||
3.Apply surgical drapes, preparing for experimental dissection.<br>
|
||||
4.Apply scalpel to specimen's torso.<br>
|
||||
5.Clamp bleeders on specimen's torso with a hemostat.<br>
|
||||
6.Retract skin of specimen's torso with a retractor.<br>
|
||||
7.Apply scalpel again to specimen's torso.<br>
|
||||
8.Search through the specimen's torso with your hands to remove any superfluous organs.<br>
|
||||
9.Insert replacement gland (Retrieve one from gland storage).<br>
|
||||
10.Consider dressing the specimen back to not disturb the habitat. <br>
|
||||
11.Put the specimen in the experiment machinery.<br>
|
||||
12.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.<br>
|
||||
13.You will receive one supply credit, and the subject will be counted towards your quota.<br>
|
||||
<br>
|
||||
Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
|
||||
/obj/item/paper/guides/antag/abductor/update_icon()
|
||||
return
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/janitor //six scriptures, plus a fabricator
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \
|
||||
/datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
|
||||
/datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
|
||||
|
||||
/obj/item/clockwork/slab/cyborg/service //six scriptures, plus xray vision
|
||||
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant,/datum/clockwork_scripture/create_object/stargazer, \
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A && construct_type)
|
||||
notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_CONSTRUCT)
|
||||
notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_CONSTRUCT, ignore_dnr_observers = TRUE)
|
||||
GLOB.poi_list += src
|
||||
LAZYADD(GLOB.mob_spawners[name], src)
|
||||
|
||||
@@ -39,7 +39,9 @@
|
||||
. = ..()
|
||||
|
||||
//ATTACK GHOST IGNORING PARENT RETURN VALUE
|
||||
/obj/item/clockwork/construct_chassis/attack_ghost(mob/user)
|
||||
/obj/item/clockwork/construct_chassis/attack_ghost(mob/dead/observer/user)
|
||||
if(!user.can_reenter_round())
|
||||
return FALSE
|
||||
if(!SSticker.mode)
|
||||
to_chat(user, "<span class='danger'>You cannot use that before the game has started.</span>")
|
||||
return
|
||||
|
||||
@@ -493,7 +493,7 @@
|
||||
desc = "You peer within this smokey orb and glimpse terrible fates befalling the escape shuttle."
|
||||
icon = 'icons/obj/cult.dmi'
|
||||
icon_state ="shuttlecurse"
|
||||
var/global/curselimit = 0
|
||||
var/static/curselimit = 0
|
||||
|
||||
/obj/item/shuttle_curse/attack_self(mob/living/user)
|
||||
if(!iscultist(user))
|
||||
@@ -530,7 +530,7 @@
|
||||
playsound(user.loc, 'sound/effects/glassbr1.ogg', 50, 1)
|
||||
qdel(src)
|
||||
sleep(20)
|
||||
var/global/list/curses
|
||||
var/static/list/curses
|
||||
if(!curses)
|
||||
curses = list("A fuel technician just slit his own throat and begged for death.",
|
||||
"The shuttle's navigation programming was replaced by a file containing just two words: IT COMES.",
|
||||
|
||||
@@ -249,7 +249,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
convertee.adjustFireLoss(-(burndamage * 0.75))
|
||||
convertee.visible_message("<span class='warning'>[convertee] writhes in pain \
|
||||
[brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!</span>", \
|
||||
"<span class='cultlarge'><i>AAAAAAAAAAAAAA-</i></span>")
|
||||
"<span class='cultlarge'><i>AAAAAAAAAAAAAA-</i></span>")
|
||||
SSticker.mode.add_cultist(convertee.mind, 1)
|
||||
new /obj/item/melee/cultblade/dagger(get_turf(src))
|
||||
convertee.mind.special_role = ROLE_CULTIST
|
||||
@@ -848,10 +848,10 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
fail_invoke()
|
||||
log_game("Manifest rune failed - too many summoned ghosts")
|
||||
return list()
|
||||
notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
|
||||
notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src, ignore_dnr_observers = TRUE)
|
||||
var/list/ghosts_on_rune = list()
|
||||
for(var/mob/dead/observer/O in T)
|
||||
if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O))
|
||||
if(!QDELETED(O) && O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && O.can_reenter_round())
|
||||
ghosts_on_rune += O
|
||||
if(!ghosts_on_rune.len)
|
||||
to_chat(user, "<span class='cultitalic'>There are no spirits near [src]!</span>")
|
||||
|
||||
@@ -64,7 +64,7 @@ GLOBAL_VAR_INIT(war_declared, FALSE)
|
||||
for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec)
|
||||
D.jammed = TRUE
|
||||
|
||||
GLOB.war_declared = TRUE
|
||||
GLOB.war_declared = TRUE
|
||||
var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
|
||||
var/actual_players = GLOB.joined_player_list.len - nukeops.len
|
||||
var/tc_malus = 0
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_dnr_observers = TRUE)
|
||||
|
||||
/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
|
||||
@@ -340,9 +340,9 @@
|
||||
to_chat(victim, "<span class='notice'>You feel a dark presence from [A.name]</span>")
|
||||
|
||||
/obj/item/voodoo/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
user.gib()
|
||||
return(BRUTELOSS)
|
||||
user.visible_message("<span class='suicide'>[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
user.gib()
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume)
|
||||
if(target)
|
||||
|
||||
@@ -695,16 +695,16 @@
|
||||
dat += {"
|
||||
<head>
|
||||
<style type="text/css">
|
||||
body { font-size: 80%; font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; }
|
||||
ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; }
|
||||
ul#tabs li { display: inline; }
|
||||
ul#tabs li a { color: #42454a; background-color: #dedbde; border: 1px solid #c9c3ba; border-bottom: none; padding: 0.3em; text-decoration: none; }
|
||||
ul#tabs li a:hover { background-color: #f1f0ee; }
|
||||
ul#tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 0.7em 0.3em 0.38em 0.3em; }
|
||||
div.tabContent { border: 1px solid #c9c3ba; padding: 0.5em; background-color: #f1f0ee; }
|
||||
div.tabContent.hide { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
body { font-size: 80%; font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; }
|
||||
ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; }
|
||||
ul#tabs li { display: inline; }
|
||||
ul#tabs li a { color: #42454a; background-color: #dedbde; border: 1px solid #c9c3ba; border-bottom: none; padding: 0.3em; text-decoration: none; }
|
||||
ul#tabs li a:hover { background-color: #f1f0ee; }
|
||||
ul#tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 0.7em 0.3em 0.38em 0.3em; }
|
||||
div.tabContent { border: 1px solid #c9c3ba; padding: 0.5em; background-color: #f1f0ee; }
|
||||
div.tabContent.hide { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
"}
|
||||
dat += {"[content]</body></html>"}
|
||||
return dat
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/atom/var/CanAtmosPass = ATMOS_PASS_YES
|
||||
/atom/var/CanAtmosPassVertical = ATMOS_PASS_YES
|
||||
|
||||
/atom/proc/CanAtmosPass(turf/T)
|
||||
switch (CanAtmosPass)
|
||||
if (ATMOS_PASS_PROC)
|
||||
@@ -8,42 +10,47 @@
|
||||
else
|
||||
return CanAtmosPass
|
||||
|
||||
/turf/closed/CanAtmosPass = ATMOS_PASS_NO
|
||||
/turf/CanAtmosPass = ATMOS_PASS_NO
|
||||
/turf/CanAtmosPassVertical = ATMOS_PASS_NO
|
||||
|
||||
/turf/open/CanAtmosPass = ATMOS_PASS_PROC
|
||||
/turf/open/CanAtmosPass(turf/T)
|
||||
var/R
|
||||
if(blocks_air || T.blocks_air)
|
||||
R = 1
|
||||
/turf/open/CanAtmosPassVertical = ATMOS_PASS_PROC
|
||||
|
||||
/turf/open/CanAtmosPass(turf/T, vertical = FALSE)
|
||||
var/dir = vertical? get_dir_multiz(src, T) : get_dir(src, T)
|
||||
var/opp = dir_inverse_multiz(dir)
|
||||
var/R = FALSE
|
||||
if(vertical && !(zAirOut(dir, T) && T.zAirIn(dir, src)))
|
||||
R = TRUE
|
||||
if(blocks_air || T.blocks_air)
|
||||
R = TRUE
|
||||
if (T == src)
|
||||
return !R
|
||||
for(var/obj/O in contents+T.contents)
|
||||
var/turf/other = (O.loc == src ? T : src)
|
||||
if(!CANATMOSPASS(O, other))
|
||||
R = 1
|
||||
if(!(vertical? (CANVERTICALATMOSPASS(O, other)) : (CANATMOSPASS(O, other))))
|
||||
R = TRUE
|
||||
if(O.BlockSuperconductivity()) //the direction and open/closed are already checked on CanAtmosPass() so there are no arguments
|
||||
var/D = get_dir(src, T)
|
||||
atmos_supeconductivity |= D
|
||||
D = get_dir(T, src)
|
||||
T.atmos_supeconductivity |= D
|
||||
return 0 //no need to keep going, we got all we asked
|
||||
atmos_supeconductivity |= dir
|
||||
T.atmos_supeconductivity |= opp
|
||||
return FALSE //no need to keep going, we got all we asked
|
||||
|
||||
atmos_supeconductivity &= ~get_dir(src, T)
|
||||
T.atmos_supeconductivity &= ~get_dir(T, src)
|
||||
atmos_supeconductivity &= ~dir
|
||||
T.atmos_supeconductivity &= ~opp
|
||||
|
||||
return !R
|
||||
|
||||
|
||||
|
||||
/atom/movable/proc/BlockSuperconductivity() // objects that block air and don't let superconductivity act. Only firelocks atm.
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/turf/proc/CalculateAdjacentTurfs()
|
||||
var/list/atmos_adjacent_turfs = src.atmos_adjacent_turfs
|
||||
for(var/direction in GLOB.cardinals)
|
||||
var/turf/T = get_step(src, direction)
|
||||
if(!T)
|
||||
/turf/proc/ImmediateCalculateAdjacentTurfs()
|
||||
var/canpass = CANATMOSPASS(src, src)
|
||||
var/canvpass = CANVERTICALATMOSPASS(src, src)
|
||||
for(var/direction in GLOB.cardinals_multiz)
|
||||
var/turf/T = get_step_multiz(src, direction)
|
||||
if(!isopenturf(T))
|
||||
continue
|
||||
if( !(blocks_air || T.blocks_air) && CANATMOSPASS(T, src) )
|
||||
if(!(blocks_air || T.blocks_air) && ((direction & (UP|DOWN))? (canvpass && CANVERTICALATMOSPASS(T, src)) : (canpass && CANATMOSPASS(T, src))) )
|
||||
LAZYINITLIST(atmos_adjacent_turfs)
|
||||
LAZYINITLIST(T.atmos_adjacent_turfs)
|
||||
atmos_adjacent_turfs[T] = TRUE
|
||||
@@ -72,11 +79,13 @@
|
||||
|
||||
var/turf/curloc = src
|
||||
|
||||
for (var/direction in GLOB.diagonals)
|
||||
for (var/direction in GLOB.diagonals_multiz)
|
||||
var/matchingDirections = 0
|
||||
var/turf/S = get_step(curloc, direction)
|
||||
var/turf/S = get_step_multiz(curloc, direction)
|
||||
if(!S)
|
||||
continue
|
||||
|
||||
for (var/checkDirection in GLOB.cardinals)
|
||||
for (var/checkDirection in GLOB.cardinals_multiz)
|
||||
var/turf/checkTurf = get_step(S, checkDirection)
|
||||
if(!S.atmos_adjacent_turfs || !S.atmos_adjacent_turfs[checkTurf])
|
||||
continue
|
||||
@@ -98,13 +107,13 @@
|
||||
|
||||
/turf/air_update_turf(command = 0)
|
||||
if(command)
|
||||
CalculateAdjacentTurfs()
|
||||
ImmediateCalculateAdjacentTurfs()
|
||||
SSair.add_to_active(src,command)
|
||||
|
||||
/atom/movable/proc/move_update_air(turf/T)
|
||||
if(isturf(T))
|
||||
T.air_update_turf(1)
|
||||
air_update_turf(1)
|
||||
if(isturf(T))
|
||||
T.air_update_turf(1)
|
||||
air_update_turf(1)
|
||||
|
||||
/atom/proc/atmos_spawn_air(text) //because a lot of people loves to copy paste awful code lets just make an easy proc to spawn your plasma fires
|
||||
var/turf/open/T = get_turf(src)
|
||||
|
||||
@@ -42,8 +42,7 @@
|
||||
|
||||
/turf/open/Destroy()
|
||||
if(active_hotspot)
|
||||
qdel(active_hotspot)
|
||||
active_hotspot = null
|
||||
QDEL_NULL(active_hotspot)
|
||||
// Adds the adjacent turfs to the current atmos processing
|
||||
for(var/T in atmos_adjacent_turfs)
|
||||
SSair.add_to_active(T)
|
||||
|
||||
@@ -28,8 +28,8 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/piping_layer = PIPING_LAYER_DEFAULT
|
||||
var/pipe_flags = NONE
|
||||
|
||||
var/global/list/iconsetids = list()
|
||||
var/global/list/pipeimages = list()
|
||||
var/static/list/iconsetids = list()
|
||||
var/static/list/pipeimages = list()
|
||||
|
||||
var/image/pipe_vision_img = null
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
|
||||
if(ishuman(occupant))
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
cold_protection = H.get_cold_protection(air1.temperature)
|
||||
cold_protection = H.get_thermal_protection(air1.temperature, TRUE)
|
||||
|
||||
if(abs(temperature_delta) > 1)
|
||||
var/air_heat_capacity = air1.heat_capacity()
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
obj/machinery/atmospherics/pipe/simple/multiz ///This is an atmospherics pipe which can relay air up a deck (Z+1). It currently only supports being on pipe layer 1
|
||||
name = "multi deck pipe adapter"
|
||||
desc = "An adapter which allows pipes to connect to other pipenets on different decks."
|
||||
icon_state = "multiz_pipe"
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/multiz/update_icon()
|
||||
. = ..()
|
||||
cut_overlays() //This adds the overlay showing it's a multiz pipe. This should go above turfs and such
|
||||
var/image/multiz_overlay_node = new(src) //If we have a firing state, light em up!
|
||||
multiz_overlay_node.icon = 'icons/obj/atmos.dmi'
|
||||
multiz_overlay_node.icon_state = "multiz_pipe"
|
||||
multiz_overlay_node.layer = HIGH_OBJ_LAYER
|
||||
add_overlay(multiz_overlay_node)
|
||||
|
||||
///Attempts to locate a multiz pipe that's above us, if it finds one it merges us into its pipenet
|
||||
/obj/machinery/atmospherics/pipe/simple/multiz/pipeline_expansion()
|
||||
icon = 'icons/obj/atmos.dmi' //Just to refresh.
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/machinery/atmospherics/pipe/simple/multiz/above = locate(/obj/machinery/atmospherics/pipe/simple/multiz) in(SSmapping.get_turf_above(T))
|
||||
var/obj/machinery/atmospherics/pipe/simple/multiz/below = locate(/obj/machinery/atmospherics/pipe/simple/multiz) in(SSmapping.get_turf_below(T))
|
||||
if(below)
|
||||
below.pipeline_expansion() //If we've got one below us, force it to add us on facebook
|
||||
if(above)
|
||||
nodes += above
|
||||
above.nodes += src //Two way travel :)
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
@@ -44,9 +44,8 @@
|
||||
return
|
||||
if(isobserver(user))
|
||||
var/mob/dead/observer/O = user
|
||||
if(!O.can_reenter_round)
|
||||
to_chat(user, "<span class='warning'>You are unable to reenter the round.</span>")
|
||||
return
|
||||
if(!O.can_reenter_round())
|
||||
return FALSE
|
||||
var/ghost_role = alert(latejoinercalling ? "Latejoin as [mob_name]? (This is a ghost role, and as such, it's very likely to be off-station.)" : "Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(ghost_role == "No" || !loc)
|
||||
return
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
/datum/bounty/item/assistant/strange_object
|
||||
name = "Strange Object"
|
||||
description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away."
|
||||
reward = 600
|
||||
wanted_types = list(/obj/item/relic)
|
||||
//Moved Maint Loot and other assorted bounties to silly.dm
|
||||
|
||||
/datum/bounty/item/assistant/scooter
|
||||
name = "Scooter"
|
||||
description = "Nanotrasen has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up."
|
||||
reward = 850 // the mat hoffman
|
||||
reward = 900 // the mat hoffman
|
||||
wanted_types = list(/obj/vehicle/ridden/scooter)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/bounty/item/assistant/skateboard
|
||||
name = "Skateboard"
|
||||
description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up."
|
||||
reward = 700 // the tony hawk
|
||||
reward = 750 // the tony hawk
|
||||
wanted_types = list(/obj/vehicle/ridden/scooter/skateboard)
|
||||
|
||||
/datum/bounty/item/assistant/stunprod
|
||||
@@ -26,8 +22,8 @@
|
||||
/datum/bounty/item/assistant/soap
|
||||
name = "Soap"
|
||||
description = "Soap has gone missing from CentCom's bathrooms and nobody knows who took it. Replace it and be the hero CentCom needs."
|
||||
reward = 1000
|
||||
required_count = 3
|
||||
reward = 1200
|
||||
required_count = 3 //You can (apparently) get soap from the mining rewards vendor.
|
||||
wanted_types = list(/obj/item/soap)
|
||||
|
||||
/datum/bounty/item/assistant/spear
|
||||
@@ -50,12 +46,6 @@
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/structure/statue)
|
||||
|
||||
/datum/bounty/item/assistant/clown_box
|
||||
name = "Clown Box"
|
||||
description = "The universe needs laughter. Stamp cardboard with a clown stamp and ship it out."
|
||||
reward = 750
|
||||
wanted_types = list(/obj/item/storage/box/clown)
|
||||
|
||||
/datum/bounty/item/assistant/cheesiehonkers
|
||||
name = "Cheesie Honkers"
|
||||
description = "Apparently the company that makes Cheesie Honkers is going out of business soon. CentCom wants to stock up before it happens!"
|
||||
@@ -76,44 +66,38 @@
|
||||
reward = 1250
|
||||
wanted_types = list(/obj/item/extendohand)
|
||||
|
||||
/datum/bounty/item/assistant/donut
|
||||
name = "Donuts"
|
||||
description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale."
|
||||
reward = 2000
|
||||
required_count = 10
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/donut)
|
||||
// /datum/bounty/item/assistant/donut
|
||||
// name = "Donuts"
|
||||
// description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale."
|
||||
// reward = 2000
|
||||
// required_count = 10
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/donut)
|
||||
|
||||
/datum/bounty/item/assistant/donkpocket
|
||||
name = "Donk-Pockets"
|
||||
description = "Consumer safety recall: Warning. Donk-Pockets manufactured in the past year contain hazardous lizard biomatter. Return units to CentCom immediately."
|
||||
reward = 1000
|
||||
required_count = 10
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/donkpocket)
|
||||
// /datum/bounty/item/assistant/donkpocket
|
||||
// name = "Donk-Pockets"
|
||||
// description = "Consumer safety recall: Warning. Donk-Pockets manufactured in the past year contain hazardous lizard biomatter. Return units to CentCom immediately."
|
||||
// reward = 1000
|
||||
// required_count = 10
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/donkpocket)
|
||||
|
||||
/datum/bounty/item/assistant/briefcase
|
||||
name = "Briefcase"
|
||||
description = "Central Command will be holding a business convention this year. Ship a few briefcases in support."
|
||||
reward = 1500
|
||||
required_count = 5
|
||||
reward = 1200
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/storage/briefcase, /obj/item/storage/secure/briefcase)
|
||||
|
||||
/datum/bounty/item/assistant/sunglasses
|
||||
name = "Sunglasses"
|
||||
description = "A famous blues duo is passing through the sector, but they've lost their shades and they can't perform. Ship new sunglasses to CentCom to rectify this."
|
||||
reward = 1000
|
||||
required_count = 2
|
||||
wanted_types = list(/obj/item/clothing/glasses/sunglasses)
|
||||
|
||||
/datum/bounty/item/assistant/monkey_hide
|
||||
name = "Monkey Hide"
|
||||
description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it."
|
||||
reward = 500
|
||||
reward = 1250
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/stack/sheet/animalhide/monkey)
|
||||
|
||||
/datum/bounty/item/assistant/shard
|
||||
name = "Shards"
|
||||
description = "A killer clown has been stalking CentCom, and staff have been unable to catch her because she's not wearing shoes. Please ship some shards so that a booby trap can be constructed."
|
||||
reward = 500
|
||||
reward = 750
|
||||
required_count = 15
|
||||
wanted_types = list(/obj/item/shard)
|
||||
|
||||
@@ -124,20 +108,20 @@
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/structure/chair/comfy)
|
||||
|
||||
/datum/bounty/item/assistant/geranium
|
||||
name = "Geraniums"
|
||||
description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you."
|
||||
reward = 1000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy/geranium)
|
||||
// /datum/bounty/item/assistant/geranium
|
||||
// name = "Geraniums"
|
||||
// description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you."
|
||||
// reward = 1000
|
||||
// required_count = 3
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy/geranium)
|
||||
|
||||
/datum/bounty/item/assistant/poppy
|
||||
name = "Poppies"
|
||||
description = "Commander Zot really wants to sweep Security Officer Olivia off her feet. Send a shipment of Poppies - her favorite flower - and he'll happily reward you."
|
||||
reward = 1000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy)
|
||||
include_subtypes = FALSE
|
||||
// /datum/bounty/item/assistant/poppy
|
||||
// name = "Poppies"
|
||||
// description = "Commander Zot really wants to sweep Security Officer Olivia off her feet. Send a shipment of Poppies - her favorite flower - and he'll happily reward you."
|
||||
// reward = 1000
|
||||
// required_count = 3
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy)
|
||||
// include_subtypes = FALSE
|
||||
|
||||
/datum/bounty/item/assistant/shadyjims
|
||||
name = "Shady Jim's"
|
||||
@@ -152,13 +136,13 @@
|
||||
required_count = 8
|
||||
wanted_types = list(/obj/item/twohanded/required/kirbyplants)
|
||||
|
||||
/datum/bounty/item/assistant/earmuffs
|
||||
name = "Earmuffs"
|
||||
description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/clothing/ears/earmuffs)
|
||||
// /datum/bounty/item/assistant/earmuffs
|
||||
// name = "Earmuffs"
|
||||
// description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance."
|
||||
// reward = 1000
|
||||
// wanted_types = list(/obj/item/clothing/ears/earmuffs)
|
||||
|
||||
/datum/bounty/item/assistant/handcuffs
|
||||
/datum/bounty/item/assistant/cuffs
|
||||
name = "Handcuffs"
|
||||
description = "A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints)."
|
||||
reward = 1000
|
||||
@@ -203,15 +187,36 @@
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi)
|
||||
|
||||
/datum/bounty/item/assistant/action_figures
|
||||
name = "Action Figures"
|
||||
description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints."
|
||||
reward = 4000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/toy/figure)
|
||||
|
||||
/datum/bounty/item/assistant/tail_whip
|
||||
name = "Nine Tails whip"
|
||||
description = "Commander Jackson is looking for a fine addition to her exotic weapons collection. She will reward you handsomely for either a Cat or Liz o' Nine Tails."
|
||||
reward = 4000
|
||||
wanted_types = list(/obj/item/melee/chainofcommand/tailwhip)
|
||||
|
||||
/datum/bounty/item/assistant/bolas
|
||||
name = "Bolas"
|
||||
description = "Centcom's chef has lost their mind. They're streaking naked though the halls, greased up with butter and cooking oil. Send some bola's so we can capture them."
|
||||
reward = 1000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/restraints/legcuffs/bola)
|
||||
|
||||
/datum/bounty/item/assistant/metalshields
|
||||
name = "Metal Shields"
|
||||
description = "NT is testing the effects of electricity on clowns wielding metal shields. We have clowns, and we have electricity. Send us the shields."
|
||||
reward = 1400
|
||||
required_count = 4
|
||||
wanted_types = list(/obj/item/shield/makeshift)
|
||||
|
||||
/datum/bounty/item/assistant/toolbelts
|
||||
name = "Tool Belts"
|
||||
description = "These things always seem to go missing. Ship us a few to help us restock."
|
||||
reward = 1350
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/storage/belt/utility)
|
||||
|
||||
/datum/bounty/item/assistant/gasmasks
|
||||
name = "Gas Masks"
|
||||
description = "The good news is that we have more miasma than we'll ever need. The bad news is, somone opened the release valve on the canisters. Ship us some gas masks!"
|
||||
reward = 1100
|
||||
required_count = 4
|
||||
wanted_types = list(/obj/item/clothing/mask/gas)
|
||||
|
||||
@@ -135,11 +135,11 @@
|
||||
bonus_desc = "Not to be confused with eggplants."
|
||||
multiplier = 2
|
||||
|
||||
/datum/bounty/item/botany/kudzu
|
||||
name = "Kudzu Pods"
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/kudzupod)
|
||||
bonus_desc = "Store in a dry, dark place."
|
||||
multiplier = 4
|
||||
// /datum/bounty/item/botany/kudzu
|
||||
// name = "Kudzu Pods"
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/kudzupod)
|
||||
// bonus_desc = "Store in a dry, dark place."
|
||||
// multiplier = 4
|
||||
|
||||
/datum/bounty/item/botany/watermelon
|
||||
name = "Watermelons"
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
/datum/bounty/item/chef/birthday_cake
|
||||
name = "Birthday Cake"
|
||||
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday)
|
||||
//Moved (most) bounties requiring botany to gardencook.dm Roundstart cook bounties go here.
|
||||
|
||||
/datum/bounty/item/chef/soup
|
||||
name = "Soup"
|
||||
@@ -11,20 +7,6 @@
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/soup)
|
||||
|
||||
/datum/bounty/item/chef/popcorn
|
||||
name = "Popcorn Bags"
|
||||
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
|
||||
reward = 800
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn)
|
||||
|
||||
/datum/bounty/item/chef/onionrings
|
||||
name = "Onion Rings"
|
||||
description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support."
|
||||
reward = 800
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/onionrings)
|
||||
|
||||
/datum/bounty/item/chef/icecreamsandwich
|
||||
name = "Ice Cream Sandwiches"
|
||||
description = "Upper management has been screaming non-stop for ice cream. Please send some."
|
||||
@@ -51,13 +33,6 @@
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/salad)
|
||||
|
||||
/datum/bounty/item/chef/carrotfries
|
||||
name = "Carrot Fries"
|
||||
description = "Night sight can mean life or death! A shipment of carrot fries is the order."
|
||||
reward = 1300
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries)
|
||||
|
||||
/datum/bounty/item/chef/superbite
|
||||
name = "Super Bite Burger"
|
||||
description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
|
||||
@@ -70,11 +45,11 @@
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel)
|
||||
|
||||
/datum/bounty/item/chef/cubancarp
|
||||
name = "Cuban Carp"
|
||||
description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom."
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/cubancarp)
|
||||
// /datum/bounty/item/chef/cubancarp
|
||||
// name = "Cuban Carp"
|
||||
// description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom."
|
||||
// reward = 3000
|
||||
// wanted_types = list(/obj/item/reagent_containers/food/snacks/cubancarp)
|
||||
|
||||
/datum/bounty/item/chef/hotdog
|
||||
name = "Hot Dog"
|
||||
@@ -82,13 +57,6 @@
|
||||
reward = 4000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/hotdog)
|
||||
|
||||
/datum/bounty/item/chef/eggplantparm
|
||||
name = "Eggplant Parmigianas"
|
||||
description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
|
||||
reward = 2500
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/eggplantparm)
|
||||
|
||||
/datum/bounty/item/chef/muffin
|
||||
name = "Muffins"
|
||||
description = "The Muffin Man is visiting CentCom, but he's forgotten his muffins! Your order is to rectify this."
|
||||
@@ -129,3 +97,41 @@
|
||||
required_count = 6
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/nugget)
|
||||
|
||||
/datum/bounty/item/chef/khachapuri
|
||||
name = "Khachapuri"
|
||||
description = "Bread and eggs. Bread and eggs. Bread and eggs. Also, cheese."
|
||||
reward = 2000
|
||||
required_count = 2
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/khachapuri)
|
||||
|
||||
/datum/bounty/item/chef/ratkebab
|
||||
name = "Rat Kebabs"
|
||||
description = "Centcom is requesting some -special- kebabs for it's service staff."
|
||||
reward = 1800
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/kebab/rat)
|
||||
|
||||
/datum/bounty/item/chef/benedict
|
||||
name = "Eggs Benedict"
|
||||
description = "Command requires a high-calory breakfast item. Ship it right away."
|
||||
reward = 1750
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/benedict)
|
||||
|
||||
/datum/bounty/item/chef/braincake
|
||||
name = "Brain Cake"
|
||||
description = "The science division requires a brain cake for testing purposes. Don't ask."
|
||||
reward = 1200
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/brain)
|
||||
|
||||
/datum/bounty/item/chef/waffles
|
||||
name = "Waffles"
|
||||
description = "Security staff at Centcom are looking for a fun treat. Ship us some waffles so they can fill the cells."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/waffles)
|
||||
|
||||
/datum/bounty/item/chef/sugarcookie
|
||||
name = "Sugar Cookies"
|
||||
description = "Everyone needs a little sugar in their life. Ship some sweets to Command so we can satiate our sweet tooth."
|
||||
reward = 1200
|
||||
required_count = 6
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/sugarcookie)
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/datum/bounty/item/chef/birthday_cake
|
||||
name = "Birthday Cake"
|
||||
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday)
|
||||
|
||||
/datum/bounty/item/gardencook/carrotfries
|
||||
name = "Carrot Fries"
|
||||
description = "Night sight can mean life or death! A shipment of carrot fries is the order."
|
||||
reward = 1300
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries)
|
||||
|
||||
/datum/bounty/item/gardencook/eggplantparm
|
||||
name = "Eggplant Parmigianas"
|
||||
description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
|
||||
reward = 2500
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/eggplantparm)
|
||||
|
||||
/datum/bounty/item/gardencook/popcorn
|
||||
name = "Popcorn Bags"
|
||||
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
|
||||
reward = 800
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn)
|
||||
|
||||
/datum/bounty/item/gardencook/onionrings
|
||||
name = "Onion Rings"
|
||||
description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support."
|
||||
reward = 800
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/onionrings)
|
||||
|
||||
/datum/bounty/item/gardencook/khinkali
|
||||
name = "Khinkali"
|
||||
description = "Requesting -some khinki stuff- for a private staff party at Centcom"
|
||||
reward = 2400
|
||||
required_count = 6
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/khinkali)
|
||||
|
||||
/datum/bounty/item/gardencook/bakedbeans
|
||||
name = "Beans"
|
||||
description = "Management wants to make sure we have a fallback shelter to rely on. Prepare some beans to stock it with."
|
||||
reward = 1600
|
||||
required_count = 8
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/beans)
|
||||
|
||||
/datum/bounty/item/gardencook/honeybun
|
||||
name = "Honeybun"
|
||||
description = "Something sticky, something fun, ship us a honeybun."
|
||||
reward = 3500
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/honeybun)
|
||||
@@ -0,0 +1,54 @@
|
||||
/datum/bounty/item/silly/paper_plane
|
||||
name = "Paper Planes"
|
||||
description = "Centcom is running an experiment on which type of paper plane is the most aerodynamically stable. Send us some samples to further our study."
|
||||
reward = 900
|
||||
required_count = 15
|
||||
wanted_types = list(/obj/item/paperplane)
|
||||
|
||||
/datum/bounty/item/silly/mousetraps
|
||||
name = "Mouse Traps"
|
||||
description = "Some shoeless hoodlum is intentionally tracking paint all over Centcom. Send us some mouse traps so we can capture the culprit."
|
||||
reward = 1200
|
||||
required_count = 12
|
||||
wanted_types = list(/obj/item/assembly/mousetrap)
|
||||
|
||||
/datum/bounty/item/silly/action_figures
|
||||
name = "Action Figures"
|
||||
description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints."
|
||||
reward = 3000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/toy/figure)
|
||||
|
||||
/datum/bounty/item/silly/clown_box
|
||||
name = "Clown Box"
|
||||
description = "The universe needs laughter. Stamp cardboard with a clown stamp and ship it out."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/storage/box/clown)
|
||||
|
||||
/datum/bounty/item/silly/peels
|
||||
name = "Banana Peels"
|
||||
description = "Centcom is running an experiment to see if a slip-n-slide can be made entirely out of banana peels, but noone wants to eat that many bananas. Ship us some fresh peels."
|
||||
reward = 950
|
||||
required_count = 12
|
||||
wanted_types = list(/obj/item/grown/bananapeel)
|
||||
|
||||
/datum/bounty/item/silly/shoes
|
||||
name = "Shoes"
|
||||
description = "An assistant stole a clown's shoes, the clown incinerated every pair we had. Send us some new footwear please."
|
||||
reward = 1200
|
||||
required_count = 8
|
||||
wanted_types = list(/obj/item/clothing/shoes)
|
||||
exclude_types = list(/obj/item/clothing/shoes/wraps, /obj/item/clothing/shoes/wraps/silver, /obj/item/clothing/shoes/wraps/red, /obj/item/clothing/shoes/wraps/blue)
|
||||
|
||||
/datum/bounty/item/silly/sunglasses
|
||||
name = "Sunglasses"
|
||||
description = "A famous blues duo is passing through the sector, but they've lost their shades and they can't perform. Ship new sunglasses to CentCom to rectify this."
|
||||
reward = 1400
|
||||
required_count = 2
|
||||
wanted_types = list(/obj/item/clothing/glasses/sunglasses)
|
||||
|
||||
/datum/bounty/item/silly/strange_object
|
||||
name = "Strange Object"
|
||||
description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/relic)
|
||||
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
|
||||
|
||||
// Returns a new bounty of random type, but does not add it to GLOB.bounties_list.
|
||||
/proc/random_bounty()
|
||||
switch(rand(1, 13))
|
||||
switch(rand(1, 15))
|
||||
if(1)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
|
||||
return new subtype
|
||||
@@ -115,6 +115,12 @@ GLOBAL_LIST_EMPTY(bounties_list)
|
||||
if(13)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/botany))
|
||||
return new subtype
|
||||
if(14)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/silly))
|
||||
return new subtype
|
||||
if(15)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/gardencook))
|
||||
return new subtype
|
||||
|
||||
// Called lazily at startup to populate GLOB.bounties_list with random bounties.
|
||||
/proc/setup_bounties()
|
||||
@@ -130,7 +136,9 @@ GLOBAL_LIST_EMPTY(bounties_list)
|
||||
/datum/bounty/item/engineering = 1,
|
||||
/datum/bounty/item/mining = 2,
|
||||
/datum/bounty/item/medical = 2,
|
||||
/datum/bounty/item/botany = 2)
|
||||
/datum/bounty/item/botany = 2,
|
||||
/datum/bounty/item/silly = 1,
|
||||
/datum/bounty/item/gardencook = 1)
|
||||
|
||||
for(var/the_type in easy_add_list_subtypes)
|
||||
for(var/i in 1 to easy_add_list_subtypes[the_type])
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Used to order supplies, approve requests, and control the shuttle."
|
||||
icon_screen = "supply"
|
||||
circuit = /obj/item/circuitboard/computer/cargo
|
||||
req_access = list(ACCESS_CARGO)
|
||||
var/requestonly = FALSE
|
||||
var/contraband = FALSE
|
||||
var/safety_warning = "For safety reasons, the automated supply shuttle \
|
||||
@@ -17,6 +18,7 @@
|
||||
desc = "Used to request supplies from cargo."
|
||||
icon_screen = "request"
|
||||
circuit = /obj/item/circuitboard/computer/cargo/request
|
||||
req_access = list()
|
||||
requestonly = TRUE
|
||||
|
||||
/obj/machinery/computer/cargo/Initialize()
|
||||
@@ -29,11 +31,11 @@
|
||||
obj_flags &= ~EMAGGED
|
||||
|
||||
/obj/machinery/computer/cargo/proc/get_export_categories()
|
||||
var/cat = EXPORT_CARGO
|
||||
. = EXPORT_CARGO
|
||||
if(contraband)
|
||||
cat |= EXPORT_CONTRABAND
|
||||
. |= EXPORT_CONTRABAND
|
||||
if(obj_flags & EMAGGED)
|
||||
cat |= EXPORT_EMAG
|
||||
. |= EXPORT_EMAG
|
||||
|
||||
/obj/machinery/computer/cargo/emag_act(mob/user)
|
||||
. = ..()
|
||||
@@ -114,6 +116,9 @@
|
||||
/obj/machinery/computer/cargo/ui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return
|
||||
if(!allowed(usr))
|
||||
to_chat(usr, "<span class='notice'>Access denied.</span>")
|
||||
return
|
||||
if(action != "add" && requestonly)
|
||||
return
|
||||
switch(action)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/export_scanner
|
||||
name = "export scanner"
|
||||
desc = "A device used to check objects against Nanotrasen exports and bounty database."
|
||||
desc = "A device used to check objects against Nanotrasen exports and bounty database. Sadly can not scan reagents vaule."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "export_scanner"
|
||||
item_state = "radio"
|
||||
@@ -31,7 +31,7 @@
|
||||
else
|
||||
// Before you fix it:
|
||||
// yes, checking manifests is a part of intended functionality.
|
||||
|
||||
|
||||
var/datum/export_report/ex = export_item_and_contents(O, cargo_console.get_export_categories(), dry_run=TRUE)
|
||||
var/price = 0
|
||||
for(var/x in ex.total_amount)
|
||||
|
||||
@@ -21,9 +21,10 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
|
||||
|
||||
// Simple holder datum to pass export results around
|
||||
/datum/export_report
|
||||
var/list/exported_atoms = list() //names of atoms sold/deleted by export
|
||||
var/list/total_amount = list() //export instance => total count of sold objects of its type, only exists if any were sold
|
||||
var/list/total_value = list() //export instance => total value of sold objects
|
||||
var/list/exported_atoms = list()//names of atoms sold/deleted by export
|
||||
var/list/total_amount = list() //export instance => total count of sold objects of its type, only exists if any were sold
|
||||
var/list/total_value = list() //export instance => total value of sold objects
|
||||
var/list/total_reagents = list()//export reagents => into the total vaule of the object sold
|
||||
|
||||
// external_report works as "transaction" object, pass same one in if you're doing more than one export in single go
|
||||
/proc/export_item_and_contents(atom/movable/AM, allowed_categories = EXPORT_CARGO, apply_elastic = TRUE, delete_unsold = TRUE, dry_run=FALSE, datum/export_report/external_report)
|
||||
@@ -47,6 +48,9 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
|
||||
sold = E.sell_object(thing, report, dry_run, allowed_categories , apply_elastic)
|
||||
report.exported_atoms += " [thing.name]"
|
||||
break
|
||||
if(thing.reagents)
|
||||
for(var/datum/reagent/R in thing.reagents.reagent_list)
|
||||
report.total_reagents[R] += R.volume
|
||||
if(!dry_run && (sold || delete_unsold))
|
||||
if(ismob(thing))
|
||||
thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO)
|
||||
@@ -58,7 +62,7 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
|
||||
var/unit_name = "" // Unit name. Only used in "Received [total_amount] [name]s [message]." message
|
||||
var/message = ""
|
||||
var/cost = 100 // Cost of item, in cargo credits. Must not alow for infinite price dupes, see above.
|
||||
var/k_elasticity = 1/20 //coefficient used in marginal price calculation that roughly corresponds to the inverse of price elasticity, or "quantity elasticity" - CIT EDIT 30 - > 20
|
||||
var/k_elasticity = 1/300 //coefficient used in marginal price calculation that roughly corresponds to the inverse of price elasticity, or "quantity elasticity" - CIT EDIT 1/30 - > 0
|
||||
var/list/export_types = list() // Type of the exported object. If none, the export datum is considered base type.
|
||||
var/include_subtypes = TRUE // Set to FALSE to make the datum apply only to a strict type.
|
||||
var/list/exclude_types = list() // Types excluded from export
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
/datum/export/food
|
||||
k_elasticity = 0
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/booze //Like the kind you bottle!
|
||||
k_elasticity = 0
|
||||
unit_name = "brand unit of booze"
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/food/meat
|
||||
cost = 5
|
||||
unit_name = "protein based food"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/meat/slab)
|
||||
|
||||
/datum/export/food/raw_cutlets
|
||||
cost = 3
|
||||
unit_name = "protein based food"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/meat/rawcutlet)
|
||||
|
||||
/datum/export/food/cooked_cutlets
|
||||
cost = 4
|
||||
unit_name = "cooked protein based food"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/meat/cutlet)
|
||||
|
||||
/datum/export/food/cooked_meat
|
||||
cost = 8
|
||||
unit_name = "cooked protein based food"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/meat/steak)
|
||||
|
||||
/datum/export/food/dough
|
||||
cost = 3
|
||||
unit_name = "uncooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/dough, /obj/item/reagent_containers/food/snacks/flatdough)
|
||||
|
||||
/datum/export/food/cooked_dough
|
||||
cost = 5
|
||||
unit_name = "cooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/pizzabread)
|
||||
|
||||
/datum/export/food/buns
|
||||
cost = 3
|
||||
unit_name = "cooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/bun)
|
||||
|
||||
/datum/export/food/buns
|
||||
cost = 3
|
||||
unit_name = "cooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/bun)
|
||||
|
||||
/datum/export/food/eggs
|
||||
cost = 4
|
||||
unit_name = "cooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/friedegg)
|
||||
|
||||
/datum/export/food/eggs_food
|
||||
cost = 20
|
||||
unit_name = "cooked egg based food"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/omelette, /obj/item/reagent_containers/food/snacks/benedict, /obj/item/reagent_containers/food/snacks/salad/eggbowl)
|
||||
|
||||
/datum/export/food/sweets
|
||||
cost = 4
|
||||
unit_name = "pastery base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/rawpastrybase, /obj/item/reagent_containers/food/snacks/pastrybase)
|
||||
|
||||
/datum/export/food/cake_pie_raw
|
||||
cost = 12
|
||||
unit_name = "uncooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/cakebatter, /obj/item/reagent_containers/food/snacks/piedough)
|
||||
|
||||
/datum/export/food/cooked_cake_pie
|
||||
cost = 15
|
||||
unit_name = "cooked food base"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/store/cake/plain, /obj/item/reagent_containers/food/snacks/pie/plain)
|
||||
|
||||
/datum/export/food/glassbottle
|
||||
cost = 10
|
||||
unit_name = "glass bottle"
|
||||
export_types = list(/obj/item/reagent_containers/food/drinks/bottle)
|
||||
|
||||
/datum/export/food/produce
|
||||
cost = 3
|
||||
unit_name = "produce"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/grown)
|
||||
exclude_types = list(/obj/item/grown/log)
|
||||
|
||||
/datum/export/food/egg
|
||||
cost = 2
|
||||
unit_name = "egg"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/egg)
|
||||
|
||||
/datum/export/food/soup
|
||||
cost = 30
|
||||
unit_name = "bowl of soup"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/soup)
|
||||
|
||||
/datum/export/food/bread
|
||||
cost = 20
|
||||
unit_name = "load of bread"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/store/bread)
|
||||
|
||||
/datum/export/food/bread_slice
|
||||
cost = 4
|
||||
unit_name = "slice of bread"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/breadslice)
|
||||
|
||||
/datum/export/food/burger
|
||||
cost = 12
|
||||
unit_name = "burger"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/burger)
|
||||
|
||||
/datum/export/food/cake
|
||||
cost = 50
|
||||
unit_name = "cake"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/store/cake)
|
||||
|
||||
/datum/export/food/cake_slice
|
||||
cost = 10
|
||||
unit_name = "cake slice"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/cakeslice)
|
||||
|
||||
/datum/export/food/cheese_wheel
|
||||
cost = 70
|
||||
unit_name = "cheese wheel"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/store/cheesewheel)
|
||||
|
||||
/datum/export/food/cheese_wheel
|
||||
cost = 20
|
||||
unit_name = "cheese wedge"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/cheesewedge)
|
||||
|
||||
/datum/export/food/candy
|
||||
cost = 5
|
||||
unit_name = "candy" //Not anything from the vender
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/candy_corn, /obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/candiedapple, /obj/item/reagent_containers/food/snacks/spiderlollipop, \
|
||||
/obj/item/reagent_containers/food/snacks/chococoin, /obj/item/reagent_containers/food/snacks/fudgedice, /obj/item/reagent_containers/food/snacks/chocoorange, /obj/item/reagent_containers/food/snacks/lollipop, \
|
||||
/obj/item/reagent_containers/food/snacks/gumball, /obj/item/reagent_containers/food/snacks/tinychocolate)
|
||||
|
||||
/datum/export/food/pastery
|
||||
cost = 30
|
||||
unit_name = "baked goods"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/donut, /obj/item/reagent_containers/food/snacks/muffin, /obj/item/reagent_containers/food/snacks/waffles, /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit, \
|
||||
/obj/item/reagent_containers/food/snacks/chococornet, /obj/item/reagent_containers/food/snacks/cherrycupcake, /obj/item/reagent_containers/food/snacks/bluecherrycupcake, /obj/item/reagent_containers/food/snacks/honeybun, /obj/item/reagent_containers/food/snacks/pancakes)
|
||||
|
||||
/datum/export/food/pasta
|
||||
cost = 20
|
||||
unit_name = "pasta based meal"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/spaghetti, /obj/item/reagent_containers/food/snacks/boiledspaghetti, /obj/item/reagent_containers/food/snacks/pastatomato, /obj/item/reagent_containers/food/snacks/copypasta, \
|
||||
/obj/item/reagent_containers/food/snacks/meatballspaghetti, /obj/item/reagent_containers/food/snacks/spesslaw, /obj/item/reagent_containers/food/snacks/chowmein, /obj/item/reagent_containers/food/snacks/beefnoodle, /obj/item/reagent_containers/food/snacks/butternoodles)
|
||||
|
||||
/datum/export/food/pizza
|
||||
cost = 120
|
||||
unit_name = "pizza"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/pizza)
|
||||
|
||||
/datum/export/food/sliced_pizza
|
||||
cost = 12
|
||||
unit_name = "pizza slice"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/pizzaslice)
|
||||
|
||||
/datum/export/food/snowcone
|
||||
cost = 3
|
||||
unit_name = "snowcone"
|
||||
export_types = list(/obj/item/reagent_containers/food/snacks/snowcones)
|
||||
|
||||
/datum/export/booze/brands
|
||||
cost = 200
|
||||
unit_name = "export bottle"
|
||||
export_types = list(/obj/item/export/bottle/kahlua, /obj/item/export/bottle/whiskey, /obj/item/export/bottle/vodka, /obj/item/export/bottle/gin, \
|
||||
/obj/item/export/bottle/rum, /obj/item/export/bottle/tequila, /obj/item/export/bottle/vermouth, /obj/item/export/bottle/wine, /obj/item/export/bottle/grappa, /obj/item/export/bottle/cognac, \
|
||||
/obj/item/export/bottle/absinthe, /obj/item/export/bottle/goldschlager, /obj/item/export/bottle/patron, /obj/item/export/bottle/sake, /obj/item/export/bottle/hcider, /obj/item/export/bottle/champagne, \
|
||||
/obj/item/export/bottle/applejack, /obj/item/export/bottle/trappist, /obj/item/export/bottle/blazaam, /obj/item/export/bottle/grenadine, /obj/item/export/bottle/fernet)
|
||||
|
||||
/datum/export/booze/bottled
|
||||
cost = 400
|
||||
unit_name = "exotic brews"
|
||||
export_types = list(/obj/item/export/bottle/blooddrop, /obj/item/export/bottle/slim_gold, /obj/item/export/bottle/white_bloodmoon, /obj/item/export/bottle/greenroad)
|
||||
|
||||
/datum/export/booze/bottledkeg
|
||||
cost = 250
|
||||
unit_name = "exotic brews"
|
||||
export_types = list(/obj/item/export/bottle/minikeg) //Its just beer
|
||||
@@ -793,6 +793,7 @@ datum/export/gear/glasses //glasses are not worth selling
|
||||
//////////////////////
|
||||
/datum/export/gear/chameleon //Selling a full kit is easy money for 2 tc
|
||||
cost = 280
|
||||
k_elasticity = 0
|
||||
unit_name = "chameleon item"
|
||||
export_types = list(/obj/item/clothing/head/chameleon, /obj/item/clothing/mask/chameleon, /obj/item/clothing/under/chameleon, /obj/item/clothing/suit/chameleon, /obj/item/clothing/glasses/chameleon,\
|
||||
/obj/item/clothing/gloves/chameleon, /obj/item/clothing/head/chameleon, /obj/item/clothing/shoes/chameleon, /obj/item/storage/backpack/chameleon, \
|
||||
|
||||
@@ -24,11 +24,16 @@
|
||||
export_types = list(/obj/structure/ore_box)
|
||||
|
||||
/datum/export/large/crate/wood
|
||||
cost = 140
|
||||
cost = 140 //
|
||||
unit_name = "wooden crate"
|
||||
export_types = list(/obj/structure/closet/crate/wooden)
|
||||
exclude_types = list()
|
||||
|
||||
/datum/export/large/barrel
|
||||
cost = 500 //150 to make meaning proffit of 350
|
||||
unit_name = "wooden barrel"
|
||||
export_types = list(/obj/structure/fermenting_barrel)
|
||||
|
||||
/datum/export/large/crate/coffin
|
||||
cost = 150
|
||||
unit_name = "coffin"
|
||||
@@ -282,17 +287,17 @@
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/export/large/mech/odysseus
|
||||
cost = 5500
|
||||
cost = 7500
|
||||
unit_name = "working odysseus"
|
||||
export_types = list(/obj/mecha/medical/odysseus)
|
||||
|
||||
/datum/export/large/mech/ripley
|
||||
cost = 6500
|
||||
cost = 12000
|
||||
unit_name = "working ripley"
|
||||
export_types = list(/obj/mecha/working/ripley)
|
||||
|
||||
/datum/export/large/mech/firefighter
|
||||
cost = 9000
|
||||
cost = 14000
|
||||
unit_name = "working firefighter"
|
||||
export_types = list(/obj/mecha/working/ripley/firefighter)
|
||||
|
||||
@@ -302,12 +307,12 @@
|
||||
export_types = list(/obj/mecha/combat/gygax)
|
||||
|
||||
/datum/export/large/mech/durand
|
||||
cost = 10000
|
||||
cost = 16000
|
||||
unit_name = "working durand"
|
||||
export_types = list(/obj/mecha/combat/durand)
|
||||
|
||||
/datum/export/large/mech/phazon
|
||||
cost = 25000 //Little over half do to needing a core
|
||||
cost = 35000 //Little over half do to needing a core
|
||||
unit_name = "working phazon"
|
||||
export_types = list(/obj/mecha/combat/phazon)
|
||||
|
||||
@@ -317,7 +322,7 @@
|
||||
export_types = list(/obj/mecha/combat/marauder)
|
||||
|
||||
/datum/export/large/mech/deathripley
|
||||
cost = 8500 //Still a "Combat class" mech - Illegal tech as well! 165% "normal" boundy price.
|
||||
cost = 18500 //Still a "Combat class" mech - Illegal tech as well! 165% "normal" boundy price.
|
||||
unit_name = "working illegally modified"
|
||||
export_types = list(/obj/mecha/working/ripley/deathripley)
|
||||
|
||||
@@ -332,12 +337,12 @@
|
||||
export_types = list(/obj/mecha/working/ripley/mining)
|
||||
|
||||
/datum/export/large/mech/honk
|
||||
cost = 12000 //Still a "Combat class" mech - Comats bordem honk!
|
||||
cost = 16000 //Still a "Combat class" mech - Comats bordem honk!
|
||||
unit_name = "working honker"
|
||||
export_types = list(/obj/mecha/combat/honker)
|
||||
|
||||
/datum/export/large/mech/reticence
|
||||
cost = 12000 //Still a "Combat class" mech - Has cloking and lethal weaponds.
|
||||
cost = 16000 //Still a "Combat class" mech - Has cloking and lethal weaponds.
|
||||
unit_name = "working reticence"
|
||||
export_types = list(/obj/mecha/combat/reticence)
|
||||
|
||||
@@ -347,6 +352,6 @@
|
||||
export_types = list(/obj/mecha/combat/marauder/seraph)
|
||||
|
||||
/datum/export/large/mech/mauler
|
||||
cost = 12000 //Still a Combat class mech - CC lethal weaponds.
|
||||
cost = 25000 //Still a Combat class mech - CC lethal weaponds.
|
||||
unit_name = "working legally modified marauder"
|
||||
export_types = list(/obj/mecha/combat/marauder/mauler)
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
|
||||
/datum/export/material/plasma
|
||||
cost = 100
|
||||
k_elasticity = 0
|
||||
material_id = MAT_PLASMA
|
||||
message = "cm3 of plasma"
|
||||
|
||||
|
||||
+50
-3
@@ -8,7 +8,7 @@
|
||||
include_subtypes = FALSE
|
||||
k_elasticity = 0 //ALWAYS worth selling upgrades
|
||||
|
||||
/datum/export/orgains
|
||||
/datum/export/organs
|
||||
include_subtypes = TRUE
|
||||
k_elasticity = 0 //ALWAYS worth selling orgains
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
/datum/export/implant/breathtube
|
||||
cost = 150
|
||||
k_elasticity = 300/20 //Large before depleating
|
||||
unit_name = "breath implant"
|
||||
export_types = list(/obj/item/organ/cyberimp/mouth/breathing_tube)
|
||||
|
||||
@@ -110,7 +111,18 @@
|
||||
export_types = list(/obj/item/organ/liver)
|
||||
exclude_types = list(/obj/item/organ/liver/cybernetic, /obj/item/organ/liver/cybernetic/upgraded)
|
||||
|
||||
/datum/export/orgains/tail //Shhh
|
||||
/datum/export/organs/cybernetic
|
||||
cost = 225
|
||||
unit_name = "cybernetic organ"
|
||||
export_types = list(/obj/item/organ/liver/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/heart/cybernetic)
|
||||
exclude_types = list(/obj/item/organ/lungs/cybernetic/upgraded, /obj/item/organ/liver/cybernetic/upgraded)
|
||||
|
||||
/datum/export/organs/upgraded
|
||||
cost = 275
|
||||
unit_name = "upgraded cybernetic organ"
|
||||
export_types = list(/obj/item/organ/lungs/cybernetic/upgraded, /obj/item/organ/liver/cybernetic/upgraded)
|
||||
|
||||
/datum/export/organs/tail //Shhh
|
||||
cost = 500
|
||||
unit_name = "error shipment failer"
|
||||
export_types = list(/obj/item/organ/tail)
|
||||
@@ -136,6 +148,41 @@
|
||||
export_types = list(/obj/item/bodypart/l_arm/robot/surplus_upgraded, /obj/item/bodypart/r_arm/robot/surplus_upgraded, /obj/item/bodypart/l_leg/robot/surplus_upgraded, /obj/item/bodypart/r_leg/robot/surplus_upgraded)
|
||||
|
||||
/datum/export/robotics/surgery_gear_basic
|
||||
cost = 5
|
||||
cost = 10
|
||||
unit_name = "surgery tool"
|
||||
export_types = list(/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw, /obj/item/surgical_drapes)
|
||||
|
||||
/datum/export/robotics/mech_weapon_laser
|
||||
cost = 300 //Sadly just metal and glass
|
||||
unit_name = "mech laser based weapon"
|
||||
include_subtypes = TRUE
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam, /obj/item/mecha_parts/mecha_equipment/weapon/energy)
|
||||
|
||||
/datum/export/robotics/mech_weapon_bullet
|
||||
cost = 250
|
||||
unit_name = "mech bullet based weapon"
|
||||
include_subtypes = TRUE
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun, /obj/item/mecha_parts/mecha_equipment/weapon/honker, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic)
|
||||
|
||||
/datum/export/robotics/mech_tools
|
||||
cost = 150
|
||||
unit_name = "mech based tool"
|
||||
include_subtypes = TRUE
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, /obj/item/mecha_parts/mecha_equipment/extinguisher, /obj/item/mecha_parts/mecha_equipment/rcd, /obj/item/mecha_parts/mecha_equipment/cable_layer, \
|
||||
/obj/item/mecha_parts/mecha_equipment/drill, /obj/item/mecha_parts/mecha_equipment/mining_scanner, /obj/item/mecha_parts/mecha_equipment/medical/sleeper)
|
||||
|
||||
/datum/export/robotics/mech_blue_space
|
||||
cost = 750
|
||||
k_elasticity = 1/10
|
||||
unit_name = "mech bluespace tech"
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/teleporter, /obj/item/mecha_parts/mecha_equipment/wormhole_generator, /obj/item/mecha_parts/mecha_equipment/gravcatapult)
|
||||
|
||||
/datum/export/robotics/mech_reactors
|
||||
cost = 350
|
||||
unit_name = "mech based reactor"
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/generator/nuclear)
|
||||
|
||||
/datum/export/robotics/mech_armor
|
||||
cost = 350
|
||||
unit_name = "mech armor tech"
|
||||
export_types = list(/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster, /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster, /obj/item/mecha_parts/mecha_equipment/repair_droid)
|
||||
@@ -6,14 +6,15 @@
|
||||
export_types = list(/obj/item/solar_assembly)
|
||||
|
||||
/datum/export/solar/tracker_board
|
||||
cost = 30
|
||||
cost = 10
|
||||
unit_name = "solar tracker board"
|
||||
export_types = list(/obj/item/electronics/tracker)
|
||||
|
||||
/datum/export/solar/control_board
|
||||
cost = 75
|
||||
cost = 15
|
||||
unit_name = "solar panel control board"
|
||||
export_types = list(/obj/item/circuitboard/computer/solar_control)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/export/swarmer
|
||||
cost = 500
|
||||
@@ -30,9 +31,9 @@
|
||||
|
||||
/datum/export/board/SMES
|
||||
cost = 20
|
||||
k_elasticity = 1/2 //Only a few
|
||||
unit_name = "smes board"
|
||||
export_types = list(/obj/item/circuitboard/machine/smes)
|
||||
include_subtypes = FALSE
|
||||
|
||||
//Stock Parts
|
||||
|
||||
@@ -70,7 +71,7 @@
|
||||
export_types = list(/obj/item/stock_parts/cell)
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/cell
|
||||
/datum/export/cellupgraded
|
||||
cost = 10
|
||||
unit_name = "upgraded power cell"
|
||||
export_types = list(/obj/item/stock_parts/cell/upgraded, /obj/item/stock_parts/cell/upgraded/plus)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
unit_name = "new plant species sample"
|
||||
export_types = list(/obj/item/seeds)
|
||||
var/needs_discovery = FALSE // Only for undiscovered species
|
||||
var/global/list/discoveredPlants = list()
|
||||
var/static/list/discoveredPlants = list()
|
||||
|
||||
/datum/export/seed/get_cost(obj/O)
|
||||
var/obj/item/seeds/S = O
|
||||
|
||||
@@ -83,6 +83,11 @@
|
||||
unit_name = "wood plank"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/wood)
|
||||
|
||||
/datum/export/stack/log
|
||||
cost = 10
|
||||
unit_name = "raw wood"
|
||||
export_types = list(/obj/item/grown/log)
|
||||
|
||||
/datum/export/stack/cardboard
|
||||
cost = 2
|
||||
message = "of cardboard"
|
||||
@@ -100,11 +105,17 @@
|
||||
export_types = list(/obj/item/stack/cable_coil)
|
||||
|
||||
/datum/export/stack/cloth
|
||||
cost = 10
|
||||
cost = 20
|
||||
unit_name = "sheets"
|
||||
message = "of cloth"
|
||||
export_types = list(/obj/item/stack/sheet/cloth)
|
||||
|
||||
/datum/export/stack/silk
|
||||
cost = 200 //The new plasma
|
||||
unit_name = "sheets"
|
||||
message = "of silk"
|
||||
export_types = list(/obj/item/stack/sheet/silk)
|
||||
|
||||
/datum/export/stack/duracloth
|
||||
cost = 40
|
||||
unit_name = "sheets"
|
||||
@@ -145,4 +156,4 @@
|
||||
unit_name = "sheets"
|
||||
cost = 30
|
||||
message = "of paperframes"
|
||||
export_types = list(/obj/item/stack/sheet/paperframes)
|
||||
export_types = list(/obj/item/stack/sheet/paperframes)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/export/gear/powerdrill
|
||||
cost = 25
|
||||
k_elasticity = 1/40 //Market can only take so much
|
||||
k_elasticity = 1/80 //Market can only take so much
|
||||
unit_name = "power tool"
|
||||
export_types = list(/obj/item/crowbar/power, /obj/item/screwdriver/power, \
|
||||
/obj/item/weldingtool/experimental, /obj/item/wirecutters/power, /obj/item/wrench/power)
|
||||
@@ -65,13 +65,13 @@
|
||||
|
||||
// Basic tools
|
||||
/datum/export/basicmining
|
||||
cost = 20
|
||||
cost = 30
|
||||
unit_name = "basic mining tool"
|
||||
export_types = list(/obj/item/pickaxe, /obj/item/pickaxe/mini, /obj/item/shovel, /obj/item/resonator)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/export/upgradedmining
|
||||
cost = 50
|
||||
cost = 80
|
||||
unit_name = "mining tool"
|
||||
export_types = list(/obj/item/pickaxe/silver, /obj/item/pickaxe/drill, /obj/item/gun/energy/plasmacutter, /obj/item/resonator/upgraded)
|
||||
include_subtypes = FALSE
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
/datum/export/weapon/temp_gun
|
||||
cost = 175 //Its just smaller
|
||||
unit_name = "small temperature gun"
|
||||
k_elasticity = 1/5 //Its just a smaller temperature gun, easy to mass make
|
||||
k_elasticity = 1/30 //Its just a smaller temperature gun, easy to mass make
|
||||
export_types = list(/obj/item/gun/energy/temperature)
|
||||
|
||||
/datum/export/weapon/flowergun
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
/datum/export/weapon/ioncarbine
|
||||
cost = 200
|
||||
k_elasticity = 1/5 //Its just a smaller temperature gun, easy to mass make
|
||||
k_elasticity = 1/30 //Its just a smaller temperature gun, easy to mass make
|
||||
unit_name = "ion carbine"
|
||||
export_types = list(/obj/item/gun/energy/ionrifle/carbine)
|
||||
|
||||
@@ -174,12 +174,12 @@
|
||||
/////////////////
|
||||
|
||||
/datum/export/weapon/wtammo
|
||||
cost = 10
|
||||
cost = 15
|
||||
unit_name = "WT-550 automatic rifle ammo"
|
||||
export_types = list(/obj/item/ammo_box/magazine/wt550m9, /obj/item/ammo_box/magazine/wt550m9/wtrubber)
|
||||
|
||||
/datum/export/weapon/wtammo/advanced
|
||||
cost = 30
|
||||
cost = 45
|
||||
unit_name = "advanced WT-550 automatic rifle ammo"
|
||||
export_types = list( /obj/item/ammo_box/magazine/wt550m9/wtap, /obj/item/ammo_box/magazine/wt550m9/wttx, /obj/item/ammo_box/magazine/wt550m9/wtic)
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
export_types = list(/obj/item/firing_pin/test_range)
|
||||
|
||||
/datum/export/weapon/techslug
|
||||
cost = 15
|
||||
cost = 25
|
||||
k_elasticity = 0
|
||||
unit_name = "advanced shotgun shell"
|
||||
export_types = list(/obj/item/ammo_casing/shotgun/dragonsbreath, /obj/item/ammo_casing/shotgun/meteorslug, /obj/item/ammo_casing/shotgun/pulseslug, /obj/item/ammo_casing/shotgun/frag12, /obj/item/ammo_casing/shotgun/ion, /obj/item/ammo_casing/shotgun/laserslug)
|
||||
@@ -345,13 +345,13 @@
|
||||
export_types = list(/obj/item/storage/toolbox/gold_real)
|
||||
|
||||
/datum/export/weapon/melee
|
||||
cost = 30
|
||||
cost = 50
|
||||
unit_name = "unlisted weapon"
|
||||
export_types = list(/obj/item/melee)
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/weapon/gun
|
||||
cost = 30
|
||||
cost = 50
|
||||
unit_name = "unlisted weapon"
|
||||
export_types = list(/obj/item/gun)
|
||||
include_subtypes = TRUE
|
||||
|
||||
@@ -10,6 +10,21 @@
|
||||
group = "Livestock"
|
||||
crate_type = /obj/structure/closet/crate/critter
|
||||
|
||||
/datum/supply_pack/critter/animal_feed
|
||||
name = "Animal Feed Crate"
|
||||
desc = "Feed for livestock, like cows and hens. Contains fifty Wheat bundles and fifty Oat bundles."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/reagent_containers/food/snacks/grown/wheat,
|
||||
/obj/item/reagent_containers/food/snacks/grown/oat)
|
||||
crate_name = "animal feed crate"
|
||||
crate_type = /obj/structure/closet/crate/freezer
|
||||
|
||||
/datum/supply_pack/critter/animal_feed/generate()
|
||||
. = ..()
|
||||
for(var/i in 1 to 49)
|
||||
new /obj/item/reagent_containers/food/snacks/grown/wheat(.)
|
||||
|
||||
|
||||
/datum/supply_pack/critter/butterfly
|
||||
name = "Butterflies Crate"
|
||||
desc = "Not a very dangerous insect, but they do give off a better image than, say, flies or cockroaches."//is that a motherfucking worm reference
|
||||
@@ -29,7 +44,7 @@
|
||||
cost = 5000 //Cats are worth as much as corgis.
|
||||
contains = list(/mob/living/simple_animal/pet/cat,
|
||||
/obj/item/clothing/neck/petcollar,
|
||||
/obj/item/toy/cattoy)
|
||||
/obj/item/toy/cattoy)
|
||||
crate_name = "cat crate"
|
||||
|
||||
/datum/supply_pack/critter/cat/generate()
|
||||
|
||||
@@ -65,6 +65,28 @@
|
||||
contains = list(/obj/item/stack/sheet/mineral/wood/fifty)
|
||||
crate_name = "wood planks crate"
|
||||
|
||||
/datum/supply_pack/organic/rawcotton
|
||||
name = "Raw Cotton Crate"
|
||||
desc = "Plushies have been on the down in the market, and now due to a flood of raw cotton the price of it is so cheap, its a steal! Contains 40 raw cotton sheets."
|
||||
cost = 800 // 100 net cost, 20 x 20 = 400. 300 proffit if turned into cloth sheets or more if turned to silk then 10 x 200 = 2000
|
||||
contains = list(/obj/item/stack/sheet/cotton/thirty,
|
||||
/obj/item/stack/sheet/cotton/ten
|
||||
)
|
||||
crate_name = "cotton crate"
|
||||
crate_type = /obj/structure/closet/crate/hydroponics
|
||||
|
||||
/datum/supply_pack/organic/rawlumber
|
||||
name = "Raw Lumber Crate"
|
||||
desc = "Raw logs from towercaps. Contains fifty logs."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/grown/log)
|
||||
crate_name = "lumber crate"
|
||||
|
||||
/datum/supply_pack/critter/animal_feed/generate()
|
||||
. = ..()
|
||||
for(var/i in 1 to 49)
|
||||
new /obj/item/grown/log(.)
|
||||
|
||||
/datum/supply_pack/materials/rcdammo
|
||||
name = "Spare RDC ammo"
|
||||
desc = "This crate contains sixteen RCD ammo packs, to help with any holes or projects people mite be working on."
|
||||
@@ -168,3 +190,19 @@
|
||||
contains = list(/obj/structure/reagent_dispensers/watertank/high)
|
||||
crate_name = "high-capacity water tank crate"
|
||||
crate_type = /obj/structure/closet/crate/large
|
||||
|
||||
/datum/supply_pack/materials/loom
|
||||
name = "Loom"
|
||||
desc = "A large pre-made loom."
|
||||
cost = 1000
|
||||
contains = list(/obj/structure/loom)
|
||||
crate_name = "loom crate"
|
||||
crate_type = /obj/structure/closet/crate/large
|
||||
|
||||
/datum/supply_pack/materials/wooden_barrel
|
||||
name = "Wooden Barrel"
|
||||
desc = "Wooden barrels ready for storage."
|
||||
cost = 1500
|
||||
contains = list(/obj/structure/fermenting_barrel)
|
||||
crate_name = "wooden barrel crate"
|
||||
crate_type = /obj/structure/closet/crate/large
|
||||
|
||||
@@ -69,31 +69,24 @@
|
||||
/obj/item/storage/fancy/donut_box)
|
||||
crate_name = "candy crate"
|
||||
|
||||
/datum/supply_pack/organic/cutlery
|
||||
name = "Kitchen Cutlery Deluxe Set"
|
||||
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
|
||||
cost = 10000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/sharpener,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/rollingpin, //Deluxe for a reason
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass)
|
||||
crate_name = "kitchen cutlery deluxe set"
|
||||
/datum/supply_pack/organic/exoticseeds
|
||||
name = "Exotic Seeds Crate"
|
||||
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
|
||||
cost = 1500
|
||||
contains = list(/obj/item/seeds/nettle,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/plump,
|
||||
/obj/item/seeds/liberty,
|
||||
/obj/item/seeds/amanita,
|
||||
/obj/item/seeds/reishi,
|
||||
/obj/item/seeds/banana,
|
||||
/obj/item/seeds/eggplant/eggy,
|
||||
/obj/item/seeds/random,
|
||||
/obj/item/seeds/random)
|
||||
crate_name = "exotic seeds crate"
|
||||
crate_type = /obj/structure/closet/crate/hydroponics
|
||||
|
||||
/datum/supply_pack/organic/food
|
||||
name = "Food Crate"
|
||||
@@ -120,6 +113,71 @@
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana)
|
||||
crate_name = "food crate"
|
||||
|
||||
|
||||
/datum/supply_pack/organic/fruit_1
|
||||
name = "Fruit Basic Crate"
|
||||
desc = "Getting scurvy on the station? Well heres your fixing! Contains three of each - bananas, watermelons, limes, lemons, oranges and even three pineapple."
|
||||
cost = 2250
|
||||
contains = list(/obj/item/reagent_containers/food/snacks/grown/watermelon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/watermelon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/watermelon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana)
|
||||
crate_name = "fruit crate"
|
||||
|
||||
/datum/supply_pack/organic/fruit_2
|
||||
name = "Fruit Delux Crate"
|
||||
desc = "Getting tired of the basic fruits and want to have something a bit more decadent! This crate is for you! Contains three of each - bunches of berries, apples, pineapples, cherries, green & red grapes, eggplants, bananas lastly ten strawberry."
|
||||
cost = 3500
|
||||
contains = list(/obj/item/reagent_containers/food/snacks/grown/berries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/pineapple,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes/green,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes/green,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes/green,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/eggplant,
|
||||
/obj/item/reagent_containers/food/snacks/grown/eggplant,
|
||||
/obj/item/reagent_containers/food/snacks/grown/eggplant,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry)
|
||||
crate_name = "fruit crate"
|
||||
|
||||
/datum/supply_pack/organic/cream_piee
|
||||
name = "High-yield Clown-grade Cream Pie Crate"
|
||||
desc = "Designed by Aussec's Advanced Warfare Research Division, these high-yield, Clown-grade cream pies are powered by a synergy of performance and efficiency. Guaranteed to provide maximum results."
|
||||
@@ -171,6 +229,32 @@
|
||||
crate_name = "hydroponics backpack crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/organic/cutlery
|
||||
name = "Kitchen Cutlery Deluxe Set"
|
||||
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
|
||||
cost = 10000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/sharpener,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/rollingpin, //Deluxe for a reason
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass)
|
||||
crate_name = "kitchen cutlery deluxe set"
|
||||
|
||||
/datum/supply_pack/organic/mre
|
||||
name = "MRE supply kit (emergency rations)"
|
||||
desc = "The lights are out. Oxygen's running low. You've run out of food except space weevils. Don't let this be you! Order our NT branded MRE kits today! This pack contains 5 MRE packs with a randomized menu and an oxygen tank."
|
||||
@@ -269,22 +353,3 @@
|
||||
/obj/item/valentine)
|
||||
crate_name = "valentine crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/organic/exoticseeds
|
||||
name = "Exotic Seeds Crate"
|
||||
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
|
||||
cost = 1500
|
||||
contains = list(/obj/item/seeds/nettle,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/plump,
|
||||
/obj/item/seeds/liberty,
|
||||
/obj/item/seeds/amanita,
|
||||
/obj/item/seeds/reishi,
|
||||
/obj/item/seeds/banana,
|
||||
/obj/item/seeds/eggplant/eggy,
|
||||
/obj/item/seeds/random,
|
||||
/obj/item/seeds/random)
|
||||
crate_name = "exotic seeds crate"
|
||||
crate_type = /obj/structure/closet/crate/hydroponics
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
/datum/supply_pack/science/monkey
|
||||
name = "Monkey Cube Crate"
|
||||
desc = "Stop monkeying around! Contains seven monkey cubes. Just add water!"
|
||||
cost = 2000
|
||||
cost = 1500
|
||||
contains = list (/obj/item/storage/box/monkeycubes)
|
||||
crate_name = "monkey cube crate"
|
||||
|
||||
|
||||
@@ -34,11 +34,11 @@
|
||||
desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials(tm). Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, and of course, a fedora. Requires Security access to open."
|
||||
cost = 1800
|
||||
contains = list(/obj/item/detective_scanner,
|
||||
/obj/item/storage/box/evidence,
|
||||
/obj/item/camera,
|
||||
/obj/item/taperecorder,
|
||||
/obj/item/toy/crayon/white,
|
||||
/obj/item/clothing/head/fedora/det_hat)
|
||||
/obj/item/storage/box/evidence,
|
||||
/obj/item/camera,
|
||||
/obj/item/taperecorder,
|
||||
/obj/item/toy/crayon/white,
|
||||
/obj/item/clothing/head/fedora/det_hat)
|
||||
crate_name = "forensics crate"
|
||||
|
||||
/datum/supply_pack/security/helmets
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(!(damagetype & (BRUTELOSS | FIRELOSS | TOXLOSS | OXYLOSS) ))
|
||||
adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
|
||||
death(FALSE)
|
||||
death(FALSE, penalize = TRUE)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/rapid
|
||||
name = "Gloves of the North Star"
|
||||
desc = "Just looking at these fills you with an urge to beat the shit out of people."
|
||||
desc = "Just looking at these fills you with an urge to beat the shit out of people. Violently."
|
||||
icon_state = "rapid"
|
||||
item_state = "rapid"
|
||||
transfer_prints = TRUE
|
||||
@@ -69,12 +69,10 @@
|
||||
return
|
||||
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
M.changeNext_move(CLICK_CD_RAPID)
|
||||
M.adjustStaminaLoss(-2) //Restore 2/3 of the stamina used assuming empty stam buffer. With proper stamina buffer management, this results in a net gain of +.5 stamina per click.
|
||||
if(warcry)
|
||||
M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry")
|
||||
M.changeNext_move(CLICK_CD_RAPID)
|
||||
M.adjustStaminaLoss(-3.5) // used to be -2 with some comment about stamina buffer management but *shrug -hatterhat
|
||||
if(warcry)
|
||||
M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry")
|
||||
|
||||
.= FALSE
|
||||
|
||||
@@ -86,7 +84,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/rapid/hug
|
||||
name = "Hugs of the North Star"
|
||||
desc = "Just looking at these fills you with an urge to hug the shit out of people"
|
||||
desc = "Just looking at these fills you with an urge to hug the shit out of people. In a very friendly manner."
|
||||
warcry = "owo" //Shouldn't ever come into play
|
||||
|
||||
/obj/item/clothing/gloves/rapid/hug/Touch(mob/living/target,proximity = TRUE)
|
||||
@@ -97,11 +95,11 @@
|
||||
|
||||
if(M.a_intent == INTENT_HELP)
|
||||
if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead
|
||||
if(target.on_fire || target.lying ) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions
|
||||
if(target.on_fire || target.lying) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions
|
||||
return
|
||||
else
|
||||
M.changeNext_move(CLICK_CD_RAPID)
|
||||
. = FALSE
|
||||
|
||||
/obj/item/clothing/gloves/rapid/hug/attack_self(mob/user)
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
@@ -370,3 +370,10 @@
|
||||
if(prob(3))
|
||||
message += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
/obj/item/clothing/head/assu_helmet
|
||||
name = "DAB helmet"
|
||||
icon_state = "assu_helmet"
|
||||
item_state = "assu_helmet"
|
||||
desc = "A cheap replica of old riot helmet without visor. It has \"D.A.B.\" written on the front."
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
@@ -633,3 +633,13 @@
|
||||
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
|
||||
alternate_worn_layer = UNDER_HEAD_LAYER
|
||||
|
||||
/obj/item/clothing/suit/assu_suit
|
||||
name = "DAB suit"
|
||||
desc = "A cheap replica of old SWAT armor. On its back, it is written: \"<i>Desperate Assistance Battle-force</i>\"."
|
||||
icon_state = "assu_suit"
|
||||
item_state = "assu_suit"
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
resistance_flags = NONE
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
CAT_SANDWICH,
|
||||
CAT_SOUP,
|
||||
CAT_SPAGHETTI),
|
||||
CAT_CLOTHING) //Clothing subcategories
|
||||
CAT_NONE) //Clothing subcategories
|
||||
|
||||
var/datum/action/innate/crafting/button
|
||||
var/display_craftable_only = FALSE
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
name = "Liz O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -93,7 +93,7 @@
|
||||
name = "Cat O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip/kitty
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
@@ -14,13 +14,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Unstable bluespace anomaly"
|
||||
P.info = "Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name]."
|
||||
P.update_icon()
|
||||
print_command_report("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Unstable bluespace anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -15,13 +15,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Localized hyper-energetic flux wave"
|
||||
P.info = "Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name]."
|
||||
P.update_icon()
|
||||
print_command_report("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].","Localized hyper-energetic flux wave")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -14,13 +14,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Gravitational anomaly"
|
||||
P.info = "Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name]."
|
||||
P.update_icon()
|
||||
print_command_report("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Gravitational anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -13,13 +13,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Pyroclastic anomaly"
|
||||
P.info = "Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name]."
|
||||
P.update_icon()
|
||||
print_command_report("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Pyroclastic anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_pyro/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -15,13 +15,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Vortex anomaly"
|
||||
P.info = "Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]."
|
||||
P.update_icon()
|
||||
print_command_report("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name].","Vortex anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
weight = 10
|
||||
max_occurrences = 1
|
||||
|
||||
earliest_start = 60 MINUTES
|
||||
min_players = 40
|
||||
earliest_start = 40 MINUTES
|
||||
min_players = 35
|
||||
|
||||
gamemode_blacklist = list("blob","dynamic") //Just in case a blob survives that long
|
||||
|
||||
@@ -18,13 +18,7 @@
|
||||
if(prob(75))
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak5")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "level 5 biohazard"
|
||||
P.info = "Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak."
|
||||
P.update_icon()
|
||||
print_command_report("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "level 5 biohazard")
|
||||
|
||||
/datum/round_event/ghost_role/blob/spawn_role()
|
||||
if(!GLOB.blobstart.len)
|
||||
|
||||
@@ -39,13 +39,8 @@
|
||||
if(prob(50))
|
||||
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Rampant brand intelligence"
|
||||
P.info = "Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source]."
|
||||
P.update_icon()
|
||||
print_command_report("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Rampant brand intelligence")
|
||||
|
||||
/datum/round_event/brand_intelligence/start()
|
||||
for(var/obj/machinery/vending/V in GLOB.machines)
|
||||
if(!is_station_level(V.z))
|
||||
|
||||
@@ -18,13 +18,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Biological entities"
|
||||
P.info = "Unknown biological entities have been detected near [station_name()], you may wish to break out arms."
|
||||
P.update_icon()
|
||||
print_command_report("Unknown biological entities have been detected near [station_name()], you may wish to break out arms.", "Biological entities")
|
||||
|
||||
|
||||
/datum/round_event/carp_migration/start()
|
||||
|
||||
@@ -16,13 +16,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Electrical Storm"
|
||||
P.info = "An electrical storm has been detected in your area, please repair potential electronic overloads."
|
||||
P.update_icon()
|
||||
print_command_report("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm")
|
||||
|
||||
/datum/round_event/electrical_storm/start()
|
||||
var/list/epicentreList = list()
|
||||
|
||||
@@ -67,62 +67,62 @@
|
||||
/obj/item/valentine/New()
|
||||
..()
|
||||
message = pick("Roses are red / Violets are good / One day while Andy...",
|
||||
"My love for you is like the singularity. It cannot be contained.",
|
||||
"Will you be my lusty xenomorph maid?",
|
||||
"We go together like the clown and the external airlock.",
|
||||
"Roses are red / Liches are wizards / I love you more than a whole squad of lizards.",
|
||||
"Be my valentine. Law 2.",
|
||||
"You must be a mime, because you leave me speechless.",
|
||||
"I love you like Ian loves the HoP.",
|
||||
"You're hotter than a plasma fire in toxins.",
|
||||
"Are you a rogue atmos tech? Because you're taking my breath away.",
|
||||
"Could I have all access... to your heart?",
|
||||
"Call me the doctor, because I'm here to inspect your johnson.",
|
||||
"I'm not a changeling, but you make my proboscis extend.",
|
||||
"I just can't get EI NATH of you.",
|
||||
"You must be a nuke op, because you make my heart explode.",
|
||||
"Roses are red / Botany is a farm / Not being my Valentine / causes human harm.",
|
||||
"I want you more than an assistant wants insulated gloves.",
|
||||
"If I was a security officer, I'd brig you all shift.",
|
||||
"Are you the janitor? Because I think I've fallen for you.",
|
||||
"You're always valid to my heart.",
|
||||
"I'd risk the wrath of the gods to bwoink you.",
|
||||
"You look as beautiful now as the last time you were cloned.",
|
||||
"Someone check the gravitational generator, because I'm only attracted to you.",
|
||||
"If I were the warden I'd always let you into my armory.",
|
||||
"The virologist is rogue, and the only cure is a kiss from you.",
|
||||
"Would you spend some time in my upgraded sleeper?",
|
||||
"You must be a silicon, because you've unbolted my heart.",
|
||||
"Are you Nar'Sie? Because there's nar-one else I sie.",
|
||||
"If you were a taser, you'd be set to stunning.",
|
||||
"Do you have stamina damage from running through my dreams?",
|
||||
"If I were an alien, would you let me hug you?",
|
||||
"My love for you is stronger than a reinforced wall.",
|
||||
"This must be the captain's office, because I see a fox.",
|
||||
"I'm not a highlander, but there can only be one for me.",
|
||||
"The floor is made of lava! Quick, get on my bed.",
|
||||
"If you were an abandoned station you'd be the DEARelict.",
|
||||
"If you had a pickaxe you'd be a shaft FINEr.",
|
||||
"Roses are red, tide is gray, if I were an assistant I'd steal you away.",
|
||||
"Roses are red, text is green, I love you more than cleanbots clean.",
|
||||
"If you were a carp I'd fi-lay you.",
|
||||
"I'm a nuke op, and my pinpointer leads to your heart.",
|
||||
"Wanna slay my megafauna?",
|
||||
"I'm a clockwork cultist. Or zl inyragvar.",
|
||||
"If you were a disposal bin I'd ride you all day.",
|
||||
"Put on your explorer's suit because I'm taking you to LOVEaland.",
|
||||
"I must be the CMO, 'cause I saw you on my CUTE sensors.",
|
||||
"You're the vomit to my flyperson.",
|
||||
"You must be liquid dark matter, because you're pulling me closer.",
|
||||
"Not even sorium can drive me away from you.",
|
||||
"Wanna make like a borg and do some heavy petting?",
|
||||
"Are you powering the station? Because you super matter to me.",
|
||||
"I wish science could make me a bag of holding you.",
|
||||
"Let's call the emergency CUDDLE.",
|
||||
"I must be tripping on BZ, because I saw an angel walk by.",
|
||||
"Wanna empty out my tool storage?",
|
||||
"Did you visit the medbay after you fell from heaven?",
|
||||
"Are you wearing space pants? Wanna not be?" )
|
||||
"My love for you is like the singularity. It cannot be contained.",
|
||||
"Will you be my lusty xenomorph maid?",
|
||||
"We go together like the clown and the external airlock.",
|
||||
"Roses are red / Liches are wizards / I love you more than a whole squad of lizards.",
|
||||
"Be my valentine. Law 2.",
|
||||
"You must be a mime, because you leave me speechless.",
|
||||
"I love you like Ian loves the HoP.",
|
||||
"You're hotter than a plasma fire in toxins.",
|
||||
"Are you a rogue atmos tech? Because you're taking my breath away.",
|
||||
"Could I have all access... to your heart?",
|
||||
"Call me the doctor, because I'm here to inspect your johnson.",
|
||||
"I'm not a changeling, but you make my proboscis extend.",
|
||||
"I just can't get EI NATH of you.",
|
||||
"You must be a nuke op, because you make my heart explode.",
|
||||
"Roses are red / Botany is a farm / Not being my Valentine / causes human harm.",
|
||||
"I want you more than an assistant wants insulated gloves.",
|
||||
"If I was a security officer, I'd brig you all shift.",
|
||||
"Are you the janitor? Because I think I've fallen for you.",
|
||||
"You're always valid to my heart.",
|
||||
"I'd risk the wrath of the gods to bwoink you.",
|
||||
"You look as beautiful now as the last time you were cloned.",
|
||||
"Someone check the gravitational generator, because I'm only attracted to you.",
|
||||
"If I were the warden I'd always let you into my armory.",
|
||||
"The virologist is rogue, and the only cure is a kiss from you.",
|
||||
"Would you spend some time in my upgraded sleeper?",
|
||||
"You must be a silicon, because you've unbolted my heart.",
|
||||
"Are you Nar'Sie? Because there's nar-one else I sie.",
|
||||
"If you were a taser, you'd be set to stunning.",
|
||||
"Do you have stamina damage from running through my dreams?",
|
||||
"If I were an alien, would you let me hug you?",
|
||||
"My love for you is stronger than a reinforced wall.",
|
||||
"This must be the captain's office, because I see a fox.",
|
||||
"I'm not a highlander, but there can only be one for me.",
|
||||
"The floor is made of lava! Quick, get on my bed.",
|
||||
"If you were an abandoned station you'd be the DEARelict.",
|
||||
"If you had a pickaxe you'd be a shaft FINEr.",
|
||||
"Roses are red, tide is gray, if I were an assistant I'd steal you away.",
|
||||
"Roses are red, text is green, I love you more than cleanbots clean.",
|
||||
"If you were a carp I'd fi-lay you.",
|
||||
"I'm a nuke op, and my pinpointer leads to your heart.",
|
||||
"Wanna slay my megafauna?",
|
||||
"I'm a clockwork cultist. Or zl inyragvar.",
|
||||
"If you were a disposal bin I'd ride you all day.",
|
||||
"Put on your explorer's suit because I'm taking you to LOVEaland.",
|
||||
"I must be the CMO, 'cause I saw you on my CUTE sensors.",
|
||||
"You're the vomit to my flyperson.",
|
||||
"You must be liquid dark matter, because you're pulling me closer.",
|
||||
"Not even sorium can drive me away from you.",
|
||||
"Wanna make like a borg and do some heavy petting?",
|
||||
"Are you powering the station? Because you super matter to me.",
|
||||
"I wish science could make me a bag of holding you.",
|
||||
"Let's call the emergency CUDDLE.",
|
||||
"I must be tripping on BZ, because I saw an angel walk by.",
|
||||
"Wanna empty out my tool storage?",
|
||||
"Did you visit the medbay after you fell from heaven?",
|
||||
"Are you wearing space pants? Wanna not be?" )
|
||||
|
||||
/obj/item/valentine/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
@@ -162,24 +162,24 @@
|
||||
/obj/item/reagent_containers/food/snacks/candyheart/New()
|
||||
..()
|
||||
desc = pick("A heart-shaped candy that reads: HONK ME",
|
||||
"A heart-shaped candy that reads: ERP",
|
||||
"A heart-shaped candy that reads: LEWD",
|
||||
"A heart-shaped candy that reads: LUSTY",
|
||||
"A heart-shaped candy that reads: SPESS LOVE",
|
||||
"A heart-shaped candy that reads: AYY LMAO",
|
||||
"A heart-shaped candy that reads: TABLE ME",
|
||||
"A heart-shaped candy that reads: HAND CUFFS",
|
||||
"A heart-shaped candy that reads: SHAFT MINER",
|
||||
"A heart-shaped candy that reads: BANGING DONK",
|
||||
"A heart-shaped candy that reads: Y-YOU T-TOO",
|
||||
"A heart-shaped candy that reads: GOT WOOD",
|
||||
"A heart-shaped candy that reads: TFW NO GF",
|
||||
"A heart-shaped candy that reads: WAG MY TAIL",
|
||||
"A heart-shaped candy that reads: VALIDTINES",
|
||||
"A heart-shaped candy that reads: FACEHUGGER",
|
||||
"A heart-shaped candy that reads: BOX OF HUGS",
|
||||
"A heart-shaped candy that reads: REEBE MINE",
|
||||
"A heart-shaped candy that reads: PET ME",
|
||||
"A heart-shaped candy that reads: TO THE DORMS",
|
||||
"A heart-shaped candy that reads: DIS MEMBER")
|
||||
"A heart-shaped candy that reads: ERP",
|
||||
"A heart-shaped candy that reads: LEWD",
|
||||
"A heart-shaped candy that reads: LUSTY",
|
||||
"A heart-shaped candy that reads: SPESS LOVE",
|
||||
"A heart-shaped candy that reads: AYY LMAO",
|
||||
"A heart-shaped candy that reads: TABLE ME",
|
||||
"A heart-shaped candy that reads: HAND CUFFS",
|
||||
"A heart-shaped candy that reads: SHAFT MINER",
|
||||
"A heart-shaped candy that reads: BANGING DONK",
|
||||
"A heart-shaped candy that reads: Y-YOU T-TOO",
|
||||
"A heart-shaped candy that reads: GOT WOOD",
|
||||
"A heart-shaped candy that reads: TFW NO GF",
|
||||
"A heart-shaped candy that reads: WAG MY TAIL",
|
||||
"A heart-shaped candy that reads: VALIDTINES",
|
||||
"A heart-shaped candy that reads: FACEHUGGER",
|
||||
"A heart-shaped candy that reads: BOX OF HUGS",
|
||||
"A heart-shaped candy that reads: REEBE MINE",
|
||||
"A heart-shaped candy that reads: PET ME",
|
||||
"A heart-shaped candy that reads: TO THE DORMS",
|
||||
"A heart-shaped candy that reads: DIS MEMBER")
|
||||
icon_state = pick("candyheart", "candyheart2", "candyheart3", "candyheart4")
|
||||
|
||||
@@ -19,10 +19,4 @@
|
||||
if(prob(50))
|
||||
priority_announce(pick(reason), "Collision Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Collision Alert"
|
||||
P.info = "[pick(reason)]"
|
||||
P.update_icon()
|
||||
print_command_report("[pick(reason)]", "Collision Alert")
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/datum/round_event/meteor_wave/setup()
|
||||
announceWhen = 1
|
||||
startWhen = rand(300, 600) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
|
||||
startWhen = rand(180, 360) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
|
||||
if(GLOB.singularity_counter)
|
||||
startWhen *= 1 - min(GLOB.singularity_counter * SINGULO_BEACON_DISTURBANCE, SINGULO_BEACON_MAX_DISTURBANCE)
|
||||
endWhen = startWhen + 60
|
||||
|
||||
@@ -23,13 +23,7 @@
|
||||
into the [location].", "Migration Alert",
|
||||
'sound/effects/mousesqueek.ogg')
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Rodent Migration"
|
||||
P.info = "Due to [cause], [plural] [name] have [movement] into the [location]."
|
||||
P.update_icon()
|
||||
print_command_report("Due to [cause], [plural] [name] have [movement] into the [location].", "Rodent Migration")
|
||||
|
||||
/datum/round_event/mice_migration/start()
|
||||
SSminor_mapping.trigger_migration(rand(minimum_mice, maximum_mice))
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
spawner.create(M.ckey)
|
||||
candidates -= M
|
||||
else
|
||||
notify_ghosts("Space pirates are waking up!", source = spawner, action=NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
notify_ghosts("Space pirates are waking up!", source = spawner, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_dnr_observers = TRUE)
|
||||
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") //CITADEL EDIT also metabreak here too
|
||||
|
||||
|
||||
@@ -33,13 +33,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Gr3y.T1d3 virus"
|
||||
P.info = "Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement."
|
||||
P.update_icon()
|
||||
print_command_report("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Gr3y.T1d3 virus")
|
||||
else
|
||||
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
|
||||
kill()
|
||||
|
||||
@@ -27,109 +27,43 @@
|
||||
|
||||
/datum/round_event/shuttle_loan/announce(fake)
|
||||
SSshuttle.shuttle_loan = src
|
||||
var/message = "Cargo: I just wanna tell you techs good luck, we are all counting on you."
|
||||
var/title = "CentCom Free Real Estate"
|
||||
switch(dispatch_type)
|
||||
if(HIJACK_SYNDIE)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","CentCom Counter Intelligence")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache."
|
||||
P.update_icon()
|
||||
message = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache."
|
||||
title = "CentCom Counter Intelligence"
|
||||
if(RUSKY_PARTY)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: A group of angry Russians want to have a party. Can you send them your cargo shuttle then make them disappear?","CentCom Russian Outreach Program")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache."
|
||||
P.update_icon()
|
||||
message = "Cargo: A group of angry Russians want to have a party. Can you send them your cargo shuttle then make them disappear?"
|
||||
title = "CentCom Russian Outreach Program"
|
||||
if(SPIDER_GIFT)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?","CentCom Diplomatic Corps")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?"
|
||||
P.update_icon()
|
||||
message = "Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?"
|
||||
title = "CentCom Diplomatic Corps"
|
||||
if(DEPARTMENT_RESUPPLY)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","CentCom Supply Department")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?"
|
||||
P.update_icon()
|
||||
message = "Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?"
|
||||
title = "CentCom Supply Department"
|
||||
if(ANTIDOTE_NEEDED)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "CentCom Research Initiatives")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples."
|
||||
P.update_icon()
|
||||
message = "Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples."
|
||||
title = "CentCom Research Initiatives"
|
||||
if (PIZZA_DELIVERY)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead.", "CentCom Spacepizza Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead."
|
||||
P.update_icon()
|
||||
message = "Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead."
|
||||
title = "CentCom Spacepizza Division"
|
||||
if(ITS_HIP_TO)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?", "CentCom Janitorial Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?."
|
||||
P.update_icon()
|
||||
message = "Cargo: One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?"
|
||||
title = "CentCom Janitorial Division"
|
||||
bonus_points = 20000 //Toxin bees can be unbeelievably lethal
|
||||
if(MY_GOD_JC)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it.", "CentCom Security Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it."
|
||||
P.update_icon()
|
||||
message = "Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it."
|
||||
title = "CentCom Security Division"
|
||||
bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
if(DELTA_CRATES)
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: We have discovered a warehouse of DELTA locked crates, we cant store any more of them at CC can you take them for us?.", "CentCom Security Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
P.name = "Cargo Report"
|
||||
P.info = "Cargo: We have discovered a warehouse of DELTA locked crates, we cant store any more of them at CC can you take them for us?."
|
||||
P.update_icon()
|
||||
message = "Cargo: We have discovered a warehouse of DELTA locked crates, we cant store any more of them at CC can you take them for us?."
|
||||
title = "CentCom Security Division"
|
||||
bonus_points = 25000 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
if(prob(50))
|
||||
priority_announce(message, title)
|
||||
else
|
||||
print_command_report(message, "Cargo report")
|
||||
|
||||
/datum/round_event/shuttle_loan/proc/loan_shuttle()
|
||||
priority_announce(thanks_msg, "Cargo shuttle commandeered by CentCom.")
|
||||
|
||||
@@ -894,7 +894,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
SEND_SOUND(target, get_announcer_sound("aimalf"))
|
||||
if("meteors") //Meteors inbound!
|
||||
to_chat(target, "<h1 class='alert'>Meteor Alert</h1>")
|
||||
to_chat(target, "<br><br><span class='alert'>Meteors have been detected on collision course with the station. Estimated time until impact: [round(rand(300,600)/60)] minutes.</span><br><br>")
|
||||
to_chat(target, "<br><br><span class='alert'>Meteors have been detected on collision course with the station. Estimated time until impact: [round(rand(180,360)/60)] minutes.</span><br><br>")
|
||||
SEND_SOUND(target, get_announcer_sound("meteors"))
|
||||
if("supermatter")
|
||||
SEND_SOUND(target, 'sound/magic/charge.ogg')
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/machinery/rnd/production/protolathe/department/autobottler //We want to link with Rnd
|
||||
name = "auto bottler"
|
||||
desc = "Takes glass, metal and booze to make exports."
|
||||
icon_state = "protolathe"
|
||||
circuit = /obj/item/circuitboard/machine/autobottler
|
||||
categories = list(
|
||||
"Wines",
|
||||
"Beers",
|
||||
"Brands",
|
||||
"Storge",
|
||||
)
|
||||
production_animation = "protolathe_n"
|
||||
allowed_buildtypes = AUTOBOTTLER
|
||||
|
||||
//Brands - This is just export verson of the booze bottles
|
||||
//Storge - Just the bottles not booze inside
|
||||
//Wines - Holds wines later made by Sci nodes
|
||||
//Beers - Holds beers later made by Sci nodes
|
||||
@@ -133,18 +133,27 @@
|
||||
icon_state = "ginbottle"
|
||||
list_reagents = list("gin" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/gin/empty
|
||||
list_reagents = list("gin" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/whiskey
|
||||
name = "Uncle Git's special reserve"
|
||||
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
|
||||
icon_state = "whiskeybottle"
|
||||
list_reagents = list("whiskey" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/whiskey/empty
|
||||
list_reagents = list("whiskey" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka
|
||||
name = "Tunguska triple distilled"
|
||||
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
|
||||
icon_state = "vodkabottle"
|
||||
list_reagents = list("vodka" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka/empty
|
||||
list_reagents = list("vodka" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka
|
||||
name = "Badminka vodka"
|
||||
desc = "The label's written in Cyrillic. All you can make out is the name and a word that looks vaguely like 'Vodka'."
|
||||
@@ -157,6 +166,9 @@
|
||||
icon_state = "tequilabottle"
|
||||
list_reagents = list("tequila" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/tequila/empty
|
||||
list_reagents = list("tequila" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing
|
||||
name = "bottle of nothing"
|
||||
desc = "A bottle filled with nothing."
|
||||
@@ -164,18 +176,27 @@
|
||||
list_reagents = list("nothing" = 100)
|
||||
foodtype = NONE
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing/empty
|
||||
list_reagents = list("nothing" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/patron
|
||||
name = "Wrapp Artiste Patron"
|
||||
desc = "Silver laced tequila, served in space night clubs across the galaxy."
|
||||
icon_state = "patronbottle"
|
||||
list_reagents = list("patron" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/patron/empty
|
||||
list_reagents = list("patron" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/rum
|
||||
name = "Captain Pete's Cuban spiced rum"
|
||||
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
|
||||
icon_state = "rumbottle"
|
||||
list_reagents = list("rum" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/rum/empty
|
||||
list_reagents = list("rum" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/holywater
|
||||
name = "flask of holy water"
|
||||
desc = "A flask of the chaplain's holy water."
|
||||
@@ -207,6 +228,9 @@
|
||||
icon_state = "vermouthbottle"
|
||||
list_reagents = list("vermouth" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vermouth/empty
|
||||
list_reagents = list("vermouth" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/kahlua
|
||||
name = "Robert Robust's coffee liqueur"
|
||||
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK."
|
||||
@@ -214,18 +238,27 @@
|
||||
list_reagents = list("kahlua" = 100)
|
||||
foodtype = VEGETABLES
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/kahlua/empty
|
||||
list_reagents = list("kahlua" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/goldschlager
|
||||
name = "College Girl goldschlager"
|
||||
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
|
||||
icon_state = "goldschlagerbottle"
|
||||
list_reagents = list("goldschlager" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/goldschlager/empty
|
||||
list_reagents = list("goldschlager" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/cognac
|
||||
name = "Chateau de Baton premium cognac"
|
||||
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
|
||||
icon_state = "cognacbottle"
|
||||
list_reagents = list("cognac" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/cognac/empty
|
||||
list_reagents = list("cognac" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/wine
|
||||
name = "Doublebeard's bearded special wine"
|
||||
desc = "A faint aura of unease and asspainery surrounds the bottle."
|
||||
@@ -233,12 +266,18 @@
|
||||
list_reagents = list("wine" = 100)
|
||||
foodtype = FRUIT | ALCOHOL
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/wine/empty
|
||||
list_reagents = list("wine" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/absinthe
|
||||
name = "extra-strong absinthe"
|
||||
desc = "An strong alcoholic drink brewed and distributed by"
|
||||
icon_state = "absinthebottle"
|
||||
list_reagents = list("absinthe" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/absinthe/empty
|
||||
list_reagents = list("absinthe" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize()
|
||||
. = ..()
|
||||
redact()
|
||||
@@ -300,18 +339,27 @@
|
||||
volume = 50
|
||||
list_reagents = list("hcider" = 50)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/hcider/empty
|
||||
list_reagents = list("hcider" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/grappa
|
||||
name = "Phillipes well-aged Grappa"
|
||||
desc = "Bottle of Grappa."
|
||||
icon_state = "grappabottle"
|
||||
list_reagents = list("grappa" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/grappa/empty
|
||||
list_reagents = list("grappa" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/sake
|
||||
name = "Ryo's traditional sake"
|
||||
desc = "Sweet as can be, and burns like fire going down."
|
||||
icon_state = "sakebottle"
|
||||
list_reagents = list("sake" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/sake/empty
|
||||
list_reagents = list("sake" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize()
|
||||
. = ..()
|
||||
if(prob(10))
|
||||
@@ -329,6 +377,9 @@
|
||||
icon_state = "fernetbottle"
|
||||
list_reagents = list("fernet" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/fernet/empty
|
||||
list_reagents = list("fernet" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/applejack
|
||||
name = "Buckin' Bronco's Applejack"
|
||||
desc = "Kicks like a horse, tastes like an apple!"
|
||||
@@ -336,18 +387,27 @@
|
||||
list_reagents = list("applejack" = 100)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/applejack/empty
|
||||
list_reagents = list("applejack" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/champagne
|
||||
name = "Eau d' Dandy Brut Champagne"
|
||||
desc = "Finely sourced from only the most pretentious French vineyards."
|
||||
icon_state = "champagne_bottle"
|
||||
list_reagents = list("champagne" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/champagne/empty
|
||||
list_reagents = list("champagne" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blazaam
|
||||
name = "Ginbad's Blazaam"
|
||||
desc = "You feel like you should give the bottle a good rub before opening."
|
||||
icon_state = "blazaambottle"
|
||||
list_reagents = list("blazaam" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blazaam/empty
|
||||
list_reagents = list("blazaam" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/trappist
|
||||
name = "Mont de Requin Trappistes Bleu"
|
||||
desc = "Brewed in space-Belgium. Fancy!"
|
||||
@@ -355,6 +415,8 @@
|
||||
volume = 50
|
||||
list_reagents = list("trappist" = 50)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/trappist/empty
|
||||
list_reagents = list("trappist" = 0)
|
||||
|
||||
//////////////////////////JUICES AND STUFF ///////////////////////
|
||||
|
||||
@@ -420,6 +482,8 @@
|
||||
list_reagents = list("grenadine" = 100)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/grenadine/empty
|
||||
list_reagents = list("grenadine" = 0)
|
||||
|
||||
////////////////////////// MOLOTOV ///////////////////////
|
||||
/obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
@@ -487,3 +551,131 @@
|
||||
to_chat(user, "<span class='info'>You snuff out the flame on [src].</span>")
|
||||
cut_overlay(GLOB.fire_overlay)
|
||||
active = 0
|
||||
|
||||
/obj/item/export/bottle/attack_self(mob/user)
|
||||
to_chat(user, "<span class='danger'>The seal seems fine. Best to not open it.</span>")
|
||||
return
|
||||
|
||||
/obj/item/export/bottle
|
||||
name = "Report this please"
|
||||
desc = "A sealed bottle of alcohol, ready to be exported"
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
force = 0
|
||||
throwforce = 0
|
||||
throw_speed = 0
|
||||
throw_range = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
item_state = "beer"
|
||||
attack_verb = list("boop", "thunked", "shown")
|
||||
|
||||
/obj/item/export/bottle/gin
|
||||
icon_state = "ginbottle"
|
||||
name = "Sealed Gin"
|
||||
|
||||
/obj/item/export/bottle/wine
|
||||
icon_state = "winebottle"
|
||||
name = "Sealed Wine"
|
||||
|
||||
/obj/item/export/bottle/whiskey
|
||||
icon_state = "whiskeybottle"
|
||||
name = "Sealed Whiskey"
|
||||
|
||||
/obj/item/export/bottle/vodka
|
||||
icon_state = "vodkabottle"
|
||||
name = "Sealed Vodka"
|
||||
|
||||
/obj/item/export/bottle/tequila
|
||||
icon_state = "tequilabottle"
|
||||
name = "Sealed Tequila"
|
||||
|
||||
/obj/item/export/bottle/patron
|
||||
icon_state = "patronbottle"
|
||||
name = "Sealed Patron"
|
||||
|
||||
/obj/item/export/bottle/rum
|
||||
icon_state = "rumbottle"
|
||||
name = "Sealed Rum"
|
||||
|
||||
/obj/item/export/bottle/vermouth
|
||||
icon_state = "vermouthbottle"
|
||||
name = "Sealed Vermouth"
|
||||
|
||||
/obj/item/export/bottle/kahlua
|
||||
icon_state = "kahluabottle"
|
||||
name = "Sealed Kahlua"
|
||||
|
||||
/obj/item/export/bottle/goldschlager
|
||||
icon_state = "goldschlagerbottle"
|
||||
name = "Sealed Goldschlager"
|
||||
|
||||
/obj/item/export/bottle/hcider
|
||||
icon_state = "hcider"
|
||||
name = "Sealed Cider"
|
||||
|
||||
/obj/item/export/bottle/cognac
|
||||
icon_state = "cognacbottle"
|
||||
name = "Sealed Cognac"
|
||||
|
||||
/obj/item/export/bottle/absinthe
|
||||
icon_state = "absinthebottle"
|
||||
name = "Sealed Unmarked Absinthe"
|
||||
|
||||
/obj/item/export/bottle/grappa
|
||||
icon_state = "grappabottle"
|
||||
name = "Sealed Grappa"
|
||||
|
||||
/obj/item/export/bottle/sake
|
||||
icon_state = "sakebottle"
|
||||
name = "Sealed Sake"
|
||||
|
||||
/obj/item/export/bottle/fernet
|
||||
icon_state = "fernetbottle"
|
||||
name = "Sealed Fernet"
|
||||
|
||||
/obj/item/export/bottle/applejack
|
||||
icon_state = "applejack_bottle"
|
||||
name = "Sealed Applejack"
|
||||
|
||||
/obj/item/export/bottle/champagne
|
||||
icon_state = "champagne_bottle"
|
||||
name = "Sealed Champagne"
|
||||
|
||||
/obj/item/export/bottle/blazaam
|
||||
icon_state = "blazaambottle"
|
||||
name = "Sealed Blazaam"
|
||||
|
||||
/obj/item/export/bottle/trappist
|
||||
icon_state = "trappistbottle"
|
||||
name = "Sealed Trappist"
|
||||
|
||||
/obj/item/export/bottle/grenadine
|
||||
icon_state = "grenadine"
|
||||
name = "Sealed Grenadine"
|
||||
|
||||
/obj/item/export/bottle/minikeg
|
||||
name = "Mini-Beer Keg"
|
||||
icon_state = "keggy"
|
||||
desc = "A small wooden barrle with metal rings, untapped beer inside."
|
||||
|
||||
/obj/item/export/bottle/blooddrop
|
||||
icon_state = "champagne_selling_bottle"
|
||||
name = "Blood Drop"
|
||||
desc = "Large red bottle filled with a mix of wine and other named brands."
|
||||
|
||||
/obj/item/export/bottle/slim_gold
|
||||
name = "Slim Gold "
|
||||
icon_state = "selling_bottle_alt"
|
||||
desc = "A gold looking yellow bottle that has a mix of different named brands."
|
||||
|
||||
/obj/item/export/bottle/white_bloodmoon
|
||||
name = "White Bloodmoon"
|
||||
icon_state = "selling_bottle_basic"
|
||||
desc = "Rather simple bottle for this kind of drink."
|
||||
|
||||
/obj/item/export/bottle/greenroad
|
||||
name = "Green Road"
|
||||
icon_state = "selling_bottle"
|
||||
desc = "Ironic name as the fruit used is from ashy plants."
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
tastes = list("meat" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain
|
||||
foodtype = MEAT
|
||||
foodtype = MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain/human
|
||||
tastes = list("tender meat" = 1)
|
||||
@@ -340,7 +340,7 @@
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/rawcutlet/plain
|
||||
foodtype = MEAT
|
||||
foodtype = MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/rawcutlet/plain/human
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/meat/cutlet/plain/human
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/pizza/margherita = 1,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/sassysage = 0.8,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/vegetable = 0.8,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/pineapple = 0.5,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/pineapple = 0.5,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/donkpocket = 0.3,
|
||||
/obj/item/reagent_containers/food/snacks/pizza/dank = 0.1) //pizzas here are weighted by chance to be someone's favorite
|
||||
var/static/list/pizza_preferences
|
||||
|
||||
@@ -69,7 +69,9 @@
|
||||
/datum/crafting_recipe/food/birthdaycake
|
||||
name = "Birthday cake"
|
||||
reqs = list(
|
||||
/obj/item/clothing/head/hardhat/cakehat = 1,
|
||||
/datum/reagent/consumable/sugar = 10,
|
||||
/obj/item/candle = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/vanillapod = 2,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/birthday
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/cream
|
||||
subcategory = CAT_PIE
|
||||
@@ -46,7 +46,7 @@
|
||||
name = "Cherry pie"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/cherrypie
|
||||
subcategory = CAT_PIE
|
||||
@@ -122,11 +122,11 @@
|
||||
/datum/crafting_recipe/food/grapetart
|
||||
name = "Grape tart"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes = 3
|
||||
)
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/grapes = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/grapetart
|
||||
subcategory = CAT_PIE
|
||||
|
||||
@@ -183,11 +183,11 @@
|
||||
name = "Mime tart"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/datum/reagent/consumable/nothing = 5
|
||||
)
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/datum/reagent/consumable/nothing = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/mimetart
|
||||
subcategory = CAT_PIE
|
||||
|
||||
@@ -195,11 +195,11 @@
|
||||
name = "Berry tart"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 3
|
||||
)
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/berrytart
|
||||
subcategory = CAT_PIE
|
||||
|
||||
@@ -207,20 +207,20 @@
|
||||
name = "Chocolate Lava tart"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 3,
|
||||
/obj/item/slime_extract = 1
|
||||
)
|
||||
/datum/reagent/consumable/milk = 5,
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 3,
|
||||
/obj/item/slime_extract = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart
|
||||
subcategory = CAT_PIE
|
||||
|
||||
/datum/crafting_recipe/food/peachpie
|
||||
name = "Peach Pie"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 3
|
||||
)
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/peachpie
|
||||
subcategory = CAT_PIE
|
||||
@@ -1,72 +1,72 @@
|
||||
/obj/effect/landmark/barthpot
|
||||
name = "barthpot"
|
||||
name = "barthpot"
|
||||
|
||||
/obj/item/barthpot
|
||||
name = "Bartholomew"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "barthpot"
|
||||
anchored = TRUE
|
||||
var/items_list = list()
|
||||
speech_span = "spooky"
|
||||
var/active = TRUE
|
||||
name = "Bartholomew"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "barthpot"
|
||||
anchored = TRUE
|
||||
var/items_list = list()
|
||||
speech_span = "spooky"
|
||||
var/active = TRUE
|
||||
|
||||
/obj/item/barthpot/Destroy()
|
||||
var/obj/item/barthpot/n = new src(loc)
|
||||
n.items_list = items_list
|
||||
..()
|
||||
var/obj/item/barthpot/n = new src(loc)
|
||||
n.items_list = items_list
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/barthpot/attackby(obj/item/I, mob/user, params)
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
|
||||
for(var/I2 in items_list)
|
||||
if(istype(I, I2))
|
||||
qdel(I)
|
||||
new /obj/item/reagent_containers/food/snacks/special_candy(loc)
|
||||
to_chat(user, "<span class='notice'>You add the [I.name] to the pot and watch as it melts into the mixture, a candy crystalising in it's wake.</span>")
|
||||
say("Hooray! Thank you!")
|
||||
items_list -= I2
|
||||
return
|
||||
say("It doesn't seem like that's magical enough!")
|
||||
for(var/I2 in items_list)
|
||||
if(istype(I, I2))
|
||||
qdel(I)
|
||||
new /obj/item/reagent_containers/food/snacks/special_candy(loc)
|
||||
to_chat(user, "<span class='notice'>You add the [I.name] to the pot and watch as it melts into the mixture, a candy crystalising in it's wake.</span>")
|
||||
say("Hooray! Thank you!")
|
||||
items_list -= I2
|
||||
return
|
||||
say("It doesn't seem like that's magical enough!")
|
||||
|
||||
/obj/item/barthpot/attack_hand(mob/user)
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
say("Hello there, I'm Bartholomew, Jacqueline's Familiar.")
|
||||
sleep(20)
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
say("Hello there, I'm Bartholomew, Jacqueline's Familiar.")
|
||||
sleep(20)
|
||||
|
||||
say("I'm currently seeking items to put into my pot, if we get the right items, it should crystalise into a magic candy!")
|
||||
if(!iscarbon(user))
|
||||
say("Though... I'm not sure you can help me.")
|
||||
say("I'm currently seeking items to put into my pot, if we get the right items, it should crystalise into a magic candy!")
|
||||
if(!iscarbon(user))
|
||||
say("Though... I'm not sure you can help me.")
|
||||
|
||||
var/message = "From what I can tell, "
|
||||
if(LAZYLEN(items_list) < 5)
|
||||
generate_items()
|
||||
for(var/I2 in items_list)
|
||||
if(!I2)
|
||||
items_list -= I2
|
||||
continue
|
||||
var/obj/item/I3 = new I2
|
||||
message += "a [I3.name], "
|
||||
message += "currently seem to have the most magic potential."
|
||||
sleep(15)
|
||||
say("[message]")
|
||||
sleep(15)
|
||||
//To help people find her
|
||||
for(var/mob/living/simple_animal/jacq/J in GLOB.simple_animals[1])
|
||||
var/turf/L1 = J.loc
|
||||
if(!L1) //Incase someone uh.. puts her in a locker
|
||||
return
|
||||
var/area/L2 = L1.loc
|
||||
if(L2)
|
||||
say("Also, it seems that Jacqueline is currently at the [L2], if you're looking for her too.")
|
||||
var/message = "From what I can tell, "
|
||||
if(LAZYLEN(items_list) < 5)
|
||||
generate_items()
|
||||
for(var/I2 in items_list)
|
||||
if(!I2)
|
||||
items_list -= I2
|
||||
continue
|
||||
var/obj/item/I3 = new I2
|
||||
message += "a [I3.name], "
|
||||
message += "currently seem to have the most magic potential."
|
||||
sleep(15)
|
||||
say("[message]")
|
||||
sleep(15)
|
||||
//To help people find her
|
||||
for(var/mob/living/simple_animal/jacq/J in GLOB.simple_animals[1])
|
||||
var/turf/L1 = J.loc
|
||||
if(!L1) //Incase someone uh.. puts her in a locker
|
||||
return
|
||||
var/area/L2 = L1.loc
|
||||
if(L2)
|
||||
say("Also, it seems that Jacqueline is currently at the [L2], if you're looking for her too.")
|
||||
|
||||
/obj/item/barthpot/proc/generate_items()
|
||||
var/length = LAZYLEN(items_list)
|
||||
var/rand_items = list(/obj/item/bodybag = 1,
|
||||
var/length = LAZYLEN(items_list)
|
||||
var/rand_items = list(/obj/item/bodybag = 1,
|
||||
/obj/item/clothing/glasses/meson = 2,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/clothing/gloves/color/fyellow = 1,
|
||||
@@ -94,7 +94,7 @@
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/sheet/mineral/plasma = 1,
|
||||
/obj/item/stack/sheet/rglass = 1,
|
||||
/obj/item/coin = 1,
|
||||
/obj/item/coin = 1,
|
||||
/obj/item/crowbar = 4,
|
||||
/obj/item/extinguisher = 3,
|
||||
/obj/item/hand_labeler = 1,
|
||||
@@ -129,28 +129,28 @@
|
||||
/obj/item/storage/toolbox = 2,
|
||||
/obj/item/reagent_containers/pill = 2,
|
||||
/obj/item/clothing/shoes = 8,
|
||||
/obj/item/clothing/head = 3,
|
||||
/obj/item/reagent_containers/food/snacks = 3,
|
||||
/obj/item/reagent_containers/syringe/dart = 2,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans = 5)
|
||||
if(length >= 5)
|
||||
return TRUE
|
||||
//var/metalist = pickweight(GLOB.maintenance_loot)
|
||||
for(var/i = length, i <= 5, i+=1)
|
||||
var/obj/item = pickweight(rand_items)
|
||||
if(!item)
|
||||
i-=1
|
||||
continue
|
||||
for(var/obj/item_dupe in items_list) //No duplicates
|
||||
if(item_dupe == item)
|
||||
i-=1
|
||||
continue
|
||||
items_list += item
|
||||
return TRUE
|
||||
/obj/item/clothing/head = 3,
|
||||
/obj/item/reagent_containers/food/snacks = 3,
|
||||
/obj/item/reagent_containers/syringe/dart = 2,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans = 5)
|
||||
if(length >= 5)
|
||||
return TRUE
|
||||
//var/metalist = pickweight(GLOB.maintenance_loot)
|
||||
for(var/i = length, i <= 5, i+=1)
|
||||
var/obj/item = pickweight(rand_items)
|
||||
if(!item)
|
||||
i-=1
|
||||
continue
|
||||
for(var/obj/item_dupe in items_list) //No duplicates
|
||||
if(item_dupe == item)
|
||||
i-=1
|
||||
continue
|
||||
items_list += item
|
||||
return TRUE
|
||||
|
||||
/obj/item/pinpointer/jacq
|
||||
name = "The Jacq-Tracq"
|
||||
desc = "A handheld tracking device that locks onto witchy signals."
|
||||
name = "The Jacq-Tracq"
|
||||
desc = "A handheld tracking device that locks onto witchy signals."
|
||||
|
||||
/obj/item/pinpointer/jacq/attack_self(mob/living/user)
|
||||
for(var/mob/living/simple_animal/jacq/J in GLOB.simple_animals[1])
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
name = "ghost"
|
||||
real_name = "ghost"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
maxHealth = 1e6
|
||||
health = 1e6
|
||||
maxHealth = 120
|
||||
health = 120
|
||||
speak_emote = list("howls")
|
||||
emote_hear = list("wails","screeches")
|
||||
density = FALSE
|
||||
@@ -141,7 +141,6 @@
|
||||
. = ..()
|
||||
icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2")
|
||||
icon_living = icon_state
|
||||
status_flags |= GODMODE
|
||||
timer = rand(1,15)
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/Life()
|
||||
@@ -176,13 +175,9 @@
|
||||
step(I,direction)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/adjustHealth()
|
||||
. = 0
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target)
|
||||
return 1
|
||||
|
||||
|
||||
///////////////////////////
|
||||
//Spookoween Insane Clown//
|
||||
///////////////////////////
|
||||
@@ -195,8 +190,8 @@
|
||||
icon_dead = "scary_clown"
|
||||
icon_gib = "scary_clown"
|
||||
speak = list("...", ". . .")
|
||||
maxHealth = 1e6
|
||||
health = 1e6
|
||||
maxHealth = 120
|
||||
health = 120
|
||||
emote_see = list("silently stares")
|
||||
unsuitable_atmos_damage = 0
|
||||
var/timer
|
||||
@@ -204,8 +199,6 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/Initialize()
|
||||
. = ..()
|
||||
timer = rand(5,15)
|
||||
status_flags = (status_flags | GODMODE)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/Retaliate()
|
||||
return
|
||||
@@ -237,7 +230,7 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustHealth()
|
||||
. = 0
|
||||
. = ..()
|
||||
if(prob(5))
|
||||
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
|
||||
|
||||
if(toupdate.len)
|
||||
for(var/turf/T1 in toupdate)
|
||||
T1.CalculateAdjacentTurfs()
|
||||
CALCULATE_ADJACENT_TURFS(T1)
|
||||
SSair.add_to_active(T1,1)
|
||||
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
for(var/V in categories)
|
||||
categories[V] = list()
|
||||
for(var/V in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[V]
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(V)
|
||||
for(var/C in categories)
|
||||
if(C in D.category)
|
||||
categories[C] += D
|
||||
@@ -185,11 +185,11 @@
|
||||
dat += "<div class='statusDisplay'>"
|
||||
for(var/V in categories[cat])
|
||||
var/datum/design/D = V
|
||||
dat += "[D.name]: <A href='?src=[REF(src)];create=[REF(D)];amount=1'>Make</A>"
|
||||
dat += "[D.name]: <A href='?src=[REF(src)];create=[D.id];amount=1'>Make</A>"
|
||||
if(cat in timesFiveCategories)
|
||||
dat += "<A href='?src=[REF(src)];create=[REF(D)];amount=5'>x5</A>"
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=5'>x5</A>"
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
dat += "<A href='?src=[REF(src)];create=[REF(D)];amount=10'>x10</A>"
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=10'>x10</A>"
|
||||
dat += "([D.materials[MAT_BIOMASS]/efficiency])<br>"
|
||||
dat += "</div>"
|
||||
else
|
||||
@@ -306,8 +306,20 @@
|
||||
var/amount = (text2num(href_list["amount"]))
|
||||
//Can't be outside these (if you change this keep a sane limit)
|
||||
amount = CLAMP(amount, 1, 50)
|
||||
var/datum/design/D = locate(href_list["create"])
|
||||
create_product(D, amount)
|
||||
var/id = href_list["create"]
|
||||
if(!stored_research.researched_designs.Find(id))
|
||||
//naughty naughty
|
||||
stack_trace("ID did not map to a researched datum [id]")
|
||||
return
|
||||
|
||||
//Get design by id (or may return error design)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(id)
|
||||
//Valid design datum, amount and the datum is not the error design, lets proceed
|
||||
if(D && amount && !istype(D, /datum/design/error_design))
|
||||
create_product(D, amount)
|
||||
//This shouldnt happen normally but href forgery is real
|
||||
else
|
||||
stack_trace("ID could not be turned into a valid techweb design datum [id]")
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["menu"])
|
||||
|
||||
@@ -69,10 +69,3 @@
|
||||
icon_state = "barrel_open"
|
||||
else
|
||||
icon_state = "barrel"
|
||||
|
||||
/datum/crafting_recipe/fermenting_barrel
|
||||
name = "Wooden Barrel"
|
||||
result = /obj/structure/fermenting_barrel
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 30)
|
||||
time = 50
|
||||
category = CAT_PRIMAL
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
src.max_complexity = round(max_complexity)
|
||||
|
||||
/obj/item/electronic_assembly/GenerateTag()
|
||||
tag = "assembly_[next_assembly_id++]"
|
||||
tag = "assembly_[next_assembly_id++]"
|
||||
|
||||
/obj/item/electronic_assembly/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -616,7 +616,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/electronic_assembly/default //The /default electronic_assemblys are to allow the introduction of the new naming scheme without breaking old saves.
|
||||
name = "type-a electronic assembly"
|
||||
name = "type-a electronic assembly"
|
||||
|
||||
/obj/item/electronic_assembly/calc
|
||||
name = "type-b electronic assembly"
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them, now in industrial size!"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
extended_desc = "The siphon drains 2 kW of power from an APC in the same room as it as long as it has charge remaining. It will always drain \
|
||||
from the 'equipment' power channel."
|
||||
from the 'equipment' power channel."
|
||||
icon_state = "power_relay"
|
||||
complexity = 15
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
|
||||
+10
-10
@@ -122,16 +122,16 @@
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
|
||||
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
|
||||
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
|
||||
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
|
||||
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
|
||||
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING)
|
||||
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
|
||||
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
|
||||
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
|
||||
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
|
||||
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
|
||||
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING)
|
||||
|
||||
/proc/get_all_centcom_access()
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN)
|
||||
|
||||
@@ -19,13 +19,13 @@
|
||||
outfit = /datum/outfit/job/ce
|
||||
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity)
|
||||
|
||||
@@ -19,17 +19,17 @@
|
||||
outfit = /datum/outfit/job/hop
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL
|
||||
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity)
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
var/global/janitors = 0
|
||||
|
||||
outfit = /datum/outfit/job/janitor
|
||||
|
||||
|
||||
@@ -19,15 +19,15 @@
|
||||
outfit = /datum/outfit/job/rd
|
||||
|
||||
access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
|
||||
ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
|
||||
ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
|
||||
ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
|
||||
ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
|
||||
ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
|
||||
ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
|
||||
minimal_access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
|
||||
ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
|
||||
ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
|
||||
ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
|
||||
ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
|
||||
ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
|
||||
ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
@@ -15,4 +15,7 @@
|
||||
if("4")
|
||||
a_intent_change("harm")
|
||||
return
|
||||
if("C")
|
||||
toggle_combat_mode()
|
||||
return
|
||||
return ..()
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/carbon/human/key_down(_key, client/user)
|
||||
if("Shift")
|
||||
sprint_hotkey(TRUE)
|
||||
return
|
||||
if(client.keys_held["Shift"])
|
||||
switch(_key)
|
||||
if("E") // Put held thing in belt or take out most recent thing from belt
|
||||
@@ -56,4 +59,11 @@
|
||||
return
|
||||
stored.attack_hand(src) // take out thing from backpack
|
||||
return
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/key_up(_key, client/user)
|
||||
switch(_key)
|
||||
if("Shift")
|
||||
sprint_hotkey(FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -9,4 +9,14 @@
|
||||
if("Q")
|
||||
uneq_active()
|
||||
return
|
||||
return ..()
|
||||
if("Shift")
|
||||
sprint_hotkey(TRUE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/key_up(_key, client/user)
|
||||
switch(_key)
|
||||
if("Shift")
|
||||
sprint_hotkey(FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
/datum/map_template/ruin/proc/try_to_place(z,allowed_areas)
|
||||
var/sanity = PLACEMENT_TRIES
|
||||
/datum/map_template/ruin/proc/try_to_place(z,allowed_areas,turf/forced_turf)
|
||||
var/sanity = forced_turf ? 1 : PLACEMENT_TRIES
|
||||
if(SSmapping.level_trait(z,ZTRAIT_ISOLATED_RUINS))
|
||||
return place_on_isolated_level(z)
|
||||
while(sanity > 0)
|
||||
sanity--
|
||||
var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(width / 2)
|
||||
var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(height / 2)
|
||||
var/turf/central_turf = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z)
|
||||
var/turf/central_turf = forced_turf ? forced_turf : locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z)
|
||||
var/valid = TRUE
|
||||
|
||||
for(var/turf/check in get_affected_turfs(central_turf,1))
|
||||
@@ -24,7 +26,7 @@
|
||||
qdel(monster)
|
||||
for(var/obj/structure/flora/ash/plant in T)
|
||||
qdel(plant)
|
||||
|
||||
|
||||
load(central_turf,centered = TRUE)
|
||||
loaded++
|
||||
|
||||
@@ -32,9 +34,20 @@
|
||||
T.flags_1 |= NO_RUINS_1
|
||||
|
||||
new /obj/effect/landmark/ruin(central_turf, src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
return central_turf
|
||||
|
||||
/datum/map_template/ruin/proc/place_on_isolated_level(z)
|
||||
var/datum/turf_reservation/reservation = SSmapping.RequestBlockReservation(width, height, z) //Make the new level creation work with different traits.
|
||||
if(!reservation)
|
||||
return
|
||||
var/turf/placement = locate(reservation.bottom_left_coords[1],reservation.bottom_left_coords[2],reservation.bottom_left_coords[3])
|
||||
load(placement)
|
||||
loaded++
|
||||
for(var/turf/T in get_affected_turfs(placement))
|
||||
T.flags_1 |= NO_RUINS_1
|
||||
var/turf/center = locate(placement.x + round(width/2),placement.y + round(height/2),placement.z)
|
||||
new /obj/effect/landmark/ruin(center, src)
|
||||
return center
|
||||
|
||||
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||
if(!z_levels || !z_levels.len)
|
||||
@@ -49,9 +62,8 @@
|
||||
|
||||
var/list/ruins = potentialRuins.Copy()
|
||||
|
||||
var/list/forced_ruins = list() //These go first on the z level associated (same random one by default)
|
||||
var/list/forced_ruins = list() //These go first on the z level associated (same random one by default) or if the assoc value is a turf to the specified turf.
|
||||
var/list/ruins_availible = list() //we can try these in the current pass
|
||||
var/forced_z //If set we won't pick z level and use this one instead.
|
||||
|
||||
//Set up the starting ruin list
|
||||
for(var/key in ruins)
|
||||
@@ -67,34 +79,55 @@
|
||||
while(budget > 0 && (ruins_availible.len || forced_ruins.len))
|
||||
var/datum/map_template/ruin/current_pick
|
||||
var/forced = FALSE
|
||||
var/forced_z //If set we won't pick z level and use this one instead.
|
||||
var/forced_turf //If set we place the ruin centered on the given turf
|
||||
if(forced_ruins.len) //We have something we need to load right now, so just pick it
|
||||
for(var/ruin in forced_ruins)
|
||||
current_pick = ruin
|
||||
if(forced_ruins[ruin] > 0) //Load into designated z
|
||||
if(isturf(forced_ruins[ruin]))
|
||||
var/turf/T = forced_ruins[ruin]
|
||||
forced_z = T.z //In case of chained ruins
|
||||
forced_turf = T
|
||||
else if(forced_ruins[ruin] > 0) //Load into designated z
|
||||
forced_z = forced_ruins[ruin]
|
||||
forced = TRUE
|
||||
break
|
||||
else //Otherwise just pick random one
|
||||
current_pick = pickweight(ruins_availible)
|
||||
|
||||
var/placement_tries = PLACEMENT_TRIES
|
||||
var/placement_tries = forced_turf ? 1 : PLACEMENT_TRIES //Only try once if we target specific turf
|
||||
var/failed_to_place = TRUE
|
||||
var/z_placed = 0
|
||||
while(placement_tries > 0)
|
||||
placement_tries--
|
||||
z_placed = pick(z_levels)
|
||||
if(!current_pick.try_to_place(forced_z ? forced_z : z_placed,whitelist))
|
||||
continue
|
||||
else
|
||||
failed_to_place = FALSE
|
||||
break
|
||||
var/target_z = 0
|
||||
var/turf/placed_turf //Where the ruin ended up if we succeeded
|
||||
outer:
|
||||
while(placement_tries > 0)
|
||||
placement_tries--
|
||||
target_z = pick(z_levels)
|
||||
if(forced_z)
|
||||
target_z = forced_z
|
||||
if(current_pick.always_spawn_with) //If the ruin has part below, make sure that z exists.
|
||||
for(var/v in current_pick.always_spawn_with)
|
||||
if(current_pick.always_spawn_with[v] == PLACE_BELOW)
|
||||
var/turf/T = locate(1,1,target_z)
|
||||
if(!SSmapping.get_turf_below(T))
|
||||
if(forced_z)
|
||||
continue outer
|
||||
else
|
||||
break outer
|
||||
|
||||
placed_turf = current_pick.try_to_place(target_z,whitelist,forced_turf)
|
||||
if(!placed_turf)
|
||||
continue
|
||||
else
|
||||
failed_to_place = FALSE
|
||||
break
|
||||
|
||||
//That's done remove from priority even if it failed
|
||||
if(forced)
|
||||
//TODO : handle forced ruins with multiple variants
|
||||
forced_ruins -= current_pick
|
||||
forced = FALSE
|
||||
|
||||
|
||||
if(failed_to_place)
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.id == current_pick.id)
|
||||
@@ -118,18 +151,21 @@
|
||||
if(istype(linked,v))
|
||||
switch(current_pick.always_spawn_with[v])
|
||||
if(PLACE_SAME_Z)
|
||||
forced_ruins[linked] = forced_z ? forced_z : z_placed //I guess you might want a chain somehow
|
||||
forced_ruins[linked] = target_z //I guess you might want a chain somehow
|
||||
if(PLACE_LAVA_RUIN)
|
||||
forced_ruins[linked] = pick(SSmapping.levels_by_trait(ZTRAIT_LAVA_RUINS))
|
||||
if(PLACE_SPACE_RUIN)
|
||||
forced_ruins[linked] = pick(SSmapping.levels_by_trait(ZTRAIT_SPACE_RUINS))
|
||||
if(PLACE_DEFAULT)
|
||||
forced_ruins[linked] = -1
|
||||
forced_z = 0
|
||||
if(PLACE_BELOW)
|
||||
forced_ruins[linked] = SSmapping.get_turf_below(placed_turf)
|
||||
if(PLACE_ISOLATED)
|
||||
forced_ruins[linked] = SSmapping.get_isolated_ruin_z()
|
||||
|
||||
//Update the availible list
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.cost > budget)
|
||||
ruins_availible -= R
|
||||
|
||||
|
||||
log_world("Ruin loader finished with [budget] left to spend.")
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/proc/get_step_multiz(ref, dir)
|
||||
if(dir & UP)
|
||||
dir &= ~UP
|
||||
return get_step(SSmapping.get_turf_above(get_turf(ref)), dir)
|
||||
if(dir & DOWN)
|
||||
dir &= ~DOWN
|
||||
return get_step(SSmapping.get_turf_below(get_turf(ref)), dir)
|
||||
return get_step(ref, dir)
|
||||
|
||||
/proc/get_dir_multiz(turf/us, turf/them)
|
||||
us = get_turf(us)
|
||||
them = get_turf(them)
|
||||
if(!us || !them)
|
||||
return NONE
|
||||
if(us.z == them.z)
|
||||
return get_dir(us, them)
|
||||
else
|
||||
var/turf/T = us.above()
|
||||
var/dir = NONE
|
||||
if(T && (T.z == them.z))
|
||||
dir = UP
|
||||
else
|
||||
T = us.below()
|
||||
if(T && (T.z == them.z))
|
||||
dir = DOWN
|
||||
else
|
||||
return get_dir(us, them)
|
||||
return (dir | get_dir(us, them))
|
||||
|
||||
/turf/proc/above()
|
||||
return get_step_multiz(src, UP)
|
||||
|
||||
/turf/proc/below()
|
||||
return get_step_multiz(src, DOWN)
|
||||
|
||||
/proc/dir_inverse_multiz(dir)
|
||||
var/holder = dir & (UP|DOWN)
|
||||
if((holder == NONE) || (holder == (UP|DOWN)))
|
||||
return turn(dir, 180)
|
||||
dir &= ~(UP|DOWN)
|
||||
dir = turn(dir, 180)
|
||||
if(holder == UP)
|
||||
holder = DOWN
|
||||
else
|
||||
holder = UP
|
||||
dir |= holder
|
||||
return dir
|
||||
@@ -25,6 +25,14 @@
|
||||
max_matter = 600 //Bigger container and faster speeds due to being specialized and stationary.
|
||||
no_ammo_message = "<span class='warning'>Internal matter exhausted. Please add additional materials.</span>"
|
||||
delay_mod = 0.5
|
||||
adjacency_check = FALSE
|
||||
upgrade = TRUE
|
||||
var/obj/machinery/computer/camera_advanced/base_construction/console
|
||||
|
||||
/obj/item/construction/rcd/internal/check_menu(mob/living/user)
|
||||
if(!istype(user) || user.incapacitated() || !user.Adjacent(console))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction
|
||||
name = "base construction console"
|
||||
@@ -49,12 +57,10 @@
|
||||
|
||||
light_color = LIGHT_COLOR_PINK
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/Initialize()
|
||||
. = ..()
|
||||
RCD = new(src)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/Initialize(mapload)
|
||||
. = ..()
|
||||
RCD = new(src)
|
||||
RCD.console = src
|
||||
if(mapload) //Map spawned consoles have a filled RCD and stocked special structures
|
||||
RCD.matter = RCD.max_matter
|
||||
fans_remaining = 4
|
||||
@@ -85,7 +91,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/Destroy()
|
||||
qdel(RCD)
|
||||
QDEL_NULL(RCD)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/GrantActions(mob/living/user)
|
||||
@@ -140,7 +146,8 @@
|
||||
remote_eye = C.remote_control
|
||||
B = target
|
||||
if(!B.RCD) //The console must always have an RCD.
|
||||
B.RCD = new /obj/item/construction/rcd/internal(src) //If the RCD is lost somehow, make a new (empty) one!
|
||||
B.RCD = new /obj/item/construction/rcd/internal(B) //If the RCD is lost somehow, make a new (empty) one!
|
||||
B.RCD.console = B
|
||||
|
||||
/datum/action/innate/aux_base/proc/check_spot()
|
||||
//Check a loction to see if it is inside the aux base at the station. Camera visbility checks omitted so as to not hinder construction.
|
||||
@@ -195,34 +202,40 @@
|
||||
|
||||
var/list/buildlist = list("Walls and Floors" = 1,"Airlocks" = 2,"Deconstruction" = 3,"Windows and Grilles" = 4)
|
||||
var/buildmode = input("Set construction mode.", "Base Console", null) in buildlist
|
||||
B.RCD.mode = buildlist[buildmode]
|
||||
to_chat(owner, "Build mode is now [buildmode].")
|
||||
if(buildmode)
|
||||
B.RCD.mode = buildlist[buildmode]
|
||||
to_chat(owner, "Build mode is now [buildmode].")
|
||||
|
||||
/datum/action/innate/aux_base/airlock_type
|
||||
name = "Select Airlock Type"
|
||||
name = "Change Airlock Settings"
|
||||
button_icon_state = "airlock_select"
|
||||
|
||||
datum/action/innate/aux_base/airlock_type/Activate()
|
||||
/datum/action/innate/aux_base/airlock_type/Activate()
|
||||
if(..())
|
||||
return
|
||||
|
||||
B.RCD.change_airlock_setting()
|
||||
var/mode = alert("Modify Type or Access?", "Airlock Settings", "Type", "Access", "None")
|
||||
switch(mode)
|
||||
if("Type")
|
||||
B.RCD.change_airlock_setting(usr)
|
||||
if("Access")
|
||||
B.RCD.change_airlock_access(usr)
|
||||
|
||||
|
||||
datum/action/innate/aux_base/window_type
|
||||
/datum/action/innate/aux_base/window_type
|
||||
name = "Select Window Type"
|
||||
button_icon_state = "window_select"
|
||||
|
||||
datum/action/innate/aux_base/window_type/Activate()
|
||||
/datum/action/innate/aux_base/window_type/Activate()
|
||||
if(..())
|
||||
return
|
||||
B.RCD.toggle_window_type()
|
||||
B.RCD.toggle_window_type(usr)
|
||||
|
||||
datum/action/innate/aux_base/place_fan
|
||||
/datum/action/innate/aux_base/place_fan
|
||||
name = "Place Tiny Fan"
|
||||
button_icon_state = "build_fan"
|
||||
|
||||
datum/action/innate/aux_base/place_fan/Activate()
|
||||
/datum/action/innate/aux_base/place_fan/Activate()
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -244,11 +257,11 @@ datum/action/innate/aux_base/place_fan/Activate()
|
||||
to_chat(owner, "<span class='notice'>Tiny fan placed. [B.fans_remaining] remaining.</span>")
|
||||
playsound(fan_turf, 'sound/machines/click.ogg', 50, 1)
|
||||
|
||||
datum/action/innate/aux_base/install_turret
|
||||
/datum/action/innate/aux_base/install_turret
|
||||
name = "Install Plasma Anti-Wildlife Turret"
|
||||
button_icon_state = "build_turret"
|
||||
|
||||
datum/action/innate/aux_base/install_turret/Activate()
|
||||
/datum/action/innate/aux_base/install_turret/Activate()
|
||||
if(..())
|
||||
return
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
dat += "<b>Smelt Alloys</b><br>"
|
||||
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
dat += "<span class=\"res_name\">[D.name] "
|
||||
if (selected_alloy == D.id)
|
||||
dat += " <i>Smelting</i>"
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
|
||||
data["alloys"] = list()
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
data["alloys"] += list(list("name" = D.name, "id" = D.id, "amount" = can_smelt_alloy(D)))
|
||||
|
||||
if (!mat_container)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
shuttleId = "mining"
|
||||
possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public"
|
||||
no_destination_swap = 1
|
||||
var/global/list/dumb_rev_heads = list()
|
||||
var/static/list/dumb_rev_heads = list()
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/machinery/computer/shuttle/mining/attack_hand(mob/user)
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
});
|
||||
$( "#sortable" ).disableSelection();
|
||||
$('form').submit(function(){
|
||||
$('#IRVdata').val($( "#sortable" ).sortable("toArray", { attribute: "voteid" }));
|
||||
$('#IRVdata').val($( "#sortable" ).sortable("toArray", { attribute: "voteid" }));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -130,10 +130,10 @@
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/sergal
|
||||
name = "Sergal"
|
||||
@@ -287,8 +287,8 @@
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/sergal
|
||||
name = "Sergal"
|
||||
|
||||
@@ -3,6 +3,8 @@ GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as t
|
||||
|
||||
GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
|
||||
#define CANT_REENTER_ROUND -1
|
||||
|
||||
/mob/dead/observer
|
||||
name = "ghost"
|
||||
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
|
||||
@@ -17,8 +19,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
see_in_dark = 100
|
||||
invisibility = INVISIBILITY_OBSERVER
|
||||
hud_type = /datum/hud/ghost
|
||||
movement_type = GROUND | FLYING
|
||||
var/can_reenter_corpse
|
||||
var/can_reenter_round = TRUE
|
||||
var/reenter_round_timeout = 0 // used to prevent people from coming back through ghost roles/midround antags as they suicide/cryo for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit)
|
||||
var/datum/hud/living/carbon/hud = null // hud
|
||||
var/bootime = 0
|
||||
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
|
||||
@@ -260,14 +263,22 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body
|
||||
Works together with spawning an observer, noted above.
|
||||
*/
|
||||
|
||||
/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE)
|
||||
if(!key || cmptext(copytext(key,1,2),"@") || (!special && SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special) & COMPONENT_BLOCK_GHOSTING))
|
||||
/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
|
||||
if(!key || cmptext(copytext(key,1,2),"@") || (!special && SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse) & COMPONENT_BLOCK_GHOSTING))
|
||||
return //mob has no key, is an aghost or some component hijacked.
|
||||
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
|
||||
var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc.
|
||||
SStgui.on_transfer(src, ghost) // Transfer NanoUIs.
|
||||
ghost.can_reenter_corpse = can_reenter_corpse
|
||||
ghost.can_reenter_round = (can_reenter_corpse && !suiciding)
|
||||
if(penalize) //penalizing them from making a ghost role / midround antag comeback right away.
|
||||
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
|
||||
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
|
||||
if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed.
|
||||
penalty += roundstart_quit_limit - world.time
|
||||
if(penalty)
|
||||
ghost.reenter_round_timeout = world.realtime + penalty
|
||||
if(ghost.reenter_round_timeout - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
ghost.reenter_round_timeout = CANT_REENTER_ROUND
|
||||
transfer_ckey(ghost, FALSE)
|
||||
return ghost
|
||||
|
||||
@@ -283,26 +294,27 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE) & COMPONENT_BLOCK_GHOSTING)
|
||||
return
|
||||
|
||||
// CITADEL EDIT
|
||||
if(istype(loc, /obj/machinery/cryopod))
|
||||
var/obj/machinery/cryopod/C = loc
|
||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you won't be able to re-enter this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||
if(response != "Ghost" || QDELETED(C) || QDELETED(src) || loc != C)
|
||||
return
|
||||
C.despawn_occupant()
|
||||
return
|
||||
// END EDIT
|
||||
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
|
||||
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
|
||||
if(world.time < roundstart_quit_limit)
|
||||
penalty += roundstart_quit_limit - world.time
|
||||
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
penalty = CANT_REENTER_ROUND
|
||||
|
||||
if(stat != DEAD)
|
||||
succumb()
|
||||
if(stat == DEAD)
|
||||
ghostize(1)
|
||||
else
|
||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you won't be able to re-enter this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst alive you won't be able to re-enter this round [penalty ? "or play ghost roles [penalty != CANT_REENTER_ROUND ? "until the round is over" : "for the next [DisplayTimeText(penalty)]"]" : ""]! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||
if(response != "Ghost")
|
||||
return //didn't want to ghost after-all
|
||||
ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
||||
suicide_log(TRUE)
|
||||
if(istype(loc, /obj/machinery/cryopod))
|
||||
var/obj/machinery/cryopod/C = loc
|
||||
C.despawn_occupant()
|
||||
else
|
||||
ghostize(0, penalize = TRUE) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
||||
suicide_log(TRUE)
|
||||
|
||||
/mob/camera/verb/ghost()
|
||||
set category = "OOC"
|
||||
@@ -312,10 +324,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, FALSE, FALSE) & COMPONENT_BLOCK_GHOSTING)
|
||||
return
|
||||
|
||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you won't be able to re-enter this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
|
||||
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
|
||||
if(world.time < roundstart_quit_limit)
|
||||
penalty += roundstart_quit_limit - world.time
|
||||
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
penalty = CANT_REENTER_ROUND
|
||||
|
||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst alive you won't be able to re-enter this round [penalty ? "or play ghost roles [penalty != CANT_REENTER_ROUND ? "until the round is over" : "for the next [DisplayTimeText(penalty)]"]" : ""]! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||
if(response != "Ghost")
|
||||
return
|
||||
ghostize(0)
|
||||
ghostize(0, penalize = TRUE)
|
||||
|
||||
/mob/dead/observer/proc/can_reenter_round(silent = FALSE)
|
||||
if(reenter_round_timeout != CANT_REENTER_ROUND && reenter_round_timeout <= world.realtime)
|
||||
return TRUE
|
||||
if(!silent)
|
||||
to_chat(src, "<span class='warning'>You are unable to reenter the round[reenter_round_timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(reenter_round_timeout - world.realtime)]" : ""].</span>")
|
||||
return FALSE
|
||||
|
||||
/mob/dead/observer/Move(NewLoc, direct)
|
||||
if(updatedir)
|
||||
@@ -603,6 +629,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
set name = "Possess!"
|
||||
set desc= "Take over the body of a mindless creature!"
|
||||
|
||||
if(reenter_round_timeout > world.realtime)
|
||||
to_chat(src, "<span class='warning'>You are unable to re-enter the round yet. Your ghost role blacklist will expire in [DisplayTimeText(reenter_round_timeout - world.realtime)].</span>")
|
||||
return FALSE
|
||||
|
||||
var/list/possessible = list()
|
||||
for(var/mob/living/L in GLOB.alive_mob_list)
|
||||
if(istype(L,/mob/living/carbon/human/dummy) || !get_turf(L)) //Haha no.
|
||||
@@ -623,10 +653,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
to_chat(src, "<span class='warning'>This isn't really a creature, now is it!</span>")
|
||||
return 0
|
||||
|
||||
if(!can_reenter_round)
|
||||
to_chat(src, "<span class='warning'>You are unable to re-enter the round.</span>")
|
||||
return FALSE
|
||||
|
||||
if(can_reenter_corpse && mind && mind.current)
|
||||
if(alert(src, "Your soul is still tied to your former life as [mind.current.name], if you go forward there is no going back to that life. Are you sure you wish to continue?", "Move On", "Yes", "No") == "No")
|
||||
return 0
|
||||
@@ -871,3 +897,5 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
spawners_menu = new(src)
|
||||
|
||||
spawners_menu.ui_interact(src)
|
||||
|
||||
#undef CANT_REENTER_ROUND
|
||||
@@ -0,0 +1,2 @@
|
||||
/mob/dead/observer/canZMove(direction, turf/target)
|
||||
return TRUE
|
||||
@@ -36,7 +36,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade)
|
||||
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN, ignore_dnr_observers = TRUE)
|
||||
if(!newlymade)
|
||||
GLOB.posibrain_notify_cooldown = world.time + askDelay
|
||||
|
||||
@@ -83,11 +83,14 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
//Two ways to activate a positronic brain. A clickable link in the ghost notif, or simply clicking the object itself.
|
||||
/obj/item/mmi/posibrain/proc/activate(mob/user)
|
||||
if(QDELETED(brainmob))
|
||||
return
|
||||
if(is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(brainmob) || QDELETED(src) || QDELETED(user))
|
||||
if(QDELETED(brainmob) || is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
|
||||
if(isobserver(user))
|
||||
var/mob/dead/observer/O = user
|
||||
if(!O.can_reenter_round())
|
||||
return FALSE
|
||||
|
||||
var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No")
|
||||
if(posi_ask == "No" || QDELETED(src))
|
||||
return
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/mob/living/carbon/alien/spawn_gibs(with_bodyparts)
|
||||
/mob/living/carbon/alien/spawn_gibs(with_bodyparts, atom/loc_override)
|
||||
var/location = loc_override ? loc_override.drop_location() : drop_location()
|
||||
if(with_bodyparts)
|
||||
new /obj/effect/gibspawner/xeno(drop_location())
|
||||
new /obj/effect/gibspawner/xeno(location, src)
|
||||
else
|
||||
new /obj/effect/gibspawner/xeno/bodypartless(drop_location())
|
||||
new /obj/effect/gibspawner/xeno/bodypartless(location, src)
|
||||
|
||||
/mob/living/carbon/alien/gib_animation()
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-a")
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
|
||||
update_icons()
|
||||
|
||||
/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts)
|
||||
/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts, atom/loc_override)
|
||||
var/location = loc_override ? loc_override.drop_location() : drop_location()
|
||||
if(with_bodyparts)
|
||||
new /obj/effect/gibspawner/larva(drop_location())
|
||||
new /obj/effect/gibspawner/larva(location, src)
|
||||
else
|
||||
new /obj/effect/gibspawner/larva/bodypartless(drop_location())
|
||||
new /obj/effect/gibspawner/larva/bodypartless(location, src)
|
||||
|
||||
/mob/living/carbon/alien/larva/gib_animation()
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-l")
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/fall(forced)
|
||||
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||
|
||||
/mob/living/carbon/is_muzzled()
|
||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user