mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
## About The Pull Request This PR adds a simple holiday spawner type that can be used for objects that are only spawned if the holiday they're associated with is being celebrated. Right now it has three subtypes, all related to the kitchen (liquid ingredient, powdered ingredient, meat ingredient). The involved holidays are the fictional tiziran and mothic festivities Atrakor's Might and Fleet Day. Extra stuff is also spawned on Bee Day and Beer Day. On Vegan Day, the monkey meat slabs in the meat fridges are replaced with plant-based meat slabs (killer tomato slices and pod people meat, plus veggies) and the fridge is renamed from "meat fridge" to "vegan fridge". This PR also adds a few more holiday-specific mail objects such as Speak-Like-a-Pirate Day, Fleet Day, Atrakor's Might, Chernobyl's Disaster Anniversary (it's just a geiger counter), Monkey Day and Draconic Language Day. EDIT: I've decided to make the bar backroom beer keg into a spawner that will spawn special kegs on specific days (otherwise it's a 1 in 25 chance). These kegs can contain drinks a little more refined than the average beer keg. Also it comes with a resprite of kegs because the old one was starting to look a little ass compared to other reagent dispensers. ## Why It's Good For The Game For being fictional festivities revolving around food and culture, and despite the lot of recipes for moths and lizard people, we aren't offering anything to chef players to let them cook said recipes beside what's given on any bog-generic round. This is a step toward a slightly less lackluster implementation of those festivities and recipes into the game. Also chance for cooler kegs for the bartender. ## Changelog 🆑 add: The kitchen fridges may have additional ingredients on certain holidays, in particular Atrakor's Might (lizardpeople) and Fleet Day (mothpeople), and Vegan Day. add: Added a few more holyday-specific mail items. add: Replaces the beer keg in the bar backroom with special kegs on St. Patrick's Day, Beer Day and Speak-Like-a-Pirate day. On any other day, there's a chance that the beer keg will be replaced with one containing whiskey or rum, or in rare cases, one of those special kegs. imageadd: resprited the keg as well. /🆑
122 lines
5.1 KiB
Plaintext
122 lines
5.1 KiB
Plaintext
/obj/item/language_manual
|
|
icon = 'icons/obj/service/library.dmi'
|
|
icon_state = "book2"
|
|
/// Number of charges the book has, limits the number of times it can be used.
|
|
var/charges = 1
|
|
/// Path to a language datum that the book teaches.
|
|
var/datum/language/language = /datum/language/common
|
|
/// Flavour text to display when the language is successfully learned.
|
|
var/flavour_text = "suddenly your mind is filled with codewords and responses"
|
|
|
|
/obj/item/language_manual/attack_self(mob/living/user)
|
|
if(!isliving(user))
|
|
return
|
|
|
|
if(user.has_language(language))
|
|
to_chat(user, span_boldwarning("You start skimming through [src], but you already know [initial(language.name)]."))
|
|
return
|
|
|
|
to_chat(user, span_bolddanger("You start skimming through [src], and [flavour_text]."))
|
|
|
|
user.grant_language(language)
|
|
user.remove_blocked_language(language, source=LANGUAGE_ALL)
|
|
ADD_TRAIT(user.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects
|
|
|
|
use_charge(user)
|
|
|
|
/obj/item/language_manual/attack(mob/living/M, mob/living/user)
|
|
if(!istype(M) || !istype(user))
|
|
return
|
|
if(M == user)
|
|
attack_self(user)
|
|
return
|
|
|
|
playsound(loc, SFX_PUNCH, 25, TRUE, -1)
|
|
|
|
if(M.stat == DEAD)
|
|
M.visible_message(span_danger("[user] smacks [M]'s lifeless corpse with [src]."), span_userdanger("[user] smacks your lifeless corpse with [src]."), span_hear("You hear smacking."))
|
|
else if(M.has_language(language))
|
|
M.visible_message(span_danger("[user] beats [M] over the head with [src]!"), span_userdanger("[user] beats you over the head with [src]!"), span_hear("You hear smacking."))
|
|
else
|
|
M.visible_message(span_notice("[user] teaches [M] by beating [M.p_them()] over the head with [src]!"), span_boldnotice("As [user] hits you with [src], [flavour_text]."), span_hear("You hear smacking."))
|
|
M.grant_language(language, source = LANGUAGE_MIND)
|
|
use_charge(user)
|
|
|
|
/obj/item/language_manual/proc/use_charge(mob/user)
|
|
charges--
|
|
if(!charges)
|
|
user.visible_message(span_notice("The cover of [user]'s book start shifting and changing! It falls out of [user.p_their()] hands!"),
|
|
span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!"))
|
|
new /obj/item/book/manual/random(get_turf(src))
|
|
qdel(src)
|
|
|
|
/obj/item/language_manual/codespeak_manual
|
|
name = "codespeak manual"
|
|
desc = "The book's cover reads: \"Codespeak(tm) - Secure your communication with metaphors so elaborate, they seem randomly generated!\""
|
|
language = /datum/language/codespeak
|
|
flavour_text = "suddenly your mind is filled with codewords and responses"
|
|
|
|
/obj/item/language_manual/codespeak_manual/unlimited
|
|
name = "deluxe codespeak manual"
|
|
charges = INFINITY
|
|
|
|
/obj/item/language_manual/roundstart_species
|
|
name = "roundstart species language manual"
|
|
|
|
/obj/item/language_manual/roundstart_species/Initialize(mapload)
|
|
. = ..()
|
|
if(!language) //if a language is already set, use it instead.
|
|
var/list/available_languages = length(GLOB.uncommon_roundstart_languages) ? GLOB.uncommon_roundstart_languages : list(/datum/language/common)
|
|
language = pick(available_languages)
|
|
name = "[initial(language.name)] manual"
|
|
desc = "The book's cover reads: \"[initial(language.name)] for Xenos - Learn common galactic tongues in seconds.\""
|
|
flavour_text = "you feel empowered with a mastery over [initial(language.name)]"
|
|
|
|
/obj/item/language_manual/roundstart_species/unlimited
|
|
charges = INFINITY
|
|
|
|
/obj/item/language_manual/roundstart_species/unlimited/Initialize(mapload)
|
|
. = ..()
|
|
name = "deluxe [initial(language.name)] manual"
|
|
|
|
/obj/item/language_manual/roundstart_species/five
|
|
charges = 5
|
|
|
|
/obj/item/language_manual/roundstart_species/five/Initialize(mapload)
|
|
. = ..()
|
|
name = "extended [initial(language.name)] manual"
|
|
|
|
/obj/item/language_manual/roundstart_species/draconic
|
|
name = "Draconic manual"
|
|
|
|
/obj/item/language_manual/piratespeak
|
|
name = "\improper Captain Pete's Guide to Pirate Lingo"
|
|
icon_state = "book_pirate"
|
|
desc = "A book containing all the knowledge, jargon and buzzwords to speak like a true old salt."
|
|
language = /datum/language/piratespeak
|
|
flavour_text = "Blimey! I feel less of a landlubber now."
|
|
charges = 5
|
|
|
|
// So drones can teach borgs and AI dronespeak. For best effect, combine with mother drone lawset.
|
|
/obj/item/language_manual/dronespeak_manual
|
|
name = "dronespeak manual"
|
|
desc = "The book's cover reads: \"Understanding Dronespeak - An exercise in futility.\" The book is written entirely in binary, non-silicons probably won't understand it."
|
|
language = /datum/language/drone
|
|
flavour_text = "suddenly the drone chittering makes sense"
|
|
charges = INFINITY
|
|
|
|
/obj/item/language_manual/dronespeak_manual/attack(mob/living/M, mob/living/user)
|
|
// If they are not drone or silicon, we don't want them to learn this language.
|
|
if(!(isdrone(M) || issilicon(M)))
|
|
M.visible_message(span_danger("[user] beats [M] over the head with [src]!"), span_userdanger("[user] beats you over the head with [src]!"), span_hear("You hear smacking."))
|
|
return
|
|
|
|
return ..()
|
|
|
|
/obj/item/language_manual/dronespeak_manual/attack_self(mob/living/user)
|
|
if(!(isdrone(user) || issilicon(user)))
|
|
to_chat(user, span_danger("You beat yourself over the head with [src]!"))
|
|
return
|
|
|
|
return ..()
|