Merge branch 'master' into reagentToDefines

This commit is contained in:
Kashargul
2024-12-06 21:57:14 +01:00
committed by GitHub
212 changed files with 5049 additions and 1312 deletions
+4 -4
View File
@@ -145,7 +145,7 @@
if(in_use)
return
var/area/A = get_area(usr)
if(A.flags & BLUE_SHIELDED)
if(A.flag_check(BLUE_SHIELDED))
to_chat(usr, span_warning("You cannot edit restricted areas."))
return
in_use = TRUE
@@ -156,7 +156,7 @@
return
in_use = TRUE
var/area/A = create_area_whole(usr, src)
if(A && (A.flags & BLUE_SHIELDED))
if(A?.flag_check(BLUE_SHIELDED))
to_chat(usr, span_warning("You cannot edit restricted areas."))
in_use = FALSE
return
@@ -485,7 +485,7 @@
var/area/place = get_area(turfs[i])
if(blacklisted_areas[place.type])
continue
if(!place.requires_power || (place.flags & BLUE_SHIELDED))
if(!place.requires_power || (place.flag_check(BLUE_SHIELDED)))
continue // No expanding powerless rooms etc
areas[place.name] = place
@@ -587,7 +587,7 @@
continue
if(!BUILDABLE_AREA_TYPES[place.type]) //TODOTODOTODO
can_make_new_area = 0
if(!place.requires_power || (place.flags & BLUE_SHIELDED))
if(!place.requires_power || (place.flag_check(BLUE_SHIELDED)))
continue // No expanding powerless rooms etc
areas[place.name] = place
@@ -539,7 +539,7 @@
//Misc belts. Admin-spawn only atm.
/obj/item/personal_shield_generator/belt/adminbus
desc = "You should not see this. You REALLY should not see this. If you do, you have either been blessed or are about to be the target of some sick prank."
desc = DEVELOPER_WARNING_NAME + " You REALLY should not see this. If you do, you have either been blessed or are about to be the target of some sick prank."
modifier_type = /datum/modifier/shield_projection/admin
generator_hit_cost = 0
generator_active_cost = 0
@@ -466,6 +466,7 @@
/obj/item/radio/headset/alt/ert
name = "emergency response team bowman headset"
icon_state = "com_headset_alt"
centComm = 1
ks2type = /obj/item/encryptionkey/ert
/obj/item/radio/headset/ia
@@ -493,6 +494,8 @@
/obj/item/radio/headset/alt/centcom
name = "centcom bowman headset"
icon_state = "com_headset_alt"
centComm = 1
ks2type = /obj/item/encryptionkey/ert
/obj/item/radio/headset/nanotrasen
name = "\improper NT radio headset"
@@ -503,6 +506,8 @@
/obj/item/radio/headset/alt/nanotrasen
name = "\improper NT bowman headset"
icon_state = "nt_headset_alt"
centComm = 1
ks2type = /obj/item/encryptionkey/ert
/obj/item/radio/headset/pathfinder
name = "pathfinder's headset"
@@ -513,6 +518,8 @@
/obj/item/radio/headset/alt/pathfinder
name = "pathfinder's bowman headset"
icon_state = "exp_headset_alt"
adhoc_fallback = TRUE
ks2type = /obj/item/encryptionkey/pathfinder
/obj/item/radio/headset/pilot
name = "pilot's headset"
@@ -522,6 +529,7 @@
/obj/item/radio/headset/alt/pilot
name = "pilot's bowman headset"
icon_state = "pilot_headset_alt"
adhoc_fallback = TRUE
/obj/item/radio/headset/explorer
name = "away team member's headset"
@@ -532,6 +540,8 @@
/obj/item/radio/headset/alt/explorer
name = "away team's bowman headset"
icon_state = "exp_headset_alt"
adhoc_fallback = TRUE
ks2type = /obj/item/encryptionkey/explorer
/obj/item/radio/headset/sar
name = "search and rescue headset"
@@ -635,4 +645,4 @@
/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level)
if (disabledAi)
return -1 //Transciever Disabled.
return ..(freq, level, 1)
return ..(freq, level, 1)
+1 -1
View File
@@ -1,5 +1,5 @@
/obj/effect/falling_effect
name = "you should not see this"
name = DEVELOPER_WARNING_NAME
desc = "no data"
invisibility = 101
anchored = TRUE
@@ -0,0 +1,16 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/circuitboard/pandemic
name = T_BOARD("pandemic")
build_path = /obj/machinery/computer/pandemic
board_type = new /datum/frame/frame_types/computer
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/stock_parts/capacitor = 1
)
@@ -336,3 +336,9 @@
/obj/item/card/id/syndicate/officer
name = "Syndicate Officer ID"
initial_sprite_stack = list("base-stamp-dark", "top-syndicate", "stamp-s", "pips-gold", "stripe-gold")
//Special
/obj/item/card/id/civilian/lurker
name = "Outdated ID"
initial_sprite_stack = list("base-stamp", "stamp-silhouette", "top-olive", "digested")
+4 -4
View File
@@ -133,7 +133,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
name = "Corgi Lazy Spawner"
desc = "This is a proof of concept, not sure why you would use this one"
spawn_delay = 3 MINUTES
mob_faction = "Corgi"
mob_faction = FACTION_CORGI
spawn_types = list(
/mob/living/simple_mob/animal/passive/dog/corgi = 75,
/mob/living/simple_mob/animal/passive/dog/corgi/puppy = 50
@@ -150,7 +150,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
spawn_delay = 10 MINUTES
range = 10
simultaneous_spawns = 1
mob_faction = "wild animal"
mob_faction = FACTION_WILD_ANIMAL
total_spawns = -1
destructible = 0
anchored = TRUE
@@ -167,7 +167,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
spawn_delay = 10 MINUTES
range = 10
simultaneous_spawns = 1
mob_faction = "xeno"
mob_faction = FACTION_XENO
total_spawns = -1
destructible = 1
health = 50
@@ -186,7 +186,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
spawn_delay = 10 MINUTES
range = 10
simultaneous_spawns = 1
mob_faction = "xeno"
mob_faction = FACTION_XENO
total_spawns = 1
destructible = 1
health = 50
+4 -4
View File
@@ -174,7 +174,7 @@
overwrite_hostility = 1
mob_faction = "malf_drone"
mob_faction = FACTION_MALF_DRONE
mob_returns_home = 1
mob_wander = 1
mob_wander_distance = 5
@@ -203,7 +203,7 @@
overwrite_hostility = 1
mob_faction = "malf_drone"
mob_faction = FACTION_MALF_DRONE
mob_returns_home = 1
mob_wander = 1
mob_wander_distance = 5
@@ -220,7 +220,7 @@
desc = "This is a random hivebot."
icon_state = "robot"
mob_faction = "hivebot"
mob_faction = FACTION_HIVEBOT
/obj/random/mob/robotic/hivebot/item_to_spawn()
return pick(prob(10);/mob/living/simple_mob/mechanical/hivebot,
@@ -292,7 +292,7 @@
desc = "This is a random PoI mercenary."
icon_state = "humanoid"
mob_faction = "syndicate"
mob_faction = FACTION_SYNDICATE
mob_returns_home = 1
mob_wander_distance = 7 // People like to wander, and these people probably have a lot of stuff to guard.
+8
View File
@@ -26,6 +26,14 @@
toggle()
..()
/obj/structure/curtain/attack_ai(mob/user)
if(!Adjacent(user))
return
if(!isrobot((user)))
return
playsound(src, "rustle", 15, 1, -5)
toggle()
/obj/structure/curtain/proc/toggle()
set_opacity(!opacity)
if(opacity)
@@ -108,7 +108,7 @@
//newPred.movement_cooldown = 0 // The "needless artificial speed cap" exists for a reason
if(M.mind)
M.mind.transfer_to(newPred)
to_chat(M, span_notice("You are <b>[newPred]</b>, somehow having gotten aboard the station in search of food. \
to_chat(M, span_notice("You are " + span_bold(newPred) + ", somehow having gotten aboard the station in search of food. \
You are wary of environment around you, but you do feel rather peckish. Stick around dark, secluded places to avoid danger or, \
if you are cute enough, try to make friends with this place's inhabitants."))
to_chat(M, span_critical("Please be advised, this role is NOT AN ANTAGONIST."))
@@ -144,7 +144,7 @@
var/mob/living/simple_mob/vore/morph/newMorph = new /mob/living/simple_mob/vore/morph(get_turf(src))
if(M.mind)
M.mind.transfer_to(newMorph)
to_chat(M, span_notice("You are a <b>Morph</b>, somehow having gotten aboard the station in your wandering. \
to_chat(M, span_notice("You are a " + span_bold("Morph") + ", somehow having gotten aboard the station in your wandering. \
You are wary of environment around you, but your primal hunger still calls for you to find prey. Seek a convincing disguise, \
using your amorphous form to traverse vents to find and consume weak prey."))
to_chat(M, span_notice("You can use shift + click on objects to disguise yourself as them, but your strikes are nearly useless when you are disguised. \
@@ -172,3 +172,82 @@
..()
if(!(src in active_ghost_pods))
active_ghost_pods += src
/obj/structure/ghost_pod/ghost_activated/maint_lurker
name = "strange maintenance hole"
desc = "This is my hole! It was made for me!"
icon = 'icons/effects/effects.dmi'
icon_state = "tunnel_hole"
icon_state_opened = "tunnel_hole"
density = FALSE
ghost_query_type = /datum/ghost_query/maints_lurker
anchored = TRUE
invisibility = INVISIBILITY_OBSERVER
spawn_active = TRUE
//override the standard attack_ghost proc for custom messages
/obj/structure/ghost_pod/ghost_activated/maint_lurker/attack_ghost(var/mob/observer/dead/user)
if(jobban_isbanned(user, JOB_GHOSTROLES))
to_chat(user, span_warning("You cannot use this spawnpoint because you are banned from playing ghost roles."))
return
//No whitelist
if(!is_alien_whitelisted(user, GLOB.all_species[user.client.prefs.species]))
to_chat(user, span_warning("You cannot use this spawnpoint to spawn as a species you are not whitelisted for!"))
return
//No OOC notes/FT
if(not_has_ooc_text(user))
//to_chat(user, span_warning("You must have proper out-of-character notes and flavor text configured for your current character slot to use this spawnpoint."))
return
var/choice = tgui_alert(user, "Using this spawner will spawn you as your currently loaded character slot in a special role. It should not be used with characters you regularly play on station. Are you absolutely sure you wish to continue?", "Maint Lurker Spawner", list("Yes", "No"))
if(!choice || choice == "No")
return
create_occupant(user)
/obj/structure/ghost_pod/ghost_activated/maint_lurker/create_occupant(var/mob/M)
..()
var/picked_ckey = M.ckey
var/picked_slot = M.client.prefs.default_slot
var/mob/living/carbon/human/new_character = new(src.loc)
if(!new_character)
to_chat(M, span_warning("Something went wrong and spawning failed. Please check your character slot doesn't have any obvious errors, then either try again or send an adminhelp!"))
reset_ghostpod()
return
log_and_message_admins("successfully used a Maintenance Lurker spawnpoint and became their loaded character.")
M.client.prefs.copy_to(new_character)
new_character.dna.ResetUIFrom(new_character)
new_character.sync_organ_dna()
new_character.key = M.key
new_character.mind.loaded_from_ckey = picked_ckey
new_character.mind.loaded_from_slot = picked_slot
job_master.EquipRank(new_character, JOB_MAINT_LURKER, 1)
for(var/lang in new_character.client.prefs.alternate_languages)
var/datum/language/chosen_language = GLOB.all_languages[lang]
if(chosen_language)
if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
new_character.regenerate_icons()
new_character.update_transform()
to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_LURKER) + ", a loose end... you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to maintenance areas along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in maintenance."))
to_chat(new_character, span_critical("Please be advised, this role is " + span_bold("NOT AN ANTAGONIST.")))
to_chat(new_character, span_notice("Whoever or whatever your chosen character slot is, your role is to facilitate roleplay focused around that character; this role is not free license to attack and murder people without provocation or explicit out-of-character consent. You should probably be cautious around high-traffic and highly sensitive areas (e.g. Telecomms) as Security personnel would be well within their rights to treat you as a trespasser. That said, good luck!"))
new_character.visible_message(span_warning("[new_character] appears to crawl out of somewhere."))
qdel(src)
/obj/structure/ghost_pod/ghost_activated/maint_lurker/Initialize()
..()
if(!(src in active_ghost_pods))
active_ghost_pods += src
+10 -4
View File
@@ -11,7 +11,7 @@
var/glass = 1
var/datum/tgui_module/appearance_changer/mirror/M
/obj/structure/mirror/Initialize(mapload, var/dir, var/building = 0, mob/user as mob)
/obj/structure/mirror/Initialize(mapload, var/dir, var/building = 0)
M = new(src, null)
if(building)
glass = 0
@@ -24,12 +24,18 @@
QDEL_NULL(M)
. = ..()
/obj/structure/mirror/attack_hand(mob/user as mob)
/obj/structure/mirror/attack_hand(mob/user)
if(!glass) return
if(shattered) return
if(ishuman(user))
M.tgui_interact(user)
M.tgui_interact(user)
/obj/structure/mirror/attack_ai(mob/user)
if(!glass) return
if(shattered) return
if(!Adjacent(user)) return
M.tgui_interact(user)
/obj/structure/mirror/proc/shatter()
if(!glass) return