Revenant Gameplay Enhancement (#11049)

This commit is contained in:
Geeves
2021-01-28 19:46:06 +01:00
committed by GitHub
parent 917c860af7
commit 141ea2ce1d
21 changed files with 398 additions and 33 deletions
@@ -17,6 +17,13 @@
var/spawn_index = 1 // used to add a numerical identifier to the revenant. increases by 1 per spawn
var/has_fired = FALSE
var/first_rift_done = FALSE
/datum/ghostspawner/revenant/cant_spawn(mob/user)
. = ..()
if(!. && revenants.rifts_left <= 0)
return "The final rift has been closed."
/datum/ghostspawner/revenant/spawn_mob(mob/user)
var/turf/T = select_spawnlocation()
var/mob/living/carbon/human/revenant/R
@@ -34,8 +41,11 @@
R.ckey = user.ckey
revenants.add_antagonist(R.mind, TRUE, TRUE, FALSE, TRUE, TRUE)
if(R.client)
to_chat(R, FONT_LARGE(SPAN_CULT("You can now speak with all revenants in the game world by using \"[R.client.prefs.language_prefixes[1]]rs\" before a message.")))
if(!has_fired)
INVOKE_ASYNC(src, .proc/play_ambience, R)
INVOKE_ASYNC(src, .proc/check_rift)
return R
@@ -46,4 +56,30 @@
continue
M.playsound_simple(get_turf(M), 'sound/ambience/tension/tension.ogg', 75, FALSE)
to_chat(M, FONT_LARGE(SPAN_CULT("A faint hum coming from the station walls fills your ears...")))
has_fired = TRUE
has_fired = TRUE
/datum/ghostspawner/revenant/proc/check_rift()
if(revenants.revenant_rift || revenants.rifts_left <= 0)
return
var/kills_needed = ((initial(revenants.rifts_left) - revenants.rifts_left) + 1) * 5
if(revenants.kill_count > kills_needed)
var/turf/rift_turf
var/list/possible_landmarks = list()
for(var/thing in landmarks_list)
var/obj/effect/landmark/landmark = thing
if(landmark.name == "RevenantRift")
possible_landmarks += landmark
if(length(possible_landmarks))
var/obj/effect/landmark/L = pick(possible_landmarks)
rift_turf = get_turf(L)
if(rift_turf)
new /obj/effect/portal/revenant(rift_turf)
if(!first_rift_done)
command_announcement.Announce("Aurora, we're detecting energy signatures eerily similar to a bluespace rift breach inside your hull. [SScargo.shuttle ? "We're sending you a bluespace neutralizer via the cargo shuttle. " : ""]Locate the rift and shut it down.", "Bluespace Breach Alert")
first_rift_done = TRUE
if(SScargo.shuttle)
var/turf/T = pick_area_turf(pick(SScargo.shuttle.shuttle_area), list(/proc/not_turf_contains_dense_objects))
if(T)
var/obj/structure/closet/crate/C = new /obj/structure/closet/crate(T)
C.name += " (Neutralizer)"
new /obj/item/bluespace_neutralizer(C)
+1
View File
@@ -22,6 +22,7 @@
var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word
var/machine_understands = TRUE // Whether machines can parse and understand this language
var/allow_accents = FALSE
var/always_parse_language = FALSE // forces the language to parse for language keys even when a default is set
/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2)
if(!syllables || !syllables.len)
+8 -1
View File
@@ -104,4 +104,11 @@
key = "c"
syllables = list("grhhg", "ghrohg", "grgugh", "grrhh", "hghh", "rghghh", "gghhh", "ggrh", "aghrh")
flags = RESTRICTED
partial_understanding = list(LANGUAGE_TCB = 80)
partial_understanding = list(LANGUAGE_TCB = 80)
always_parse_language = TRUE
/datum/language/revenant/hivemind
name = LANGUAGE_REVENANT_RIFTSPEAK
desc = "A manner of speaking that allows revenants to talk to eachother no matter the distance."
key = "rs"
flags = RESTRICTED | HIVEMIND
@@ -101,6 +101,7 @@
if(player_is_antag(H.mind))
var/datum/ghostspawner/revenant/R = SSghostroles.get_spawner(MODE_REVENANT)
R.count = max(R.count - 1, 0)
revenants.kill_count++
INVOKE_ASYNC(src, .proc/spawn_gore, get_turf(H))
H.set_death_time(ANIMAL, world.time)
for(var/obj/item/I in H)
@@ -108,6 +109,8 @@
qdel(H)
/datum/species/revenant/proc/spawn_gore(var/turf/T)
var/portal_type = pick(/obj/effect/portal/spawner/silver, /obj/effect/portal/spawner/gold, /obj/effect/portal/spawner/phoron)
new portal_type(T)
var/obj/effect/decal/cleanable/blood/gibs/G = new /obj/effect/decal/cleanable/blood/gibs(T)
G.basecolor = blood_color
G.fleshcolor = flesh_color
@@ -119,6 +122,7 @@
..()
H.gender = NEUTER
H.universal_understand = TRUE
H.add_language(LANGUAGE_REVENANT_RIFTSPEAK)
/datum/species/revenant/get_random_name()
return "Revenant"
+1 -1
View File
@@ -184,7 +184,7 @@ proc/get_radio_key_from_channel(var/channel)
message = formalize_text(message)
//parse the language code and consume it
if(!speaking)
if(!speaking || speaking.always_parse_language)
speaking = parse_language(message)
if(speaking)
message = copytext(message,2+length(speaking.key))
+8
View File
@@ -140,6 +140,14 @@
return TRUE
return FALSE
/proc/isrevenant(A)
if(ishuman(A))
var/mob/living/carbon/human/H = A
switch(H.get_species())
if(SPECIES_REVENANT)
return TRUE
return FALSE
/proc/islesserform(A)
if(istype(A, /mob/living/carbon/human))
switch(A:get_species())
+5 -2
View File
@@ -159,9 +159,12 @@
return all_languages["Noise"]
if(length(message) >= 2 && is_language_prefix(prefix))
var/language_prefix = lowertext(copytext(message, 2 ,3))
var/language_prefix = lowertext(copytext(message, 2, 4))
var/datum/language/L = language_keys[language_prefix]
if (can_speak(L))
if(!L)
language_prefix = lowertext(copytext(message, 2, 3))
L = language_keys[language_prefix]
if(can_speak(L))
return L
return null
@@ -143,4 +143,10 @@ datum/design/item/tool/advanced_light_replacer
desc = "The infamously Idris Service Standard refers to this monstrous, self-stabilizing back-mounted utensil and service item holder, not anything professional."
req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
materials = list(DEFAULT_WALL_MATERIAL = 1500, MATERIAL_GLASS = 1500)
build_path = /obj/item/storage/backpack/service
build_path = /obj/item/storage/backpack/service
/datum/design/item/tool/bluespace_neutralizer
desc = "A state of the art bluespace neutralizer, capable of shutting down any bluespace portal it gets used on. A special mode exists for severe interdimensional breaches, but this is highly unlikely to be necessary."
req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2, TECH_BLUESPACE = 4)
materials = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GLASS = 20000, MATERIAL_SILVER = 20000, MATERIAL_GOLD = 20000, MATERIAL_PHORON = 10000)
build_path = /obj/item/bluespace_neutralizer