From 93fb2a3cb917bf3c415c69abdef2ec1db1b6f08f Mon Sep 17 00:00:00 2001
From: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Date: Sun, 17 Oct 2021 07:47:08 -0400
Subject: [PATCH] glassblowing/ceramic skills and changes (#8841)
---
code/__DEFINES/~skyrat_defines/traits.dm | 6 +++
code/modules/vending/games.dm | 5 +++
.../code/_globalvars/maint_loot_uncommon.dm | 3 ++
.../modules/primitive_fun/code/ceramics.dm | 33 ++++++++++++++++-
.../primitive_fun/code/glassblowing.dm | 31 +++++++++++++---
.../code/modules/reagent_forging/forge.dm | 37 ++++++++++++++-----
6 files changed, 98 insertions(+), 17 deletions(-)
diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm
index 566b942c91a..86c0e808aca 100644
--- a/code/__DEFINES/~skyrat_defines/traits.dm
+++ b/code/__DEFINES/~skyrat_defines/traits.dm
@@ -43,3 +43,9 @@
//to determine if someone is a fishing master, or not
#define TRAIT_FISHING_MASTER "fishing_master"
+
+//to determine if someone is a ceramics master, or not
+#define TRAIT_CERAMIC_MASTER "ceramic_master"
+
+//to determine if someone is a glassblowing master, or not
+#define TRAIT_GLASSBLOWING_MASTER "glassblowing_master"
diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm
index b898dd87b01..d352956ccce 100644
--- a/code/modules/vending/games.dm
+++ b/code/modules/vending/games.dm
@@ -3,6 +3,7 @@
desc = "Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job..."
product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!"
icon_state = "games"
+ //SKYRAT EDIT: Adds Ceramic, Glassblowing, and Fishing Skillchips
products = list(
/obj/item/toy/cards/deck = 5,
/obj/item/storage/dice = 10,
@@ -21,10 +22,14 @@
/obj/item/skillchip/bonsai=2,
/obj/item/skillchip/wine_taster=2,
/obj/item/skillchip/light_remover=2,
+ /obj/item/skillchip/glassblowing_master = 2,
+ /obj/item/skillchip/ceramic_master = 2,
+ /obj/item/skillchip/fishing_master = 2,
/obj/item/skillchip/useless_adapter=5,
/obj/item/dyespray=3,
/obj/item/razor=3,
)
+ //SKYRAT EDIT: Adds Ceramic, Glassblowing, and Fishing Skillchips
contraband = list(
/obj/item/dice/fudge = 9,
/obj/item/clothing/shoes/wheelys/skishoes=4,
diff --git a/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm b/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm
index 8113f37a2be..e04e2082c7e 100644
--- a/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm
+++ b/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm
@@ -7,6 +7,9 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/skillchip/job/engineer = 10,
/obj/item/skillchip/job/roboticist = 10,
/obj/item/skillchip/light_remover = 10,
+ /obj/item/skillchip/glassblowing_master = 10,
+ /obj/item/skillchip/ceramic_master = 10,
+ /obj/item/skillchip/fishing_master = 10,
/obj/item/skillchip/useless_adapter = 25,
/obj/item/skillchip/wine_taster = 50
) = 50,
diff --git a/modular_skyrat/modules/primitive_fun/code/ceramics.dm b/modular_skyrat/modules/primitive_fun/code/ceramics.dm
index ed816e3bf13..9e710cc3a3c 100644
--- a/modular_skyrat/modules/primitive_fun/code/ceramics.dm
+++ b/modular_skyrat/modules/primitive_fun/code/ceramics.dm
@@ -1,3 +1,16 @@
+#define DEFAULT_SPIN 4 SECONDS
+#define MASTER_SPIN 2 SECONDS
+
+/obj/item/skillchip/ceramic_master
+ name = "Ceramic Master skillchip"
+ desc = "A master of clay, perhaps even capable of creating life from clay and fire."
+ auto_traits = list(TRAIT_CERAMIC_MASTER)
+ skill_name = "Ceramic Master"
+ skill_description = "Master the ability to use clay within ceramics."
+ skill_icon = "certificate"
+ activate_message = "The faults within the clay are now to be seen."
+ deactivate_message = "Clay becomes more obscured."
+
/obj/structure/water_source/puddle/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/stack/ore/glass))
var/obj/item/stack/ore/glass/glass_item = O
@@ -55,6 +68,19 @@
/obj/item/reagent_containers/glass/bowl/ceramic,
/obj/item/reagent_containers/glass/beaker/large/ceramic)
+/datum/export/ceramics/sell_object(obj/O, datum/export_report/report, dry_run, apply_elastic = FALSE) //I really dont want them to feel gimped
+ . = ..()
+
+/datum/export/ceramics_unfinished
+ cost = 300
+ unit_name = "unfinished ceramic product"
+ export_types = list(/obj/item/ceramic/plate,
+ /obj/item/ceramic/bowl,
+ /obj/item/ceramic/cup)
+
+/datum/export/ceramics_unfinished/sell_object(obj/O, datum/export_report/report, dry_run, apply_elastic = FALSE) //I really dont want them to feel gimped
+ . = ..()
+
/obj/item/ceramic/plate
name = "ceramic plate"
desc = "A piece of clay that is flat, in the shape of a plate."
@@ -98,10 +124,10 @@
icon_state = "throw_wheel_empty"
density = TRUE
anchored = TRUE
- var/spinning_speed = 4 SECONDS
var/in_use = FALSE
/obj/structure/throwing_wheel/attackby(obj/item/I, mob/living/user, params)
+ var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN
if(istype(I, /obj/item/ceramic/clay))
if(length(contents) >= 1)
return
@@ -120,6 +146,7 @@
return ..()
/obj/structure/throwing_wheel/proc/use_clay(spawn_type, mob/user)
+ var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN
var/given_message = list(
"You slowly start spinning the throwing wheel...",
"You place your hands on the clay, slowly shaping it...",
@@ -141,6 +168,7 @@
/obj/structure/throwing_wheel/attack_hand(mob/living/user, list/modifiers)
. = ..()
+ var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN
if(in_use)
return
in_use = TRUE
@@ -175,3 +203,6 @@
return
in_use = FALSE
return
+
+#undef DEFAULT_SPIN
+#undef MASTER_SPIN
diff --git a/modular_skyrat/modules/primitive_fun/code/glassblowing.dm b/modular_skyrat/modules/primitive_fun/code/glassblowing.dm
index 4304101444d..23aff998505 100644
--- a/modular_skyrat/modules/primitive_fun/code/glassblowing.dm
+++ b/modular_skyrat/modules/primitive_fun/code/glassblowing.dm
@@ -1,3 +1,16 @@
+#define DEFAULT_TIMED 5 SECONDS
+#define MASTER_TIMED 2 SECONDS
+
+/obj/item/skillchip/glassblowing_master
+ name = "Glassblowing Master skillchip"
+ desc = "A master of glass, perhaps even capable of creating life from glass and fire."
+ auto_traits = list(TRAIT_GLASSBLOWING_MASTER)
+ skill_name = "Glass-Blowing Master"
+ skill_description = "Master the ability to use glass within glassblowing."
+ skill_icon = "certificate"
+ activate_message = "The faults within the glass are now to be seen."
+ deactivate_message = "Glass becomes more obscured."
+
/obj/item/glassblowing
icon = 'modular_skyrat/modules/primitive_fun/icons/prim_fun.dmi'
@@ -7,7 +20,7 @@
icon_state = "glass_bowl"
/datum/export/glassblowing
- cost = 1000
+ cost = 3000
unit_name = "glassblowing product"
export_types = list(/obj/item/glassblowing/glass_lens,
/obj/item/glassblowing/glass_globe,
@@ -141,6 +154,7 @@
return ..()
/obj/item/glassblowing/blowing_rod/attackby(obj/item/I, mob/living/user, params)
+ var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED
var/obj/item/glassblowing/molten_glass/find_glass = locate() in contents
if(istype(I, /obj/item/glassblowing/molten_glass))
@@ -161,7 +175,7 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin using [I] on [src]."))
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You interrupt an action!"))
in_use = FALSE
return
@@ -183,7 +197,7 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin using [I] on [src]."))
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You interrupt an action!"))
in_use = FALSE
return
@@ -205,7 +219,7 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin using [I] on [src]."))
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You interrupt an action!"))
in_use = FALSE
return
@@ -221,7 +235,9 @@
return ..()
/obj/item/glassblowing/blowing_rod/attack_self(mob/user, modifiers)
+ var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED
var/obj/item/glassblowing/molten_glass/find_glass = locate() in contents
+
if(find_glass)
if(find_glass.world_molten < world.time)
to_chat(user, span_warning("The glass has cooled down far too much to be handled..."))
@@ -265,7 +281,7 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin blowing [src]."))
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You interrupt an action!"))
in_use = FALSE
return
@@ -281,7 +297,7 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin spinning [src]."))
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You interrupt an action!"))
in_use = FALSE
return
@@ -374,3 +390,6 @@
has_sand = TRUE
icon_state = "metal_cup_full"
return ..()
+
+#undef DEFAULT_TIMED
+#undef MASTER_TIMED
diff --git a/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm b/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm
index 8641e1ff652..8743618db06 100644
--- a/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm
+++ b/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm
@@ -1,3 +1,9 @@
+#define DEFAULT_TIMED 5 SECONDS
+#define MASTER_TIMED 2 SECONDS
+
+#define DEFAULT_HEATED 25 SECONDS
+#define MASTER_HEATED 50 SECONDS
+
/obj/structure/reagent_forge
name = "forge"
desc = "A structure built out of bricks, with the intended purpose of heating up metal."
@@ -512,6 +518,8 @@
if(istype(I, /obj/item/glassblowing/blowing_rod))
var/obj/item/glassblowing/blowing_rod/blowing_item = I
+ var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED
+ var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED
if(in_use) //only insert one at a time
to_chat(user, span_warning("You cannot do multiple things at the same time!"))
return
@@ -526,18 +534,19 @@
in_use = FALSE
return
to_chat(user, span_notice("You begin heating up [blowing_item]."))
- for(var/do_loop in 1 to 5) //I really want 10 seconds, but not all at "once," this makes it feel like less time
- if(!do_after(user, 2 SECONDS, target = src))
- to_chat(user, span_warning("[blowing_item] is interrupted in its heating process."))
- in_use = FALSE
- return
- find_glass.world_molten = world.time + 25 SECONDS
+ if(!do_after(user, actioning_speed, target = src))
+ to_chat(user, span_warning("[blowing_item] is interrupted in its heating process."))
+ in_use = FALSE
+ return
+ find_glass.world_molten = world.time + actioning_amount
to_chat(user, span_notice("You finish heating up [blowing_item]."))
in_use = FALSE
return
if(istype(I, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/glass_item = I
+ var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED
+ var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED
if(in_use) //only insert one at a time
to_chat(user, span_warning("You cannot do multiple things at the same time!"))
return
@@ -550,17 +559,19 @@
to_chat(user, span_warning("You need to be able to use [glass_item]!"))
in_use = FALSE
return
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You stop heating up [glass_item]!"))
in_use = FALSE
return
in_use = FALSE
var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src))
- spawned_glass.world_molten = world.time + 25 SECONDS
+ spawned_glass.world_molten = world.time + actioning_amount
return
if(istype(I, /obj/item/glassblowing/metal_cup))
var/obj/item/glassblowing/metal_cup/metal_item = I
+ var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED
+ var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED
if(in_use) //only insert one at a time
to_chat(user, span_warning("You cannot do multiple things at the same time!"))
return
@@ -573,7 +584,7 @@
to_chat(user, span_warning("There is no sand within [metal_item]!"))
in_use = FALSE
return
- if(!do_after(user, 5 SECONDS, target = src))
+ if(!do_after(user, actioning_speed, target = src))
to_chat(user, span_warning("You stop heating up [metal_item]!"))
in_use = FALSE
return
@@ -581,7 +592,7 @@
metal_item.has_sand = FALSE
metal_item.icon_state = "metal_cup_empty"
var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src))
- spawned_glass.world_molten = world.time + 25 SECONDS
+ spawned_glass.world_molten = world.time + actioning_amount
return
return ..()
@@ -591,3 +602,9 @@
reagent_forging = TRUE
sinew_lower_chance = 100
forge_temperature = 1000
+
+#undef DEFAULT_TIMED
+#undef MASTER_TIMED
+
+#undef DEFAULT_HEATED
+#undef MASTER_HEATED