mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Added the Combat Bakery Kit (#21901)
* QUASO * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * blame lewc for giving me spaces * Update code/datums/uplink_items/uplink_traitor.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/components/boomerang.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/game/objects/items/granters/_granters.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * purge that --------- Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
co-authored by
Luc
Burzah
Henri215
parent
0e371e1b93
commit
d42d2f647d
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Books that teach things.
|
||||
*
|
||||
* (Intrinsic actions like bar flinging, spells like fireball or smoke, or martial arts)
|
||||
*/
|
||||
/obj/item/book/granter
|
||||
/// Flavor messages displayed to mobs reading the granter
|
||||
var/list/remarks = list()
|
||||
/// Controls how long a mob must keep the book in his hand to actually successfully learn
|
||||
var/pages_to_mastery = 3
|
||||
/// Sanity, whether it's currently being read
|
||||
var/reading = FALSE
|
||||
/// The amount of uses on the granter.
|
||||
var/uses = 1
|
||||
/// The time it takes to read the book
|
||||
var/reading_time = 5 SECONDS
|
||||
/// The sounds played as the user's reading the book.
|
||||
var/list/book_sounds = list(
|
||||
'sound/effects/pageturn1.ogg',
|
||||
'sound/effects/pageturn2.ogg',
|
||||
'sound/effects/pageturn3.ogg'
|
||||
)
|
||||
|
||||
/obj/item/book/granter/attack_self(mob/living/user)
|
||||
if(reading)
|
||||
to_chat(user, "<span class='warning'>You're already reading this!</span>")
|
||||
return FALSE
|
||||
if(!user.has_vision())
|
||||
to_chat(user, "<span class='warning'>You are blind and can't read anything!</span>")
|
||||
return FALSE
|
||||
if(!isliving(user))
|
||||
return FALSE
|
||||
if(!can_learn(user))
|
||||
return FALSE
|
||||
|
||||
if(uses <= 0)
|
||||
recoil(user)
|
||||
return FALSE
|
||||
|
||||
on_reading_start(user)
|
||||
reading = TRUE
|
||||
for(var/i in 1 to pages_to_mastery)
|
||||
if(!turn_page(user))
|
||||
on_reading_stopped()
|
||||
reading = FALSE
|
||||
return
|
||||
if(do_after(user, reading_time, src))
|
||||
uses--
|
||||
on_reading_finished(user)
|
||||
reading = FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/// Called when the user starts to read the granter.
|
||||
/obj/item/book/granter/proc/on_reading_start(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You start reading [name]...</span>")
|
||||
|
||||
/// Called when the reading is interrupted without finishing.
|
||||
/obj/item/book/granter/proc/on_reading_stopped(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You stop reading...</span>")
|
||||
|
||||
/// Called when the reading is completely finished. This is where the actual granting should happen.
|
||||
/obj/item/book/granter/proc/on_reading_finished(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You finish reading [name]!</span>")
|
||||
|
||||
/// The actual "turning over of the page" flavor bit that happens while someone is reading the granter.
|
||||
/obj/item/book/granter/proc/turn_page(mob/living/user)
|
||||
playsound(user, pick(book_sounds), 30, TRUE)
|
||||
|
||||
if(!do_after(user, reading_time, src))
|
||||
return FALSE
|
||||
|
||||
to_chat(user, "<span class='notice'>[length(remarks) ? pick(remarks) : "You keep reading..."]</span>")
|
||||
return TRUE
|
||||
|
||||
/// Effects that occur whenever the book is read when it has no uses left.
|
||||
/obj/item/book/granter/proc/recoil(mob/living/user)
|
||||
return
|
||||
|
||||
/// Checks if the user can learn whatever this granter... grants
|
||||
/obj/item/book/granter/proc/can_learn(mob/living/user)
|
||||
return TRUE
|
||||
|
||||
// Generic action giver
|
||||
/obj/item/book/granter/action
|
||||
/// The typepath of action that is given
|
||||
var/datum/action/granted_action
|
||||
/// The name of the action, formatted in a more text-friendly way.
|
||||
var/action_name = ""
|
||||
|
||||
/obj/item/book/granter/action/can_learn(mob/living/user)
|
||||
if(!granted_action)
|
||||
CRASH("Someone attempted to learn [type], which did not have an action set.")
|
||||
if(locate(granted_action) in user.actions)
|
||||
to_chat(user, "<span class='warning'>You already know all about [action_name]!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/book/granter/action/on_reading_start(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You start reading about [action_name]...</span>")
|
||||
|
||||
/obj/item/book/granter/action/on_reading_finished(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You feel like you've got a good handle on [action_name]!</span>")
|
||||
// Action goes on the mind as the user actually learns the thing in your brain
|
||||
var/datum/action/new_action = new granted_action(user.mind || user)
|
||||
new_action.Grant(user)
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/item/book/granter/crafting_recipe
|
||||
/// A list of all recipe types we grant on learn
|
||||
var/list/crafting_recipe_types = list()
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user)
|
||||
..()
|
||||
if(!user.mind)
|
||||
return
|
||||
for(var/datum/crafting_recipe/crafting_recipe_type as anything in crafting_recipe_types)
|
||||
user.mind.teach_crafting_recipe(crafting_recipe_type)
|
||||
to_chat(user, "<span class='notice'>You learned how to make [initial(crafting_recipe_type.name)].</span>")
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/dusting
|
||||
icon_state = "book1"
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/dusting/recoil(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>The book turns to dust in your hands.</span>")
|
||||
qdel(src)
|
||||
@@ -0,0 +1,19 @@
|
||||
/obj/item/book/granter/crafting_recipe/combat_baking
|
||||
name = "the anarchist's cookbook"
|
||||
desc = "A widely illegal recipe book which will teach you how to bake croissants to die for."
|
||||
crafting_recipe_types = list(
|
||||
/datum/crafting_recipe/throwing_croissant
|
||||
)
|
||||
icon_state = "cooking_learing_illegal"
|
||||
remarks = list(
|
||||
"\"Austrian? Not French?\"",
|
||||
"\"Got to get the butter ratio right...\"",
|
||||
"\"This is the greatest thing since sliced bread!\"",
|
||||
"\"I'll leave no trace except crumbs!\"",
|
||||
"\"Who knew that bread could hurt a man so badly?\""
|
||||
)
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/combat_baking/recoil(mob/living/user)
|
||||
to_chat(user, "<span class='warning'>The book dissolves into burnt flour!</span>")
|
||||
new /obj/effect/decal/cleanable/ash(get_turf(src))
|
||||
qdel(src)
|
||||
@@ -282,6 +282,11 @@
|
||||
new /obj/item/spellbook/oneuse/mime/greaterwall(src)
|
||||
new /obj/item/spellbook/oneuse/mime/fingergun(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/combat_baking/populate_contents()
|
||||
new /obj/item/reagent_containers/food/snacks/baguette/combat(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/reagent_containers/food/snacks/croissant/throwing(src)
|
||||
new /obj/item/book/granter/crafting_recipe/combat_baking(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/atmosn2ogrenades
|
||||
name = "atmos N2O grenades"
|
||||
|
||||
Reference in New Issue
Block a user