Merge remote-tracking branch 'upstream/master' into RBMK_Branch_Simple

This commit is contained in:
Archie
2021-05-05 14:49:01 -03:00
37 changed files with 706 additions and 1092 deletions
+3
View File
@@ -38,6 +38,7 @@ require only minor tweaks.
#define ZTRAIT_SPACE_RUINS "Space Ruins"
#define ZTRAIT_LAVA_RUINS "Lava Ruins"
#define ZTRAIT_LAVA_UNDERGROUND "Lava Underground"
#define ZTRAIT_DINER "Diner"
#define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement.
// number - bombcap is multiplied by this before being applied to bombs
@@ -81,6 +82,8 @@ require only minor tweaks.
#define ZTRAITS_REEBE list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)
#define ZTRAITS_DINER list(ZTRAIT_DINER = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)
#define DL_NAME "name"
#define DL_TRAITS "traits"
#define DECLARE_LEVEL(NAME, TRAITS) list(DL_NAME = NAME, DL_TRAITS = TRAITS)
+3
View File
@@ -250,10 +250,13 @@ SUBSYSTEM_DEF(mapping)
++space_levels_so_far
add_new_zlevel("Empty Area [space_levels_so_far]", ZTRAITS_SPACE)
// load mining
if(config.minetype == "lavaland")
INIT_ANNOUNCE("Loading Mining...")
LoadGroup(FailedZs, "Lavaland_Lower", "map_files/Mining", "Lavaland_Lower.dmm", default_traits = ZTRAITS_LAVALAND_UNDERRGOUND)
LoadGroup(FailedZs, "Lavaland", "map_files/Mining", "Lavaland.dmm", default_traits = ZTRAITS_LAVALAND)
LoadGroup(FailedZs, "Diner", "map_files/hyper", "Diner.dmm", default_traits = ZTRAITS_DINER)
else if (!isnull(config.minetype))
INIT_ANNOUNCE("WARNING: An unknown minetype '[config.minetype]' was set! This is being ignored! Update the maploader code!")
#endif
@@ -15,6 +15,32 @@
to_chat(M, "<span class='warning'>[parent] only accepts machine parts!</span>")
return FALSE
/datum/component/storage/concrete/rped/quick_empty(mob/M)
var/atom/A = parent
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
return
if(check_locked(null, M, TRUE))
return FALSE
A.add_fingerprint(M)
var/list/things = contents()
var/lowest_rating = INFINITY
for(var/obj/item/B in things)
if(B.get_part_rating() < lowest_rating)
lowest_rating = B.get_part_rating()
for(var/obj/item/B in things)
if(B.get_part_rating() > lowest_rating)
things.Remove(B)
if(lowest_rating == INFINITY)
to_chat(M, "<span class='notice'>There's no parts to dump out from [parent].</span>")
return
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
/datum/component/storage/concrete/bluespace/rped
collection_mode = COLLECT_EVERYTHING
allow_quick_gather = TRUE
@@ -34,3 +60,30 @@
/datum/component/storage/concrete/cyborg/rped
max_items = 150
/datum/component/storage/concrete/bluespace/rped/quick_empty(mob/M)
var/atom/A = parent
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
return
if(check_locked(null, M, TRUE))
return FALSE
A.add_fingerprint(M)
var/list/things = contents()
var/lowest_rating = INFINITY
for(var/obj/item/B in things)
if(B.get_part_rating() < lowest_rating)
lowest_rating = B.get_part_rating()
for(var/obj/item/B in things)
if(B.get_part_rating() > lowest_rating)
things.Remove(B)
if(lowest_rating == INFINITY)
to_chat(M, "<span class='notice'>There's no parts to dump out from [parent].</span>")
return
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
var/turf/T = get_turf(A)
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
stoplag(1)
qdel(progress)
A.do_squish(0.8, 1.2)
+2
View File
@@ -88,6 +88,8 @@ GLOBAL_LIST_EMPTY(explosions)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in [ADMIN_VERBOSEJMP(epicenter)]")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in [loc_name(epicenter)]")
deadchat_broadcast("<span class='deadsay bold'>An explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) has occured at ([get_area(epicenter)])</span>", turf_target = get_turf(epicenter))
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
+2 -2
View File
@@ -8,7 +8,7 @@
start_sound = 'sound/weather/ashstorm/outside/active_start.ogg'
start_length = 130
end_sound = 'sound/weather/ashstorm/outside/active_end.ogg'
volume = 80
volume = 60
/datum/looping_sound/active_inside_ashstorm
mid_sounds = list(
@@ -20,7 +20,7 @@
start_sound = 'sound/weather/ashstorm/inside/active_start.ogg'
start_length = 130
end_sound = 'sound/weather/ashstorm/inside/active_end.ogg'
volume = 60
volume = 20
/datum/looping_sound/weak_outside_ashstorm
mid_sounds = list(
+11 -2
View File
@@ -177,6 +177,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
xenobiology_compatible = TRUE
//Maintenance - Generic
/area/maintenance/arrivals/north
@@ -1365,11 +1366,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/xenoarch/sec
name = "Xenoarchaeology Security"
icon_state = "xenosec"
icon_state = "xenosec"
/area/xenoarch/med
name = "Xenoarchaeology Medical"
icon_state = "xenomed"
icon_state = "xenomed"
//Pool
/area/crew_quarters/fitness/pool
@@ -1384,3 +1385,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/arcade
name = "Arcade"
icon_state = "yellow"
//Diner
/area/diner
name = "Space Diner"
icon_state = "bar"
requires_power = FALSE
has_gravity = STANDARD_GRAVITY
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
+2
View File
@@ -8,6 +8,8 @@
if(log)
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
deadchat_broadcast("<span class='deadsay bold'>EMP with size ([heavy_range], [light_range]) has occured at [epicenter.loc.name]</span>", turf_target = get_turf(epicenter))
if(heavy_range >= 1)
new /obj/effect/temp_visual/emp/pulse(epicenter)
@@ -1,5 +1,3 @@
//NOT YET IMPLEMENTED -- Archie
/obj/item/desynchronizer
name = "desynchronizer"
desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active."
+24
View File
@@ -249,6 +249,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(!ref_src)
ref_src = "[REF(src)]"
. = " (<A HREF='?_src_=holder;[HrefToken(TRUE)];ahelp=[ref_src];ahelp_action=reject'>REJT</A>)"
. = " (<A HREF='?_src_=holder;[HrefToken(TRUE)];ahelp=[ref_src];ahelp_action=mentor'>MENTOR</A>)"
. += " (<A HREF='?_src_=holder;[HrefToken(TRUE)];ahelp=[ref_src];ahelp_action=icissue'>IC</A>)"
. += " (<A HREF='?_src_=holder;[HrefToken(TRUE)];ahelp=[ref_src];ahelp_action=close'>CLOSE</A>)"
. += " (<A HREF='?_src_=holder;[HrefToken(TRUE)];ahelp=[ref_src];ahelp_action=resolve'>RSLVE</A>)"
@@ -379,6 +380,27 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
AddInteraction("Rejected by [key_name].")
Close(silent = TRUE)
//Resolve ticket with mentor
/datum/admin_help/proc/Mentor(key_name = key_name_admin(usr))
if(state != AHELP_ACTIVE)
return
if(initiator)
initiator.giveadminhelpverb()
SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg'))
to_chat(initiator, "<font color='yellow' size='4'><b>- AdminHelp Declined -</b></font>")
to_chat(initiator, "<font color='yellow'><b>Your admin help was declined.</b> The adminhelp verb has been returned to you so that you may try again later.</font>")
to_chat(initiator, "The question/request is considered a mentor issue, please direct questions on how to play to the in-games mentor help, or asking in the discord without revealing infomation of the round.")
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "rejected")
var/msg = "Ticket [TicketHref("#[id]")] rejected (Mentor) by [key_name]"
message_admins(msg)
log_admin_private(msg)
AddInteraction("Rejected by [key_name].")
Close(silent = TRUE)
//Resolve ticket with IC Issue message
/datum/admin_help/proc/ICIssue(key_name = key_name_admin(usr))
if(state != AHELP_ACTIVE)
@@ -465,6 +487,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
Retitle()
if("reject")
Reject()
if("mentor")
Mentor()
if("reply")
usr.client.cmd_ahelp_reply(initiator)
if("icissue")
+5 -1
View File
@@ -217,7 +217,7 @@
#define IRC_AHELP_USAGE "Usage: ticket <close|resolve|icissue|reject|reopen \[ticket #\]|list>"
#define IRC_AHELP_USAGE "Usage: ticket <close|resolve|icissue|reject|mentor|reopen \[ticket #\]|list>"
/proc/IrcPm(target,msg,sender)
target = ckey(target)
var/client/C = GLOB.directory[target]
@@ -246,6 +246,10 @@
if(ticket)
ticket.Reject(irc_tagged)
return "Ticket #[ticket.id] successfully rejected"
if("mentor")
if(ticket)
ticket.Mentor(irc_tagged)
return "Ticket #[ticket.id] successfully rejected"
if("reopen")
if(ticket)
return "Error: [target] already has ticket #[ticket.id] open"
+7
View File
@@ -236,3 +236,10 @@
reward = 2250
required_count = 5
wanted_types = list(/obj/structure/chair/plaswood)
/datum/bounty/item/assistant/condom
name = "Filled Condom"
description = "Something wack is happening at Central Command, and now they requested some filled condoms?"
reward = 1150
required_count = 5
wanted_types = list(/obj/item/condom/filled)
+7
View File
@@ -0,0 +1,7 @@
//Condom
/datum/export/gear/condom
cost = 150
unit_name = "filled condom"
export_types = list(/obj/item/condom/filled)
include_subtypes = TRUE
+9
View File
@@ -556,6 +556,15 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
var/restingpwr = 1 + 4 * resting
if(ckey)
if(!client && !(stat == DEAD))
add_status_indicator("ssd")
SSD = TRUE
else
if(SSD)
remove_status_indicator("ssd")
SSD = FALSE
//Dizziness
if(dizziness)
var/client/C = client
+2 -1
View File
@@ -59,9 +59,10 @@
var/custom_body_size = 100
var/breedable = 0
var/impregchance = 30
//h13 noncon settings
//h13 settings
var/Noncon = 0
var/ERP = 0
var/SSD = FALSE
var/mob_biotypes = MOB_ORGANIC
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
@@ -0,0 +1,34 @@
/mob/living/simple_animal/babygoliath
name = "baby Goliath"
desc = "It's a baby goliath, like the hulking demons but much smaller and cuter."
icon = 'icons/mob/pets.dmi'
icon_state = "goliath_baby"
icon_living = "goliath_baby"
icon_dead = "goliath_baby_dead"
speak = list("Grrr!","Grrr.","Grrr?")
speak_emote = list("hisses", "rumbles")
emote_hear = list("hisses.", "rumbles.")
emote_see = list("grows tentacles below.", "shakes.")
speak_chance = 1
turns_per_move = 3
blood_volume = 250
see_in_dark = 5
maxHealth = 15
health = 15
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_TINY
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
do_footstep = TRUE
//miner babie
/mob/living/simple_animal/babygoliath/Pebbles
name = "Pebbles"
desc = "Hatched from an egg stolen from a goliath nest, Pebbles stands guard for miners. She's probably tame."
gender = FEMALE
gold_core_spawnable = NO_SPAWN
@@ -0,0 +1,34 @@
/mob/living/simple_animal/opossum
name = "opossum"
desc = "It's an opossum, a small scavenging marsupial."
icon = 'icons/mob/pets.dmi'
icon_state = "possum"
icon_living = "possum"
icon_dead = "possum_dead"
speak = list("Hiss!","HISS!","Hissss?")
speak_emote = list("hisses")
emote_hear = list("hisses.")
emote_see = list("runs in a circle.", "shakes.")
speak_chance = 1
turns_per_move = 3
blood_volume = 250
see_in_dark = 5
maxHealth = 15
health = 15
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_TINY
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
do_footstep = TRUE
//cargo poss
/mob/living/simple_animal/opossum/Trims
name = "Trims"
desc = "Trims, the trash eating opossum! Don't mind the screaming from cargo."
gender = MALE
gold_core_spawnable = NO_SPAWN
@@ -0,0 +1,38 @@
/mob/living/simple_animal/skunk
name = "skunk"
desc = "A skunk! Originally found stinking up Terran planets, now here to stink your station."
icon = 'icons/mob/pets.dmi'
icon_state = "skunk"
icon_living = "skunk"
icon_dead = "skunk_dead"
speak = list("Hsss!","Eek!","Grrr?")
speak_emote = list("screeches", "grumbles")
emote_hear = list("screeches.", "grumbles.")
emote_see = list("thumps.", "shakes.")
speak_chance = 1
turns_per_move = 3
blood_volume = 250
see_in_dark = 5
maxHealth = 15
health = 15
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_TINY
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
do_footstep = TRUE
//rnd skook boi supreme
/mob/living/simple_animal/skunk/Bandit
name = "Bandit"
desc = "Despite his name, he's not very good at stealing things. He was found on board after an invasion of marsupials were cleared out."
gender = MALE
gold_core_spawnable = NO_SPAWN
/mob/living/simple_animal/skunk/Skook
name = "Skook"
desc = "A skook!"
+1
View File
@@ -52,5 +52,6 @@ GLOBAL_LIST_EMPTY(typing_indicator_overlays)
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
icon = 'icons/mob/talk.dmi'
icon_state = "normal_typing"
appearance_flags = RESET_COLOR | TILE_BOUND | PIXEL_SCALE
layer = ABOVE_FLY_LAYER