mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-18 19:39:53 +01:00
Merge branch 'master' into various-fixes
This commit is contained in:
@@ -792,6 +792,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Chemistry"
|
||||
icon_state = "chem"
|
||||
|
||||
/area/medical/psych
|
||||
name = "Psychology Office"
|
||||
icon_state = "medbay"
|
||||
|
||||
/area/medical/surgery
|
||||
name = "Surgery"
|
||||
icon_state = "surgery"
|
||||
@@ -1371,3 +1375,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/crew_quarters/fitness/pool
|
||||
name = "Pool Area"
|
||||
icon_state = "pool"
|
||||
|
||||
/area/xenoarch/nothinghere
|
||||
name = "Nothing Here"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = SPOOKY
|
||||
|
||||
@@ -58,6 +58,9 @@
|
||||
/area/ruin/space/has_grav/powered/cat_man
|
||||
name = "Kitty Den"
|
||||
|
||||
/area/ruin/space/has_grav/powered/wiz_home/area/ruin/space/has_grav/powered/wiz_home
|
||||
name = "Wizard's Cabin"
|
||||
|
||||
/area/ruin/space/has_grav/powered/authorship
|
||||
name = "Authorship"
|
||||
|
||||
@@ -178,13 +181,6 @@
|
||||
name = "Mech Transport"
|
||||
icon_state = "green"
|
||||
|
||||
|
||||
//Ruin of gas the lizard
|
||||
|
||||
/area/ruin/space/has_grav/gasthelizard
|
||||
name = "Gas the lizard"
|
||||
|
||||
|
||||
//Ruin of Deep Storage
|
||||
|
||||
/area/ruin/space/has_grav/deepstorage
|
||||
|
||||
+8
-6
@@ -36,7 +36,7 @@
|
||||
var/buckle_message_cooldown = 0
|
||||
var/fingerprintslast
|
||||
|
||||
var/list/filter_data = list() //For handling persistent filters
|
||||
var/list/filter_data //For handling persistent filters
|
||||
|
||||
var/datum/component/orbiter/orbiters
|
||||
|
||||
@@ -315,6 +315,9 @@
|
||||
/atom/proc/examine(mob/user)
|
||||
. = list("[get_examine_string(user, TRUE)].")
|
||||
|
||||
if(!isliving(src))
|
||||
user.visible_message("<span class='notice'>[user] examines [src].</span>",\
|
||||
"<span class='notice'>You examine [src].</span>")
|
||||
if(desc)
|
||||
. += desc
|
||||
|
||||
@@ -866,11 +869,10 @@ Proc for attack log creation, because really why not
|
||||
return filters[filter_data.Find(name)]
|
||||
|
||||
/atom/movable/proc/remove_filter(name)
|
||||
if(filter_data)
|
||||
if(filter_data[name])
|
||||
filter_data -= name
|
||||
update_filters()
|
||||
return TRUE
|
||||
if(filter_data[name])
|
||||
filter_data -= name
|
||||
update_filters()
|
||||
return TRUE
|
||||
|
||||
/atom/proc/intercept_zImpact(atom/movable/AM, levels = 1)
|
||||
. |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, AM, levels)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
var/moving_diagonally = 0 //0: not doing a diagonal move. 1 and 2: doing the first/second step of the diagonal move
|
||||
var/list/client_mobs_in_contents // This contains all the client mobs within this container
|
||||
var/list/acted_explosions //for explosion dodging
|
||||
glide_size = 8
|
||||
glide_size = 4
|
||||
appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
|
||||
var/datum/forced_movement/force_moving = null //handled soley by forced_movement.dm
|
||||
var/floating = FALSE
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
required_enemies = 2
|
||||
recommended_enemies = 4
|
||||
reroll_friendly = FALSE
|
||||
enemy_minimum_age = 7
|
||||
enemy_minimum_age = 21
|
||||
round_ends_with_antag_death = FALSE
|
||||
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@ Credit where due:
|
||||
required_players = 35
|
||||
required_enemies = 3
|
||||
recommended_enemies = 5
|
||||
enemy_minimum_age = 7
|
||||
enemy_minimum_age = 28
|
||||
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
|
||||
restricted_jobs = list("Chaplain", "Captain")
|
||||
announce_span = "brass"
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
required_players = 30
|
||||
required_enemies = 3
|
||||
recommended_enemies = 5
|
||||
enemy_minimum_age = 7
|
||||
enemy_minimum_age = 28
|
||||
|
||||
announce_span = "cult"
|
||||
announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
// LEWD //
|
||||
// //
|
||||
//////////////////////////////////////////
|
||||
|
||||
/* //Putting Lewd traitor on the backburner until we can buffer it a bit.
|
||||
/datum/dynamic_ruleset/midround/autotraitor/lewd
|
||||
name = "Horny Traitor"
|
||||
persistent = TRUE
|
||||
@@ -375,7 +375,7 @@
|
||||
var/datum/antagonist/traitor/lewd/newTraitor = new
|
||||
M.mind.add_antag_datum(newTraitor)
|
||||
return TRUE
|
||||
|
||||
*/
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// Malfunctioning AI //
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
// LEWD //
|
||||
// //
|
||||
//////////////////////////////////////////
|
||||
|
||||
/* //Putting Lewd traitor on the backburner until we can buffer it a bit.
|
||||
/datum/dynamic_ruleset/roundstart/traitor/lewd
|
||||
name = "Horny Traitor"
|
||||
persistent = TRUE
|
||||
@@ -115,7 +115,7 @@
|
||||
M.mind.restricted_roles = restricted_roles
|
||||
return TRUE
|
||||
|
||||
|
||||
*/
|
||||
//////////////////////////////////////////
|
||||
// //
|
||||
// BLOOD BROTHERS //
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
|
||||
var/reroll_friendly //During mode conversion only these are in the running
|
||||
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
|
||||
var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist
|
||||
var/enemy_minimum_age = 21 //How many days must players have been playing before they can play this antagonist
|
||||
|
||||
var/announce_span = "warning" //The gamemode's name will be in this span during announcement.
|
||||
var/announce_text = "This gamemode forgot to set a descriptive text! Uh oh!" //Used to describe a gamemode when it's announced.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
required_enemies = 2
|
||||
recommended_enemies = 5
|
||||
antag_flag = ROLE_OPERATIVE
|
||||
enemy_minimum_age = 7
|
||||
enemy_minimum_age = 21
|
||||
|
||||
announce_span = "danger"
|
||||
announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
required_players = 30
|
||||
required_enemies = 2
|
||||
recommended_enemies = 3
|
||||
enemy_minimum_age = 14
|
||||
enemy_minimum_age = 28
|
||||
|
||||
announce_span = "danger"
|
||||
announce_text = "Some crewmembers are attempting a coup!\n\
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
required_enemies = 1
|
||||
recommended_enemies = 4
|
||||
reroll_friendly = 1
|
||||
enemy_minimum_age = 0
|
||||
enemy_minimum_age = 21
|
||||
|
||||
announce_span = "danger"
|
||||
announce_text = "There are Syndicate agents on the station!\n\
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
required_players = 20
|
||||
required_enemies = 1
|
||||
recommended_enemies = 1
|
||||
enemy_minimum_age = 7
|
||||
enemy_minimum_age = 21
|
||||
round_ends_with_antag_death = 1
|
||||
announce_span = "danger"
|
||||
announce_text = "There is a space wizard attacking the station!\n\
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
|
||||
// OMG CENTCOM LETTERHEAD
|
||||
if("MessageCentCom")
|
||||
if(authenticated==2)
|
||||
if(authenticated)
|
||||
if(!checkCCcooldown())
|
||||
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
|
||||
return
|
||||
@@ -301,7 +301,7 @@
|
||||
|
||||
// OMG SYNDICATE ...LETTERHEAD
|
||||
if("MessageSyndicate")
|
||||
if((authenticated==2) && (obj_flags & EMAGGED))
|
||||
if((authenticated) && (obj_flags & EMAGGED))
|
||||
if(!checkCCcooldown())
|
||||
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
@@ -483,6 +483,11 @@
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=cancelshuttle'>Cancel Shuttle Call</A> \]"
|
||||
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=status'>Set Status Display</A> \]"
|
||||
if(!(obj_flags & EMAGGED))
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageCentCom'>Send Message to CentCom</A> \]"
|
||||
else
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageSyndicate'>Send Message to \[UNKNOWN\]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||
if (authenticated==2)
|
||||
dat += "<BR><BR><B>Captain Functions</B>"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=announce'>Make a Captain's Announcement</A> \]"
|
||||
@@ -494,11 +499,6 @@
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=changeseclevel'>Change Alert Level</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=emergencyaccess'>Emergency Maintenance Access</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=nukerequest'>Request Nuclear Authentication Codes</A> \]"
|
||||
if(!(obj_flags & EMAGGED))
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageCentCom'>Send Message to CentCom</A> \]"
|
||||
else
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageSyndicate'>Send Message to \[UNKNOWN\]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||
else
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=login'>Log In</A> \]"
|
||||
if(STATE_CALLSHUTTLE)
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
var/doorOpen = 'sound/machines/airlock.ogg'
|
||||
var/doorClose = 'sound/machines/airlockclose.ogg'
|
||||
var/doorDeni = 'sound/machines/deniedbeep.ogg' // i'm thinkin' Deni's
|
||||
var/boltUp = 'sound/machines/boltsup.ogg'
|
||||
var/boltDown = 'sound/machines/boltsdown.ogg'
|
||||
var/boltUp = 'hyperstation/sound/machines/BoltsUp.ogg'
|
||||
var/boltDown = 'hyperstation/sound/machines/BoltsDown.ogg'
|
||||
var/noPower = 'sound/machines/doorclick.ogg'
|
||||
var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to
|
||||
var/airlock_material //material of inner filling; if its an airlock with glass, this should be set to "glass"
|
||||
@@ -1155,7 +1155,7 @@
|
||||
if(obj_flags & EMAGGED)
|
||||
return FALSE
|
||||
use_power(50)
|
||||
playsound(src, doorOpen, 30, 1)
|
||||
playsound(src, doorOpen, 40, 0)
|
||||
if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
|
||||
src.closeOther.close()
|
||||
else
|
||||
@@ -1202,7 +1202,7 @@
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
use_power(50)
|
||||
playsound(src.loc, doorClose, 30, 1)
|
||||
playsound(src.loc, doorClose, 40, 0)
|
||||
else
|
||||
playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
damage_deflection = 70
|
||||
poddoor = TRUE
|
||||
var/openSound = 'hyperstation/sound/machines/blastDoorOpen.ogg'
|
||||
var/closeSound = 'hyperstation/sound/machines/blastDoorClose.ogg'
|
||||
|
||||
/obj/machinery/door/poddoor/preopen
|
||||
icon_state = "open"
|
||||
@@ -72,10 +74,10 @@
|
||||
switch(animation)
|
||||
if("opening")
|
||||
flick("opening", src)
|
||||
playsound(src, 'sound/machines/blastdoor.ogg', 30, 1)
|
||||
playsound(src, openSound, 20, 0)
|
||||
if("closing")
|
||||
flick("closing", src)
|
||||
playsound(src, 'sound/machines/blastdoor.ogg', 30, 1)
|
||||
playsound(src, closeSound, 20, 0)
|
||||
|
||||
/obj/machinery/door/poddoor/update_icon()
|
||||
if(density)
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
|
||||
damage_deflection = 20
|
||||
max_integrity = 100
|
||||
openSound = 'hyperstation/sound/machines/shutter.ogg'
|
||||
closeSound = 'hyperstation/sound/machines/shutter.ogg'
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/preopen
|
||||
icon_state = "open"
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
if(!src.operating) //in case of emag
|
||||
operating = TRUE
|
||||
do_animate("opening")
|
||||
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
||||
playsound(src.loc, 'hyperstation/sound/machines/windowdoor.ogg', 70, 0)
|
||||
src.icon_state ="[src.base_state]open"
|
||||
sleep(10)
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
return 0
|
||||
operating = TRUE
|
||||
do_animate("closing")
|
||||
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
||||
playsound(src.loc, 'hyperstation/sound/machines/windowdoor.ogg', 70, 0)
|
||||
src.icon_state = src.base_state
|
||||
|
||||
density = TRUE
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/obj/item/assembly/signaler/anomaly/aSignal
|
||||
var/area/impact_area
|
||||
|
||||
var/lifespan = 1190
|
||||
var/lifespan = 1690
|
||||
var/death_time
|
||||
|
||||
var/countdown_colour
|
||||
|
||||
@@ -171,6 +171,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
|
||||
name = "Geneticist"
|
||||
icon_state = "Geneticist"
|
||||
|
||||
/obj/effect/landmark/start/psychologist
|
||||
name = "Psychologist"
|
||||
icon_state = "Medical Doctor"
|
||||
|
||||
/obj/effect/landmark/start/chief_medical_officer
|
||||
name = "Chief Medical Officer"
|
||||
icon_state = "Chief Medical Officer"
|
||||
|
||||
@@ -29,9 +29,19 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
obj_flags = NONE
|
||||
var/item_flags = NONE
|
||||
|
||||
var/hitsound = null
|
||||
var/usesound = null
|
||||
var/throwhitsound = null
|
||||
|
||||
var/hitsound
|
||||
var/usesound
|
||||
|
||||
var/mob_throw_hit_sound
|
||||
|
||||
///Sound uses when picking the item up (into your hands)
|
||||
var/pickup_sound
|
||||
///Sound uses when dropping the item, or when its thrown.
|
||||
var/drop_sound
|
||||
///Sound used when equipping the item into a valid slot
|
||||
var/equip_sound
|
||||
|
||||
var/w_class = WEIGHT_CLASS_NORMAL
|
||||
var/total_mass //Total mass in arbitrary pound-like values. If there's no balance reasons for an item to have otherwise, this var should be the item's weight in pounds.
|
||||
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
|
||||
@@ -372,7 +382,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
/obj/item/proc/talk_into(mob/M, input, channel, spans, datum/language/language)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
/obj/item/proc/dropped(mob/user)
|
||||
/obj/item/proc/dropped(mob/user, silent)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
@@ -380,6 +390,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
qdel(src)
|
||||
item_flags &= ~IN_INVENTORY
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user)
|
||||
if(!silent)
|
||||
playsound(src, drop_sound, DROP_SOUND_VOLUME, ignore_walls = FALSE)
|
||||
|
||||
// called just as an item is picked up (loc is not yet changed)
|
||||
/obj/item/proc/pickup(mob/user)
|
||||
@@ -423,6 +435,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
A.Grant(user)
|
||||
item_flags |= IN_INVENTORY
|
||||
|
||||
if(equip_sound &&(slot_flags & slotdefine2slotbit(slot)))
|
||||
playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
|
||||
else if(slot == SLOT_HANDS)
|
||||
playsound(src, pickup_sound, PICKUP_SOUND_VOLUME, ignore_walls = FALSE)
|
||||
|
||||
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
|
||||
/obj/item/proc/item_action_slot_check(slot, mob/user)
|
||||
if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there
|
||||
@@ -575,6 +592,21 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/itempush = 1
|
||||
if(w_class < 4)
|
||||
itempush = 0 //too light to push anything
|
||||
|
||||
if(istype(hit_atom, /mob/living)) //Living mobs handle hit sounds differently.
|
||||
var/volume = get_volume_by_throwforce_and_or_w_class()
|
||||
if (throwforce > 0)
|
||||
if (mob_throw_hit_sound)
|
||||
playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1)
|
||||
else if(hitsound)
|
||||
playsound(hit_atom, hitsound, volume, TRUE, -1)
|
||||
else
|
||||
playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1)
|
||||
else
|
||||
playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1)
|
||||
|
||||
else
|
||||
playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE)
|
||||
return hit_atom.hitby(src, 0, itempush, throwingdatum=throwingdatum)
|
||||
|
||||
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE)
|
||||
@@ -846,7 +878,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
layer = initial(layer)
|
||||
plane = initial(plane)
|
||||
appearance_flags &= ~NO_CLIENT_COLOR
|
||||
dropped(M)
|
||||
dropped(M, FALSE)
|
||||
return ..()
|
||||
|
||||
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback)
|
||||
|
||||
@@ -232,7 +232,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(lit)
|
||||
user.visible_message("<span class='notice'>[user] calmly drops and treads on \the [src], putting it out instantly.</span>")
|
||||
new type_butt(user.loc)
|
||||
new /obj/effect/decal/cleanable/ash(user.loc)
|
||||
qdel(src)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
|
||||
var/mode = 0
|
||||
|
||||
drop_sound = 'sound/items/handling/multitool_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/multitool_pickup.ogg'
|
||||
|
||||
/obj/item/multitool/examine(mob/user)
|
||||
. = ..()
|
||||
if(selected_io)
|
||||
|
||||
@@ -200,6 +200,7 @@
|
||||
if(!language)
|
||||
language = M.get_default_language()
|
||||
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans.Copy(), language)
|
||||
playsound(src, 'sound/voice/radioin.ogg', 25, 0)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
/obj/item/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language)
|
||||
|
||||
@@ -50,6 +50,9 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
|
||||
//END OF CIT CHANGES
|
||||
new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
null, \
|
||||
//add this when I can find a way to make them easily constructible > new/datum/stack_recipe("sink", /obj/structure/sink, 2, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new/datum/stack_recipe("shower", /obj/machinery/shower/crafted, 2, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
null, \
|
||||
new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \
|
||||
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
null, \
|
||||
@@ -355,6 +358,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
merge_type = /obj/item/stack/sheet/cloth
|
||||
grind_results = list(/datum/reagent/cellulose = 4)
|
||||
|
||||
drop_sound = 'sound/items/handling/cloth_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
|
||||
|
||||
/obj/item/stack/sheet/cloth/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.cloth_recipes
|
||||
return ..()
|
||||
@@ -400,6 +406,11 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
merge_type = /obj/item/stack/sheet/durathread
|
||||
grind_results = list(/datum/reagent/cellulose = 10)
|
||||
|
||||
drop_sound = 'sound/items/handling/cloth_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
|
||||
|
||||
|
||||
|
||||
/obj/item/stack/sheet/durathread/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.durathread_recipes
|
||||
return ..()
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
max_integrity = 300
|
||||
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
|
||||
var/worn_overlays = FALSE //worn counterpart of the above.
|
||||
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
|
||||
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
|
||||
|
||||
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -888,6 +891,16 @@ obj/item/storage/belt/slut/ComponentInitialize()
|
||||
final_block_chance = 0 //Too thin to block bullets
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/belt/sabre/chloesabre
|
||||
name = "Ornate Sheath"
|
||||
desc = "An ornate and rather sinister looking sabre sheathe."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
icon_state = "darksheath"
|
||||
item_state = "darksheath"
|
||||
fitting_swords = list(/obj/item/toy/sword/chloesabre, /obj/item/melee/sabre, /obj/item/melee/baton/stunsword)
|
||||
starting_sword = /obj/item/toy/sword/chloesabre
|
||||
|
||||
/obj/item/storage/belt/botany
|
||||
name = "botanical belt"
|
||||
desc = "A belt made for holding hydroponics supplies."
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
var/illustration = "writing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
|
||||
|
||||
drop_sound = 'sound/items/handling/cardboardbox_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg'
|
||||
|
||||
/obj/item/storage/box/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
@@ -643,6 +646,8 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
price = 2
|
||||
drop_sound = 'sound/items/handling/matchbox_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/matchbox_pickup.ogg'
|
||||
|
||||
/obj/item/storage/box/matches/ComponentInitialize()
|
||||
. = ..()
|
||||
|
||||
@@ -389,3 +389,28 @@
|
||||
/obj/item/organ_storage
|
||||
))
|
||||
|
||||
//Psych Pillbottles
|
||||
|
||||
/obj/item/storage/pill_bottle/happinesspsych
|
||||
name = "happiness pill bottle"
|
||||
desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction."
|
||||
|
||||
/obj/item/storage/pill_bottle/happinesspsych/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/happinesspsych(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/lsdpsych
|
||||
name = "mindbreaker toxin pill bottle"
|
||||
desc = "!FOR THERAPEUTIC USE ONLY! Contains pills used to alleviate the symptoms of Reality Dissociation Syndrome."
|
||||
|
||||
/obj/item/storage/pill_bottle/lsdpsych/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/lsdpsych(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/paxpsych
|
||||
name = "pacification pill"
|
||||
desc = "Contains pills used to temporarily pacify patients that are deemed a harm to themselves or others."
|
||||
|
||||
/obj/item/storage/pill_bottle/paxpsych/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/paxpsych(src)
|
||||
@@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
materials = list(MAT_METAL = 500)
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
drop_sound = 'sound/items/handling/toolbox_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/toolbox_pickup.ogg'
|
||||
var/latches = "single_latch"
|
||||
var/has_latches = TRUE
|
||||
var/can_rubberify = TRUE
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=50)
|
||||
|
||||
drop_sound = 'sound/items/handling/crowbar_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/crowbar_pickup.ogg'
|
||||
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
tool_behaviour = TOOL_CROWBAR
|
||||
toolspeed = 1
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
|
||||
tool_behaviour = TOOL_SCREWDRIVER
|
||||
toolspeed = 1
|
||||
drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
var/random_color = TRUE //if the screwdriver uses random coloring
|
||||
var/static/list/screwdriver_colors = list(
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
tool_behaviour = TOOL_WELDER
|
||||
toolspeed = 1
|
||||
|
||||
drop_sound = 'sound/items/handling/weldingtool_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg'
|
||||
|
||||
/obj/item/weldingtool/Initialize()
|
||||
. = ..()
|
||||
create_reagents(max_fuel)
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
hitsound = 'sound/items/wirecutter.ogg'
|
||||
usesound = 'sound/items/wirecutter.ogg'
|
||||
|
||||
drop_sound = 'sound/items/handling/wirecutter_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg'
|
||||
|
||||
tool_behaviour = TOOL_WIRECUTTER
|
||||
toolspeed = 1
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
usesound = 'sound/items/ratchet.ogg'
|
||||
materials = list(MAT_METAL=150)
|
||||
|
||||
drop_sound = 'sound/items/handling/wrench_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/wrench_pickup.ogg'
|
||||
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
tool_behaviour = TOOL_WRENCH
|
||||
toolspeed = 1
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
var/renamedByPlayer = FALSE //set when a player uses a pen on a renamable object
|
||||
|
||||
vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace.
|
||||
|
||||
/obj/vv_edit_var(vname, vval)
|
||||
switch(vname)
|
||||
if("anchored")
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
|
||||
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
|
||||
var/cutting_tool = /obj/item/weldingtool
|
||||
var/open_sound = 'sound/machines/click.ogg'
|
||||
var/close_sound = 'sound/machines/click.ogg'
|
||||
var/open_sound = 'sound/effects/locker_open.ogg'
|
||||
var/close_sound = 'sound/effects/locker_close.ogg'
|
||||
var/material_drop = /obj/item/stack/sheet/metal
|
||||
var/material_drop_amount = 2
|
||||
var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable.
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/obj/structure/closet/secure_closet/psychology
|
||||
name = "psychology locker"
|
||||
req_access = list(ACCESS_PSYCH)
|
||||
icon_state = "cabinet"
|
||||
|
||||
/obj/structure/closet/secure_closet/psychology/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/under/lawyer/blacksuit(src)
|
||||
new /obj/item/clothing/under/lawyer/blacksuit/skirt(src)
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
new /obj/item/storage/backpack/medic(src)
|
||||
new /obj/item/radio/headset/headset_med(src)
|
||||
new /obj/item/clipboard(src)
|
||||
new /obj/item/clothing/suit/straight_jacket(src)
|
||||
new /obj/item/clothing/ears/earmuffs(src)
|
||||
new /obj/item/clothing/mask/muzzle(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/blindfold(src)
|
||||
@@ -727,3 +727,9 @@
|
||||
qdel(src)
|
||||
building = FALSE
|
||||
|
||||
|
||||
/obj/structure/rack/shelf
|
||||
name = "shelving"
|
||||
desc = "Some nice metal shelves."
|
||||
icon = 'hyperstation/icons/obj/objects.dmi'
|
||||
icon_state = "shelf"
|
||||
|
||||
@@ -219,8 +219,8 @@
|
||||
var/watertemp = "normal" //freezing, normal, or boiling
|
||||
var/datum/looping_sound/showering/soundloop
|
||||
|
||||
/*/obj/machinery/shower/crafted //When created from sheets of metal
|
||||
anchored = FALSE */ //Stop exploiting this ree
|
||||
/obj/machinery/shower/crafted //When created from sheets of metal
|
||||
anchored = FALSE
|
||||
|
||||
/obj/machinery/shower/Initialize()
|
||||
. = ..()
|
||||
@@ -292,19 +292,43 @@
|
||||
if (user.a_intent != INTENT_HELP)
|
||||
return ..()
|
||||
|
||||
if (I.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>")
|
||||
if(I.use_tool(src, user, 50))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
watertemp = "freezing"
|
||||
if("freezing")
|
||||
watertemp = "boiling"
|
||||
if("boiling")
|
||||
watertemp = "normal"
|
||||
user.visible_message("<span class='notice'>[user] adjusts the shower with \the [I].</span>", "<span class='notice'>You adjust the shower with \the [I] to [watertemp] temperature.</span>")
|
||||
log_game("[key_name(user)] has wrenched a shower to [watertemp] at ([x],[y],[z])")
|
||||
add_hiddenprint(user)
|
||||
switch (I.tool_behaviour)
|
||||
if (TOOL_WRENCH)
|
||||
if (!anchored)
|
||||
user.visible_message("<span class='notice'>[user] starts to take apart [src]...</span>", "<span class='notice'>You start dismantling [src]...</span>")
|
||||
I.play_tool_sound(src)
|
||||
if(I.use_tool(src, user, 20))
|
||||
deconstruct(TRUE)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>")
|
||||
if(I.use_tool(src, user, 50))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
watertemp = "freezing"
|
||||
if("freezing")
|
||||
watertemp = "boiling"
|
||||
if("boiling")
|
||||
watertemp = "normal"
|
||||
user.visible_message("<span class='notice'>[user] adjusts the shower with \the [I].</span>", "<span class='notice'>You adjust the shower with \the [I] to [watertemp] temperature.</span>")
|
||||
log_game("[key_name(user)] has wrenched a shower to [watertemp] at ([x],[y],[z])")
|
||||
add_hiddenprint(user)
|
||||
|
||||
if (TOOL_SCREWDRIVER)
|
||||
if (!anchored)
|
||||
to_chat(user, "<span class='notice'>You begin screwing in [src] to the floor...</span>")
|
||||
I.play_tool_sound(src)
|
||||
if(I.use_tool(src, user, 30))
|
||||
user.visible_message("<span class='notice'>[user] connects [src] to the floor.</span>", "<span class='notice'>You connect [src] to the floor.</span>")
|
||||
anchored = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start to take out [src]'s screws...</span>")
|
||||
on = FALSE
|
||||
soundloop.stop()
|
||||
update_icon()
|
||||
I.play_tool_sound(src)
|
||||
if(I.use_tool(src, user, 20))
|
||||
user.visible_message("<span class='notice'>[user] disconnects [src] from the floor.</span>", "<span class='notice'>You disconnect [src] from the floor.</span>")
|
||||
anchored = FALSE
|
||||
|
||||
/obj/machinery/shower/examine()
|
||||
. += ..()
|
||||
@@ -429,6 +453,7 @@
|
||||
H.update_inv_wear_mask()
|
||||
else
|
||||
H.lip_style = null
|
||||
H.nail_style = null
|
||||
H.update_body()
|
||||
if(H.glasses && washglasses && wash_obj(H.glasses))
|
||||
H.update_inv_glasses()
|
||||
@@ -468,7 +493,7 @@
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/shower/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/metal (loc, 3)
|
||||
new /obj/item/stack/sheet/metal (loc, 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/shower/proc/check_heat(mob/living/carbon/C)
|
||||
|
||||
@@ -1,7 +1,20 @@
|
||||
GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdrop, new)
|
||||
|
||||
/atom/movable/openspace_backdrop
|
||||
name = "openspace_backdrop"
|
||||
|
||||
anchored = TRUE
|
||||
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "grey"
|
||||
plane = OPENSPACE_BACKDROP_PLANE
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
layer = SPLASHSCREEN_LAYER
|
||||
|
||||
/turf/open/openspace
|
||||
name = "open space"
|
||||
desc = "Watch your step!"
|
||||
icon_state = "grey"
|
||||
icon_state = "transparent"
|
||||
baseturfs = /turf/open/openspace
|
||||
CanAtmosPassVertical = ATMOS_PASS_YES
|
||||
//mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
@@ -14,8 +27,11 @@
|
||||
|
||||
/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
|
||||
. = ..()
|
||||
plane = FLOOR_OPENSPACE_PLANE
|
||||
plane = OPENSPACE_PLANE
|
||||
layer = OPENSPACE_LAYER
|
||||
|
||||
vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/turf/open/openspace/LateInitialize()
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
light_power = 0.25
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
bullet_bounce_sound = null
|
||||
|
||||
vis_flags = VIS_INHERIT_ID //when this be added to vis_contents of something it be associated with something on clicking, important for visualisation of turf in openspace and interraction with openspace that show you turf.
|
||||
|
||||
/turf/open/space/basic/New() //Do not convert to Initialize
|
||||
//This is used to optimize the map loader
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
//IE if the turf is supposed to be water, set TRUE.
|
||||
|
||||
var/tiled_dirt = FALSE // use smooth tiled dirt decal
|
||||
|
||||
vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_ID //when this be added to vis_contents of something it inherit something.plane and be associated with something on clicking, important for visualisation of turf in openspace and interraction with openspace that show you turf.
|
||||
|
||||
/turf/vv_edit_var(var_name, new_value)
|
||||
var/static/list/banned_edits = list("x", "y", "z")
|
||||
|
||||
Reference in New Issue
Block a user