Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into handle_blood
This commit is contained in:
@@ -150,7 +150,7 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
|
||||
/datum/tgs_chat_command/wheelofsalt/Run(datum/tgs_chat_user/sender, params)
|
||||
var/saltresult = "The wheel of salt [pick("clatters","screams","vibrates","clanks","resonates","groans","moans","squeaks","emits a[pick(" god-forsaken"," lewd"," creepy"," generic","n orgasmic"," demonic")] [pick("airhorn","bike horn","trumpet","clown","latex","vore","dog","laughing")] noise")] as it spins violently... And it seems the salt of the day is the "
|
||||
var/saltprimarysubject = "[pick("combat","medical","grab","furry","wall","orgasm","cat","ERP","lizard","dog","latex","vision cone","atmospherics","table","chem","vore","dogborg","Skylar Lineman","Mekhi Anderson","Peppermint","rework","cum","dick","cockvore","Medihound","sleeper","belly sleeper","door wires","flightsuit","coder privilege","Developer abuse","ban reason","github self merge","red panda","beret","male catgirl","powergame","hexacrocin removal","Discord server","Clitadel","Cargonia","Solarian Republic","Main and RP merger","bluespace","salt","chem dispenser theft","Botany","moth","BWOINK","anal vore","stamina","Mason Jakops","mining","noodle","milf","Lavaland","Necropolis","Ashwalker","Chase Redtail","Drew Mint","Pavel Marsk","Joker Amari","Durgit","chaplain","Antag","nanite","Syndicate","Nar-Sie","Ratvar","Cult","maint","Foam-Force","AI","cyborg","ghost","clockwork","cyberpunk","vaporwave","Clown","Leon Beech","Mime","security","research","Megafauna","Bubblegum","Ash Drake","Legion","Colossus","White Shuttle","Changeling","Cowboy","Space Ninja","Poly","Revolutionary","Skyrim","forbidden fruits","xenomorph","blob","Nuclear Operative","crossdressing")]"
|
||||
var/saltprimarysubject = "[pick("combat","medical","grab","furry","wall","orgasm","cat","ERP","lizard","dog","latex","vision cone","atmospherics","table","chem","vore","dogborg","Skylar Lineman","Mekhi Anderson","Peppermint","rework","cum","dick","cockvore","Medihound","sleeper","belly sleeper","door wires","flightsuit","coder privilege","Developer abuse","ban reason","github self merge","red panda","beret","male catgirl","powergame","hexacrocin removal","Discord server","Clitadel","Cargonia","Solarian Republic","Main and RP merger","bluespace","salt","chem dispenser theft","Botany","moth","BWOINK","anal vore","stamina","Mason Jakops","mining","noodle","milf","Lavaland","Necropolis","Ashwalker","Chase Redtail","Drew Mint","Pavel Marsk","Joker Amari","Durgit","chaplain","Antag","nanite","Syndicate","Nar-Sie","Ratvar","Cult","maint","Foam-Force","AI","cyborg","ghost","clockwork","cyberpunk","vaporwave","Clown","Leon Beech","Mime","security","research","Megafauna","Bubblegum","Ash Drake","Legion","Colossus","White Shuttle","Changeling","Cowboy","Space Ninja","Polly","Revolutionary","Skyrim","forbidden fruits","xenomorph","blob","Nuclear Operative","crossdressing")]"
|
||||
var/saltsecondarysubject = "[pick("rework","changes","r34","ban","removal","addition","leak","proposal","fanart","introduction","tabling","ERP","bikeshedding","crossdressing","sprites","semen keg","argument","theft","nerf","screeching","salt","creampie","lewding","murder","kissing","marriage","replacement","fucking","ship","netflix adaptation","dance","remaster","system","voyeur","decoration","pre-order","bukkake","seduction","worship","gangbang","handholding")]"
|
||||
if(prob(10))
|
||||
saltresult += "@here for your salt, all day every day"
|
||||
@@ -174,12 +174,12 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
/datum/tgs_chat_command/despacito/Run()
|
||||
return "https://www.youtube.com/watch?v=kJQP7kiw5Fk"
|
||||
|
||||
/datum/tgs_chat_command/poly
|
||||
name = "poly"
|
||||
help_text = "The Lewder, more applicable Poly speak for Citadel Station 13."
|
||||
/datum/tgs_chat_command/polly
|
||||
name = "polly"
|
||||
help_text = "The Lewder, more applicable Polly speak for Citadel Station 13."
|
||||
var/list/speech_buffer
|
||||
|
||||
/datum/tgs_chat_command/poly/Run()
|
||||
/datum/tgs_chat_command/polly/Run()
|
||||
LAZYINITLIST(speech_buffer) //I figure this is just safe to do for everything at this point
|
||||
if(length(speech_buffer)) //Let's not look up the whole json EVERY TIME, just the first time.
|
||||
return "[pick(speech_buffer)]"
|
||||
|
||||
@@ -489,8 +489,8 @@
|
||||
M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob )
|
||||
if("parrot")
|
||||
M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob )
|
||||
if("polyparrot")
|
||||
M.change_mob_type( /mob/living/simple_animal/parrot/Poly , null, null, delmob )
|
||||
if("pollyparrot")
|
||||
M.change_mob_type( /mob/living/simple_animal/parrot/Polly , null, null, delmob )
|
||||
if("constructarmored")
|
||||
M.change_mob_type( /mob/living/simple_animal/hostile/construct/armored , null, null, delmob )
|
||||
if("constructbuilder")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// * MEZMERIZE
|
||||
// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it?
|
||||
// STAY: Target will do everything they can to stand in the same place.
|
||||
// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?)
|
||||
// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Polly's or NPC's vocab?)
|
||||
// ATTACK: Target finds a nearby non-Bloodsucker victim to attack.
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
if(9)
|
||||
SpeakPeace(list("Alright maybe that's <b>too</b> boring.", "I can't keep manually typing these lines out though.", "It's hard to explain but the code structure I'm using is kind of terrible."))
|
||||
if(10)
|
||||
SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Poly!", "Then you'll be able to keep listening to this without getting bored!"))
|
||||
SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Polly!", "Then you'll be able to keep listening to this without getting bored!"))
|
||||
if(isnull(shenanigans) || !shenanigans.len)
|
||||
shenanigans = list("Except the poly file is missing...")
|
||||
shenanigans = list("Except the polly file is missing...")
|
||||
if(11 to 14, 16 to 50, 52 to 99, 103 to 107, 109 to 203, 205 to 249, 252 to 665, 667 to 999, 1001 to 5642)
|
||||
SpeakPeace(list(pick(shenanigans),pick(shenanigans),pick(shenanigans)))
|
||||
if(times_spoken_to % 10 == 0)
|
||||
@@ -55,7 +55,7 @@
|
||||
if(15)
|
||||
SpeakPeace(list("See? Isn't this fun?","Now you can mash this for hours without getting bored.","Anyway I'll leave you it."))
|
||||
if(51)
|
||||
SpeakPeace(list("The fun never ends around here.", "The Poly text files stores up to 500 statements.", "But you've probably heard a few repeats by now."))
|
||||
SpeakPeace(list("The fun never ends around here.", "The Polly text files stores up to 500 statements.", "But you've probably heard a few repeats by now."))
|
||||
if(100)
|
||||
SpeakPeace(list("And that's a solid hundred.", "Good hustle I guess.", "You've probably heard a lot of repeats by now."))
|
||||
if(101)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
/datum/supply_pack/engineering/engihardsuit
|
||||
name = "Engineering Hardsuit"
|
||||
desc = "Poly 'Who stole all the hardsuits!' Well now you can get more hardsuits if needed! NOTE ONE HARDSUIT IS IN THIS CRATE, as well as one air tank and mask!"
|
||||
desc = "Polly 'Who stole all the hardsuits!' Well now you can get more hardsuits if needed! NOTE ONE HARDSUIT IS IN THIS CRATE, as well as one air tank and mask!"
|
||||
cost = 2250
|
||||
access = ACCESS_ENGINE
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
|
||||
Ian.place_on_head(new /obj/item/bedsheet(Ian))
|
||||
for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_living_list)
|
||||
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
|
||||
qdel(Poly)
|
||||
for(var/mob/living/simple_animal/parrot/Polly/Polly in GLOB.mob_living_list)
|
||||
new /mob/living/simple_animal/parrot/Polly/ghost(Polly.loc)
|
||||
qdel(Polly)
|
||||
|
||||
|
||||
/datum/round_event/spooky/announce(fake)
|
||||
|
||||
@@ -660,7 +660,7 @@
|
||||
"goat" = 'icons/mob/animal.dmi',
|
||||
"cat" = 'icons/mob/pets.dmi',
|
||||
"cat2" = 'icons/mob/pets.dmi',
|
||||
"poly" = 'icons/mob/animal.dmi',
|
||||
"polly" = 'icons/mob/animal.dmi',
|
||||
"pug" = 'icons/mob/pets.dmi',
|
||||
"spider" = 'icons/mob/animal.dmi'
|
||||
)
|
||||
@@ -669,7 +669,7 @@
|
||||
if(input)
|
||||
qdel(holo_icon)
|
||||
switch(input)
|
||||
if("poly")
|
||||
if("polly")
|
||||
holo_icon = getHologramIcon(icon(icon_list[input],"parrot_fly"))
|
||||
if("chicken")
|
||||
holo_icon = getHologramIcon(icon(icon_list[input],"chicken_brown"))
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
path_image_color = "#993299"
|
||||
weather_immunities = list("lava","ash")
|
||||
|
||||
var/base_icon = "cleanbot"
|
||||
var/clean_time = 50 //How long do we take to clean?
|
||||
var/upgrades = 0
|
||||
|
||||
@@ -126,13 +127,21 @@
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/turn_on()
|
||||
..()
|
||||
icon_state = "cleanbot[on]"
|
||||
bot_core.updateUsrDialog()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/turn_off()
|
||||
..()
|
||||
icon_state = "cleanbot[on]"
|
||||
bot_core.updateUsrDialog()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/update_icon_state()
|
||||
. = ..()
|
||||
switch(mode)
|
||||
if(BOT_CLEANING)
|
||||
icon_state = "[base_icon]-c"
|
||||
else
|
||||
icon_state = "[base_icon][on]"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/bot_reset()
|
||||
..()
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
var/speech_shuffle_rate = 20
|
||||
var/list/available_channels = list()
|
||||
|
||||
//Headset for Poly to yell at engineers :)
|
||||
//Headset for Polly to yell at engineers :)
|
||||
var/obj/item/radio/headset/ears = null
|
||||
/// spawns with headset
|
||||
var/spawns_with_headset = FALSE
|
||||
@@ -349,7 +349,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
parrot_state |= PARROT_FLEE
|
||||
icon_state = icon_living
|
||||
drop_held_item(0)
|
||||
else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker.
|
||||
else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Polly wants a cracker.
|
||||
qdel(O)
|
||||
if(health < maxHealth)
|
||||
adjustBruteLoss(-10)
|
||||
@@ -894,10 +894,10 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
/*
|
||||
* Sub-types
|
||||
*/
|
||||
/mob/living/simple_animal/parrot/Poly
|
||||
name = "Poly"
|
||||
desc = "Poly the Parrot. An expert on quantum cracker theory."
|
||||
speak = list("Poly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE")
|
||||
/mob/living/simple_animal/parrot/Polly
|
||||
name = "Polly"
|
||||
desc = "Polly the Parrot. An expert on quantum cracker theory."
|
||||
speak = list("Polly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE")
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
speak_chance = 3
|
||||
spawns_with_headset = TRUE
|
||||
@@ -906,7 +906,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
var/longest_survival = 0
|
||||
var/longest_deathstreak = 0
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/Initialize(mapload)
|
||||
/mob/living/simple_animal/parrot/Polly/Initialize(mapload)
|
||||
ears = new /obj/item/radio/headset/headset_eng(src)
|
||||
available_channels = list(":e")
|
||||
Read_Memory()
|
||||
@@ -929,30 +929,30 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
/mob/living/simple_animal/parrot/Polly/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
. = ..()
|
||||
if(. && !client && prob(1) && prob(1) && CONFIG_GET(string/chat_squawk_tag)) //Only the one true bird may speak across dimensions.
|
||||
send2chat("A stray squawk is heard... \"[message]\"", CONFIG_GET(string/chat_squawk_tag))
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/BiologicalLife(delta_time, times_fired)
|
||||
/mob/living/simple_animal/parrot/Polly/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory(FALSE)
|
||||
memory_saved = TRUE
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/death(gibbed)
|
||||
/mob/living/simple_animal/parrot/Polly/death(gibbed)
|
||||
if(!memory_saved)
|
||||
Write_Memory(TRUE)
|
||||
if(rounds_survived == longest_survival || rounds_survived == longest_deathstreak || prob(0.666))
|
||||
var/mob/living/simple_animal/parrot/Poly/ghost/G = new(loc)
|
||||
var/mob/living/simple_animal/parrot/Polly/ghost/G = new(loc)
|
||||
if(mind)
|
||||
mind.transfer_to(G)
|
||||
else
|
||||
transfer_ckey(G)
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/proc/Read_Memory()
|
||||
/mob/living/simple_animal/parrot/Polly/proc/Read_Memory()
|
||||
var/saved_color
|
||||
if(fexists("data/npc_saves/Poly.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Poly.sav")
|
||||
@@ -976,7 +976,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
if(!isnull(saved_color))
|
||||
add_atom_colour(json_decode(saved_color), FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/proc/Write_Memory(dead)
|
||||
/mob/living/simple_animal/parrot/Polly/proc/Write_Memory(dead)
|
||||
var/json_file = file("data/npc_saves/Poly.json")
|
||||
var/list/file_data = list()
|
||||
if(islist(speech_buffer))
|
||||
@@ -1003,14 +1003,14 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ratvar_act()
|
||||
/mob/living/simple_animal/parrot/Polly/ratvar_act()
|
||||
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 75, TRUE)
|
||||
var/mob/living/simple_animal/parrot/clock_hawk/H = new(loc)
|
||||
H.setDir(dir)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost
|
||||
name = "The Ghost of Poly"
|
||||
/mob/living/simple_animal/parrot/Polly/ghost
|
||||
name = "The Ghost of Polly"
|
||||
desc = "Doomed to squawk the Earth."
|
||||
color = "#FFFFFF"
|
||||
alpha = 77
|
||||
@@ -1019,16 +1019,16 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
incorporeal_move = INCORPOREAL_MOVE_BASIC
|
||||
butcher_results = list(/obj/item/ectoplasm = 1)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/Initialize(mapload)
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/Initialize(mapload)
|
||||
memory_saved = TRUE //At this point nothing is saved
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_speech()
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_speech()
|
||||
if(ismob(loc))
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_movement()
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_movement()
|
||||
if(isliving(parrot_interest))
|
||||
if(!ishuman(parrot_interest))
|
||||
parrot_interest = null
|
||||
@@ -1037,7 +1037,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
Possess(parrot_interest)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/proc/Possess(mob/living/carbon/human/H)
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/proc/Possess(mob/living/carbon/human/H)
|
||||
if(!ishuman(H))
|
||||
return
|
||||
var/datum/disease/parrot_possession/P = new
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
length += emote_see.len
|
||||
var/randomValue = rand(1,length)
|
||||
if(randomValue <= speak.len)
|
||||
say(pick(speak), forced = "poly")
|
||||
say(pick(speak), forced = "polly")
|
||||
else
|
||||
randomValue -= speak.len
|
||||
if(emote_see && randomValue <= emote_see.len)
|
||||
@@ -233,7 +233,7 @@
|
||||
else
|
||||
emote("me [pick(emote_hear)]", 2)
|
||||
else
|
||||
say(pick(speak), forced = "poly")
|
||||
say(pick(speak), forced = "polly")
|
||||
else
|
||||
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
emote("me", EMOTE_VISIBLE, pick(emote_see))
|
||||
|
||||
@@ -603,14 +603,14 @@
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/tick()
|
||||
var/obj/item/I = owner.get_active_held_item()
|
||||
var/obj/item/reagent_containers/food/snacks/F = I
|
||||
if(istype(F))
|
||||
if(F.cooked_type)
|
||||
var/obj/item/item = owner.get_active_held_item()
|
||||
if(item)
|
||||
var/obj/item/reagent_containers/food/snacks/F = item
|
||||
if(istype(F) && F.cooked_type)
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] flares up brightly, and your hands alone are enough cook [F]!</span>")
|
||||
F.microwave_act()
|
||||
else
|
||||
I.attackby(fire, owner)
|
||||
else
|
||||
item.attackby(fire, owner)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/on_remove()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* # Speech Relay preset
|
||||
*
|
||||
* Acts like poly. Says whatever it hears.
|
||||
* Acts like polly. Says whatever it hears.
|
||||
*/
|
||||
/obj/item/integrated_circuit/loaded/speech_relay
|
||||
|
||||
|
||||
Reference in New Issue
Block a user