Cultists of Nar-sie have their own language (#26952)

This commit is contained in:
Joan Lung
2017-05-07 07:06:38 -04:00
committed by KorPhaeron
parent 74f00e629f
commit 5ce91a8230
12 changed files with 74 additions and 16 deletions

View File

@@ -76,6 +76,7 @@
if(mob_override)
current = mob_override
current.faction |= "cult"
current.grant_language(/datum/language/narsie)
current.verbs += /mob/living/proc/cult_help
if(!GLOB.cult_mastered)
current.verbs += /mob/living/proc/cult_master
@@ -88,6 +89,7 @@
if(mob_override)
current = mob_override
current.faction -= "cult"
current.remove_language(/datum/language/narsie)
current.verbs -= /mob/living/proc/cult_help
communion.Remove(current)
owner.current.verbs -= /mob/living/proc/cult_master

View File

@@ -136,7 +136,7 @@ structure_check() searches for nearby cultist structures required for the invoca
if(invocation)
for(var/M in invokers)
var/mob/living/L = M
L.say(invocation)
L.say(invocation, language = /datum/language/common)
do_invoke_glow()
/obj/effect/rune/proc/do_invoke_glow()
@@ -516,7 +516,7 @@ structure_check() searches for nearby cultist structures required for the invoca
/obj/effect/rune/raise_dead
cultist_name = "Resurrect Cultist"
cultist_desc = "requires the corpse of a cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be revived."
invocation = null //Depends on the name of the user - see below
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below
icon_state = "1"
color = "#C80000"
var/static/revives_used = 0
@@ -556,9 +556,9 @@ structure_check() searches for nearby cultist structures required for the invoca
return
rune_in_use = 1
if(user.name == "Herbert West")
user.say("To life, to life, I bring them!")
invocation = "To life, to life, I bring them!"
else
user.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
invocation = initial(invocation)
..()
revives_used++
mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it!

View File

@@ -28,7 +28,7 @@
. = successfuluse
if(successfuluse) //if the calling whatever says we succeed, do the fancy stuff
if(invocation)
user.whisper(invocation)
user.whisper(invocation, language = /datum/language/common)
if(health_cost && iscarbon(user))
var/mob/living/carbon/C = user
C.apply_damage(health_cost, BRUTE, pick("l_arm", "r_arm"))

View File

@@ -1,4 +1,4 @@
#define SCRAMBLE_CACHE_LEN 20
#define SCRAMBLE_CACHE_LEN 50 //maximum of 50 specific scrambled lines per language
/*
Datum based languages. Easily editable and modular.
@@ -16,10 +16,10 @@
// If key is null, then the language isn't real or learnable.
var/flags // Various language flags.
var/list/syllables // Used when scrambling text for a non-speaker.
var/list/sentence_chance = 5 // Likelihood of making a new sentence after each syllable.
var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string
var/sentence_chance = 5 // Likelihood of making a new sentence after each syllable.
var/space_chance = 55 // Likelihood of getting a space in the random scramble string
var/list/spans = list()
var/static/list/scramble_cache = list()
var/list/scramble_cache = list()
var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default.
// if you are seeing someone speak popcorn language, then something is wrong.

View File

@@ -87,6 +87,10 @@
languages = list(/datum/language/common, /datum/language/ratvar)
only_speaks_language = /datum/language/ratvar
/datum/language_holder/construct
languages = list(/datum/language/common, /datum/language/narsie)
only_speaks_language = /datum/language/narsie
/datum/language_holder/drone
languages = list(/datum/language/common, /datum/language/drone, /datum/language/machine)
only_speaks_language = /datum/language/drone

View File

@@ -0,0 +1,43 @@
/datum/language/narsie
name = "Nar-Sian"
desc = "The ancient, blood-soaked, impossibly complex language of Nar-Sian cultists."
speech_verb = "intones"
ask_verb = "inquires"
exclaim_verb = "invokes"
key = "n"
sentence_chance = 8
space_chance = 95 //very high due to the potential length of each syllable
var/static/list/base_syllables = list(
"h", "v", "c", "e", "g", "d", "r", "n", "h", "o", "p",
"ra", "so", "at", "il", "ta", "gh", "sh", "ya", "te", "sh", "ol", "ma", "om", "ig", "ni", "in",
"sha", "mir", "sas", "mah", "zar", "tok", "lyr", "nqa", "nap", "olt", "val", "qha",
"fwe", "ath", "yro", "eth", "gal", "gib", "bar", "jin", "kla", "atu", "kal", "lig",
"yoka", "drak", "loso", "arta", "weyh", "ines", "toth", "fara", "amar", "nyag", "eske", "reth", "dedo", "btoh", "nikt", "neth",
"kanas", "garis", "uloft", "tarat", "khari", "thnor", "rekka", "ragga", "rfikk", "harfr", "andid", "ethra", "dedol", "totum",
"ntrath", "keriam"
) //the list of syllables we'll combine with itself to get a larger list of syllables
syllables = list(
"sha", "mir", "sas", "mah", "hra", "zar", "tok", "lyr", "nqa", "nap", "olt", "val",
"yam", "qha", "fel", "det", "fwe", "mah", "erl", "ath", "yro", "eth", "gal", "mud",
"gib", "bar", "tea", "fuu", "jin", "kla", "atu", "kal", "lig",
"yoka", "drak", "loso", "arta", "weyh", "ines", "toth", "fara", "amar", "nyag", "eske", "reth", "dedo", "btoh", "nikt", "neth", "abis",
"kanas", "garis", "uloft", "tarat", "khari", "thnor", "rekka", "ragga", "rfikk", "harfr", "andid", "ethra", "dedol", "totum",
"verbot", "pleggh", "ntrath", "barhah", "pasnar", "keriam", "usinar", "savrae", "amutan", "tannin", "remium", "barada",
"forbici"
) //the base syllables, which include a few rare ones that won't appear in the mixed syllables
icon_state = "narsie"
default_priority = 10
/datum/language/narsie/New()
for(var/syllable in base_syllables) //we only do this once, since there's only ever a single one of each language datum.
for(var/target_syllable in base_syllables)
if(syllable != target_syllable) //don't combine with yourself
if(length(syllable) + length(target_syllable) > 8) //if the resulting syllable would be very long, don't put anything between it
syllables += "[syllable][target_syllable]"
else if(prob(80)) //we'll be minutely different each round.
syllables += "[syllable]'[target_syllable]"
else if(prob(25)) //5% chance of - instead of '
syllables += "[syllable]-[target_syllable]"
else //15% chance of no ' or - at all
syllables += "[syllable][target_syllable]"
..()

View File

@@ -1,14 +1,19 @@
/datum/language/ratvar
name = "Ratvarian"
desc = "A timeless language full of power and incomprehensible to the unenlightened."
speech_verb = "clinks"
ask_verb = "clunks"
exclaim_verb = "clanks"
var/static/random_speech_verbs = list("clanks", "clinks", "clunks", "clangs")
ask_verb = "requests"
exclaim_verb = "proclaims"
whisper_verb = "imparts"
key = "r"
default_priority = 10
spans = list(SPAN_ROBOT)
icon_state = "ratvar"
/datum/language/ratvar/scramble(var/input)
. = text2ratvar(input)
/datum/language/ratvar/get_spoken_verb(msg_end)
if(!msg_end)
return pick(random_speech_verbs)
return ..()

View File

@@ -27,7 +27,8 @@
unique_name = 1
AIStatus = AI_OFF //normal constructs don't have AI
loot = list(/obj/item/weapon/ectoplasm)
del_on_death = 1
del_on_death = TRUE
initial_language_holder = /datum/language_holder/construct
deathmessage = "collapses in a shattered heap."
var/list/construct_spells = list()
var/playstyle_string = "<b>You are a generic construct! Your job is to not exist, and you should probably adminhelp this.</b>"

View File

@@ -28,7 +28,8 @@
status_flags = CANPUSH
movement_type = FLYING
loot = list(/obj/item/weapon/ectoplasm)
del_on_death = 1
del_on_death = TRUE
initial_language_holder = /datum/language_holder/construct
/mob/living/simple_animal/shade/death()
deathmessage = "lets out a contented sigh as [p_their()] form unwinds."

View File

@@ -15,6 +15,7 @@
/datum/language/common,
/datum/language/draconic,
/datum/language/monkey,
/datum/language/narsie,
/datum/language/ratvar
))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1383,7 +1383,8 @@
#include "code\modules\language\language_menu.dm"
#include "code\modules\language\machine.dm"
#include "code\modules\language\monkey.dm"
#include "code\modules\language\ratvar.dm"
#include "code\modules\language\narsian.dm"
#include "code\modules\language\ratvarian.dm"
#include "code\modules\language\slime.dm"
#include "code\modules\language\swarmer.dm"
#include "code\modules\language\xenocommon.dm"