Files
Bubberstation/code/modules/language/_language_manuals.dm
SkyratBot 4e167856aa [MIRROR] Adds a treasure chest to the ocean/beach fishing spot. (#29398)
* Adds a treasure chest to the ocean/beach fishing spot. (#85276)

## About The Pull Request
This PR adds a treasure chest that can be fished from the ocean if
you're lucky enough (or have enough explosives or lobstrosities to do it
for you). The treasure chest is basically a mystery box (like the ones
from the deathmatch) with a couple catches; the treasure chest can be
opened up to 18 times in total before breaking down, however, it can
only be opened up to 3 times per spaceman, encouraging the player to
share it with others.

Here the possible loot by the by:
- A toolbox containing a master fishing rod, all the hooks and reels,
fish feed, an experi-scanner, an aquarium kit and a can of super baits
- A box containing a lazarus injector, a cup and a bottle of strange
reagent which you can use to revive fish now
- A circuit board for a pre-emagged fishing portal generator
- A master fishing rod
- A can of super fishing baits
- A fish case containing Tiziran fish
- A fish case containing Syndicate fish
- An old, yet fairly strong cutlass
- An old laser gun which fires only 5 shots before running out
- A crank laser musket
- A smoothbore disabler
- A surplus bolt action rifle
- A ration pack
- A can of squid ink
- A bottle of aged rum that forces you to switch to the piratespeak
language
- A money bag with some doubloons inside
- A piratespeak manual
- Pirate armored coat
- Pirate armored hat
- A pre-loaded cannon
- Four trash cannon balls
- Four cannon balls

## Why It's Good For The Game
Mystery boxes are fun, from the little fanfare they play to the
potential loot they can give, and I had an old treasure chest I had
sprited for fun years ago around so I've come up with an entertaining
idea. If you think the loot list is a bit too hot, I can cool it down a
bit.
Also yeah, I wanted to make fish revivable with strange reagent, since
you can already do it with lazarus injectors even though using a lazarus
injector for this would be a severe waste of mining points.

## Changelog

🆑
add: Added a treasure chest you can rarely fish from the ocean/beach,
with loot being a mix of fishing and piratey stuff.
add: You can revive fish with strange reagent now.
/🆑

* Adds a treasure chest to the ocean/beach fishing spot.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-08-21 13:51:26 +07:00

118 lines
4.8 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_boldannounce("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)
var/turf/T = get_turf(src)
T.visible_message(span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!"))
new /obj/item/book/manual/random(T)
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
/obj/item/language_manual/roundstart_species/Initialize(mapload)
. = ..()
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/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 ..()