Merge branch 'master' into updates_the_nbt

# Conflicts:
#	code/__defines/misc.dm
#	code/game/machinery/machinery.dm
#	maps/_common/mapsystem/map.dm
This commit is contained in:
alberyk
2022-02-19 10:26:35 -03:00
149 changed files with 2287 additions and 581 deletions
@@ -24,6 +24,7 @@
if(!obfuscation)
obfuscation = image(icon, T, icon_state)
obfuscation.layer = OBFUSCATION_LAYER
obfuscation.plane = PLANE_DEFAULT
if(!obfuscation_underlay)
// Creating a new icon of a fairly common icon state, adding some random color to prevent address searching, and hoping being static kills memory locality
var/turf/floor = /turf/simulated/floor/tiled
+1 -1
View File
@@ -271,7 +271,7 @@
announce_ghost_joinleave(src)
var/mob/living/carbon/human/dummy/mannequin/mannequin = new
client.prefs.dress_preview_mob(mannequin)
observer.appearance = mannequin
observer.appearance = mannequin.appearance
observer.appearance_flags = KEEP_TOGETHER
observer.alpha = 127
observer.layer = initial(observer.layer)
+1 -1
View File
@@ -12,7 +12,7 @@
var/list/ask_verb = list("asks") // Used when sentence ends in a ?
var/list/exclaim_verb = list("exclaims") // Used when sentence ends in a !
var/list/shout_verb = list("shouts", "yells", "screams") //Used when a sentence ends in !!
var/list/whisper_verb = list("says quietly", "says softly", "whispers") // Optional. When not specified speech_verb + quietly/softly is used instead.
var/list/whisper_verb = null // Optional. When not specified speech_verb + quietly/softly is used instead.
var/list/signlang_verb = list("signs") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags
var/list/sing_verb = list("sings")
var/list/sign_adv_length = list(" briefly", " a short message", " a message", " a lengthy message", " a very lengthy message") // 5 messages changing depending on the length of the signed language. A space should be added before the sentence as shown
@@ -1,5 +1,5 @@
/mob/living/carbon/alien/diona/confirm_evolution()
var/response = alert(src, "A worker gestalt is a large, slow, and durable humanoid form. You will lose the ability to ventcrawl and devour animals, but you will gain hand-like tendrils and the ability to wear things. You have enough biomass, are you certain you're ready to form a new gestalt?", "Confirm Gestalt", "Growth!", "Patience...")
var/response = alert(src, "Are you sure you wish to grow into a gestalt? Instead of being an individual nymph you'll become a group of them, for formed together to work as a more humanoid entity. As a gestalt you'll have hands and the ability to do most actions humans can such as opening doors and using tools, but you'll be unable to ventcrawl. If you've not already done so it's highly suggested you read over some of the dionae wiki to get a better understanding of the species before advancing further.", "Confirm Gestalt", "Growth!", "Patience...")
if(response != "Growth!")
return
@@ -89,4 +89,4 @@
to_chat(src, SPAN_WARNING("You didn't have enough biomass to grow your [O.name]!"))
O.droplimb(1, DROPLIMB_EDGE)
qdel(O)
limbs_to_remove -= 1
limbs_to_remove -= 1
@@ -1295,6 +1295,7 @@
if(clean_feet && !shoes)
footprint_color = null
feet_blood_DNA = null
track_footprint = 0
update_inv_shoes(1)
if(blood_color)
+3 -3
View File
@@ -161,7 +161,7 @@
return headsets[headsets[1]]
return null
/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper)
/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper, var/is_singing = FALSE)
if(!whisper && (paralysis || InStasis()))
whisper(message, speaking)
return TRUE
@@ -218,12 +218,12 @@
if(R.talk_into(src,message,null,verb,speaking))
successful_radio += R
if("whisper")
whisper(message, speaking)
whisper(message, speaking, is_singing)
return TRUE
else if(message_mode)
var/obj/item/device/radio/R = get_radio()
if(R)
used_radios += l_ear
used_radios += R
if(R.talk_into(src, message, message_mode, verb, speaking))
successful_radio += R
@@ -111,7 +111,7 @@
max_hydration_factor = -1
allowed_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_JARGON, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_DOMINIA, CITIZENSHIP_IZWESKI, CITIZENSHIP_EUM, CITIZENSHIP_NONE)
allowed_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_MOROZ, RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_NONE, RELIGION_OTHER)
allowed_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_MOROZ, RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_KSSHR, RELIGION_SHRKH, RELIGION_NONE, RELIGION_OTHER)
allowed_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG)
default_accent = ACCENT_ROOTSONG
@@ -21,7 +21,12 @@
hazard_low_pressure = 10
examine_color = "#C2AE95"
allowed_accents = list(ACCENT_SCARAB, ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_JUPITER, ACCENT_COC, ACCENT_ELYRA, ACCENT_PERSEPOLIS, ACCENT_MEDINA, ACCENT_AEMAQ, ACCENT_NEWSUEZ, ACCENT_DAMASCUS, ACCENT_ERIDANI, ACCENT_ERIDANIREINSTATED, ACCENT_HIMEO, ACCENT_ERIDANIDREG, ACCENT_DOMINIA_HIGH, ACCENT_DOMINIA_VULGAR, ACCENT_NCF, ACCENT_ASSUNZIONE, ACCENT_VALKYRIE)
/datum/species/human/offworlder/New()
var/list/offworlder_accents = list(ACCENT_SCARAB)
var/list/disallowed_accents = list(ACCENT_SILVERSUN_EXPATRIATE, ACCENT_SILVERSUN_ORIGINAL, ACCENT_PLUTO, ACCENT_EUROPA, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_GADPATHUR, ACCENT_PHONG, ACCENT_VYSOKA, ACCENT_FISANDUH, ACCENT_MICTLAN, ACCENT_KONYAN, ACCENT_VISEGRAD)
allowed_accents = offworlder_accents + allowed_accents - disallowed_accents
..()
/datum/species/human/offworlder/equip_later_gear(var/mob/living/carbon/human/H)
if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack) && H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/rmt(H.back), slot_in_backpack))
@@ -211,7 +211,7 @@
eyes_icons = 'icons/mob/human_face/eyes48x48.dmi'
eyes = "bulwark_eyes"
slowdown = 6
slowdown = 2
unarmed_types = list(/datum/unarmed_attack/claws/vaurca_bulwark)
@@ -240,6 +240,7 @@ Bulwarks are much larger and have significantly thicker carapaces than most Vaur
heat_level_3 = 800 //Default 1000
sprint_speed_factor = 1.4
stamina = 50
/datum/species/bug/type_e/New()
..()
+5 -18
View File
@@ -10,29 +10,16 @@
//mob verbs are faster than object verbs. See above.
var/mob/living/next_point_time = 0
/mob/living/pointed(atom/movable/A as mob|obj|turf in view())
if(!isturf(src.loc) || !(A in range(world.view, get_turf(src))))
return FALSE
/mob/living/pointed(atom/A as mob|obj|turf in view())
if(src.stat || !src.canmove || src.restrained())
return FALSE
if(src.status_flags & FAKEDEATH)
return FALSE
if(next_point_time >= world.time)
return FALSE
. = ..()
next_point_time = world.time + 25
face_atom(A)
if(isturf(A))
if(pointing_effect)
QDEL_NULL(pointing_effect)
pointing_effect = new /obj/effect/decal/point(A)
pointing_effect.invisibility = invisibility
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, pointing_effect), 2 SECONDS)
else
A.add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
addtimer(CALLBACK(A, /atom/movable.proc/remove_filter, "pointglow"), 2 SECONDS)
visible_message("<b>\The [src]</b> points to \the [A].")
return TRUE
if(.)
visible_message("<b>\The [src]</b> points to \the [A].")
/*one proc, four uses
swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive
+5 -4
View File
@@ -156,7 +156,7 @@ proc/get_radio_key_from_channel(var/channel)
return FONT_SIZE_LARGE
return null
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR, var/whisper = FALSE)
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb, var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR, var/whisper = FALSE)
if(stat)
if(stat == DEAD)
return say_dead(message)
@@ -209,8 +209,9 @@ proc/get_radio_key_from_channel(var/channel)
return
speaking.broadcast(src,trim(message))
return 1
verb = say_quote(message, speaking, is_singing, whisper)
if(!verb)
verb = say_quote(message, speaking, is_singing, whisper)
if(is_muzzled())
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
@@ -245,7 +246,7 @@ proc/get_radio_key_from_channel(var/channel)
var/list/obj/item/used_radios = new
var/list/successful_radio = new // passes a list because standard vars don't work when passed
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper))
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper, is_singing))
return 1
var/list/handle_v = handle_speech_sound()
@@ -76,18 +76,6 @@
if (!movement_target)
walk_to(src,0)
if(prob(2)) //spooky
var/mob/abstract/observer/spook = locate() in range(src,5)
if(spook)
var/turf/T = spook.loc
var/list/visible = list()
for(var/obj/O in T.contents)
if(!O.invisibility && O.name)
visible += O
if(visible.len)
var/atom/A = pick(visible)
visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].",0)
/mob/living/simple_animal/cat/proc/attack_mice()
if((src.loc) && isturf(src.loc))
if(!stat && !resting && !buckled_to)
@@ -276,14 +276,12 @@
. =..()
if(!.)
return
if(!stat && prob(3) && eggsleft > 0)
if(!stat && prob(3) && eggsleft > 0 && chicken_count < MAX_CHICKENS)
visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]")
eggsleft--
var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src))
E.pixel_x = rand(-6,6)
E.pixel_y = rand(-6,6)
if(chicken_count < MAX_CHICKENS && prob(10))
START_PROCESSING(SSprocessing, E)
// Penguins
+17 -3
View File
@@ -16,13 +16,24 @@
whisper(message)
/mob/living/proc/whisper(var/message, var/datum/language/speaking)
/mob/living/proc/whisper(var/message, var/datum/language/speaking, var/is_singing = FALSE)
if(is_muzzled())
to_chat(src, SPAN_DANGER("You're muzzled and cannot speak!"))
return
var/had_speaking = !!speaking
speaking = speaking ? speaking : parse_language(message)
if(!had_speaking)
if(speaking)
message = copytext(message,2+length(speaking.key))
else
speaking = get_default_language()
if(length(message) >= 1 && copytext(message, 1, 2) == "%")
if(speaking?.sing_verb)
is_singing = TRUE
var/message_range = 1
var/eavesdropping_range = 2
var/watching_range = 5
@@ -35,8 +46,11 @@
not_heard = "[whisper_text] something"
else
var/adverb = pick("quietly", "softly")
whisper_text = "[speaking.speech_verb] [adverb]"
not_heard = "[speaking.speech_verb] something [adverb]"
var/speak_text = pick(speaking.speech_verb)
if(is_singing && speaking?.sing_verb)
speak_text = pick(speaking.sing_verb)
whisper_text = "[speak_text] [adverb]"
not_heard = "[speak_text] something [adverb]"
var/list/listening = list(src)
+19 -13
View File
@@ -333,21 +333,27 @@
set name = "Point To"
set category = "Object"
if(!src || !isturf(src.loc) || !(A in range(world.view, get_turf(src))))
return 0
if(istype(A, /obj/effect/decal/point) || pointing_effect)
return 0
var/tile = get_turf(A)
if (!tile)
return 0
pointing_effect = new /obj/effect/decal/point(tile)
pointing_effect.invisibility = invisibility
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, pointing_effect), 2 SECONDS)
if(!isturf(src.loc) || !(A in range(world.view, get_turf(src))))
return FALSE
if(next_point_time >= world.time)
return FALSE
next_point_time = world.time + 25
face_atom(A)
return 1
if(isturf(A))
if(pointing_effect)
end_pointing_effect()
pointing_effect = new /obj/effect/decal/point(A)
pointing_effect.invisibility = invisibility
addtimer(CALLBACK(src, .proc/end_pointing_effect, pointing_effect), 2 SECONDS)
else
var/atom/movable/M = A
M.add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
addtimer(CALLBACK(M, /atom/movable.proc/remove_filter, "pointglow"), 2 SECONDS)
return TRUE
/mob/proc/end_pointing_effect()
QDEL_NULL(pointing_effect)
/mob/verb/mode()
set name = "Activate Held Object"